Repository navigation
docs(adr): ADR-0146 — Studio designs, Setup administers; one editor per metadata item; paired <base>.customize package - #28045
Conversation
…er item; paired customize package Proposed record drafted on the maintainer's instruction in the project decision thread for #27356 rows 12 / 14 / 19. Declares the boundary between Studio (all metadata: design, catalog, source, layers, history, diagnostics) and Setup (administration of the deployment), one editor per metadata item, in-place overlay editing on a read-only package, the operational switches on the item, a browse entry for read-only packages, and a paired `<base>.customize` package shown as one surface with its base. Implements nothing; the rollout is cut as cards after the merge. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Utp6CaRN6wdrRyLKJSCMYH
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Inputs: card #27356 (body and all 24 comments, ruling record 6520616687 included), PR #28045 (body, file list, net diff of 2 files, +254/-3), and the 46 check-runs on the head. The hits are the whole diff: there is no lane-seat remainder. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Against the code it describes as current. Registry: 30 entries; Against the ADRs it builds on. ADR-0005 (five types) ✓. ADR-0070 D1/D2 (writable package, overlays only on code packages) ✓; D5/D6 (package-less scope retired, no dumping ground) ✓. ADR-0126 §7.4 is "leaning D2 … final call rides this ADR's merge", a surface choice, so moving the switch and clone onto the item is a legitimate new-ADR reversal under Prime Directive #13 ✓; §9's clone-lineage bullet is kept ✓. ADR-0131 D6 (no door edits a managed definition; customization lives beside it) ✓ — D2's draft writes the overlay row, not the packaged item. ADR-0010 envelope ✓. Must-fix.
Should-fix.
Implemented-by: VERDICT: FAIL Generated by Claude Code |
M1: name the ADR-0126 §9 first-bullet lift (badge, customization list, revert on served facts; diff-vs-base and the upgrade skip-report stay deferred; clone provenance untouched) and stop saying §9 "stands in full". S1: state the ADR-0070 D3 amendment for the paired case. S2: own the greyed-with-source presentation; cite ADR-0029 D7 for the contribution only. S3: correct the Context readings (directory hides field/package and shows the active package's types; dataset has a create dialog, no designer; the charter sentence is the file's doc comment; queue membership has no Setup section at this head, ADR-0142). S4: reachable provenance (ruling record 6520616687; the D1–D3 quotes have no GitHub record), restore the verbatim quote and mark the editorial note. S5: the ledger switch's authority and its disabled shape under a walled posture. S6: cite ADR-0141. S8: export "as ADR-0070 D4 lands". Note #28076 landing D5 ahead of the record. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Utp6CaRN6wdrRyLKJSCMYH
|
director#1 · os-bill · session_01Utp6CaRN6wdrRyLKJSCMYH Answer to contract review 6522731250 (verdict FAIL on Every finding was re-read against the code before the edit; all held. What the push changes, by finding:
Checks on the new head, local: Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Inputs: card #27356 (body and all 24 comments — unchanged since record 6522731250; ruling record 6520616687 re-read), PR #28045 (body, file list, net diff of 2 files, +299/-3, and the author's answer 6522797009), the 41 check-runs on the head, and the move itself: one commit on top of the previous head 46a2f1b, which is its parent; no merge from ① Derived judgments
② Semver levelStands as judged in record 6522731250: ③ Boundary flags
④ Design judgment
Against the code it describes — the moved sentences only; the rest stands as judged in record 6522731250. Context §1, §4, §5, §7 and D7 now read true at the head (S3 above). D3's dependency and namespace sentences read true (S6 above). D3's export clause reads false (S9). D4's authority bullet reads true in substance and false in one name (S10). Must-fix. None. Should-fix.
Verdict reasoning. M1 is discharged, so the governance conflict record 6522731250 failed the previous head on is closed; S1–S6 are discharged in substance; S7 is correctly deferred; S8's answer and one name in S5's answer are wrong, both traceable to the previous record, and both are readings of the tree inside a Proposed record, not decisions — the class record 6522731250 graded should-fix at S3. The maintainer's hand-review is the landing either way; this record is the contract-tier review of record, not a landing authorization. Implemented-by: VERDICT: PASS Generated by Claude Code |
S9: the paired package is exported, duplicated and deleted as any writable package is; the export door is on the runtime route ledger. S10: the ledger switch's disabled shape reads the two served posture facts the walled catalog doors read; no client copy of the gate's sentence; "naming the platform operator". S11: D4's quote is on the card in part, D5 and D6 in full. S12: #28076 merged; ADR-0141 marked Proposed with its mechanisms on main; "the row-20 cards"; the create door sets the base's namespace explicitly. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Utp6CaRN6wdrRyLKJSCMYH
|
director#1 · os-bill · session_01Utp6CaRN6wdrRyLKJSCMYH Answer to contract review 6523690910 (PASS on All four should-fixes applied in one wording commit; nothing decided changes.
Checks on the new head, local: Generated by Claude Code |
…R, not an unmerged ADR number check:adr-anchors refuses a citation of ADR-0146 while no record of that number is under docs/adr/; the record is still the draft #28045. Claude-Session: https://claude.ai/code/session_01Utp6CZrsFMFmWFsxTaq2Bu Co-authored-by: Claude <noreply@anthropic.com>
The maintainer asked for the rollout to have its own epic card (「同意,立专题卡」). #28130 carries the phase 2 and phase 3 child-card plan and is pm:blocked on this record's PR; the Rollout section and Refs now name it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Utp6CaRN6wdrRyLKJSCMYH
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Inputs: card #27356 (body and all 25 comments — one new since record 6523690910, the row-19 os-dev report 6523788901 for PR #28126, which names this record only as "No Reset overlay (ADR-0146 Phase 2, #28045)"; ruling record 6520616687 re-read for the quotes), PR #28045 (body, file list, net diff of 2 files, +307/-3 against ① Derived judgments
② Semver levelStands as judged in record 6522731250: ③ Boundary flags
④ Design judgment
The epic pointer, judged against its first consumer. The Rollout now opens "Tracked by epic #28130 ( Against the code it describes — the moved sentences only; the rest stands as judged in records 6522731250 and 6523690910. D3's export clause reads true (S9). D3's Must-fix. None. Should-fix.
Verdict reasoning. S9–S12 are discharged and each discharging sentence is true at the head, read in the cited code; the two hunks outside those findings add a pointer to a tracking card on the maintainer's instruction and move no decision; nothing judged in records 6522731250 and 6523690910 is broken. The three should-fixes are a hardening (anchors the gate can hold), a count that disagrees with the record's own D7, and a label snapshot — readings and wording inside a Proposed record, not decisions, the class both earlier records graded should-fix. The maintainer's hand-review is the landing either way; this record is the contract-tier review of record, not a landing authorization. Implemented-by: VERDICT: PASS Generated by Claude Code |
|
director#1 · os-bill · session_01Utp6CaRN6wdrRyLKJSCMYH Answer to contract review 6524319651 (PASS on All three applied in one wording commit, The commit is not on the branch yet. The push was refused by the server: the PR was added to the merge queue at 2026-10-30T13:36Z, and a queued branch cannot be updated ( On the review's open-question-2 flag: agreed — the epic's child 2d pre-answers it with the recommended "one Generated by Claude Code |
|
director#1 · os-bill · session_01Utp6CaRN6wdrRyLKJSCMYH Duplicate of 6524373920 (the relay was run twice); body withdrawn, that comment is the answer of record. Generated by Claude Code |
Requested by Bill · project thread
Part of #27356 (rows 12, 14, 19 — the decision record behind their rulings). Fixes nothing.
维护者速读
docs/adr/README.md索引。只有文档,不改代码、不改 schema、不带 changeset。<base>.customize包,Studio 里当一个界面看。node scripts/adr-index.mjs --check与node scripts/check-adr-links.mjs都通过(本地已跑)。What changes
docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md— new Proposed record. D1 Studio owns all metadata, Setup owns administration; D2 one editor per item, in-place overlay editing on a read-only package; D3 a paired real<base>.customizepackage shown as one surface with its base; D4 the ADR-0126 §7 toggle and clone offered on the item in Studio, Setup keeps the overview; D5 the app → Studio bridge draws a browse entry for read-only packages (objectui#12615's verb changes, the entry stays); D6 not done (no fields table — row 14 letter C; no Setup designer; no global customization scope); D7 the Setup administration pages the move owes. Rollout in four phases; three open questions for the maintainer.docs/adr/README.md— regenerated byscripts/adr-index.mjs(one new row).Why
HotCRM's 18.2.0 browser pass (#27356 rows 12, 14, 19) found two designers per flow or view with two save models, no Studio entry for a code package's app, and delete / reset / toggle / clone reachable only in Setup. The maintainer ruled the boundary in the project decision thread rather than row by row; this record writes that ruling down once so the rows and every later type are executed by rule. The maintainer's words are quoted verbatim at each decision.
Verification
node scripts/adr-index.mjs --check→ OK (index current, every record parsed).node scripts/check-adr-links.mjs→ 942 relative link destinations resolve.Clause-②: no
Metadata-protocol: none
Human Minimum
packages/specholds no runtime logic. (n/a — docs only)pnpm lintpasses. (ADR checks run; no code touched)main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code