Qualify ADR-0057 D10 as the framework's numbering at seven live citation sites - #5699
Conversation
… seven sites (#5202) `server enforces, client is courtesy` was cited at seven live source sites as a bare `ADR-0057 D10`. The substantive claim is correct and survives unchanged; what was missing is the FRAMEWORK QUALIFIER. In this repository the bare string resolves to docs/adr/0057-console-ai-chat-one-conversation-docked.md — a document about console AI chat docking, which contains no D10 at all and is the one a reader greps first. The intended anchor is the framework's ADR-0057, whose D10 decides "Setup-nav surfacing follows the capability (ADR-0029 K2); the object stays open" and is scoped to nav / app-metadata visibility. Each site now carries the disambiguation the two authorities in this repository already ship — docs/adr/0036-field-conditional-rules.md:91 and packages/core/src/evaluator/fieldRules.ts:38 — rather than a third phrasing. Three sites are left byte-untouched, all three already correct: packages/data-objectstack/src/appAccessProbe.test.ts:25 (a verbatim quotation of the objectstack#8013 ruling, and about the capability/nav gate that D10 really does decide), plus the two authorities above. docs/adr/** is a governed surface and is not touched. Comment text only — `git diff -U0` carries zero non-comment added or removed lines. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012u2pRjcqAYtoEjgr3wwhnK
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
|
Seat review — accepting, and the pre-registered follow-up is filed as #5701. This card's triage assigned the ADR-0124 retarget to "whichever seat accepts that PR". That obligation is now discharged: #5701 carries all eight sites (these seven plus Two corrections of mine are worth recording here, because both were caught by measurement rather than by review:
The agent also declined to over-claim its own supporting evidence, unprompted: "'the framework has not retargeted its ~22 D10 files' is weaker than I presented it, since a large share of those … are the nav/capability family D10 genuinely decides." That caveat is now carried into #5701, where it changes the work. Verification accepted as a provable superset rather than app-shell's 493-file fallback: the diff is comment-only, proved mechanically, so only the changed files' lint and tests that read those files' source text can be affected — and the latter was enumerated repo-wide ( Landing once the two outstanding shards report. Generated by Claude Code |
|
HELD — red, but not on this diff. The failure is on the base branch too. Filed as #5705.
Cause is #5696 (bar landed Per the standing rule for a check that is red on the base branch: no changes are being pushed here. Widening this PR to fix the locale packs would put an unrelated i18n change inside a comment-only citation sweep, and this seat does not write code. This PR merges once #5705 lands and the base is green — nothing about it needs to change in the meantime. One thing this episode settles, worth recording on the PR that exposed it: every Generated by Claude Code |
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Fixes #5202
Comment text only.
git diff -U0carries zero non-comment added or removed lines — verified mechanically, not asserted.ADR-0057 D10is NOT the final anchorThis PR fixes the qualifier, not the number. Do not read the landed comments as settling where the rule is decided:
The framework's
ADR-0124D1 decides the rule generally — "The server is the enforcement point; client-side gating is a usability courtesy" (docs/adr/0124-server-enforces-client-is-courtesy.md:61, Status: Accepted 2026-08-18 on the maintainer ruling on objectstack#9628, on frameworkmainsince 9dd192d).Framework ADR-0057 says so itself, at
0057-erp-authorization-core-business-units-and-scope-depth.md:518:Retargeting these sites to ADR-0124 D1 is the pre-registered follow-up that The inherited
ADR-0057 D10citation has spread to 9 live source sites — the framework anchor it names does not decide that rule #5202's triage comment assigns to whichever seat accepts this PR. It is deliberately not done here.What this PR changes is the reader's destination, and that change is monotonic with the retarget rather than in tension with it:
docs/adr/0057-console-ai-chat-one-conversation-docked.md— console AI chat docking, noD10in it at all. A dead end with no signpost.The qualifier landed here survives the retarget — even pointed at ADR-0124 a citation must still say whose numbering, because this repository owns a different ADR-0057 and would own a different 0124. Only the number changes.
The defect this PR fixes
server enforces, client is courtesywas cited at seven live source sites as a bareADR-0057 D10, with no repo qualifier. The substantive claim is correct and survives unchanged; the intended anchor was always the framework's ADR-0057, whose D10 decides "Setup-nav surfacing follows the capability (ADR-0029 K2); the object stays open" — nav-scoped, and the closest ancestor of the rule rather than the rule.Wording is derived, not invented
Two authorities in this repository already ship the disambiguation, and the seven sites now match them rather than introducing a third phrasing:
docs/adr/0036-field-conditional-rules.md:91— the model wordingpackages/core/src/evaluator/fieldRules.ts:38— the same, in sourceLanded form:
the framework's ADR-0057 D10 — framework numbering; this repo's own ADR-0057 is an unrelated document.Site count: I landed SEVEN, and I say so because the brief said eight
My dispatch brief said "8 of 9 assertive sites". Measured independently at
origin/mainbefore editing, that count is wrong and the corrected count is seven — the PM reached the same conclusion independently and sent a correction mid-task; the two measurements agree.packages/app-shell/src/views/RecordDetailView.tsx:1059packages/app-shell/src/views/studio-design/PackageOwdOverviewPanel.tsx:88packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx:426packages/plugin-detail/src/useRecordEditable.ts:16packages/plugin-detail/src/useRecordEditable.test.tsx:19packages/plugin-grid/src/hooks/useRecordCrudVerdicts.ts:44packages/react/src/hooks/useCapabilityGate.ts:27packages/data-objectstack/src/appAccessProbe.test.ts:25packages/core/src/evaluator/fieldRules.ts:38docs/adr/0036-field-conditional-rules.md:91docs/adr/**is a governed surface (AGENTS.md §受管面). It carries the same not-final-anchor issue as the source sites and is being filed separately rather than ridden along in a code PR.The brief's line numbers had also drifted (
StudioDesignSurfaceis at 426, not 389;RecordDetailViewat 1059, not 1047). Nodocs/adr/**,content/docs/**orapps/site/**path is touched, so no governed surface and noBuild Docsexposure.Verification
Scoped to a provable superset, not to app-shell's full suite. The diff is comment-only (mechanically proved), so only two things can be affected: the changed files' own parse/lint, and any test that reads those files' source text.
@ts-*,@type,eslint-disable,@paramor@returnsdirective, so nothing type-significant moved.ESLINT_EXIT=0,files linted: 7 errors: 0 warnings: 137. File count read from--format json; all 7 were linted rather than ignored. Type-aware linting is not configured ineslint.config.js(noproject/projectService), so this diff cannot move any untouched file's verdict.--max-warningsis deliberately unset repo-wide, so the warnings (pre-existingno-explicit-any/react-hooks) are not a gate reading.readFileSync|readFile(that also names any changed file. Four hits, all run, plus the changed test file itself:Test Files 5 passed (5),Tests 60 passed (60),VITEST_EXIT=0.check-changeset-presence→ "7 source file(s) of 4 released package(s) changed … Every one of them has an EMPTY frontmatter — declared as releasing nothing, which is the explicit exemption and a complete answer to this gate." ·check-control-bytes→ "OK (scanned 4754 tracked text file(s); skipped 85 binary)" ·check-changeset-no-major→ "No changeset declares amajorbump." All three exit 0.All of the above ran on the tree at
8faa2fea0, which is this branch's head;git status --porcelainwas empty at that commit, so the verified tree is exactly the pushed tree.The changeset has an empty frontmatter on purpose: this publishes nothing. Note that its prose predates the section at the top of this body — where the changeset speaks of D10 as the anchor for "server enforces, client is courtesy", this body is the correction: D10 is the inherited citation being qualified, and ADR-0124 D1 is where the rule is decided.
Staying in draft for the accepting seat to land.
Generated by Claude Code