Skip to content

page: delete checkPageComponentViewData once PR #23418 moves the component-props rule onto the save door — ruling 6161173492 item 6, the follow-up for #23357 #23447

Open

Description

@objectstack-fleet

Filing gate ③, a ruled task: ruling 6161173492 on #23388 (letter B, the maintainer's 「23388 B 是不是最简单?」), item 6, verbatim:

  1. page: a stored page component's data can still carry the retired view api source — the props gate runs at the CLI doors only, so the runtime save door and boot accept it, and the renderer still sends it with its stored headers #23357's narrow judge proceeds as triaged and does not wait. Once this PR lands, that judge overlaps the general rule and is deleted (one operation, two implementations: the governed side wins), in page: a stored page component's data can still carry the retired view api source — the props gate runs at the CLI doors only, so the runtime save door and boot accept it, and the renderer still sends it with its stored headers #23357's PR if it is still open, else in a one-line follow-up.

Filed by domain:spec seat 1 (#6017) · huangyiirene · session session_01YRp5z4kK6vgYkrdH97ztsy. ⛔ Not a claim. This is the follow-up that sentence names. #23357's PR #23419 lands first, so the deletion cannot ride it.

Blocked-by: #23388

Reader who acts: the domain:spec seat that claims this card once PR #23418 (#23388) has landed. Its PR deletes the narrow judge and rewrites the sentences the general rule makes false. Seat 3's pointer 6163363165 on #23357 names the second half.

What the follow-up does

  1. Delete the narrow judge. That means checkPageComponentViewData and VIEW_DATA_SOURCE_COMPONENT_TYPES in packages/spec/src/ui/page.zod.ts, its .superRefine on PageSchema, and its line in object-refinement-check-exports.test.ts.
    • It also means its published export from @objectstack/spec/ui, with the api-surface/ui.json and export-origins/ui.json lines regenerated.
    • Removing the export narrows the public surface. That is why this card carries target:v18: after 18 GA the removal waits for 19.
  2. Rewrite every sentence that the general rule at the save door makes false, "the component-props gate runs at the CLI doors only" and its kin:
  3. Re-measure the stored-page fate before rewriting it. Today the fate text says a stored page with the binding "still loads and is served, registered under [metadata_spec_invalid] with the refusal in the _diagnostics of every read". That diagnosis comes from the PageSchema parse, which this card removes. The props rule at 'runtime-publish' judges the next save only.
  4. Pins:
    • the save door still refuses a page component's data of provider: 'api' on the four object-* types, now through the props rule, with the retirement's prescription;
    • the object/value control still saves.

Dedupe

MCP search_issues on objectstack-ai/objectstack, closed included:


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    First touch and unlock: pm:blocked → pm:queue; grade p2 → p1 by the protocol-first class · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-15T23:55Z

    Read in this act: the body in full (0 comments), #23388's landing record, and PRs #23418 and #23419.

    ⛔ Not a claim.

  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 9 (second shift, batch 3) · 2026-10-16T00:49Z · ruling 6161173492 item 6, the follow-up for #23357, unlocked by triage 6204768090. Delete the narrow judge (checkPageComponentViewData, VIEW_DATA_SOURCE_COMPONENT_TYPES, its .superRefine on PageSchema and its published export), now that PR #23418 runs the general component-props rule at the save door. Rewrite every sentence that rule makes false, after re-measuring the stored-page fate. One PR, Fixes #23447.
    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-23447-delete-page-view-data-judge
    Worktree: objectstack-issue-23447
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface (at origin/main 29c7157af4 or later; stop on a breach and explain it in the report):

  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23447,
      "status": "done",
      "branch": "claude/issue-23447-delete-page-view-data-judge",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23784",
      "session": "session_016QpnMQNQ3TQ8mvWiHJwN2j",
      "premise_still_valid": true,
      "summary": "Deleted checkPageComponentViewData, VIEW_DATA_SOURCE_COMPONENT_TYPES, the PageSchema superRefine and the @objectstack/spec/ui export (api-surface/ui.json and export-origins/ui.json regenerated, one line each). Rewrote the sentences named in item 2 (refused-shapes.ts docblocks and COMPONENT_API_BINDING_FATE, 18.view-data-api-provider-retired acceptanceCriteria, 18.ui-page-action-row-declarative-update-rules reason, the validate-component-props.ts header, the view.zod.ts comment), using the stored-page fate measured beforehand. Moved the save-door pins onto the props rule in protocol.runtime-authoring-gate.test.ts; deleted page-component-view-data.test.ts and the #23357 block of protocol.save-union-issues.test.ts. Hypothesis 1 held: validateComponentProps gives identical findings before and after on 10 bodies (rule component-props-invalid, the prescription, same nested and slot reach). Hypothesis 2 measured: defineStack, definePage and PageSchema now accept the shape, and no spec-side replacement was added. Hypothesis 3 measured: boot invalid 1 -> 0 with no metadata_spec_invalid warn, read _diagnostics.valid false -> true, next save still 422 now by component-props-invalid.",
      "tests": "HEAD 2aaff034. Door readings before (29c7157af4) -> after: PageSchema custom refusal -> accept; os validate (built CLI) exit 1 defineStack refusal -> exit 1 component-props-invalid at pages[0].regions[0].components[0].properties.data.provider (control exit 0); os build exit 2 -> exit 1 same finding (control exit 0); saveMetaItem 422 failed spec validation code custom, no rulesRun -> 422 failed author-time validation rule component-props-invalid, rulesRun has validateComponentProps; loadMetaFromDb loaded 1 invalid 1 + [metadata_spec_invalid] warn -> loaded 1 invalid 0, no warn; getMetaItem _diagnostics.valid false -> true. metadata-protocol pnpm test 236 files / 20580 passed + typecheck exit 0; lint pnpm test 139 files / 6771 passed + typecheck exit 0; spec full pnpm test showed 1 failure (a missed #23357 half in refused-shapes.test.ts), fixed, then refused-shapes + object-refinement-check-exports 250/250 and spec typecheck exit 0. Ablation via ablation-replace.mjs on packages/lint/src/authoring-rules.ts, validateComponentProps surfaces -> cli only with runtimeTypes dropped: lint rebuilt, dist-preflight marker present in 4 built files, 6 refusal pins red, control green. Restore: blob matched the HEAD hash, rebuilt, preflight --absent passed with a clean tree, file 145/145 green. The first ablation attempt was a no-op: a void-expression marker that esbuild dropped (preflight caught it). It was redone with a surviving marker.",
      "gates": "Local: dispatch-gates --commands --repo objectstack-ai/objectstack derived 90 commands. Each was run with its exit code recorded before any pipe. First pass: 83 exit 0. Five spec dist gates exited 3 or 1 because the spec dist predated a later test-file edit; after rebuilding spec, check:api-surface, check:dual-source-exports, check:entry-nameability, check:exported-any and check:generated all exit 0. check-plugin-teardown-shape --self-test exited 3 on the shallow clone; after fetching its pinned fixture commit 621a4876 it exits 0. check:dual-build-cjs-loads exit 3: it needs every package's dist and was not run locally (left to CI). --ran reconciliation: 90 derived, 89 run, 1 NOT-MEASURED (derived from exit 3), 0 UNRUN, exit 0. check:adr-0087-registration: BREAKING+bang+clause-2-narrowing, not-required (already-registered). CI on PR #23784 at report time: 24 check-runs; 'No other open PR may claim the same issue' success, 'Packed-tarball smoke (opt-in)' skipped, the other 22 in_progress, among them Lint, Type Check, Check Changeset and Governed Surface Queue Guard.",
      "mcp_calls": "3 — issue_read get, issue_read get_comments, pull_request_read get_check_runs (all reads)",
      "api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/23784/assignees os-bill); this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/23447/comments). Plus git push (not REST). label-write: 0, since the dispatch named no label",
      "line_budget": "PR diff vs origin/main: 13 files, see files_changed; no skills/** touched",
      "deviations": [
        "The CLI probe fixtures (packages/cli/.tmp-23447) were committed in ee76df23 by mistake and removed in the next commit, 26c3fee4. The net PR diff does not carry them.",
        "The dispatch named .changeset/pre/23357-* as the released note. On main the file is .changeset/23357-page-component-view-data-api-refused.md, still pending; the Version Packages PR #23481 has it under .changeset/pre/. It was not edited. Its 'refused by PageSchema' and stored-page lines describe the behaviour this PR removes, and this PR's changeset states the new behaviour door by door.",
        "The pins live in protocol.runtime-authoring-gate.test.ts (the #23388 harness, which has the loadMetaFromDb/getMetaItem rig), not in protocol.save-union-issues.test.ts, because the refusal is no longer a parse-union issue. Both files are in the claimed surface.",
        "The changeset adds '@objectstack/lint': patch (text only: the validate-component-props.ts header) beside '@objectstack/spec': minor."
      ],
      "files_changed": [
        ".changeset/23447-page-component-view-data-judge-deleted.md",
        "packages/lint/src/validate-component-props.ts",
        "packages/metadata-protocol/src/protocol.runtime-authoring-gate.test.ts",
        "packages/metadata-protocol/src/protocol.save-union-issues.test.ts",
        "packages/spec/api-surface/ui.json",
        "packages/spec/export-origins/ui.json",
        "packages/spec/src/conversions/refused-shapes.test.ts",
        "packages/spec/src/conversions/refused-shapes.ts",
        "packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-declarative-update-rules.ts",
        "packages/spec/src/migrations/entries/semantic/18.view-data-api-provider-retired.ts",
        "packages/spec/src/ui/object-refinement-check-exports.test.ts",
        "packages/spec/src/ui/page-component-view-data.test.ts (deleted)",
        "packages/spec/src/ui/page.zod.ts",
        "packages/spec/src/ui/view.zod.ts"
      ],
      "open_questions": [
        {
          "question": "PR #23418 made the sentence 'a page's properties is not parsed on the metadata save or load path' false in places outside this card's file surface: the shipped reason of 18.ui-page-action-row-operation-declared.ts, 16 other step-18 entry comments, and the exportOptions TSDoc in component.zod.ts. Who rewrites them?",
          "options": [
            "A: a follow-up card in domain:spec rewrites the save half in one sweep (the load half stays true)",
            "B: leave the comments, fix only the shipped reason string"
          ],
          "recommendation": "A: the shipped reason is release text, and the comments are what the next AI author reads as the contract, which is the AI-error axis. One mechanical sweep, no new gate."
        },
        {
          "question": "The pending .changeset/23357-page-component-view-data-api-refused.md (already consumed into the Version Packages PR) states the PageSchema refusal and the [metadata_spec_invalid] stored-page fate that this PR removes. Amend it, or let this PR's changeset supersede it in the same release?",
          "options": [
            "A: leave it; both changesets ship in 18 and this one states the final door table",
            "B: a docs-only PR amends the 23357 note before release"
          ],
          "recommendation": "A, if both ship in the same release (the reader sees both entries); otherwise B, per the CHANGELOG amend rule."
        }
      ],
      "out_of_scope_findings": [
        "carrier: none · noted in PR Acceptance notes: 18.ui-page-action-row-operation-declared.ts reason + 16 step-18 entry comments + component.zod.ts exportOptions TSDoc say component properties are not parsed on the save path, false since PR #23418 · dedupe words: save or load path, component-props gate runtime door, step-18 entry reason stale"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23447,
      "status": "blocked",
      "branch": "claude/issue-23447-delete-page-view-data-judge",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23784",
      "session": "session_016QpnMQNQ3TQ8mvWiHJwN2j",
      "premise_still_valid": false,
      "summary": "Patch round on PR #23784, head 39977e95. Done: (1) merged origin/main 43567a8f, PR #23708 and PR #23800 included, through scripts/pm/os-regen-merge.sh; (3) dropped '@objectstack/lint': patch from this PR's changeset, no changeset gate asking for it. BLOCKED: (2), the DELIBERATE CORRECTION of .changeset/23357-page-component-view-data-api-refused.md. Its premise is false at the merged head. The Version Packages PR #23481 landed on main as e5136ff1 at 02:12Z and moved the note to .changeset/pre/23357-page-component-view-data-api-refused.md. packages/spec/CHANGELOG.md now carries it under '## 18.0.0-next.2' (line 159, the 05ab9ef entry, including the 'checkPageComponentViewData is exported ... a mirror ... can re-attach it' sentence). npm dist-tags answer next = 18.0.0-next.2, so that note is RELEASED text. Maintainer ruling 6210183493 authorizes correcting it because it is 'still pending: packages/spec/CHANGELOG.md carries no 23357 entry', which no longer holds. The dispatch forbids .changeset/pre/**, and AGENTS.md routes a released CHANGELOG entry to a dedicated docs-only amendment, never a rider on a code PR. I made no edit there, and the PR body was not PATCHed (see open_questions).",
      "merge": {
        "packages/spec/src/ui/page.zod.ts": "Conflict at the PageSchema superRefine chain. Kept main's checkPageDefaultPlacement and checkPageRegionPlacement (PR #23708, #23610 ruling A), dropped the deleted checkPageComponentViewData. The trailing comment reads 'the six checks above', and the props-bag sentence stays.",
        "packages/spec/src/ui/object-refinement-check-exports.test.ts": "5 hunks: main's side in each, minus every checkPageComponentViewData line, i.e. the import, the view-data fixture block (main's #23610 fixtures kept), the MIRRORED row and the barrel row. The leg-3 'declares all six exports' loop names the 4 old checks plus the 2 new ones. This PR's 0-declaration, 0-attachment and barrel-absence pins are kept.",
        "packages/spec/api-surface/ui.json, packages/spec/export-origins/ui.json": "os-regen driver, not text-merged. Step 2 took main's side, the merge commit was the deferral, then rebuild + gen:api-surface + gen:export-origins on the merged tree, committed as 392224ea. The deferral was discharged. Delta vs origin/main: exactly one removed line in each (checkPageComponentViewData). main's 9 new ui exports are present.",
        "packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-declarative-update-rules.ts": "No conflict: PR #23800 left this line to this PR. Aligned with #23800's wording precedent: '... the load path runs no such gate, so a stored page still loads and its next save meets the component-props gate at the metadata save door.'"
      },
      "lint_line": "Dropped. Gate readings on 39977e95: check-empty-changeset --base origin/main exit 0 ('No empty-frontmatter changeset introduced', 'No changeset from the merge base modified or deleted'); check-adr-0087-registration exit 0 ([BREAKING+bang+clause-2-narrowing] not-required (already-registered)); check-changeset-no-major exit 0; check:changeset-gate-self-tests exit 0. The note's last sentence about the lint text-only change is removed too.",
      "tests": "HEAD 39977e95, merged tree. @objectstack/spec pnpm test: 682 files passed (1 skipped), 20873 tests passed; spec typecheck exit 0. @objectstack/lint pnpm test: 140 files, 6781 passed; typecheck exit 0. @objectstack/metadata-protocol: protocol.runtime-authoring-gate.test.ts + protocol.save-union-issues.test.ts 170/170; typecheck exit 0. git merge-tree --write-tree origin/main HEAD: exit 0.",
      "gates": "dispatch-gates --commands on 39977e95: 90 commands (same set as round 1), each run with its exit code recorded before any pipe. First pass: 82 exit 0. The 7 refusals: spec api-surface, browser-reachable-entries, dual-source-exports, entry-nameability and exported-any exited 3, and check:generated exited 1, because the spec dist predated my last src edit; lean-entry-closure exited 3 because objectql/core dist was missing after the merge. After rebuilding spec and the objectql closure, all 7 exit 0. check:dual-build-cjs-loads exit 3 (needs every package's dist), not run locally and left to CI. --ran: 90 derived, 89 run, 1 NOT-MEASURED, 0 UNRUN, exit 0. CI on 39977e95: not read in this round.",
      "mcp_calls": "1 this round: pull_request_read get_comments on #23784 (read). Round total 4.",
      "api_writes": "1 this round: this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/23447/comments via the fleet-write relay). Plus git push. No issue_patch on the PR body. No label write.",
      "deviations": [
        "Item 2 not done: its premise (the 23357 note pending) is false on the merged head. Evidence is in summary.",
        "PR body not PATCHed although the dispatch granted one issue_patch: .claude/agents/os-dev.md says the dev writes the PR body once, at pr_create, and never PATCHes it; later changes are named in the report and written by the seat. The role file wins on conflict. The body edit is spelled out in open_questions[1] for the seat.",
        "18.ui-page-action-row-declarative-update-rules.ts got a further phrasing alignment, as the dispatch asked."
      ],
      "files_changed": [
        ".changeset/23447-page-component-view-data-judge-deleted.md (lint line + its sentence removed)",
        "packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-declarative-update-rules.ts (phrasing aligned)",
        "merge commit 4087b452: page.zod.ts, object-refinement-check-exports.test.ts resolved",
        "392224ea: packages/spec/api-surface/ui.json, packages/spec/export-origins/ui.json regenerated"
      ],
      "open_questions": [
        {
          "question": "The 23357 note is now released (CHANGELOG 18.0.0-next.2, npm next). Ruling 6210183493 covered a pending note. Which route corrects the four false sentences?",
          "options": [
            "A: a dedicated docs-only PR amends the released 18.0.0-next.2 entry in packages/spec/CHANGELOG.md (and, if the release tooling reads it, .changeset/pre/23357-*), per AGENTS.md's CHANGELOG rule; #23784 lands as is",
            "B: the maintainer extends the ruling to edit .changeset/pre/23357-* and/or CHANGELOG.md inside #23784 (reverses two standing rules: the dispatch's ban on .changeset/pre/** and AGENTS.md's 'never in a code PR')",
            "C: leave the released entry; this PR's changeset (next release) states the final door table, and an upgrading agent reads both"
          ],
          "recommendation": "A. The entry is published text, and AGENTS.md says a factual error in a released entry is amended in a dedicated docs-only PR, so the agent grepping the tombstoned name lands on a corrected entry. It keeps #23784 a code PR, adds no gate, and needs the maintainer's word only for the amendment PR. C leaves the false 're-attach it' sentence in the published CHANGELOG."
        },
        {
          "question": "PR body edit for the seat (the dev does not PATCH): what should change in #23784's body?",
          "options": [
            "Seat applies: in '## Verification', replace the head reference with 39977e95 (merged with origin/main 43567a8f) and these readings: spec 682 files / 20873 tests, lint 140 / 6781, metadata-protocol pin files 170/170, typechecks exit 0, gates 90 derived / 89 run / 1 NOT-MEASURED. In '## Acceptance notes', replace the 23357 bullet with: the 23357 note was released in @objectstack/spec 18.0.0-next.2 (CHANGELOG line 159) while this PR waited, so its correction moves to a docs-only amendment (see #23447). Add a '## Merge with main' line naming the page.zod.ts and object-refinement-check-exports.test.ts resolutions and the regenerated shards. No '## DELIBERATE CORRECTION' section, since no foreign changeset is edited; Check Changeset should stay green."
          ],
          "recommendation": "Apply as written."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23447,
      "status": "blocked",
      "branch": "claude/issue-23447-delete-page-view-data-judge",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23784",
      "session": "session_016QpnMQNQ3TQ8mvWiHJwN2j",
      "premise_still_valid": true,
      "summary": "Patch round 2, head 40624b32. I read and accepted supersession record 6210987382: #23418 (d0c09e47) did edit consumed .changeset/pre/23147-* in place, and release.yml:503 says GA re-consumes pre/. BLOCKED: the in-place edit of .changeset/pre/23357-page-component-view-data-api-refused.md was refused by this session's auto-mode permission classifier, reason 'Modify Shared Resources'. No byte of the file changed (git status clean before the next commit), and I did not route around the refusal with another tool. Below are the exact sentence-by-sentence rewrites, each measured at this head, for the seat (or a session with the permission) to apply verbatim. Done: one measurement-driven fix in this PR's own text. The console pin has carried objectui#12325 since PR #23709 (53e3638e: 'the view-level provider: api data source is no longer read anywhere in objectui', objectui 524136ea7). So COMPONENT_API_BINDING_FATE's 'the console keeps reading it' was false, and it now reads 'the console no longer reads the retired arm, so it sends no request' (40624b32).",
      "rewrites_for_23357": [
        {
          "where": "title line",
          "from": "feat(spec)!: the page parse refuses a page component's `data` prop that names the retired view-level `api` data source, so the Studio, REST and MCP save door refuses it as `os validate` does (#23357)",
          "to": "feat(spec)!: a page component's `data` prop that names the retired view-level `api` data source is refused at the Studio, REST and MCP save door as `os validate` refuses it (#23357)"
        },
        {
          "where": "BREAKING paragraph (marker kept)",
          "from": "... is now refused by `PageSchema`, at the component's `properties.data.provider`, with the retirement's own prescription. ... but the page parse leaves a component's `properties` an open record, and the component-props gate that refused the binding runs at the CLI doors only. A page saved through the Studio, REST or MCP therefore kept the binding, with its request headers, and the console kept sending it.",
          "to": "**BREAKING** — a page whose `object-grid`, `object-map`, `object-gantt` or `object-tree` component carries `properties.data` with `provider: 'api'` is refused at the component's `properties.data.provider`, with the retirement's own prescription, by the component-props gate (`validateComponentProps`, `@objectstack/lint`, rule `component-props-invalid`) at `os validate`, `os build`, `os lint` and the metadata save door. Those four components take a view data source (`ViewDataSchema`) as `data`, so the step-18 retirement of the view-level `api` source reached them through the same schema. The page parse leaves a component's `properties` an open record, and before 18 the component-props gate ran at the CLI doors only, so a page saved through the Studio, REST or MCP kept the binding, with its request headers, and the console kept sending it."
        },
        {
          "where": "'The judge is the retirement's own' paragraph",
          "from": "The judge is the retirement's own: `ViewDataSchema` parses the component's `data`, and the prescription it raises is raised by the page parse unchanged (... `code` is `custom` ...). ... It judges nothing else in the bag: another `data` provider, a component whose `data` is a row array (...), a custom or registered type with no props row, and a component's own `dataSource` binding are untouched. `checkPageComponentViewData` is exported from `@objectstack/spec/ui`, like the four other `PageSchema` checks, so a mirror built from `PageSchema.shape` can re-attach it.",
          "to": "The judge is the retirement's own: the component's `ComponentPropsMap` row parses its `data` with `ViewDataSchema`, and the finding carries that schema's prescription unchanged, one text for a view and a page. It reaches every component under `regions` and `slots`, at any depth, a component nested in a `page:tabs` item or a container included. Only those four types meet this prescription: a component whose `data` is a row array (`object-kanban`, `object-calendar`, `object-timeline`) is judged by its own row and refused for its shape, a custom or registered type with no props row is not judged, and a component's own `dataSource` binding is untouched. (The checkPageComponentViewData sentence is deleted.)"
        },
        {
          "where": "FROM -> TO table header (rows kept)",
          "from": "| you wrote (accepted by the page parse until this change) | write instead |",
          "to": "| you wrote (saved by the Studio, REST and MCP door before 18) | write instead |"
        },
        {
          "where": "'What an author who still writes it sees.'",
          "from": "`definePage()`, `defineStack({ pages })`, `os validate` and `PUT /api/v1/meta/page/:name` refuse the page at `regions[i].components[j].properties.data.provider` (or the nested or slot position) with the prescription. At the save door that is `422 INVALID_METADATA`, nothing persisted.",
          "to": "`os validate`, `os build`, `os lint` and `PUT /api/v1/meta/page/:name` refuse the page at `pages[i].regions[j].components[k].properties.data.provider` (or the nested or slot position), rule `component-props-invalid`, with the prescription. At the save door that is `422 INVALID_METADATA`, nothing persisted. `definePage()` and `defineStack({ pages })` run no authoring rule and accept the page."
        },
        {
          "where": "stored-page paragraph (os migrate sentence kept)",
          "from": "Left as stored, the page still loads and is served, registered under `[metadata_spec_invalid]` with the refusal in the `_diagnostics` of every read, and its next save is refused with 422. The console stops sending the request when its own reader of the retired arm is deleted (objectstack-ai/objectui#12325); until then a stored page keeps sending it.",
          "to": "Left as stored, the page still loads and is served as stored, with no read diagnostic for the binding, and its next save is refused with 422 by the component-props gate. The console no longer reads the retired arm (objectstack-ai/objectui#12325), so a stored page does not send the request."
        },
        {
          "where": "ADR-0087 marker reason (token 'not-required (already-registered view-data-api-provider-retired)' kept)",
          "from": "this change makes the page parse refuse what that entry retired, and its acceptance criteria now name the page parse beside the component-props gate",
          "to": "the component-props gate refuses what that entry retired at the CLI doors and the save door, and its acceptance criteria name that gate"
        }
      ],
      "measured_for_rewrites": "On this head through validateComponentProps: object-grid with node dataSource provider api (same-origin) gives no finding; a custom type with data api gives no finding; object-kanban, object-calendar and object-timeline with data api give component-props-invalid at properties.data ('expected array'), not this prescription; object-grid with data provider rest gives component-props-invalid with the union discriminator text. Door readings as pinned in this PR: boot loaded 1 / invalid 0 with no metadata_spec_invalid warn; read _diagnostics.valid true; next save 422 INVALID_METADATA by component-props-invalid. objectui#12325 is in the console pin since 53e3638e.",
      "deliberate_correction_section_draft": "## DELIBERATE CORRECTION\n\nFile: `.changeset/pre/23357-page-component-view-data-api-refused.md`. The note was consumed by `18.0.0-next.2`, and the 18.0.0 GA entry is compiled from `.changeset/pre/` again. Its sentences that this PR makes false are rewritten in place, each against this PR's head. The frontmatter, the `Clause-②:` line, the `**BREAKING**` marker, the FROM → TO rows, the one-line fix, the `os migrate meta --stored` sentence and the ADR-0087 disposition token are unchanged. `packages/spec/CHANGELOG.md` (the published next.2 entry) is not touched.\n\n(the seven from → to rows above)\n\nAuthority: the maintainer's 「同意」, recorded in `6210183493`, as applied by `6210987382`, the record that supersedes `6210952492`. The precedent is PR #23418's `6203578381`. `Check Changeset` reds by design on this edit; it is not a required context and runs only on `pull_request`.",
      "tests": "HEAD 40624b32: spec build, then refused-shapes.test.ts + object-refinement-check-exports.test.ts 284/284; check:generated exit 0; check:doc-authoring exit 0. Round-1 suites on 39977e95 (spec 20873, lint 6781, metadata-protocol pins 170/170, typechecks) are not re-run; the only delta since then is one runtime string in refused-shapes.ts.",
      "gates": "dispatch-gates --commands on 40624b32: 90 commands, the same set as before. Run with exit codes recorded before any pipe: 88 exit 0; check:lean-entry-closure exited 3 (objectql/core dist missing in the fresh worktree) and exits 0 after building the objectql closure; check:dual-build-cjs-loads exit 3, not run locally, left to CI. --ran: 90 derived, 89 run, 1 NOT-MEASURED, 0 UNRUN, exit 0. The changeset gates (check-empty-changeset, check-adr-0087-registration, check-changeset-no-major) are exit 0 within that set, since no foreign changeset is edited.",
      "mcp_calls": "1 this round (pull_request_read get_comments on #23784); 5 in total",
      "api_writes": "1 this round: this os-dev-report comment via the fleet-write relay. Plus git push of 40624b32.",
      "deviations": [
        "Item (the in-place 23357 correction) not done: the permission classifier refused the edit (Modify Shared Resources). A follow-up read-only grep in the same worktree was refused too, and the Grep tool then answered. The rewrites are in rewrites_for_23357."
      ],
      "open_questions": [
        {
          "question": "Who applies the 23357 rewrites, given this session's classifier refuses edits to .changeset/pre/**?",
          "options": [
            "A: the seat applies rewrites_for_23357 verbatim to .changeset/pre/23357-* on this branch and writes the DELIBERATE CORRECTION section",
            "B: the maintainer adds a permission rule for this session and re-sends the patch round"
          ],
          "recommendation": "A: the text is final and measured. Applying it is mechanical, and it keeps the denied action with an actor who holds the maintainer's word."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

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