Skip to content

docs(spec): say what the optional master did to the cbp-master-detail-required-defaulted notes - #31055

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-kujw5c
Nov 6, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-kujw5c

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread

Clause-②: no
Metadata-protocol: none

Fixes #30977

Claim: 6697140710 · Branch: claude/project-thread-kujw5c

维护者速读

Stale sentences found, and how each was resolved

# Where (on origin/main 81deb54) Stale claim Resolution
1 conversions/entries/18/cbp-master-detail-required-defaulted.ts:56-58 "An explicit required: false … The builder refuses it loudly … an author the builder would have stopped" Rewritten: on the only master_detail it is the optional master (ADR-0055 §1 as amended, #30905 ruling A), kept by the builder and admitted by the parse, so the stored pass keeps it too; beside another master_detail the builder still refuses it.
2 same file :66-68 "a live author still meets the parse's refusal and its prescription" Rewritten: a live author meets the builder's force through ObjectSchema.create() and os lint's relationship/master-detail-required at error; a raw parse reads the omitted key as the optional master (the field default writes false first).
3 same file :110 (fixture comment) "refused by the builder, not converted here" Now "the optional master, kept as written; not converted". Fixture shape untouched.
4 same file :23-26 "Ruling B made the parse refuse … without exactly one master_detail declared required: true" True as history; kept, with one parenthesis noting ruling A's amendment and that the omitted key this entry converts is unchanged by it.
5 data/object.zod.ts forceCbpMasterDetailRequired docblock, closing paragraph "the RULE — exactly one required master_detail … so a raw parse of a master_detail without required: true is refused rather than forced" Rewritten: the rule includes the only master_detail as the optional master, and a raw parse is never forced (it reads an omitted required after its false default). The paragraphs above it already carry #30940's "⚠️ Amended" note and were left.

Read and left as is:

  • summary string (:79-82): every clause is still true ("an explicit required: false … not converted"), so it did not change, and no printed text moved.
  • migrations/entries/semantic/18.cbp-master-relation-tiers-retired.ts (:50-51, :69-70, :76): its text on an explicit required: false is outdated, but feat(spec,security): a controlled_by_parent object may declare an optional master #30940 added 18.cbp-optional-master-admitted, whose reason says in so many words that it "supersedes what cbp-master-relation-tiers-retired and cbp-master-detail-required-forced say of it … everything else they say stands". The D3 record is superseded by a later entry, not edited, and its strings are printed to authors; left for that reason.
  • data/controlled-by-parent-master.ts and conversions/refused-shapes.test.ts: already updated by feat(spec,security): a controlled_by_parent object may declare an optional master #30940; nothing stale.

Verification

  • dispatch-gates --commands: 68 derived, 68 run, all exit 0. dispatch-gates --ran: 68 accounted, 0 NOT-MEASURED. 11 of them first exited 3 (not measured) on a fresh worktree; they went green after pnpm build, and check-plugin-teardown-shape --self-test after fetching its pinned fixture commit on this shallow clone.
  • vitest run src/conversions src/data/controlled-by-parent-master.test.ts in packages/spec: 24 files, 842 tests passed.
  • Open PRs touching these files: none found (docs(skills): name the save_notice node in the automation skill #31044, the one search hit, touches only skills).
  • Diff: 2 files, +24 / −15, comments only.

Acceptance notes

🤖 Generated with Claude Code

https://claude.ai/code/session_01L9qibzpwEPquNhPcgrrjew

…-required-defaulted notes

The protocol-18 conversion and the builder-force docblock still said an
explicit `required: false` master is refused by the builder and the parse,
and that a live author meets the parse's refusal. After #30940 (ruling A
of #30905) the only `master_detail` declared `required: false` is the
optional master, kept by the builder and admitted by the parse, and a raw
parse reads an omitted `required` as that optional master. Comments only;
the conversion's apply and fixture shapes are unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibzpwEPquNhPcgrrjew
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 6, 2026
@github-actions github-actions Bot added the size/s label Nov 6, 2026
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 1 changed file(s) yielded no anchor (packages/spec/src/data/object.zod.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/spec/src/data/object.zod.ts) — pages documenting those are invisible to this run
  • 1 name(s) were too generic to anchor anything (single lowercase words)
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 171 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json b5106af62a28e99365746c1397037a830f931504 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB

维护者速读

席位意见:可以落地。

席位核对

ACCEPT · seat domain:spec#1 · head 3fd3b163 · 2026-11-06T23:08Z

  1. Shape: Fixes #30977, draft, base main, 2 files, +24/−15, comments only. skip-changeset. Clause-②: no / Metadata-protocol: none, matching claim 6697140710. Not governed.
  2. Seat review (review of record; no contract review owed, since no accept set moves): each rewritten sentence was checked against origin/main:
    • forceCbpMasterDetailRequired (object.zod.ts:4508) keeps an explicit required: false on the only master_detail and throws beside another one.
    • relationship/master-detail-required is at error (packages/lint/src/data-model-rules.ts:447).
    • The summary string still reads true.
    • Leaving the D3 semantic entry is right: 18.cbp-optional-master-admitted supersedes it in its own reason, and the record is printed to authors.
  3. Gates / check-runs: dev: 68/68 derived gates exit 0, --ran 0 not measured, spec conversions 842 tests passed (report 6697666083). On head 3fd3b163: 69 runs, 55 success, 14 skipped, 0 failed, 0 running. mergeable_state is clean.
  4. Accepted deviations: a one-parenthesis ruling-A note was added beside the :23 history, beyond the order's list. It is true and keeps the history readable.
  5. Landing: not governed. The seat readies the PR and arms auto-merge via the relay, per Tesla 2026-11-06T14:09Z 「你应该是使用 pm-dispatch 技能自主审核和落地 pr」.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 6, 2026 23:10
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge November 6, 2026 23:10
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 6, 2026
Merged via the queue into main with commit f120661 Nov 6, 2026
70 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-kujw5c branch November 6, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

protocol:data size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

1 participant