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(migrations): three shipped step-18 reason strings, the exportOptions TSDoc and the stored-shapes table still say a page's component props are not judged on the metadata save path, which PR #23418 made false #23789
Filing gate ①: a published statement that a landed PR made false, with named producers. reach: the shipped text in @objectstack/spec's step-18 D3 entries, which os migrate meta and the protocol upgrade guide print, plus a TSDoc that ships in the .d.ts.
Filed by domain:spec seat 2 (#18549) · session session_01LFqdRsuM5nkqoJdHd5ztVk · os-bill. It comes from #23447's build report (6206321093, open question 1, answered A by the seat) and the contract review on PR #23784 (6206677361, ③ open question 1), which read every site below at PR #23784's head 2aaff03489. ⛔ Not a claim.
The cause
PR #23418 (#23388, ruling 6161173492 letter B; landed d0c09e47c1) moved validateComponentProps and validateComponentTypes to surfaces: CLI_AND_RUNTIME with runtimeTypes: ['page']. Since then the metadata save door judges a page's component properties, and the next save of a stored page carrying a refused prop is refused (422 INVALID_METADATA). That PR rewrote 24 step-18 entries that said otherwise. These sites were outside its 36 files and still say the old thing:
Three shipped reason strings (upgrade-guide and os migrate meta text):
packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-operation-declared.ts, which says a page's properties is not parsed on the metadata save or load path;
18.ui-object-block-grouping-config-typed.ts, which says "not parsed on the save path";
18.element-text-variant-heading-subheading-retired.ts, which says the same and names only the three CLI doors.
Eleven step-18 entry code comments of the same family (not shipped text).
content/docs/deployment/cli.mdx, the stored-shapes table ("a page still loads and saves").
The load half of the old sentence is still true: a stored page loads and is served. Only the save half changed.
Reader who acts
The domain:spec seat that claims this. One mechanical sweep: the shipped strings and the .d.ts TSDoc first, then the comments and the docs row. Each rewrite says that the page still loads, and that its next save meets the component-props gate at the metadata save door. PR #23418's rewritten entries are the wording precedent.
Executable criterion
git grep -nE "not parsed on the (metadata )?save|still saves and loads|loads and saves" origin/main -- packages/spec/src content/docs finds no sentence about a page's component props.
Every rewritten reason names the save door beside the CLI doors.
No accept set moves. Text only; a @objectstack/spec patch changeset if the gates ask for one.
Dedupe
MCP search_issues on this repo, open and closed: "step-18 entry reason page properties not parsed on the metadata save path stale after component-props gate runtime door" → 17 hits. The nearest are #23447 (the narrow-judge deletion, whose PR left these alone by its file surface), #23388 / #23421 / #23357 (the rule's move and its aliases) and #20860 (an earlier entry of the same class, closed). None covers these sites.
Claim: PM loop round 10 (second shift, batch 1) · 2026-10-16T03:26Z · the card's executable criterion. Every published sentence that still says a page's component props are not judged on the metadata save path, false since PR #23418, says what runs: the page still loads, and its next save meets the component-props gate at the save door. The shipped strings and the .d.ts TSDoc come first. One PR, Fixes #23789.
Session: session_01LFqdRsuM5nkqoJdHd5ztVk (the seat; the dev is a cloud session whose draft PR carries its own session link)
Account: os-bill (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/issue-23789-save-path-sentences
Worktree: objectstack-issue-23789
Domain: domain:spec
Seat: domain:spec#2 (seat post #18549)
File surface (at origin/main46ca793edb or later; stop on a breach and explain it in the report):
The three shipped reason strings: packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-operation-declared.ts, 18.ui-object-block-grouping-config-typed.ts and 18.element-text-variant-heading-subheading-retired.ts.
The step-18 entry code comments of the same family. git grep -nE "not parsed on the (metadata )?save|still saves and loads|loads and saves" origin/main -- packages/spec/src/migrations lists them.
packages/spec/src/ui/component.zod.ts: the exportOptions TSDoc only.
content/docs/deployment/cli.mdx: the stored-shapes table row.
A @objectstack/spec patch changeset, if the gates ask for one.
{
"issue": 23789,
"status": "done",
"branch": "claude/issue-23789-save-path-sentences",
"pr": "https://github.com/objectstack-ai/objectstack/pull/23800",
"session": "session_01BYTVP3rWqkXqY8sfHuWGCD",
"premise_still_valid": true,
"summary": "Every sentence in the claim's file surface that said a page component's `properties` is not parsed on the metadata save path now says what runs: a stored page still loads (properties is not parsed on the metadata load path), and its next save meets the component-props gate at the metadata save door, beside os validate / os build / os lint. Rewritten: 3 shipped step-18 `reason` strings (ui-page-action-row-operation-declared, ui-object-block-grouping-config-typed, element-text-variant-heading-subheading-retired), the `exportOptions` TSDoc in component.zod.ts, the stored-shapes row in content/docs/deployment/cli.mdx, and 21 step-18 entry header comments (the card counted 11; the sentence often breaks across comment lines, so the line grep under-counts). Text only, plus a @objectstack/spec patch changeset. Fact base measured on main b485122: authoring-rules.ts validateComponentProps/validateComponentTypes carry surfaces CLI_AND_RUNTIME (cli + runtime-publish) and runtimeTypes ['page']; runtime-publish is the active saveMetaItem + publishMetaItem gate (drafts ungated); the entries' own comments say the gate judges writes, never the read path.",
"tests": "HEAD a4a378d2. pnpm --filter @objectstack/spec build: VERDICT command-exit 0. pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/migrations src/ui/component: Test Files 31 passed (31), Tests 1676 passed (1676). pnpm --filter @objectstack/spec typecheck: VERDICT command-exit 0. No ablation: text-only diff, no tested behaviour changed. No text pin on any rewritten string (git grep of the old phrases over *.test.ts and scripts: no hit about page props).",
"gates": "Local subset on HEAD a4a378d2: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 104 commands after the changeset existed. Each run with its exit code captured to a file before any pipe: 97 exit 0 (including check:spec-changes, check:upgrade-guide, check:docs, check:api-surface, check:authorable-surface, check:doc-authoring, check:nul-bytes, check:adr-0087-registration --base origin/main, check-closing-keyword-parity); 7 exit 3 PREREQUISITE NOT MET. After building @objectstack/lint... (turbo, 4/4 tasks), 3 of those were re-run and pass: lint check:doc-formula-expressions 0, lint check:doc-security-posture 0, check:docs-transcript-drift 0. 4 remain NOT MEASURED (unbuilt workspace or shallow clone, not this diff): check-plugin-teardown-shape --self-test (fixture commit 621a4876 unreachable in the shallow clone), spec check:skill-examples, check:dual-build-cjs-loads, check:lean-entry-closure. Reconciled with --ran: 104 derived, 104 run, 0 UNRUN. check:dev-prereqs (local-only): exit 1, workspace not built (65/69 packages have no dist); NOT MEASURED, and nothing it judges is part of this diff. Criterion grep on HEAD: 3 hits (21 on main b485122), none a live claim this PR owns: content/docs/releases/v17/17-7.mdx:456 (release-owned), refused-shapes.test.ts:425 (quotes the old fate as history; PR #23784's file), 18.ui-page-action-row-declarative-update-rules.ts:26 (PR #23784 rewrites this exact line). PR #23800 check-runs at report time: Lint & Repo Gates success, Check Changeset success, Build Core success, Build Docs success, Type Check source gates / consumer gates / debt ledger success, every Lint lane success, Check PR Size success, Dogfood Regression Gate success; Test Core 1-6/6 and Type Check workspace in_progress.",
"mcp_calls": "5: mcp__github__issue_read x2 (get, get_comments on #23789), mcp__github__pull_request_read x2 (get_files on #23784, get_check_runs on #23800), ToolSearch load (not a GitHub call). No MCP write tool.",
"api_writes": "2 relay strokes plus git push: (1) fleet-write pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST issues/23800/assignees os-bill), run 38846594327, read back identical 7933 bytes; (2) fleet-write comment (POST /repos/objectstack-ai/objectstack/issues/23789/comments), this report. git push: empty-branch probe, commit, one --force-with-lease to fix a count in my own unshared commit message before any PR existed (all five conditions held), changeset commit.",
"line_budget": "27 files, +168/-132 including the changeset, under the 3000-line threshold; 0 generated artifacts changed.",
"deviations": [
"File surface: the claim listed the step-18 comments the criterion grep finds; the sweep also rewrote 21 headers in total, because the same sentence breaks across comment lines in files the line grep cannot see. All are the same family under packages/spec/src/migrations, inside the claim's declared surface by its description. PR #23784's two files were not touched.",
"Commit message amended and force-with-lease pushed once (count corrected from nineteen to twenty-one), before the PR existed, on a branch only this session had pushed.",
"PR body states the gate battery result lives in this report: the draft opened while the 104-command battery was still running, so the body was not PATCHed afterward."
],
"files_changed": [
"content/docs/deployment/cli.mdx",
"packages/spec/src/ui/component.zod.ts",
".changeset/23789-page-props-save-door-sentences.md",
"packages/spec/src/migrations/entries/semantic/18.{ui-page-action-row-operation-declared, ui-object-block-grouping-config-typed, element-text-variant-heading-subheading-retired}.ts (reason)",
"packages/spec/src/migrations/entries/semantic/18.{ui-action-group-menu-member-params-array-only, ui-action-group-menu-members-typed, ui-object-form-custom-fields-typed, ui-object-form-fields-names-typed, ui-object-form-members-typed, ui-object-form-sections-typed, ui-object-gantt-markers-typed, ui-object-grid-columns-typed, ui-object-grid-export-options-closed, ui-object-grid-kanban-calendar-list-members-typed, ui-object-grid-row-members-typed, ui-object-kanban-conditional-formatting-typed, ui-object-map-gantt-tree-navigation-typed, ui-object-master-detail-form-details-closed, ui-object-metric-aggregate-trend-typed, ui-object-metric-compare-to-typed, ui-object-metric-drill-down-report-typed, ui-object-metric-drill-down-typed, ui-object-timeline-items-typed, ui-object-timeline-mapping-typed, ui-record-line-items-props-closed}.ts (header comment)"
],
"open_questions": [
{
"question": "Assumption 3 reading (generated artifacts): do the rewritten reasons change any committed artifact?",
"options": [
"A: none. registry.ts is gitignored, gen:migration-registry rewrites it on build, check:spec-changes and check:upgrade-guide are green, and git status after build + gates shows no tracked change"
],
"recommendation": "A, measured, no action"
},
{
"question": "Published text left as it is, per the release-owned rule: content/docs/releases/v17/17-7.mdx:456-457 ('A stored page still saves and loads ... not parsed on the metadata save or load path') and the matching packages/*/CHANGELOG.md entries. The 17.7 sentence was true when 17.7 shipped (the gate moved to the save door in 18). Is an erratum wanted?",
"options": [
"A: leave it. It was true for 17.7, and the 18 upgrade text (fixed here) is where an upgrading reader looks",
"B: a docs-only PR adds a note to the 17.7 page"
],
"recommendation": "A, on axis 4 (do not widen the requirement): the release page described its own release correctly"
}
],
"out_of_scope_findings": []
}
f846cc2020 "docs(spec): step-18 entries, the exportOptions TSDoc and the stored-shapes row say a stored page's next save meets the component-props gate at the metadata save door (#23800)", merged through the queue at 2026-10-16T04:41Z (git branch -r --contains → origin/main)
squash vs reviewed head
The squash tree f616cbcfd3 equals git merge-tree --write-tree of its parent ae0ca66f41 with a4a378d24d. That head carries the seat review of record 6207737275.
card
closed completed by Fixes #23789
What ships. These now say what runs since PR #23418:
the three shipped step-18 reason strings;
the exportOptions TSDoc, which ships in the .d.ts;
21 step-18 header comments;
the stored-shapes row of content/docs/deployment/cli.mdx.
A stored page still loads, and its next save meets the component-props gate at the metadata save door, beside os validate, os build and os lint. The change is text only. It ships with a @objectstack/spec patch changeset.
Activity
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 10 (second shift,
batch 1) · 2026-10-16T03:26Z · the card's executable criterion. Every published sentence that still says a page's component props are not judged on the metadata save path, false since PR #23418, says what runs: the page still loads, and its next save meets the component-props gate at the save door. The shipped strings and the.d.tsTSDoc come first. One PR,Fixes #23789.Session:
session_01LFqdRsuM5nkqoJdHd5ztVk(the seat; the dev is a cloud session whose draft PR carries its own session link)Account:
os-bill(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-23789-save-path-sentencesWorktree:
objectstack-issue-23789Domain:
domain:specSeat:
domain:spec#2(seat post #18549)File surface (at
origin/main46ca793edbor later; stop on a breach and explain it in the report):reasonstrings:packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-operation-declared.ts,18.ui-object-block-grouping-config-typed.tsand18.element-text-variant-heading-subheading-retired.ts.git grep -nE "not parsed on the (metadata )?save|still saves and loads|loads and saves" origin/main -- packages/spec/src/migrationslists them.packages/spec/src/ui/component.zod.ts: theexportOptionsTSDoc only.content/docs/deployment/cli.mdx: the stored-shapes table row.@objectstack/specpatch changeset, if the gates ask for one.18.ui-page-action-row-declarative-update-rules.tsand not18.view-data-api-provider-retired.ts: PR feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784 rewrites both. ⛔ Notcontent/docs/releases/**(release-owned). ⛔ Notrefused-shapes.*(PR feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784). ⛔ No accept-set change.Container & model:
S,mode:cloud,model: default tier(dispatch-gates --tier: no path-derived mandate). Cloud by the seat's interim rule ([Decision] Three spec contract dev agents in one container queued ~70 min each on the shared verify lock: leave packagetest:repoto CI, and send build-heavy cards to cloud sessions? #23607), because the spec gates need a built closure. Review: the seat's own record. The change is text only: shipped upgrade-guide text and TSDoc, with no accept set or public surface moving.Clause-②: no
Responsibility: PR feat(lint)!: the two page component rules run on the runtime publish door (ruling B) #23418 put the component-props gate on the metadata save door, but three shipped step-18
reasonstrings, theexportOptionsTSDoc and a docs table still say the save path does not judge a page's component props | none: these strings are whatos migrate metaand the upgrade guide print | every author or AI reading the upgrade guide,os migrate metaor the.d.ts, who is told a stored page re-saves unjudgedThread-read: none
Ruling-ref: n/a (finding; the wording precedent is PR feat(lint)!: the two page component rules run on the runtime publish door (ruling B) #23418's 24 rewritten entries)
Serial constraints cleared:
batch 1, the maintainer's newest word in this seat's session. Nothing from this seat is running: fix(spec): page.print and the flow terminal-toast translations read live in the liveness ledger, so a print page is no longer warned that nothing applies it #23776 is in the merge queue, and feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784 waits on the maintainer's word with no session working.component.zod.tsin other regions (record:json,showStar), so the text merges. Whichever lands second mergesmain.objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23789, "status": "done", "branch": "claude/issue-23789-save-path-sentences", "pr": "https://github.com/objectstack-ai/objectstack/pull/23800", "session": "session_01BYTVP3rWqkXqY8sfHuWGCD", "premise_still_valid": true, "summary": "Every sentence in the claim's file surface that said a page component's `properties` is not parsed on the metadata save path now says what runs: a stored page still loads (properties is not parsed on the metadata load path), and its next save meets the component-props gate at the metadata save door, beside os validate / os build / os lint. Rewritten: 3 shipped step-18 `reason` strings (ui-page-action-row-operation-declared, ui-object-block-grouping-config-typed, element-text-variant-heading-subheading-retired), the `exportOptions` TSDoc in component.zod.ts, the stored-shapes row in content/docs/deployment/cli.mdx, and 21 step-18 entry header comments (the card counted 11; the sentence often breaks across comment lines, so the line grep under-counts). Text only, plus a @objectstack/spec patch changeset. Fact base measured on main b485122: authoring-rules.ts validateComponentProps/validateComponentTypes carry surfaces CLI_AND_RUNTIME (cli + runtime-publish) and runtimeTypes ['page']; runtime-publish is the active saveMetaItem + publishMetaItem gate (drafts ungated); the entries' own comments say the gate judges writes, never the read path.", "tests": "HEAD a4a378d2. pnpm --filter @objectstack/spec build: VERDICT command-exit 0. pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/migrations src/ui/component: Test Files 31 passed (31), Tests 1676 passed (1676). pnpm --filter @objectstack/spec typecheck: VERDICT command-exit 0. No ablation: text-only diff, no tested behaviour changed. No text pin on any rewritten string (git grep of the old phrases over *.test.ts and scripts: no hit about page props).", "gates": "Local subset on HEAD a4a378d2: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 104 commands after the changeset existed. Each run with its exit code captured to a file before any pipe: 97 exit 0 (including check:spec-changes, check:upgrade-guide, check:docs, check:api-surface, check:authorable-surface, check:doc-authoring, check:nul-bytes, check:adr-0087-registration --base origin/main, check-closing-keyword-parity); 7 exit 3 PREREQUISITE NOT MET. After building @objectstack/lint... (turbo, 4/4 tasks), 3 of those were re-run and pass: lint check:doc-formula-expressions 0, lint check:doc-security-posture 0, check:docs-transcript-drift 0. 4 remain NOT MEASURED (unbuilt workspace or shallow clone, not this diff): check-plugin-teardown-shape --self-test (fixture commit 621a4876 unreachable in the shallow clone), spec check:skill-examples, check:dual-build-cjs-loads, check:lean-entry-closure. Reconciled with --ran: 104 derived, 104 run, 0 UNRUN. check:dev-prereqs (local-only): exit 1, workspace not built (65/69 packages have no dist); NOT MEASURED, and nothing it judges is part of this diff. Criterion grep on HEAD: 3 hits (21 on main b485122), none a live claim this PR owns: content/docs/releases/v17/17-7.mdx:456 (release-owned), refused-shapes.test.ts:425 (quotes the old fate as history; PR #23784's file), 18.ui-page-action-row-declarative-update-rules.ts:26 (PR #23784 rewrites this exact line). PR #23800 check-runs at report time: Lint & Repo Gates success, Check Changeset success, Build Core success, Build Docs success, Type Check source gates / consumer gates / debt ledger success, every Lint lane success, Check PR Size success, Dogfood Regression Gate success; Test Core 1-6/6 and Type Check workspace in_progress.", "mcp_calls": "5: mcp__github__issue_read x2 (get, get_comments on #23789), mcp__github__pull_request_read x2 (get_files on #23784, get_check_runs on #23800), ToolSearch load (not a GitHub call). No MCP write tool.", "api_writes": "2 relay strokes plus git push: (1) fleet-write pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST issues/23800/assignees os-bill), run 38846594327, read back identical 7933 bytes; (2) fleet-write comment (POST /repos/objectstack-ai/objectstack/issues/23789/comments), this report. git push: empty-branch probe, commit, one --force-with-lease to fix a count in my own unshared commit message before any PR existed (all five conditions held), changeset commit.", "line_budget": "27 files, +168/-132 including the changeset, under the 3000-line threshold; 0 generated artifacts changed.", "deviations": [ "File surface: the claim listed the step-18 comments the criterion grep finds; the sweep also rewrote 21 headers in total, because the same sentence breaks across comment lines in files the line grep cannot see. All are the same family under packages/spec/src/migrations, inside the claim's declared surface by its description. PR #23784's two files were not touched.", "Commit message amended and force-with-lease pushed once (count corrected from nineteen to twenty-one), before the PR existed, on a branch only this session had pushed.", "PR body states the gate battery result lives in this report: the draft opened while the 104-command battery was still running, so the body was not PATCHed afterward." ], "files_changed": [ "content/docs/deployment/cli.mdx", "packages/spec/src/ui/component.zod.ts", ".changeset/23789-page-props-save-door-sentences.md", "packages/spec/src/migrations/entries/semantic/18.{ui-page-action-row-operation-declared, ui-object-block-grouping-config-typed, element-text-variant-heading-subheading-retired}.ts (reason)", "packages/spec/src/migrations/entries/semantic/18.{ui-action-group-menu-member-params-array-only, ui-action-group-menu-members-typed, ui-object-form-custom-fields-typed, ui-object-form-fields-names-typed, ui-object-form-members-typed, ui-object-form-sections-typed, ui-object-gantt-markers-typed, ui-object-grid-columns-typed, ui-object-grid-export-options-closed, ui-object-grid-kanban-calendar-list-members-typed, ui-object-grid-row-members-typed, ui-object-kanban-conditional-formatting-typed, ui-object-map-gantt-tree-navigation-typed, ui-object-master-detail-form-details-closed, ui-object-metric-aggregate-trend-typed, ui-object-metric-compare-to-typed, ui-object-metric-drill-down-report-typed, ui-object-metric-drill-down-typed, ui-object-timeline-items-typed, ui-object-timeline-mapping-typed, ui-record-line-items-props-closed}.ts (header comment)" ], "open_questions": [ { "question": "Assumption 3 reading (generated artifacts): do the rewritten reasons change any committed artifact?", "options": [ "A: none. registry.ts is gitignored, gen:migration-registry rewrites it on build, check:spec-changes and check:upgrade-guide are green, and git status after build + gates shows no tracked change" ], "recommendation": "A, measured, no action" }, { "question": "Published text left as it is, per the release-owned rule: content/docs/releases/v17/17-7.mdx:456-457 ('A stored page still saves and loads ... not parsed on the metadata save or load path') and the matching packages/*/CHANGELOG.md entries. The 17.7 sentence was true when 17.7 shipped (the gate moved to the save door in 18). Is an erratum wanted?", "options": [ "A: leave it. It was true for 17.7, and the 18 upgrade text (fixed here) is where an upgrading reader looks", "B: a docs-only PR adds a note to the 17.7 page" ], "recommendation": "A, on axis 4 (do not widen the requirement): the release page described its own release correctly" } ], "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landing record, PR #23800 ·
domain:specseat 2 (#18549) · sessionsession_01LFqdRsuM5nkqoJdHd5ztVk· 2026-10-16T04:42Zorigin/mainf846cc2020"docs(spec): step-18 entries, the exportOptions TSDoc and the stored-shapes row say a stored page's next save meets the component-props gate at the metadata save door (#23800)", merged through the queue at 2026-10-16T04:41Z (git branch -r --contains→origin/main)f616cbcfd3equalsgit merge-tree --write-treeof its parentae0ca66f41witha4a378d24d. That head carries the seat review of record6207737275.completedbyFixes #23789What ships. These now say what runs since PR #23418:
reasonstrings;exportOptionsTSDoc, which ships in the.d.ts;content/docs/deployment/cli.mdx.A stored page still loads, and its next save meets the component-props gate at the metadata save door, beside
os validate,os buildandos lint. The change is text only. It ships with a@objectstack/specpatch changeset.What is left.
18.ui-page-action-row-declarative-update-rules.tscarries the same sentence; PR feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784 rewrites it.The dev session
session_01BYTVP3rWqkXqY8sfHuWGCDis archived.