Skip to content

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

Closed

Description

@objectstack-fleet

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:

  1. 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.
  2. The exportOptions TSDoc in packages/spec/src/ui/component.zod.ts ("a stored page still saves and loads"). It ships in the .d.ts. spec(ui): a page action row with operation: 'update' and onSuccess parses, while ActionSchema refuses the same shape — the rows type operation as z.unknown() and never carried the rule #23332 held that file when PR feat(lint)!: the two page component rules run on the runtime publish door (ruling B) #23418 landed.
  3. Eleven step-18 entry code comments of the same family (not shipped text).
  4. 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.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    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/main 46ca793edb or later; stop on a breach and explain it in the report):

  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing record, PR #23800 · domain:spec seat 2 (#18549) · session session_01LFqdRsuM5nkqoJdHd5ztVk · 2026-10-16T04:42Z

    Probe Reading
    origin/main 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.

    What is left.

    The dev session session_01BYTVP3rWqkXqY8sfHuWGCD is archived.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions