From 8ecfb1cd9e4440719f929b808a61b6c8bb32db6b Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 10 Sep 2026 11:16:00 +0000 Subject: [PATCH] =?UTF-8?q?docs(design):=20=C2=A709's=20stage=20widget=20i?= =?UTF-8?q?s=20a=20ranked=20bar,=20not=20a=20funnel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §09 still specified 各阶段合同数漏斗 — a funnel over every lifecycle stage. Two merged cards moved the app off that in two independent ways, and the design authority never caught up: - #48 / PR #57 replaced the mark with `type: 'horizontal-bar'` ordered by the measure, because a funnel asserts monotonic decline over a book that does not decline (§10: draft 10 · submitted 6 · in_review 12 · in_approval 8 · approved 4 · signing 6 · active 60 — a bowtie). - #59 / PR #62 narrowed the filter to the six in-flight stages, on the criterion the widget's comment states: whether legal still has work to do on the stage. `active` and the four terminal outcomes are all out. The bullet now names the mark and the coverage; a new paragraph carries the reasoning and states that no authored stage order is promised — `options.stageOrder` is read only by console 17.4.0's funnel branch and is dropped silently outside `en` (objectstack-ai/objectstack#17344). Promising an ordering this platform version cannot deliver is the same defect class PR #40 just removed from this section. Documentation only: no app file changes, and no gate reads `DESIGN.md`. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01R3n3GGzobdegM4HUzah1iR --- DESIGN.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DESIGN.md b/DESIGN.md index e2c21ef..4bf1529 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -299,7 +299,7 @@ Dataset(语义层): - `payment_metrics` — 计划与实际,按月;逾期金额 看板三个: -- **法务工作台** — 待受理数 · 审查中 · 审查超 30 天(固定阈值,写进砖的标题)· 谈判停滞 · 审批吞吐(本月 vs 上月,用平台 `compareTo`)· 各阶段合同数漏斗 +- **法务工作台** — 待受理数 · 审查中 · 审查超 30 天(固定阈值,写进砖的标题)· 谈判停滞 · 审批吞吐(本月 vs 上月,用平台 `compareTo`)· 各阶段合同数(横向条形图,按合同数从多到少排;只画在办的六个阶段) - **管理层** — 生效合同额 · 90 天内到期 · 高风险合同 · 各台阶路由量(四级台阶各一块砖,读 F2 盖的 `route_*` 标志;是流量,不是停留)· 按方向的合同额趋势 - **财务** — 本月应收 / 应付 · 逾期金额 · 按相对方的未付 top 10 @@ -307,6 +307,8 @@ Dataset(语义层): **各段时长与按类型的「超 SLA」不在 V1.0 交付面内**(维护者裁定,2026-09-09)。语义层不收 SQL 也不收表达式(ADR-0021),没有地方做时间戳减法;且 `Field.datetime` 在 SQLite 上存 ISO 文本,`AVG()` 打在其上会静默返回平均年份而不是平均日期。两项都等平台的日期能力,跟踪于 `objectstack-ai/objectstack#16737`。在那之前 §09 交付的是:周转以各阶段到达数与审批吞吐如实呈现,SLA 以固定 30 天阈值呈现且阈值写进砖的标题(九种类型的真实 SLA 是 2/3/5/10 天,30 天高于全部,标题自陈阈值就不会被误读成按类型的违约)。§09 原列的「审批瓶颈(各台阶平均停留)」同样不交付,且另有一条独立于平台的原因:审批台阶的起止无处可读——`sys_approval_request` 在标准演示数据下零行,审批阶梯(F5)从未运行——所以即使平台补上日期运算,停留时长仍要先有审批请求记录才算得出来。看板在那个位置交付的是各台阶的路由量。⛔ 不得用应用侧日任务盖戳字段把各段时长与「超 SLA」补出来 —— 那是在应用里复刻平台规则。 +**「各阶段合同数」是横向条形图,不是漏斗,且只画在办阶段**(#48 / PR #57 换掉图形,#59 / PR #62 收窄口径,均已合并)。漏斗断言逐级单调递减,而这本合同簿不递减(§10 的分布:draft 10 · submitted 6 · in_review 12 · in_approval 8 · approved 4 · signing 6 · active 60),画成漏斗是在断言数据没说的事。收录判据是**法务在这个阶段是否还有事要做**:`draft` / `submitted` / `in_review` / `in_approval` / `approved` / `signing` 六个在办阶段入图;`active` 与 `rejected` / `expired` / `terminated` / `cancelled` 四种终态都不入图 —— 生效合同簿的规模归管理层看板(生效合同额 · 90 天内到期),不是法务工作台的队列。排序按合同数从多到少(`sortBy: 'contract_count'` / `sortOrder: 'desc'`),⛔ **不承诺可编排的阶段顺序**:console 17.4.0 只有漏斗分支读 `stageOrder`,条形图上静默丢弃,非 `en` 语言下连漏斗分支也因标签不匹配而丢,跟踪于 `objectstack-ai/objectstack#17344`。 + ## 10 种子数据 一家虚构的跨国集团(美国母公司,欧洲与亚太子公司;合同以 USD / EUR / GBP 计价,适用法律分布在 US-NY、England and Wales、Germany),六个月历史,让每个看板第一屏就有内容。`demo-en` 默认,`demo-zh` 同构。