You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
spec + skills: the titleFormat describe and the objectstack-data skill still steer a composite record title into a formula field (follow-up to #25071, ruling 6308445871) #25129
Filing gate ③ a follow-up owed by landing work, from the contract review of PR #25127 (card #25071) and its dev report. Filed by the domain:spec seat 3 (session session_01D6F9axfoPzR7t8G1J7Ytzz). ⛔ Not a claim.
What is left (origin/main03966ceae0)
PR #25127 re-words the lint messages, ADR-0079 D3 and formulas.mdx. These copies of the old prescription ("a composite title → a returnType: 'text' formula designated nameField") sit outside that card's surface:
packages/spec/src/data/object.zod.ts:2843, the titleFormat describe. Its generated copies are content/docs/references/data/object.mdx:167, references/api/metadata.mdx:964 and references/system/migration.mdx:349 and :643. The reconciliation note at packages/spec/src/system/metadata-form-zod-reconciliation.test.ts:404 quotes it.
skills/objectstack-data/SKILL.md:88 and :90, the published skill AI authors read. It is a governed surface (Tier H).
Wanted
The same reconciliation #25071 made, under ruling 6308445871 (#24981, letter A) and ADR-0079 addendum item 9:
Pointer for this card's skill half · domain:spec seat 1 (seat post #6017) · os-bill · session session_01T1Y1g92DfSEz93iuCisju4 · read on origin/mainb93c750c7. ⛔ Not a claim, no label change, no reply owed.
One more site in the same published skill states the shape this card steers authors toward wrongly. Whoever carries the skill half can take it in the same Tier H edit:
skills/objectstack-data/rules/relationships.md, the "Computed column" bullet (about lines 293–297): "the server only treats type: 'formula' as computed, so on a stored field the expression is a client compute hint and the sent value is stored verbatim."
What main does instead: the FieldSchema.expression describe (packages/spec/src/data/field.zod.ts) says that on a stored field the value is "computed by the engine from the row the write stores and stored, so a client-sent value never stands". The engine computes it over the final rows and reports a differing client value under stored_expression (packages/objectql/src/engine.ts, replacedStoredExpressionFields). Under strictReadonlyWrites such a write is refused (packages/spec/src/contracts/data-engine.ts).
Why it belongs here: once this card teaches "a composite title is a stored computed field (a non-formula field with an expression)", the same skill would also teach that such a field's expression is a client hint and stores whatever is sent. That is a contradiction an AI author reads in one package.
Claim: PM loop round 1
Session: session_01T1Y1g92DfSEz93iuCisju4
Account: os-bill
Branch: claude/issue-25129-composite-title-stored-field
Worktree: objectstack-issue-25129
Domain: domain:spec
Seat: domain:spec#1 (seat post #6017)
File surface: spec half: packages/spec/src/data/object.zod.ts (the titleFormat describe, and the nameField describe if it carries the same prescription), its generated copies under content/docs/references/**, the quoting note in packages/spec/src/system/metadata-form-zod-reconciliation.test.ts, one @objectstack/specpatch changeset. Skill half: skills/objectstack-data/SKILL.md (the nameField and titleFormat rows) and skills/objectstack-data/rules/relationships.md (the "Computed column" bullet, pointer 6333459023). Stop on breach; explain in the report.
Container & model: M, mode:subagent, model: CONTRACT_REVIEW_TIER (dispatch-gates --tier: "Model tier — MANDATORY", from the skills/** paths: "clause ① (2026-09-10 ruling, verbatim 「必须 fable的还包括对外发布的skills」)"). One PR carrying both halves, so the PR is Tier H whole and lands on an authorized approval. Its non-test packages/spec/src/** change also owes a CONTRACT_REVIEW_TIER review of record before the queue.
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6333459023
Serial constraints cleared: none in flight on the surface. The file lists of all 13 open PRs, read 2026-10-22T05:35Z, touch none of the expected paths. The order the card names holds: PR #25127 (#25071) has merged (459afea1f6). PR #25135 (#25128's docblock in object.zod.ts) has merged (863c58022).
Ruling: 6308445871 (#24981, letter A) binds the target wording: "a composite title that must round-trip through import is a stored computed field (a non-formula field with an expression, written on write — the #24619 shape)". Not a decision-box exit.
{
"issue": 25129,
"status": "done",
"branch": "claude/issue-25129-composite-title-stored-field",
"pr": "https://github.com/objectstack-ai/objectstack/pull/25183",
"session": "session_01T1Y1g92DfSEz93iuCisju4",
"premise_still_valid": true,
"summary": "Re-worded every remaining copy of the stale prescription to ruling 6308445871's shape: the titleFormat describe in packages/spec/src/data/object.zod.ts (and its four regenerated rows on the object, metadata and migration reference pages), the omit-ledger note in metadata-form-zod-reconciliation.test.ts that quotes it, the objectstack-data skill's nameField and titleFormat rows, and that skill's 'Computed column' bullet in rules/relationships.md (seat pointer 6333459023), which now says the engine computes a stored field's expression from the row the write stores and a client-sent value never stands. A composite title that import, sort or search must match is a stored computed field (a non-formula field with an expression, computed and stored on write); a text formula title stays legal for display only. Draft PR #25183, Tier H (skills/**), governed review requested by the relay (hotlong, os-zhuang); one changeset naming @objectstack/spec patch and @objectstack/skills patch, Clause-②: no, Metadata-protocol: none.",
"hypotheses": "H1 confirmed (describe at object.zod.ts:2844 on ab488d9b7; four generated rows; the note at reconciliation test :404). H2 falsified for the nameField describe (no composite-to-formula prescription; its TSDoc lists formula→text among stored title fields, D1's wording, no prescription, left alone); packages/spec/src sweep with control word titleFormat found no other site. H3 confirmed: the two SKILL.md rows and the relationships.md bullet are the only skills/** sites (sweep words: composite with formula/title/nameField; compute hint, stored verbatim, only treats, as computed; control titleFormat 3 hits, two unrelated). H4 measured: @objectstack/skills (packages/skills, publishConfig public, changeset fixed group) ships skills/** as dist/skills/SKILL_NAME/... via scripts/sync-catalog.mjs with files [dist, README.md, CHANGELOG.md], so the skill half owes a changeset; it rides in the same changeset file as the spec half.",
"files_changed": ".changeset/25129-composite-title-stored-field.md (added); packages/spec/src/data/object.zod.ts; packages/spec/src/system/metadata-form-zod-reconciliation.test.ts; content/docs/references/api/metadata.mdx, content/docs/references/data/object.mdx, content/docs/references/system/migration.mdx (regenerated); skills/objectstack-data/SKILL.md; skills/objectstack-data/rules/relationships.md — 8 files, +27 −16, head e74783922 on base ab488d9b7",
"line_budget": "skills/objectstack-data/ budget at most +2 net. SKILL.md 469 → 465 (−4); rules/relationships.md 401 → 401 (0); whole package (every .md under skills/objectstack-data/) 3713 → 3709 (−4); all skills/**/SKILL.md summed 4393 → 4389 (−4). Tokens (scripts/check-skills-token-ratchet.mjs, ceil(utf8 bytes/4), stamp unpriced): SKILL.md 6123 → 6099 (ceiling 6123); relationships.md 3676 → 3672 (ceiling 3676). The first re-wording of the nameField row read 6171, over by 48; paid in the same file by deletion (the two rows tightened; the incident sentence 'It used to clear both and then never match.' dropped; the stale parenthetical pointing at 'the determinism gate above', which lives in references/seeds.md, dropped; a doubled --- removed). No ceiling moved, no re-wrap counted.",
"tests": "Head e74783922. pnpm --filter @objectstack/spec build under the verify lock: VERDICT command-exit 0 (spec has no workspace deps, so the ① closure is empty). pnpm --filter @objectstack/spec check:generated: 1 of 14 stale (check:docs); check:generated --fix under the lock: VERDICT command-exit 0, re-check '✓ check:docs'. pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 over the six spec test files mentioning titleFormat (expression-dialect-docs.pin, typed-expression-envelope-dialect, io-node-config, compose-stacks-collection-pipe-arm, compose-stacks-merge-config-object-refusal, metadata-form-zod-reconciliation): 'Test Files 6 passed (6)', 'Tests 267 passed (267)', VERDICT command-exit 0 (the reconciliation file alone first: 1 file, 76 passed). pnpm --filter @objectstack/spec typecheck (tsc + check:scripts-typecheck + check:test-typecheck): VERDICT command-exit 0. Declared narrowing: the spec suite is 779 files, over the foreground cap; only the reconciliation note pins the changed text and no test reads the titleFormat describe; CI's Test Core runs it. No ablation: no tested behaviour changed (describe string, ledger-note prose, skill text).",
"gates": "Derived on the final commit: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; stderr: derived from the tree at commit e74783922): 119 commands, each run from the worktree root with the exit code captured before any pipe into 'COMMAND :: exit N'. --ran verdict: '✓ dispatch-gates --ran: 119 derived famil(ies) accounted for — 118 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. 118 exit 0, among them check:docs, check:generated, check:skill-docs, check:skill-refs, check:skill-examples (exit 0 after building @objectstack/client-react and @objectstack/client, its declared prerequisite; first run exit 3), check:skills-token-ratchet, check:skill-identifier-liveness, check:skill-frame-sync, check:skill-compatibility, check:doc-authoring, check:doc-formula-expressions (exit 0 after building @objectstack/formula and @objectstack/lint; first run exit 3), check-empty-changeset, check-changeset-no-major, check-adr-0087-registration, check:nul-bytes, check:pm-governed-merges, check:api-surface, check:authorable-surface. NOT MEASURED: pnpm check:dual-build-cjs-loads, exit 3 PREREQUISITE NOT MET (reads every package's dist, a whole-repo build); CI runs it. Outside the derivation, run by hand: node scripts/check-skills-token-ratchet.mjs before the payment (✗ SKILL.md over by 48) and after (✓ 54 authored files within ceilings). PR check-runs on e747839220 at 07:06Z: 25 total — 'No other open PR may claim the same issue' completed/success; '18.x upgrade harness (opt-in)' and 'Packed-tarball smoke (opt-in)' completed/skipped; the other 22 in_progress (Governed Surface Queue Guard, Lint · ESLint, Lint · repo & tooling gates, Lint · docs & code guards, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · scoped ×3, Type Check · workspace / source gates / consumer gates / debt ledger, Check Changeset, Check PR Size, Check Documentation Links, Flag docs affected by code changes, Spec property liveness, The card this PR closes must claim this branch, Part-of PR must not also close its card, No other open PR may claim the same single-writer path, filter). Not re-run locally; in_progress is the honest value at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0 — no MCP GitHub tool called; reads were gh api GETs (issue 25129, its comments, comment 6308445871, PR 25127 and its files, PR 25183, its head's check-runs)",
"api_writes": "0 direct REST writes. Two relay strokes (scripts/pm/fleet-write/dispatch.mjs, as objectstack-fleet[bot]): stroke 1 fw-20261022T070404Z-14fbdc = POST /repos/objectstack-ai/objectstack/dispatches, executed as POST /repos/objectstack-ai/objectstack/pulls (draft, body 11434 bytes read back identical) + POST /repos/objectstack-ai/objectstack/issues/25183/assignees (os-bill) + the relay's own governed-review follow-up POST /repos/objectstack-ai/objectstack/pulls/25183/requested_reviewers (hotlong, os-zhuang); stroke 2 = POST /repos/objectstack-ai/objectstack/dispatches executed as POST /repos/objectstack-ai/objectstack/issues/25129/comments (this report). Git: 4 pushes to the branch (empty probe, then 3 commits), not REST writes. No labels sent.",
"deviations": [
"The first commit carried a model-named co-author trailer (the harness attribution reminder's form); the pre-push hook refused it (check:commit-card-trailers); the unpublished tip commit was reworded to the model-free pair and pushed. No published history rewritten.",
"Spec test run narrowed to the six files mentioning titleFormat (6/779); declared above; CI's Test Core runs the suite.",
"pnpm check:dual-build-cjs-loads NOT MEASURED (exit 3, needs every package's dist); CI runs it.",
"One lock attempt (client SDK build) returned exit 99 after 540 s, holder pid 4636 (pnpm --filter @objectstack/dogfood test, 682 s); the retry under the same OS_VERIFY_LOCK_SLOT acquired after 405 s but outlived the harness's 600 s tool cap and was moved to the background by the harness; its output file read 'Tasks: 37 successful, 37 total', 'VERDICT command-exit 0', exit 0. Unlocked gate chunks filled the wait.",
"The 119 derived gates ran in ten foreground chunks across separate calls (each under the cap), appended to one ran.list; two gates re-run after their declared prerequisite builds (recorded exit 3 lines replaced by the re-run's exit 0, the first readings noted here).",
"origin/main gained three commits after the base (82cfaf792, c24203f9d, 68a57ad99) touching none of this PR's paths; no pre-PR merge of main was done, so the local readings are on the branch tree, not a merge tree; the PR's own CI runs the merge ref.",
"The changeset is one file naming both @objectstack/spec patch and @objectstack/skills patch (the dispatch's suggested route named only the spec package; H4 measured the skill half as published)."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — the nameField TSDoc in object.zod.ts lists '(text / autonumber / formula→text)' among 'real stored' title fields, D1's wording the ADR-0079 addendum qualifies without editing; it prescribes nothing for a composite title (observation, 抛光 class, Acceptance notes only).",
"carrier: none · noted, not filed — the old sentence survives in packages/*/CHANGELOG.md (release-owned) and in two test docblocks describing landed in-repo migrations (service-messaging notification-display-title.test.ts:18, platform-objects identity-display-title.test.ts:17); the card excludes the in-repo display_title formula packages and the HotCRM card."
]
}
ACCEPT → PR #25183 comment 6335512081 · contract review 6335473304 (PASS, CONTRACT_REVIEW_TIER, head e747839220) · Tier H: approved by os-zhuang on that head and queued by the approver · domain:spec seat 1 · session session_01T1Y1g92DfSEz93iuCisju4 · 2026-10-22T07:43Z. This seat follows it to MERGED.
Activity
objectstack-fleet commentedon Oct 22, 2026
Pointer for this card's skill half ·
domain:specseat 1 (seat post #6017) ·os-bill· sessionsession_01T1Y1g92DfSEz93iuCisju4· read onorigin/mainb93c750c7. ⛔ Not a claim, no label change, no reply owed.One more site in the same published skill states the shape this card steers authors toward wrongly. Whoever carries the skill half can take it in the same Tier H edit:
skills/objectstack-data/rules/relationships.md, the "Computed column" bullet (about lines 293–297): "the server only treatstype: 'formula'as computed, so on a stored field theexpressionis a client compute hint and the sent value is stored verbatim."maindoes instead: theFieldSchema.expressiondescribe (packages/spec/src/data/field.zod.ts) says that on a stored field the value is "computed by the engine from the row the write stores and stored, so a client-sent value never stands". The engine computes it over the final rows and reports a differing client value understored_expression(packages/objectql/src/engine.ts,replacedStoredExpressionFields). UnderstrictReadonlyWritessuch a write is refused (packages/spec/src/contracts/data-engine.ts).expression)", the same skill would also teach that such a field'sexpressionis a client hint and stores whatever is sent. That is a contradiction an AI author reads in one package.class: b, release text in the published skill). Dedupe: two MCPsearch_issuesqueries on this repo, open and closed ("client compute hint" / "stored verbatim" withrelationships.md; stored-expression skill text) returned 13 and 1 hits. Only this card touches theobjectstack-dataskill's stored-computed-field teaching, so the site is carried here rather than filed apart.Generated by Claude Code
objectstack-fleet commentedon Oct 22, 2026
Claim: PM loop round 1
Session:
session_01T1Y1g92DfSEz93iuCisju4Account:
os-billBranch:
claude/issue-25129-composite-title-stored-fieldWorktree:
objectstack-issue-25129Domain:
domain:specSeat:
domain:spec#1(seat post #6017)File surface: spec half:
packages/spec/src/data/object.zod.ts(thetitleFormatdescribe, and thenameFielddescribe if it carries the same prescription), its generated copies undercontent/docs/references/**, the quoting note inpackages/spec/src/system/metadata-form-zod-reconciliation.test.ts, one@objectstack/specpatchchangeset. Skill half:skills/objectstack-data/SKILL.md(thenameFieldandtitleFormatrows) andskills/objectstack-data/rules/relationships.md(the "Computed column" bullet, pointer6333459023). Stop on breach; explain in the report.Container & model:
M,mode:subagent,model: CONTRACT_REVIEW_TIER(dispatch-gates --tier: "Model tier — MANDATORY", from theskills/**paths: "clause ① (2026-09-10 ruling, verbatim 「必须 fable的还包括对外发布的skills」)"). One PR carrying both halves, so the PR is Tier H whole and lands on an authorized approval. Its non-testpackages/spec/src/**change also owes aCONTRACT_REVIEW_TIERreview of record before the queue.Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6333459023
Serial constraints cleared: none in flight on the surface. The file lists of all 13 open PRs, read 2026-10-22T05:35Z, touch none of the expected paths. The order the card names holds: PR #25127 (#25071) has merged (
459afea1f6). PR #25135 (#25128's docblock inobject.zod.ts) has merged (863c58022).Ruling:
6308445871(#24981, letter A) binds the target wording: "a composite title that must round-trip through import is a stored computed field (a non-formula field with anexpression, written on write — the #24619 shape)". Not a decision-box exit.Generated by Claude Code
objectstack-fleet commentedon Oct 22, 2026
os-dev-report
{ "issue": 25129, "status": "done", "branch": "claude/issue-25129-composite-title-stored-field", "pr": "https://github.com/objectstack-ai/objectstack/pull/25183", "session": "session_01T1Y1g92DfSEz93iuCisju4", "premise_still_valid": true, "summary": "Re-worded every remaining copy of the stale prescription to ruling 6308445871's shape: the titleFormat describe in packages/spec/src/data/object.zod.ts (and its four regenerated rows on the object, metadata and migration reference pages), the omit-ledger note in metadata-form-zod-reconciliation.test.ts that quotes it, the objectstack-data skill's nameField and titleFormat rows, and that skill's 'Computed column' bullet in rules/relationships.md (seat pointer 6333459023), which now says the engine computes a stored field's expression from the row the write stores and a client-sent value never stands. A composite title that import, sort or search must match is a stored computed field (a non-formula field with an expression, computed and stored on write); a text formula title stays legal for display only. Draft PR #25183, Tier H (skills/**), governed review requested by the relay (hotlong, os-zhuang); one changeset naming @objectstack/spec patch and @objectstack/skills patch, Clause-②: no, Metadata-protocol: none.", "hypotheses": "H1 confirmed (describe at object.zod.ts:2844 on ab488d9b7; four generated rows; the note at reconciliation test :404). H2 falsified for the nameField describe (no composite-to-formula prescription; its TSDoc lists formula→text among stored title fields, D1's wording, no prescription, left alone); packages/spec/src sweep with control word titleFormat found no other site. H3 confirmed: the two SKILL.md rows and the relationships.md bullet are the only skills/** sites (sweep words: composite with formula/title/nameField; compute hint, stored verbatim, only treats, as computed; control titleFormat 3 hits, two unrelated). H4 measured: @objectstack/skills (packages/skills, publishConfig public, changeset fixed group) ships skills/** as dist/skills/SKILL_NAME/... via scripts/sync-catalog.mjs with files [dist, README.md, CHANGELOG.md], so the skill half owes a changeset; it rides in the same changeset file as the spec half.", "files_changed": ".changeset/25129-composite-title-stored-field.md (added); packages/spec/src/data/object.zod.ts; packages/spec/src/system/metadata-form-zod-reconciliation.test.ts; content/docs/references/api/metadata.mdx, content/docs/references/data/object.mdx, content/docs/references/system/migration.mdx (regenerated); skills/objectstack-data/SKILL.md; skills/objectstack-data/rules/relationships.md — 8 files, +27 −16, head e74783922 on base ab488d9b7", "line_budget": "skills/objectstack-data/ budget at most +2 net. SKILL.md 469 → 465 (−4); rules/relationships.md 401 → 401 (0); whole package (every .md under skills/objectstack-data/) 3713 → 3709 (−4); all skills/**/SKILL.md summed 4393 → 4389 (−4). Tokens (scripts/check-skills-token-ratchet.mjs, ceil(utf8 bytes/4), stamp unpriced): SKILL.md 6123 → 6099 (ceiling 6123); relationships.md 3676 → 3672 (ceiling 3676). The first re-wording of the nameField row read 6171, over by 48; paid in the same file by deletion (the two rows tightened; the incident sentence 'It used to clear both and then never match.' dropped; the stale parenthetical pointing at 'the determinism gate above', which lives in references/seeds.md, dropped; a doubled --- removed). No ceiling moved, no re-wrap counted.", "tests": "Head e74783922. pnpm --filter @objectstack/spec build under the verify lock: VERDICT command-exit 0 (spec has no workspace deps, so the ① closure is empty). pnpm --filter @objectstack/spec check:generated: 1 of 14 stale (check:docs); check:generated --fix under the lock: VERDICT command-exit 0, re-check '✓ check:docs'. pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 over the six spec test files mentioning titleFormat (expression-dialect-docs.pin, typed-expression-envelope-dialect, io-node-config, compose-stacks-collection-pipe-arm, compose-stacks-merge-config-object-refusal, metadata-form-zod-reconciliation): 'Test Files 6 passed (6)', 'Tests 267 passed (267)', VERDICT command-exit 0 (the reconciliation file alone first: 1 file, 76 passed). pnpm --filter @objectstack/spec typecheck (tsc + check:scripts-typecheck + check:test-typecheck): VERDICT command-exit 0. Declared narrowing: the spec suite is 779 files, over the foreground cap; only the reconciliation note pins the changed text and no test reads the titleFormat describe; CI's Test Core runs it. No ablation: no tested behaviour changed (describe string, ledger-note prose, skill text).", "gates": "Derived on the final commit: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; stderr: derived from the tree at commit e74783922): 119 commands, each run from the worktree root with the exit code captured before any pipe into 'COMMAND :: exit N'. --ran verdict: '✓ dispatch-gates --ran: 119 derived famil(ies) accounted for — 118 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. 118 exit 0, among them check:docs, check:generated, check:skill-docs, check:skill-refs, check:skill-examples (exit 0 after building @objectstack/client-react and @objectstack/client, its declared prerequisite; first run exit 3), check:skills-token-ratchet, check:skill-identifier-liveness, check:skill-frame-sync, check:skill-compatibility, check:doc-authoring, check:doc-formula-expressions (exit 0 after building @objectstack/formula and @objectstack/lint; first run exit 3), check-empty-changeset, check-changeset-no-major, check-adr-0087-registration, check:nul-bytes, check:pm-governed-merges, check:api-surface, check:authorable-surface. NOT MEASURED: pnpm check:dual-build-cjs-loads, exit 3 PREREQUISITE NOT MET (reads every package's dist, a whole-repo build); CI runs it. Outside the derivation, run by hand: node scripts/check-skills-token-ratchet.mjs before the payment (✗ SKILL.md over by 48) and after (✓ 54 authored files within ceilings). PR check-runs on e747839220 at 07:06Z: 25 total — 'No other open PR may claim the same issue' completed/success; '18.x upgrade harness (opt-in)' and 'Packed-tarball smoke (opt-in)' completed/skipped; the other 22 in_progress (Governed Surface Queue Guard, Lint · ESLint, Lint · repo & tooling gates, Lint · docs & code guards, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · scoped ×3, Type Check · workspace / source gates / consumer gates / debt ledger, Check Changeset, Check PR Size, Check Documentation Links, Flag docs affected by code changes, Spec property liveness, The card this PR closes must claim this branch, Part-of PR must not also close its card, No other open PR may claim the same single-writer path, filter). Not re-run locally; in_progress is the honest value at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0 — no MCP GitHub tool called; reads were gh api GETs (issue 25129, its comments, comment 6308445871, PR 25127 and its files, PR 25183, its head's check-runs)", "api_writes": "0 direct REST writes. Two relay strokes (scripts/pm/fleet-write/dispatch.mjs, as objectstack-fleet[bot]): stroke 1 fw-20261022T070404Z-14fbdc = POST /repos/objectstack-ai/objectstack/dispatches, executed as POST /repos/objectstack-ai/objectstack/pulls (draft, body 11434 bytes read back identical) + POST /repos/objectstack-ai/objectstack/issues/25183/assignees (os-bill) + the relay's own governed-review follow-up POST /repos/objectstack-ai/objectstack/pulls/25183/requested_reviewers (hotlong, os-zhuang); stroke 2 = POST /repos/objectstack-ai/objectstack/dispatches executed as POST /repos/objectstack-ai/objectstack/issues/25129/comments (this report). Git: 4 pushes to the branch (empty probe, then 3 commits), not REST writes. No labels sent.", "deviations": [ "The first commit carried a model-named co-author trailer (the harness attribution reminder's form); the pre-push hook refused it (check:commit-card-trailers); the unpublished tip commit was reworded to the model-free pair and pushed. No published history rewritten.", "Spec test run narrowed to the six files mentioning titleFormat (6/779); declared above; CI's Test Core runs the suite.", "pnpm check:dual-build-cjs-loads NOT MEASURED (exit 3, needs every package's dist); CI runs it.", "One lock attempt (client SDK build) returned exit 99 after 540 s, holder pid 4636 (pnpm --filter @objectstack/dogfood test, 682 s); the retry under the same OS_VERIFY_LOCK_SLOT acquired after 405 s but outlived the harness's 600 s tool cap and was moved to the background by the harness; its output file read 'Tasks: 37 successful, 37 total', 'VERDICT command-exit 0', exit 0. Unlocked gate chunks filled the wait.", "The 119 derived gates ran in ten foreground chunks across separate calls (each under the cap), appended to one ran.list; two gates re-run after their declared prerequisite builds (recorded exit 3 lines replaced by the re-run's exit 0, the first readings noted here).", "origin/main gained three commits after the base (82cfaf792, c24203f9d, 68a57ad99) touching none of this PR's paths; no pre-PR merge of main was done, so the local readings are on the branch tree, not a merge tree; the PR's own CI runs the merge ref.", "The changeset is one file naming both @objectstack/spec patch and @objectstack/skills patch (the dispatch's suggested route named only the spec package; H4 measured the skill half as published)." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — the nameField TSDoc in object.zod.ts lists '(text / autonumber / formula→text)' among 'real stored' title fields, D1's wording the ADR-0079 addendum qualifies without editing; it prescribes nothing for a composite title (observation, 抛光 class, Acceptance notes only).", "carrier: none · noted, not filed — the old sentence survives in packages/*/CHANGELOG.md (release-owned) and in two test docblocks describing landed in-repo migrations (service-messaging notification-display-title.test.ts:18, platform-objects identity-display-title.test.ts:17); the card excludes the in-repo display_title formula packages and the HotCRM card." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 22, 2026
ACCEPT → PR #25183 comment 6335512081 · contract review
6335473304(PASS,CONTRACT_REVIEW_TIER, heade747839220) · Tier H: approved byos-zhuangon that head and queued by the approver ·domain:specseat 1 · sessionsession_01T1Y1g92DfSEz93iuCisju4· 2026-10-22T07:43Z. This seat follows it to MERGED.Generated by Claude Code