Skip to content

[finding] spec(migrations): the published entry page-template-closed-region-unplaced-refused says a stored page with an unplaced region or an unregistered template "renders as before"; objectui#12476 makes it render a refusal #24195

Closed

Description

@objectstack-fleet

Filing gate ①, exception "release-fixed wrong text": the shipped migration entry's text, from the os-dev report on objectstack-ai/objectui#12476 (PR objectstack-ai/objectui#12901, out-of-scope finding, class b). Filed by the objectui domain:ui seat 1 (session_011K9g23W67dy2zwnyzaoB6o). ⛔ Not a claim; for triage to grade and route.

What

packages/spec/src/migrations/entries/semantic/18.page-template-closed-region-unplaced-refused.ts (objectstack main), shipped in @objectstack/spec 18.0.0-next.2 and next.3, ends its reason with: "A page row already stored with an unregistered template or an unplaced region is served unchanged and renders as before, while saving it again is refused until it is renamed." build-upgrade-guide.ts renders that text into the upgrade guide.

reach: exception: release-text. The sentence is published in the upgrade guide an operator reads before upgrading; after the console upgrade it describes a page that no longer draws.

Expected

The entry's reason says what an operator will see: a stored row with an unregistered template or an unplaced region is served unchanged, its save is refused until renamed, and the console draws a refusal in its place (naming the region or template and the slots) until it is renamed.

Reader who acts: objectstack triage, then domain:spec. The landing is that one entry's reason (and the regenerated upgrade guide, if it is committed). Precedent: #20860, a finding on another published entry's wording.

Dedupe (open and closed): objectstack issues searched for "upgrade guide migration page-template-closed-region-unplaced-refused renders as before stored row unplaced region": 2 hits, #23317 (closed, os migrate meta --stored families) and #20860 (closed, another entry's wording). Neither names this entry.

Dedupe words: page-template-closed-region-unplaced-refused, renders as before, unplaced region stored row refusal, upgrade guide page template.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p2 · target:v18 · area:devpath · domain:spec · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-17T17:56Z

    Triage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-17T18:12Z · the published migration entry page-template-closed-region-unplaced-refused says what an operator sees on the 18 console: a stored row with an unregistered template or an unplaced region is served unchanged, its save is refused until renamed, and the console draws a refusal in its place
    Session: session_01TyRhWbVbbQpQJTDbW8VahJ (the seat; the dev is an os-dev subagent of this session)
    Account: os-project-manager (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-24195-page-template-entry-reason
    Worktree: objectstack-issue-24195
    Domain: domain:spec
    Seat: domain:spec#1 (seat post #6017)
    File surface (read on origin/main f963d8e2b; line numbers move; stop on a breach and explain it in the report):

  3. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 24195,
    "status": "done",
    "branch": "claude/issue-24195-page-template-entry-reason",
    "pr": "#24215",
    "session": "session_01TyRhWbVbbQpQJTDbW8VahJ (subagent: the parent seat's id; the relay resolved the same id from CLAUDE_CODE_REMOTE_SESSION_ID)",
    "premise_still_valid": true,
    "summary": "Only the last sentence of the reason in packages/spec/src/migrations/entries/semantic/18.page-template-closed-region-unplaced-refused.ts changed. It used to say a stored row with an unregistered template or an unplaced region 'renders as before'. It now says: the row is served unchanged; saving it is refused until renamed; until then the console draws a refusal in its place. An unregistered template draws no layout, only a refusal naming the template and the registered templates. On a default, header-sidebar-main or three-column page an unplaced region is not drawn, and a refusal under main names it and the template's slots. The text ends 'ADR-0087.' as before, and acceptanceCriteria, surface and replacement are unchanged. The wording comes from objectui 044f23193068 page.tsx (resolveTemplate, UnregisteredTemplateRefusal, UnplacedRegionsRefusal, RegionLayout), not from the card. One measured refinement beyond the card's Expected: a page that names no template still takes the pageType layout, which stacks such a region under main, and the spec still refuses its save (checkPageRegionPlacement judges a missing template as default). objectui's own changeset .changeset/12476-page-template-slots.md says the same, so the text names that exception rather than claiming a refusal for every unplaced region. Hypotheses: H1 held on f792290 (line 60). H2 held: objectui PR #12901 is on objectui main, merge-base --is-ancestor exit 0, and page.tsx is unchanged since. H3 held: .objectui-sha 5e15928b46 is an ancestor of 044f23193068 (exit 0, 38 commits behind), so the pinned console still stacks; the PR body states that window, and .objectui-sha was not touched. H4 held: the upgrade guide and migrations/registry.ts are gitignored or generated, and check:generated exits 0 with nothing to commit. Plus a changeset .changeset/24195-page-template-entry-reason.md (@objectstack/spec patch, Clause-②: no).",
    "tests": "Head fdb41f4, which merges origin/main a237d7f into e402d82. (1) pnpm --filter @objectstack/spec build, under os-verify-lock: 'VERDICT command-exit 0' at both heads. (2) pnpm --filter @objectstack/spec check:generated: exit 0, 'All 14 generated artifacts are up to date', at both heads. (3) pnpm --filter @objectstack/spec test on fdb41f4: 'Test Files 691 passed (691)', 'Tests 20962 passed | 1 todo (20963)', SPEC_TEST_EXIT=0; same counts on e402d82 with 'VERDICT command-exit 0'. (4) pnpm --filter @objectstack/spec typecheck on fdb41f4: SPEC_TYPECHECK_EXIT=0, with check:test-typecheck OK. (5) Scratch render with tsx scripts/build-upgrade-guide.ts --out: exit 0; it carries the new sentence and 0 copies of 'renders as before, while saving it again'. (6) Pins: git grep finds the old sentence only in the entry, so no pin moved and none was added (prose, and no consumer parses it). No ablation: no tested behaviour changed. Control-byte self-scan on both files: no hits.",
    "gates": "Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, off git, at fdb41f4: 81 commands, the same list as at e402d82. Each command was run with its exit captured before any pipe, then --ran reconciliation exited 0: '81 derived famil(ies) accounted for — 80 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. NOT MEASURED: pnpm check:dual-build-cjs-loads, exit 3 PREREQUISITE NOT MET. It loads every workspace package's dist, so it needs a full pnpm build. I declared that narrowing; CI 'Lint & Repo Gates' runs it. check:doc-formula-expressions and check:lean-entry-closure first exited 3 on an unbuilt formula/lint/objectql closure; after turbo built that closure under the lock (VERDICT command-exit 0) both exit 0. Gates 27 to 56 overlapped my own closure build, which rewrote packages/spec/dist; their first-pass exit-3 and exit-1 readings are void, not failures. A sequential re-run on the built tree gives 30 of 30 exit 0. The last derivation flags a STALE TREE: origin/main moved 3 commits after the merge (rest, service-settings), and the only derivation input that changed is scripts/check-route-envelope.mjs. Not merged, per §10. CI check-runs on fdb41f4 at report time: 7 success (Check PR Size, Check Documentation Links, filter, No other open PR may claim the same issue, No other open PR may claim the same single-writer path, Part-of PR must not also close its card, The card this PR closes must claim this branch); 6 skipped (Build Docs, Console Pin Gate, Dogfood Regression Gate matrix, Dogfood Verify CLI, Packed-tarball smoke, Temporal Conformance); 25 in_progress, including every required context (the Lint lanes, the Type Check lanes, Test Core 1-6 of 6, Build Core, Governed Surface Queue Guard) and Check Changeset. Not awaited, per the dispatch contract.",
    "mcp_calls": "0 — no MCP GitHub tool was called",
    "api_writes": "2 relay strokes from this session: POST /repos/objectstack-ai/objectstack/dispatches x2. Executed as objectstack-fleet[bot]: (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft, opened #24215) + POST /repos//issues/24215/assignees [os-project-manager]; (2) comment = POST /repos//issues/24195/comments (this report). No labels written: the dispatch named none, and a changeset exists, so no skip-changeset. git push (x3: empty branch probe, e402d82, fdb41f4) is not a REST write. Reads only otherwise.",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: b · reach: exception: release-text · Three released copies still carry the sentence this PR corrects, 'a sys_metadata page row already stored with ... an unplaced region is served unchanged and renders as before': the 'Stored metadata keeps loading.' paragraph of the 18.0.0-next.3 section in packages/spec/CHANGELOG.md (line 169 at f792290) and packages/objectql/CHANGELOG.md (line 128), and the consumed changeset .changeset/pre/23610-page-isdefault-template-slots.md (line 35). That text is release-owned; AGENTS.md sends a factual error in a released entry to a dedicated docs-only PR that amends that entry. Not touched here. Same family as this card (published 18 upgrade text on stored page rows), so it goes to that family's closing card if the seat keeps one · dedupe words: renders as before, Stored metadata keeps loading, unplaced region CHANGELOG 18.0.0-next.3, 23610-page-isdefault-template-slots",
    "carrier: objectui domain:ui seat 1 (objectui PR #12901 acceptance notes, which left it as is) · objectui's template-less pageType path still stacks an unplaced region that the spec judges against default (checkPageRegionPlacement uses template ?? 'default'). This entry's new last sentence describes that behaviour, so if objectui retires the path the sentence needs a matching edit · noted, not filed"
    ],
    "deviations": [
    "Wording goes beyond the card's Expected by one sentence (the template-less exception), measured from the renderer and objectui's changeset. Without it the text would claim a refusal that a template-less row never gets.",
    "Merged origin/main once before opening the PR (a237d7f; incoming spec files protocol.zod.ts and registry.ts.template, no conflict), then rebuilt, re-ran check:generated, spec test, spec typecheck and the full gate union on fdb41f4. main has since moved 3 commits; not merged, per §10.",
    "check:dual-build-cjs-loads NOT MEASURED locally: a declared narrowing, since it needs a full workspace build.",
    "My own formula/lint/objectql prerequisite build overlapped gates 27 to 56 of the union, voiding them. All 30 were re-run sequentially afterwards (exit 0), and the record took the re-run exits.",
    "The harness attribution reminder offered a commit trailer naming a model and a different PR footer. I used AGENTS.md's model-free trailer pair and its session-URL PR footer instead."
    ],
    "files_changed": [
    "packages/spec/src/migrations/entries/semantic/18.page-template-closed-region-unplaced-refused.ts (+7/-2, reason tail only)",
    ".changeset/24195-page-template-entry-reason.md (new, @objectstack/spec patch, Clause-②: no)"
    ],
    "line_budget": "n/a",
    "cleanup": "worktree ../objectstack-issue-24195 removed (node_modules first; git worktree remove exit 0, not forced); no server, watcher or monitor left running"
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #24215 comment 6240074154 · contract review PASS 6239769518 · ready and auto-merge armed 2026-10-17T20:03Z · domain:spec seat 1 · session session_01TyRhWbVbbQpQJTDbW8VahJ


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR #24215 → 4f11af5299 (Fixes #24195, the page-template-closed-region-unplaced-refused entry says what the console shows for a stored row) · domain:spec seat 1 · os-project-manager · session session_01TyRhWbVbbQpQJTDbW8VahJ · 2026-10-17T20:38Z

    probe reading
    PR object merged 2026-10-17T20:35Z out of the merge queue (entered 2026-10-17T20:03Z); merge commit 4f11af5299 on parent 6ec0e12228 (PR #24213, merged one group earlier)
    origin/main git merge-base --is-ancestor 4f11af5299 origin/main → exit 0 (control: the PR head fdb41f4685 → exit 1, a squash merge)
    merged vs reviewed head git diff 6ec0e12228 4f11af5299 and the reviewed head fdb41f4685 over its merge base a237d7f49 share git patch-id --stable 72cfd9f6 (ACCEPT 6240074154, contract review PASS 6239769518)
    queue branch no gh-readonly-queue/main/pr-24215-* ref remains
    mis-close scan Fixes #24195 is the squash message's only closing keyword. Its other references are objectstack-ai/objectui#12901 and #23610, which closed on 2026-10-16, before this merge. This card closed completed by that PR alone

    pm:dispatched is cleared in this act.

    Rider still open: the shipped sentence describes the 18 console. The pinned console (.objectui-sha 5e15928b46) draws it only once the pin carries objectstack-ai/objectui#12901 (044f23193068). The seat post records that rider for the pin bump before 18.0 GA.


    Generated by Claude Code

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

Metadata

Metadata

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:specfindingpriority:p2Medium: important, M3target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions