Repository navigation
fix(engine): six user-facing strings say "authored in this system", not "this environment" - #24401
Conversation
…ot "this environment"
Inside the running system, user-facing copy names the system the user is in
as "this system"; an item made here rather than shipped by a package reads
"authored in this system".
- objectql: the default-record-page holder text and the security-catalog
environment holder's parenthesis ("the environment catalog" stays: it is
the holder's documented name in ADR-0048 and the namespace docblock).
- metadata-protocol: the protection-block and lock-family-key refusals and
the default-record-page conflict's holder text.
- platform-objects: sys_metadata_activation's object description and its
package_id field description.
The two objectql tests that pin the refusal's first sentence move with it.
No code, status, error code or envelope field changes.
Claude-Session: https://claude.ai/code/session_01Vp3Ze7Vv9L1PuejcRQC2bK
Co-authored-by: Claude <noreply@anthropic.com>
…gine-copy-this-system
📓 Docs Drift Check6 anchor(s) derived from 3 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 26 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 63bb38fb8971153e5538b18dc08237fa883b9a9d && git checkout 63bb38fb8971153e5538b18dc08237fa883b9a9d
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin d79dc4883c5698cf05680a545758bdbba0d8a7a2 6ec17574837b617925bd708d8b4c5fd4c00705d5 && git checkout -B drift-repro d79dc4883c5698cf05680a545758bdbba0d8a7a2 && git merge --no-ff 6ec17574837b617925bd708d8b4c5fd4c00705d5
node scripts/docs-audit/affected-docs.mjs --json d79dc4883c5698cf05680a545758bdbba0d8a7a2 |
Contract reviewServed-tier: What this record read:
① Derived judgmentsThe change: copy only, right. Every hunk under
Each is user-visible: a refusal message on the save door, a holder named in a "The environment catalog" kept: right (open question 1, A). It is the holder's documented name in ADR-0048 ( The object description: in scope, right (open question 2, A). The claim allowed it if user-facing. It is the object's schema text, its ADR-0126 §4 comment already treats it as copy, and it carries the same sense. The pins: flipped, not loosened, and they bear load (open question 3, A). The three first-sentence pins assert the refusal's text beside the code and the structured holders, which stay. Reverse verification on the committed fix:
What stays on the head with the old phrase, none of it this card's:
② Semver levelThree ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
席位核对 ·
|
| Item | Reading |
|---|---|
| Shape | Draft PR → main. The body opens Fixes #24360. 9 files, +40 / −10. Not governed (check-governed-merges.mjs --pr 24401: 0 of 9 paths hit the register). |
| Scope | Seven user-visible strings say "authored in this system": two lock refusals and a holder text in metadata-protocol/src/protocol.ts; two holder texts in objectql (default-record-page.ts, security-catalog-namespace.ts); and sys_metadata_activation's object and package_id descriptions. Two objectql test files flip their pins. Three patch changesets. Nothing in packages/runtime (#24327) or in protocol.ts's duplicatePackage region (#23561). |
| Seat's own read | The record's own: every hunk under packages/ changes text inside a string literal only. No code, error code, status or envelope field moves. existingHolder.kind stays 'environment'. |
| Review | TIER_DEFAULT record of record 6256001058 on this head: PASS, in-seat. |
| Declaration | Clause-②: no on the claim, the PR body and all three changesets. Copy only. |
| Pins and ablation | The three first-sentence pins stay on top of the code and holder assertions. Reverse verification turned registry-default-record-page.test.ts red (1) and, through the dist, default-record-page-save-door.test.ts red (4). Each restore read back as the HEAD blob. |
| Gates | Dev at 6ec1757483: 71 derived, 71 run, 0 NOT MEASURED. Typecheck exit 0 for objectql, metadata-protocol and platform-objects. |
| CI | 40 check-runs on 6ec1757483: 34 success, 6 skipped, 0 failed. The skips are the rostered path and opt-in skips. Test Core 1/6–6/6, every Type Check lane, Lint & Repo Gates, Check Changeset and Governed Surface Queue Guard are green. |
Disposition:
open_questions: all three settled A and accepted.- "The environment catalog" keeps its documented name (ADR-0048); only the parenthesis moves.
- The activation object's description is in scope.
- The pins are flipped, not loosened.
deviations: all accepted, as the record's ③ judges them. These are: 71 gates on the merged head; a full build for two prerequisite-gated checks;objectql's full vitest run; the model-free trailer pair.out_of_scope_findings:- The uninstall refusal at
protocol.ts:27354says "… in this environment …". It is client-visible, outside this card's table, and not in platform copy, the rest of cloud#3002 ruling A: about 50 non-comment "this environment" strings outside #24327 and #24360 (cloud-connection, plugin-auth, service-settings, platform-objects, mcp, plugin-security, spec) need the per-string reading #24368's listed set. Its reading is the family card's call. The seat sends platform copy, the rest of cloud#3002 ruling A: about 50 non-comment "this environment" strings outside #24327 and #24360 (cloud-connection, plugin-auth, service-settings, platform-objects, mcp, plugin-security, spec) need the per-string reading #24368 a pointer; it is not filed. - The operator log at
:28804and the two docblocks are not user-facing; ruled out.
- The uninstall refusal at
Landing: ordinary queue (pr_ready + automerge_enable through the relay). Fixes #24360 then closes the card.
Generated by Claude Code
Fixes #24360
Clause-②: no (copy only: no accept set or public surface moves; owes the seat's review of record at
TIER_DEFAULTbefore the queue)What changed
objectstack-ai/cloud#3002 ruling A, read per string as triage 6250167038 does: inside the running system, a user-facing string names the system the user is in as "this system". A string that means "made here, not from a package" reads "authored in this system". Six strings in the
domain:enginelane said "authored in this environment":@objectstack/objectqldescribeDefaultRecordPageHolder(default-record-page.ts)page "NAME", authored in this system@objectstack/objectqldescribeSecurityCatalogHolder, theenvironmentcase (security-catalog-namespace.ts)the environment catalog (an item authored in this system, not shipped by a package)@objectstack/metadata-protocolprotectionBlockRefusal(protocol.ts)@objectstack/metadata-protocolprotocol.ts)@objectstack/metadata-protocoldescribeholder text (protocol.ts)page 'NAME', authored in this system@objectstack/platform-objectssys_metadata_activation,package_idfield descriptionAlso
sys_metadata_activation's object description (the claim's optional line, about:75): "Packaged artifacts and positions or permission sets authored in this system are both recorded here." It is user-facing: it is the object's schema text shown wherever the object is described, and the comment above it (ADR-0126 §4) already treats it as copy, not reference. The phrase means "made here, not from a package", so it follows row 1."The environment catalog" stays. It is the documented name of that holder: ADR-0048 lists it as a holder by that name, the namespace's own docblock names it, the published
@objectstack/objectqlchangelog uses it, and the envelope'sexistingHolder.kindis'environment'. Only the parenthesis changes, per triage row 6.No code, status, error code or envelope field changes. Three
patchchangesets, one per published package.Pins
default-record-page-save-door.test.ts(two assertions) andregistry-default-record-page.test.ts(one helper) pin the refusal's first sentence, on top ofcode+status+ the structuredexisting/incomingholders. That sentence names both holders, which is the refusal's stated contract, so the pins move with the text rather than being loosened.scripts/ablation-replace.mjsthat put "authored in this environment" back:default-record-page.ts(src-resolved):registry-default-record-page.test.tswent1 failed | 21 passed; restored blob equals the HEAD blob (508f9a49e1ef).protocol.ts(resolved through@objectstack/metadata-protocol'sdist/): rebuilt,ablation-dist-preflightconfirmed the marker indist/,default-record-page-save-door.test.tswent4 failed | 30 passed; restored (blob6abd847e4dfaequals HEAD), rebuilt, preflight--absentexit 0,34 passed.Remove the \protection` block,code package's source,They would ...`). No i18n bundle or reference page carries any of the six, so nothing was regenerated.Verification (head 6ec1757, after merging origin/main d8e11b5)
--filterclosure of the three packages,VERDICT command-exit 0, on the pre-merge head and again on the merged head. Fullpnpm build --concurrency=2:76 successful, 76 total.@objectstack/objectqlexit 0 (check:test-typecheck: OK),@objectstack/metadata-protocolexit 0,@objectstack/platform-objectsexit 0 (check:test-typecheck: OK).packages/spec):@objectstack/platform-objects:Test Files 76 passed (76),Tests 1176 passed (1176).@objectstack/metadata-protocol:Test Files 246 passed | 3 skipped (249),Tests 20655 passed | 19 skipped (20674).@objectstack/objectql(all vitest projects):Test Files 445 passed (445),Tests 8359 passed (8359).node scripts/pm/dispatch-gates.mjs --commands(no paths) on 6ec1757 derived 71 commands; all 71 exit 0.check:dual-build-cjs-loadsandcheck:i18nfirst exited 3 (PREREQUISITE NOT MET, unbuilt packages) and exit 0 after the full build.--ran:Run reconciliation — 71 derived, 71 run, 0 NOT-MEASURED, 0 UNRUN(all 71 carry a recorded exit code).pnpm exec eslint --no-inline-configover the six changed.tsfiles: exit 0.check-nul-bytes: exit 0.test:reponot run locally (CITest Core).Acceptance notes
protocol.ts's uninstall refusal ("An uninstall is environment-wide — it removes every row bound to the package in this environment — ...") is a client-visible string outside this card's table, split across a string concatenation. It contrasts the deployment with an organization scope, so its reading is a call for the family card platform copy, the rest of cloud#3002 ruling A: about 50 non-comment "this environment" strings outside #24327 and #24360 (cloud-connection, plugin-auth, service-settings, platform-objects, mcp, plugin-security, spec) need the per-string reading #24368, which carries the rest of the family. Left as is.protocol.ts'sreassignOrphanedMetadataconsole.error("this environment has NOT converged ...") is an operator log, not a user-facing string. Left as is.default-record-page.tsandsecurity-catalog-namespace.tsstill say "authored in this environment". They are code comments, ruled out of this card.packages/runtimeis runtime copy: the permission-set clone notice says "authored in this environment" beside the console's new "this system" — server-side user-facing strings still use the cloud noun (cloud#3002 ruling A) #24327's, andprotocol.ts'sduplicatePackageregion is metadata-protocol: duplicatePackage renames a token that names both a prefixed package object and one of its fields as the object, so a copied view's column or form field names a field the copy does not have (family close-out) #23561's; neither is touched.Durable attribution: os-dev run for #24360, cloud session
session_01Vp3Ze7Vv9L1PuejcRQC2bK, dispatched by thedomain:engineseat 1 PM (session_01JtSQQ3EWsbNPzyYMug1tXy).Generated by Claude Code