Two app-source comments quote a DESIGN.md §09 that no longer says any of it — the stale-pointer pattern, pointing the other way - #74
Merged
Conversation
The legal dashboard's header carried a copy of §09's six-brick list. That copy drifted three times in two days — two items rewritten by PR #40 (1127e52), the third by PR #70 (30fd863) — and by the end all three described bricks this file does not implement. Replace the copy with a pointer to §09, which cannot drift. The cycle-time dataset's stage-count paragraph contrasted its counts with "the status funnel on the legal workbench", a funnel that has not existed since PR #57 made that widget a bar chart. Keep the measurement and its reason (signed_at 72 exceeds submitted_at 60; backfilled in-force book, no intake) and drop the claim that a funnel exists to contrast with. Comments only: no metadata, no behaviour, no DESIGN.md change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R3n3GGzobdegM4HUzah1iR
zhuangjianguo
marked this pull request as ready for review
September 10, 2026 11:36
This was referenced Sep 10, 2026
zhuangjianguo
pushed a commit
that referenced
this pull request
Sep 10, 2026
…ng (#75) The 2026-09-09 maintainer ruling (PR #40, 1127e52) put per-stage durations, per-type SLA breach and approval dwell outside the V1.0 surface, and 09 now records that. Five comments still read as "09 asks for X and we cannot deliver it", which inverts the authority: the source file was presented as falling short of the design when it is in fact what the design settled on. Each now says what the code delivers and why that is right, citing 09 as the authority that agrees. The four route_* tiles ARE 09's brick at the executive position; the fixed 30-day tile IS what 09 prescribes for review ageing, with F3's reminder firing on the same threshold so the tile and the reminder cannot tell two stories; approval_throughput IS 09's brick; and the stage-reached counts with no duration measure ARE 09's bullet for the dataset. executive.dashboard.ts's header takes PR #74's remedy — the copied list out, a pointer in — naming the one brick it advertised that this file never built. No measurement is deleted. The ISO-text AVG() average year, the -0.85 difference of two average years, ADR-0021 taking no SQL or expressions, and sys_approval_request holding zero rows all stay, reframed from shortfall into the reasons 09 itself now cites. Every citation of the upstream tracker gains the qualifier that the in-flight fix makes the wrong path ERROR rather than adding date arithmetic, so a duration stays uncomputable after it lands. Three stale forward-promises inside those same comments go with them: a daily-job-stamped review_due_at said to "belong to card 09", the same route said to be "raised on the PR" — both now forbidden by 09 outright — and a claim that a group title says "Routing Load", a string that exists nowhere in the repo. Comment-only. The gates do cover these files, and an ablation shows why the drift survived anyway: restoring the three files to their pre-fix state leaves all four gates green, because tsc parses comments and reads nothing in them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R3n3GGzobdegM4HUzah1iR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #71
Two comments, nothing else: both hunks sit inside
/** … */blocks, 2 files, +13 −4. No metadata key, no widget, no dataset field or dimension, noDESIGN.mdchange.1.
src/dashboards/legal.dashboard.ts— quote removed, pointer left behindChose removal over updating — the card's preferred option, and this was its one judgement call, so here is the reason. The header carried a copy of a six-item list whose master lives in
DESIGN.md§09, and the copy lost the race three times in two days. Verified on this branch rather than taken from the card:Updating the copy buys correctness until the next §09 edit and leaves the same trap armed. A pointer cannot drift, and the one thing a reader actually needs from that line — which of §09's three dashboards this file is — survives a pointer intact. The new header says the list is deliberately absent, so the next reader does not helpfully paste it back:
"all three described bricks this file does not implement" is checkable inside this file: the board has
review_ageingtitled In Review Over 30 Days (not a 超 SLA tile),approval_throughputtitled Approved This Month (not an average turnaround), and ahorizontal-bar(not a funnel). The claim is deliberately about this file, not about what §09 currently declines — see the sweep below for why that mattered.2.
src/datasets/cycle-time.dataset.ts— the comparison stops asserting a funnelThe measurement stays exactly as it was:
signed_at(72) exceedingsubmitted_at(60), and its reason (the demo's in-force book was backfilled with signature dates and no intake). Only the contrast — "The status funnel on the legal workbench is the honest funnel" — is rewritten, because that widget has been ahorizontal-barsince PR #57 (#48) and §09 records the same non-monotone book as the reason. The replacement points at §09 instead of re-describing it, does not name the widget id, and re-promises no stage order.Verification the edits landed — before/after counts, not an editor's exit code
各阶段合同数漏斗(src/)The status funnel on the legal workbench(src/)is the honest funnel(src/)DESIGN.md §09's first dashboard:(src/)超 SLA(src/)平均周转(src/)§09's brick list is deliberately NOT copied hereThere is no funnel on the legalThe two residual hits are
legal.dashboard.ts:143and:182, per-widget comments outside this card's two-comment scope. They are the subject of the follow-up card below, not an oversight.Gates — all four exit 0, and they genuinely cover these files
Exit codes captured into a variable before any pipe (
cmd > log 2>&1; EXIT=$?), run at96e83ad:Unlike the recent
DESIGN.md-only cards, these files are inside the gates' surface:src/**/*is intsconfig's include and both files are in the metadata graph, sopnpm typecheckreally does read them andpnpm validatereally does parse the dashboard and the dataset around these comments. No "no gate reads this file" claim is made here, because it would be false.The honest ablation is therefore the opposite shape — proving a defect in one of these files is caught. Mutation proven on disk before the run, restore proven by blob hash and an empty
git diff HEADrather than by an exit code:A
trap … EXIT INT TERMwith an absolute repo path guarded the mutation. Comments themselves are invisible totsc, which is exactly why the drift went unnoticed for two days; the gates bound the file, not the prose inside it.Sweep — other comments quoting a
DESIGN.md§ list rather than pointing at itAsked for by the card, because two such quotes drifted at once. Not "nothing else": there are seven more, one cluster of which is stale in the same direction.
Stale (filed, not fixed here — out of scope, and not mechanical):
src/dashboards/executive.dashboard.ts:4–5— quotes §09's 管理层 list including审批瓶颈(各台阶平均停留), which §09 replaced with 各台阶路由量 and then explicitly declined ("§09 原列的「审批瓶颈(各台阶平均停留)」同样不交付"). The board already implements the routing bricks (route_legal_head·route_finance·route_executive·route_gm), so the header advertises something the file below it does not build.src/dashboards/executive.dashboard.ts:139, 141·src/dashboards/legal.dashboard.ts:143, 182·src/datasets/cycle-time.dataset.ts:7— five comments still framed as "§09 asks for X, and we cannot deliver it": 各台阶平均停留 · 超 SLA · 平均周转 · 各段时长. All four were placed outside the V1.0 surface by the same 2026-09-09 ruling that §09 now records, so the framing is inverted — §09 no longer asks. Their substance is correct and is what §09 itself now cites; the fix is a reframe, not a deletion, which is why it is a separate card and not a rider here.Accurate copies today, still copies (reported, not filed):
finance.dashboard.ts:4–5(§09's 财务 list) ·dashboards/index.ts:1(the three dashboard names) ·contract.dataset.ts:4,obligation.dataset.ts:4,payment.dataset.ts:4(one-line §09 dataset bullets) ·pages/contract_detail.page.ts:132(§05's highlights list). Each re-checked against §09 / §05 on30fd863and each still matches word for word.No browser run owed
The diff changes no runnable surface: comments do not lower into metadata and the built stack is byte-identical.
pnpm validateparsing both files green is the whole of what is verifiable here.🤖 Generated with Claude Code
https://claude.ai/code/session_01R3n3GGzobdegM4HUzah1iR
Generated by Claude Code