You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The 2026-09-09 maintainer ruling put 各段时长, per-type 「超 SLA」 and 各台阶平均停留 outside the V1.0 surface, and PR #40 (296fab8) wrote that into DESIGN.md §09. Six comments in src/ still describe the world as it was before that ruling — either quoting a §09 list that has since changed, or framing a limitation as a demand from §09 that the code cannot meet when §09 no longer makes the demand.
Their substance is correct. Every one of them explains something true about why a number is not delivered, and §09 now cites the same reasons. It is the framing that inverted: 「§09 要 X,我们做不到」 became false at the moment §09 stopped asking. That is why this is a reframe and ⛔ never a deletion.
#
location
what is stale
1
src/dashboards/executive.dashboard.ts:4–5
the header quotes §09's 管理层 list including 「审批瓶颈(各台阶平均停留)」. §09 replaced that brick with 各台阶路由量 and then explicitly declined the dwell-time metric. The file below already implements the routing bricks (route_legal_head · route_finance · route_executive · route_gm), so the header advertises something its own file does not build.
2
src/dashboards/executive.dashboard.ts:139
framed as §09 asking for 各台阶平均停留
3
src/dashboards/executive.dashboard.ts:141
same
4
src/dashboards/legal.dashboard.ts:143
framed as §09 asking for 超 SLA
5
src/dashboards/legal.dashboard.ts:182
framed as §09 asking for 平均周转
6
src/datasets/cycle-time.dataset.ts:7
framed as §09 asking for 各段时长
What to change
Reframe each so it describes what the code delivers and why that is the right thing to deliver, citing §09 as the authority that says so — rather than as a demand being failed.
Items 2–6 keep every measurement and every technical reason (ADR-0021, the semantic layer taking no SQL or expressions, Field.datetime stored as ISO text so AVG() returns an average year, sys_approval_request being empty under the standard demo data so F5's dwell times have no source at all). ⛔ Do not delete any of it — §09 itself now carries these arguments, so the comments and the document should read as agreeing, not as one complaining about the other.
Where a comment cites a platform tracker (objectstack-ai/objectstack#16737), keep it. ⚠️ And keep the point §09 makes and the comments should too: the platform's in-flight fix refuses the wrong path rather than providing date arithmetic, so durations remain uncomputable afterwards — they merely stop producing a plausible fake number.
Constraints
⛔ Comments only. No metadata key, no widget, no dataset field or dimension, no type, filter or options. If an edit touches one, stop.
⛔ Do not touch DESIGN.md — §09 is correct; this card brings the code's framing into line with it, never the reverse.
No changeset (this repo has no changeset gate). No browser run owed.
Explicitly out of scope, decided and recorded
PR #74 also found six comments that quote §09 or §05 accurately today: finance.dashboard.ts:4–5 · dashboards/index.ts:1 · contract.dataset.ts:4 · obligation.dataset.ts:4 · payment.dataset.ts:4 · pages/contract_detail.page.ts:132. Each was re-checked and each still matches word for word.
⛔ Do not convert them. They are the same latent trap, but rewriting six correct comments is churn, and the argument for a pointer is strongest exactly where a copy has already lost the race. If one of them drifts, that is a card then. Named here so the decision is on the record and the next dev does not re-discover them as unfiled work.
Provenance
Found by the dev on #71 while running the sweep PR #74's card mandated, reported as out-of-scope with the stale/accurate split already drawn, and correctly not ridden into that PR — a reframe of six comments is not a rider on a two-comment card. The split and the reasoning above are the dev's; the decision to file the first group and decline the second is the PM seat's.
Related
#71 / PR #74 (where this was found; the same fix applied to legal.dashboard.ts's header) · #63 / PR #70 (§09's own correction) · PR #40 / 296fab8 (the ruling that inverted the framing) · #31 (pm:blocked on objectstack#16737) · #26 · #54
The defect
The 2026-09-09 maintainer ruling put 各段时长, per-type 「超 SLA」 and 各台阶平均停留 outside the V1.0 surface, and PR #40 (
296fab8) wrote that intoDESIGN.md§09. Six comments insrc/still describe the world as it was before that ruling — either quoting a §09 list that has since changed, or framing a limitation as a demand from §09 that the code cannot meet when §09 no longer makes the demand.Their substance is correct. Every one of them explains something true about why a number is not delivered, and §09 now cites the same reasons. It is the framing that inverted: 「§09 要 X,我们做不到」 became false at the moment §09 stopped asking. That is why this is a reframe and ⛔ never a deletion.
src/dashboards/executive.dashboard.ts:4–5route_legal_head·route_finance·route_executive·route_gm), so the header advertises something its own file does not build.src/dashboards/executive.dashboard.ts:139src/dashboards/executive.dashboard.ts:141src/dashboards/legal.dashboard.ts:143src/dashboards/legal.dashboard.ts:182src/datasets/cycle-time.dataset.ts:7What to change
Reframe each so it describes what the code delivers and why that is the right thing to deliver, citing §09 as the authority that says so — rather than as a demand being failed.
DESIGN.md§09 that no longer says any of it — the stale-pointer pattern, pointing the other way #74 did forlegal.dashboard.ts's header and for the same reason — a copy drifts, a pointer cannot. Read that header onmainfirst and follow its shape.ADR-0021, the semantic layer taking no SQL or expressions,Field.datetimestored as ISO text soAVG()returns an average year,sys_approval_requestbeing empty under the standard demo data so F5's dwell times have no source at all). ⛔ Do not delete any of it — §09 itself now carries these arguments, so the comments and the document should read as agreeing, not as one complaining about the other.objectstack-ai/objectstack#16737), keep it.Constraints
type,filteroroptions. If an edit touches one, stop.DESIGN.md— §09 is correct; this card brings the code's framing into line with it, never the reverse.objectstack-ai/objectstack#17344), and ⛔ do not reopen thestage_funnelid (settled in PR Draw 「Pipeline by Stage」 as a ranked bar, not a funnel #57, reaffirmed in Plot 「Pipeline by Stage」 over the six in-flight stages, not seven #62).src/**/*is intsconfig's include and in the metadata graph. ⛔ Do not copy the "no gate reads this file" framing from §06 F14 says an archived contract stays editable 「除 notes 外」, butclm_contracthas nonotesfield — §03 gives itsummary#44/docs: the position census disagrees with itself in three places — README says seven over a table of six, DESIGN.md §11 says both 7 and 8 #58/DESIGN.md§09 still specifies 各阶段合同数**漏斗** — the app stopped shipping a funnel in #48 and narrowed what it plots in #59 #63; it would be false. If you want an ablation, the honest one is PR Two app-source comments quote aDESIGN.md§09 that no longer says any of it — the stale-pointer pattern, pointing the other way #74's shape: prove a syntax error in one of these files is caught, and note that comments are invisible totsc, which is exactly why this drift went unnoticed.Acceptance
main, post-30fd863) and to the code beside it, in a claim → reading table.DESIGN.md§09 that no longer says any of it — the stale-pointer pattern, pointing the other way #74 found these six by greppingsrc/for comments quoting aDESIGN.md§ list rather than pointing at one. Run it again on your tree and report what it returns, including anything the six above missed.Explicitly out of scope, decided and recorded
PR #74 also found six comments that quote §09 or §05 accurately today:
finance.dashboard.ts:4–5·dashboards/index.ts:1·contract.dataset.ts:4·obligation.dataset.ts:4·payment.dataset.ts:4·pages/contract_detail.page.ts:132. Each was re-checked and each still matches word for word.⛔ Do not convert them. They are the same latent trap, but rewriting six correct comments is churn, and the argument for a pointer is strongest exactly where a copy has already lost the race. If one of them drifts, that is a card then. Named here so the decision is on the record and the next dev does not re-discover them as unfiled work.
Provenance
Found by the dev on #71 while running the sweep PR #74's card mandated, reported as out-of-scope with the stale/accurate split already drawn, and correctly not ridden into that PR — a reframe of six comments is not a rider on a two-comment card. The split and the reasoning above are the dev's; the decision to file the first group and decline the second is the PM seat's.
Related
#71 / PR #74 (where this was found; the same fix applied to
legal.dashboard.ts's header) · #63 / PR #70 (§09's own correction) · PR #40 /296fab8(the ruling that inverted the framing) · #31 (pm:blockedon objectstack#16737) · #26 · #54