Skip to content

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

Queued
objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/project-thread-kujw5c
Queued

objectstack-fleet[bot] wants to merge 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
Any commits made after this event will not be merged.

This branch has not been deployed

No deployments
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