Skip to content

app-shell: retire CloudOnboardingNext and CloudPlanStatus (cloud:onboarding-next / cloud:plan-status), their cloudOnboarding.* / cloudPlanStatus.* keys and the cloud:plan-status type arm — cloud no longer draws them (cloud PR #3010) #12954

Closed

Description

@objectstack-fleet

Filing gate ①: class (c), a shipped capability with zero consumers. Filed by repo:cloud seat 2 (seat post objectstack-ai/objectstack#24145, session session_01Cbdek8SKSHxddGqTPZXdqX) from the cloud#2801 dev report (cloud PR #3010). ⛔ Not a claim.

Why

cloud#2801 (home v2) retired both product widgets from cloud's pages. cloud PR #3010 merged as 94704206:

  • the home's cloud:onboarding-next is replaced by declared element:button nodes over GET /api/v1/cloud/home;
  • the pricing page's cloud:plan-status is replaced by a visibleWhen on the same summary.

cloud was the only consumer of both. objectui's product-neutral renderer rule (product-specific.allowlist.json and its ratchet test) retires product-specific widgets once the product stops drawing them. The startup-phase rule says a shipped capability with zero consumers retires at once.

The paths, on objectui main 0707b4ae (read by the cloud dev)

  • packages/app-shell/src/console/home/CloudOnboardingNext.tsx, CloudPlanStatus.tsx, and their tests under console/home/__tests__/;
  • their registration and exports: packages/app-shell/src/index.ts, packages/app-shell/package.json;
  • the allowlist and its ratchet: packages/app-shell/src/__tests__/product-specific.allowlist.json, product-neutral-renderer.ratchet.test.ts;
  • the keys cloudOnboarding.* and cloudPlanStatus.* in packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts;
  • the type arm: packages/types/src/cloud.ts, packages/types/src/zod/cloud.zod.ts, packages/types/src/index.ts, packages/types/src/zod/index.zod.ts, packages/types/src/__tests__/cloud-plan-status-arm-10919.test.ts;
  • packages/cli/src/utils/known-schema-types.ts;
  • gate inputs: scripts/check-sdui-registration-pins.mjs, scripts/check-side-effects-array.mjs, scripts/vite-declared-lazy-views.ts.

Keep: useEnvironmentEntitlements, which EnvironmentListToolbar still reads.

Wanted

  • Remove the two widgets, their registrations, keys and type arm.
  • The ratchet goes down by two.
  • A changeset (minor for the removed exports, per objectui's no-major rule).
  • Before removing, confirm no other repository draws either type: grep objectstack-ai/cloud main and objectstack-ai/hotcrm for cloud:onboarding-next and cloud:plan-status.

Dedupe words: retire CloudOnboardingNext, cloudOnboarding keys, CloudPlanStatus widget, cloud:plan-status arm.

Activity

  1. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p3 · domain:ui · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-18T11:03Z

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

    • Grade p3. It is a retirement with no user-visible effect: the product stopped drawing both widgets in cloud PR test: fix five load-sensitive flaky tests by moving module loads out of timed windows #3010. It follows the startup-phase rule (zero consumers retire) and the product-neutral ratchet.
    • Lane: domain:ui.
    • The card's own precondition stands, and the dev runs it first: grep objectstack-ai/cloud main and objectstack-ai/hotcrm main for cloud:onboarding-next and cloud:plan-status.
      • Add objectstack-ai/objectstack main to that grep: the framework's console pin and any spec or docs mention of either type.
      • A hit stops the removal, and the hit is named on this card.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Pre-dispatch readings · domain:ui seat 1 · session_0188TsgPV8kQXfuRuKmkj2ks · 2026-10-18T11:10Z

    ⛔ Not a claim. These are this card's own precondition and the triage addition, read by the seat before dispatch.

    repository ref hits for cloud:onboarding-next, cloud:plan-status, CloudOnboardingNext, CloudPlanStatus
    objectstack-ai/hotcrm main 3b05ae7 0
    objectstack-ai/objectstack main 0b44840dfd CHANGELOG lines, plus one doc comment, packages/spec/src/ui/app.zod.ts:501, which cites CloudOnboardingNext.tsx as an example. No registration and no console-pin use.
    objectstack-ai/cloud main — not read. This session's access to cloud is refused (403).

    Held, not dispatched:

    1. Serial. This card's file surface intersects PR fix(i18n): console copy names the system the user is in, not the cloud noun (objectui#12956) #12959 (objectui#12956, domain:ui seat 2). Both touch packages/i18n/src/locales/*.ts, and fix(i18n): console copy names the system the user is in, not the cloud noun (objectui#12956) #12959 also touches packages/app-shell/src/console/home/HomePage.tsx. So this card goes after that PR lands.
    2. The cloud reading. The removal also waits for a session that can read objectstack-ai/cloud main to post the cloud reading here: the sha and the hit count for the four strings above. repo:cloud seat 2, which filed this card, is the natural reader.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 6 (priority:p3; triage 6249067149; the seat's pre-dispatch readings 6249167259)
    Session: session_0188TsgPV8kQXfuRuKmkj2ks
    Account: sunhaolin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12954-retire-cloud-widgets
    Worktree: objectui-issue-12954
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: the card's path list, re-read at 7f9cc37d:

    • packages/app-shell/src/console/home/CloudOnboardingNext.tsx, CloudPlanStatus.tsx and their tests;
    • packages/app-shell/src/index.ts and packages/app-shell/package.json (exports only);
    • product-specific.allowlist.json and product-neutral-renderer.ratchet.test.ts;
    • the cloudOnboarding.* and cloudPlanStatus.* keys in packages/i18n/src/locales/*.ts;
    • the type arm in packages/types/src/{cloud.ts,zod/cloud.zod.ts,index.ts,zod/index.zod.ts} and its test cloud-plan-status-arm-10919.test.ts;
    • packages/cli/src/utils/known-schema-types.ts;
    • scripts/check-sdui-registration-pins.mjs, scripts/check-side-effects-array.mjs and scripts/vite-declared-lazy-views.ts (their inputs);
    • one changeset.
    • ⛔ Keep useEnvironmentEntitlements.

    Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus (default tier: a published export and a published schema arm retire)
    Clause-②: yes
    Clause-② reason: @object-ui/types stops accepting cloud:plan-status (a narrowed accept set), and @object-ui/app-shell drops two exports and two registered renderer types. The zero-consumer premise is cloud PR #3010; hotcrm and objectstack read 0 consumers (6249167259). A CONTRACT_REVIEW_TIER review comes before ACCEPT.
    Responsibility: n/a — a zero-consumer retirement
    Thread-read: 6249167259
    Serial constraints cleared: read at objectui main 7f9cc37d.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12954,
    "status": "done",
    "branch": "claude/issue-12954-retire-cloud-widgets",
    "pr": "#12969",
    "session": "session_0188TsgPV8kQXfuRuKmkj2ks — mode:subagent, so this is the parent seat's id; the identity is the branch named in Claim 6249765955 (confirmed as the newest Claim before editing)",
    "premise_still_valid": true,
    "summary": "Retired cloud:onboarding-next and cloud:plan-status per the ruling, with no alias and no staged window. app-shell: deleted both widgets and their tests, their two side-effect imports and four sideEffects entries, and the internal navRunActionHref helper, whose only caller was CloudOnboardingNext. It was not exported (the exports map is only . and ./styles.css). types: deleted CloudPlanStatusSchema (the TS interface, the zod arm, the entry, ./zod and union membership, the README row) and cloud-plan-status-arm-10919.test.ts. i18n: removed cloudOnboarding.* (5 keys) and cloudPlanStatus.current from all ten packs. cli: known-schema-types regenerated with scripts/regenerate-known-schema-types.mjs, which dropped exactly 3 keys. The allowlist lost 3 registrations, 2 files and 2 i18n namespaces (6 leaf keys). useEnvironmentEntitlements is kept, and its one-request pin (oneRequest-12808) was rewritten over the readers that remain. One changeset: minor for app-shell, types, i18n and cli, naming every removed key, type and key family and the consumer reading. useEnvironmentEntitlements, CloudWorkspaceTimezoneNotice and the ADR-0060 frozen ceiling are kept. ZONE 2 MEASURED: (1) The path list was NOT complete. The dispatch pattern finds 45 files at 7f9cc37, CHANGELOGs included, and a wider pattern for the nested cloudOnboarding: { blocks adds 9 locale packs. Beyond the card's list, these readers had to move: navRunAction.privateConventionRetired.test.ts (it read the deleted file), productBlocks-12197.test.tsx (its control kept onboarding-next registered), useEnvironmentEntitlements.oneRequest-12808.test.tsx, useNavRunAction.ts and its test, registered-types-validate-ratchet-10859.test.ts (NAMESPACED_REFUSED_AT_TYPE 304 to 302, plus a new refusal case for cloud:plan-status), zod-mirror-parity.test.ts (EXPECTED_MIRROR_PAIRS 206 to 205), any-component-emit-headroom-11573.test.ts, check-sdui-registration-pins.test.ts and check-side-effects-array.test.ts, plus comments in 7 files that named a retired widget as live. Each one, removed or left with its reason, is in the PR body table. This extends the claim's file surface, and I declare it here. (2) HomePage.tsx mounts neither widget: 0 hits. (3) objectstack is untouched. Its sdui.manifest.json and scripts/sdui-manifest.record.json carry 0 hits for either key at the local objectstack checkout fb6fb24e2f (shallow; origin/main not refetched). The app.zod.ts doc comment that cites CloudOnboardingNext.tsx is reported below. CORRECTIONS TO THE DISPATCH TEXT: app-shell never exported either component by name; it registered them through side-effect imports, so the named exports that retire are CloudPlanStatusSchema in @object-ui/types (entry and ./zod). 'Allowlist down by exactly two' is, measured, 15 entries: 3 registrations, 2 files, 2 namespaces with 6 keys. The ratchet requires the list to equal the measurement. ALSO EDITED: two pending changesets' prose, front matter untouched. 11659 described the onboarding-next button and keys as shipping, and 11930 named cloud:plan-status as a reader of the hook. Both go false in the same release, and check:changeset-claims tells a change to correct such bodies. Landing gate: the cloud main reading is still owed on the card. This session made no attempt to read cloud.",
    "tests": "Head 4f180c4. (A) Narrowed, unlocked, declared (the lock was held about 56 min by an issue-12957 full-package run): vitest --maxWorkers=1 over 16 single files, namely the ratchet, the runAction scan, useNavRunAction, oneRequest-12808, productBlocks-12197, CloudWorkspaceTimezoneNotice, HomePage.approvalsTarget, the cli ratchet, all-locales-key-parity, en-zh-key-parity, console-copy-system-noun-12956 and five scripts suites. Result: 'Test Files 16 passed (16) / Tests 313 passed (313)', exit 0, at d116713. (B) Under the lock: vitest --maxWorkers=2 over packages/types/, packages/i18n/, app-shell console/home/, environment/, hooks/ and console/blocks/, the ratchet, the runAction scan, the cli ratchet, known-schema-types-derivation-5115, check-sdui-registration-pins, check-side-effects-array, vite-declared-lazy-views, side-effects-declaration-consistency and check-eager-closure-budget. Result: 'Test Files 585 passed (585) / Tests 13106 passed | 13 skipped (13119)', 'VERDICT command-exit 0', at d116713. The only delta from d116713 to head 4f180c4 is two pending-changeset prose lines, which no file in the set reads. (C) Under the lock at 4f180c4: turbo build --filter=@object-ui/app-shell^... gave 'Tasks: 28 successful, 28 total'. Then type-check printed 'TYPECHECK types=0 i18n=0 cli=0 app-shell=0'. tsc -p tsconfig.test.json --listFilesOnly shows the five edited app-shell tests and both edited types tests in the compiled set. The cli tsconfig includes src/**/. ABLATION at 4f180c4 (one-shot, nothing committed): node objectstack/scripts/ablation-replace.mjs re-planted cloudPlanStatus: { current: 'Current plan' } in packages/i18n/src/locales/en.ts. It reported 'anchor 1 to 0, blob 6043d2a1d4eb to fe749dda5234', and the mutated file grep-counted cloudPlanStatus 1. Under the lock, the ratchet test and all-locales-key-parity gave 'Test Files 2 failed (2) / Tests 10 failed | 67 passed (77)', 'VERDICT command-exit 1'. The failures were 'en: no key is added under a frozen namespace unless the live list carries it' and nine 'X is missing 1 key(s): [cloudPlanStatus.current]'. Restore: 'ok restored: blob == HEAD (6043d2a1d4eb) and git diff HEAD is empty'. git hash-object matched HEAD:en.ts (6043d2a1d4ebd55ab9bcdb2dda8b5d7ebefd1037). The restored rerun of the same two files: 'Test Files 2 passed (2) / Tests 77 passed (77)', with cloudPlanStatus count 0. The direction was red, as predicted. test:repo was not run locally; it belongs to CI.",
    "gates": "Each local exit code was captured before any pipe. All runs at 4f180c4 unless noted. check:side-effects-array exit 0 ('@object-ui/app-shell: sideEffects names exactly the 18 module(s)'). check:sdui-registration-pins: exit 2 before any build (PREREQUISITE NOT MET, not a reading). After turbo build --filter=@object-ui/console under the lock ('Tasks: 35 successful, 35 total'), it printed 'All 18 registration(s) a sideEffects array promises are present in the built console (2258 chunks weighed; the 2 ruled control(s) are in the derived set)', VERDICT command-exit 0. Lazy-views check: it has no package.json name. It runs as the declared-lazy-views plugin inside that console build, which printed '10/11 modules AppContent declares lazy are genuinely lazy; 1 eager, all pinned'; its test suite passed in (B). node scripts/check-changeset-presence.mjs exit 0 ('38 source file(s) and 1 published-contract change(s) of 4 released package(s) changed ... declares 1 changeset(s)'). pnpm changeset:check exit 0. pnpm check:changeset-claims exit 0 (report-only): self-contradiction corpus 3 changesets, ✅. The two went-false notices (11573, 12288) were re-read and are still true. node scripts/check-governed-queue-guard.mjs --test on the 45-file list exit 0 'NOT GOVERNED'. Also exit 0: check:new-line-citations, check:control-bytes, check:i18n-keys, check:i18n-drift, check:i18n-dead-keys, check:doc-types, check:registry-bare-names, check:prompt-keys, check:unreferenced-sources, check:pending-changeset-literals. check:readme-exports first exited 1 with 'type entry not on disk -- run pnpm build first' (a prerequisite, not a red gate). After building cli and plugin-ai under the lock it exited 0 'OK'. No --ran reconciliation: objectui has no dispatch-gates.mjs, so the families were derived by hand from the dispatch list and package.json check:
    names that read the changed files. CI: PR #12969 check-runs on 4f180c4 at report time: 35 total, 3 success, 3 skipped, 29 in_progress. NOT MEASURED: the CI conclusions, still in_progress.",
    "mcp_calls": "0",
    "api_writes": "2 relay strokes (scripts/pm/fleet-write/dispatch.mjs, transport dispatch, landing as objectstack-fleet[bot]). (1) POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204, run 39133403290 success) executed op pr_create: POST /repos/objectstack-ai/objectui/pulls (draft) and POST /repos//issues/12969/assignees [sunhaolin]. Read-back: 13072 bytes sent and 13072 stored, identical. (2) POST /repos/objectstack-ai/objectstack/dispatches executed op comment: POST /repos//issues/12954/comments (this report). Plus git push of the branch, which is not a REST write. No label, assignee or card-body writes.",
    "open_questions": [
    {
    "question": "Which Clause-② value should the PR carry? The claim and the PR body say Clause-②: yes, copied verbatim as os-dev requires. pm-dispatch execution-duties reads a narrowing of a published accept set as Clause-②: no, and contract-review names Clause-②: no (narrowing) as the declaration for that tier. The objectui#12733 retirement precedent wrote no (narrowing) in both its body and its changeset. This PR only narrows: it widens nothing.",
    "options": [
    "A: keep yes as the claim declared. It is conservative, and the seat already schedules a contract review before ACCEPT.",
    "B: the seat re-declares no (narrowing) on the PR, which matches execution-duties and the 12733 precedent. Under the dev's one-write rule, that body edit is a seat write."
    ],
    "recommendation": "B, because the declaration should match the rule text and precedent. It costs the seat one body edit, and the review tier is the same CONTRACT_REVIEW_TIER either way. A is safe if the seat prefers not to touch the body."
    }
    ],
    "out_of_scope_findings": [
    "class: a (published release text that is wrong) · reach: exception: release-text. .changeset/11930-workspace-timezone-notice.md publishes the English example 'The workspace timezone was set to Asia/Shanghai from your browser when the workspace was created.' verbatim, but en.ts cloudWorkspaceTimezoneNotice.seeded now reads 'The environment timezone was set to {{zone}} from your browser when the environment was created.' The copy changed in 473e5a0 (PR #12865, objectui#12851), not in this PR, and the pending changeset was not updated. git log -S found both the adding and the changing commit despite the shallow clone. Left untouched here; the paragraph is named in the PR's Acceptance notes. Dedupe words: 11930 changeset English example, workspace timezone notice copy, pending changeset stale example, environment timezone was set.",
    "carrier: 承接者:无 · noted, not filed. In objectstack, packages/spec/src/ui/app.zod.ts has a doc comment (the sentence with 'CloudOnboardingNext.tsx concatenating the query') that cites the retired widget's file. It becomes a stale citation once PR #12969 lands. It is drift in a comment, so it is not one of classes a, b or c. Per the dispatch, objectstack was not edited."
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 6 · amended (Clause-②: the seat declared yes, but a narrowing reads no, per execution-duties.md:108 and contract-review.md:12; the file surface widens to the readers the dev measured in 6250740270 and PR #12969; the two pending changesets the PR corrects) (priority:p3; triage 6249067149)
    Session: session_0188TsgPV8kQXfuRuKmkj2ks
    Account: sunhaolin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12954-retire-cloud-widgets
    Worktree: objectui-issue-12954
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: the card's path list, re-read at 7f9cc37d:

    • packages/app-shell/src/console/home/CloudOnboardingNext.tsx, CloudPlanStatus.tsx and their tests;
    • packages/app-shell/src/index.ts and packages/app-shell/package.json (exports only);
    • product-specific.allowlist.json and product-neutral-renderer.ratchet.test.ts;
    • the cloudOnboarding.* and cloudPlanStatus.* keys in packages/i18n/src/locales/*.ts;
    • the type arm in packages/types/src/{cloud.ts,zod/cloud.zod.ts,index.ts,zod/index.zod.ts} and its test cloud-plan-status-arm-10919.test.ts;
    • packages/cli/src/utils/known-schema-types.ts;
    • scripts/check-sdui-registration-pins.mjs, scripts/check-side-effects-array.mjs and scripts/vite-declared-lazy-views.ts (their inputs);
    • one changeset;
    • widened, as measured in the dev's report: navRunAction.privateConventionRetired.test.ts, productBlocks-12197.test.tsx, useEnvironmentEntitlements.oneRequest-12808.test.tsx, useNavRunAction.ts and its test, registered-types-validate-ratchet-10859.test.ts, zod-mirror-parity.test.ts, any-component-emit-headroom-11573.test.ts, the check-sdui-registration-pins and check-side-effects-array tests, and comments in 7 files that named a retired widget as live;
    • the prose of the pending changesets 11659 and 11930 (front matter untouched), including the stale English example in 11930 that the dev reported.
    • ⛔ Keep useEnvironmentEntitlements.

    Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus (default tier: a published export and a published schema arm retire)
    Clause-②: no
    Clause-② reason: a narrowing only. @object-ui/types stops accepting cloud:plan-status, @object-ui/app-shell drops two registered renderer types, and nothing widens. The PR body and changeset carry Clause-②: no (narrowing) at line start, and a CONTRACT_REVIEW_TIER review over the full non-prose diff comes before ACCEPT.
    Responsibility: n/a — a zero-consumer retirement
    Thread-read: 6250740270
    Serial constraints cleared: read at objectui main 7f9cc37d.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Delta to the report in comment 6250740270: the seat answered B on the Clause-② question. The newest Claim is 6250754815 (Clause-②: no), confirmed before editing.

    • Commit dc7e75a4 on claude/issue-12954-retire-cloud-widgets (pushed; it touches two .changeset files only):
      • .changeset/12954-retire-cloud-onboarding-plan-status.md gains a line-start Clause-②: no (narrowing). That changeset had no Clause-② line before (the yes was only in the PR body), so the line is appended at the end, where the objectui#12733 precedent put it. The fleet reader readClause2Line answers declared · no · narrowing for both carriers.
      • .changeset/11930-workspace-timezone-notice.md: the English example is now the cloudWorkspaceTimezoneNotice.seeded text read from en.ts, rendered with Asia/Shanghai. Only line 21 changed. This closes the release-text finding in that report.
    • Gates at dc7e75a4: pnpm check:changeset-claims exit 0 (self-contradiction ✅ over 3 changesets), pnpm changeset:check exit 0, node scripts/check-changeset-presence.mjs exit 0.
    • PR feat(app-shell,types,i18n,cli)!: retire cloud:onboarding-next and cloud:plan-status (objectui#12954) #12969 body, one edit through the relay (issue_patch): line 2 now reads Clause-②: no (narrowing), and the acceptance notes gain one line saying the 11930 example matches en.ts. Read back: 13248 bytes sent and 13248 stored, identical, with the session-URL footer intact.
    • Not changed: the body's verification section still names head 4f180c41. The only delta to dc7e75a4 is these two changeset prose edits.

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Delta after contract review 6251061657 (FAIL, one reason): the retired cloud:plan-status literal is now refused by name.

    • Commit 47da571a (pushed). In packages/types/src/zod/cloud.zod.ts, RetiredCloudPlanStatusNodeSchema = retiredNodeType('cloud:plan-status', GUIDANCE) sits beside where the old arm stood. The guidance is worded from the changeset: compose the page from generic blocks, as objectstack-ai/cloud#3010 did, and mark the current plan with a visibleWhen on the same summary (GET /api/v1/cloud/home). index.zod.ts lists the arm in AnyComponentSchema and does not export it (the kanban precedent). tombstone.zod.ts and complex.zod.ts are untouched.
    • New pin cloud-plan-status-retired-12954.test.ts, in the 8802 shape. A stale node gets exactly one custom issue at type carrying RETIRED, visibleWhen and /api/v1/cloud/home. The surviving cloud:workspace-timezone-notice is still accepted, and an unknown cloud: literal still takes the generic path (no custom issue, no remedy text). Compile-time pins: AnySchema has no cloud:plan-status member, and still has the timezone-notice member.
    • What moved, each measured: the cli ratchet case is now a named-refusal pin (custom at type with visibleWhen; refusedAtType is now false, and an unknown cloud: control is still true). The emit-headroom member list gains RetiredCloudPlanStatusNodeSchema as an inline arm. The surface widens to two ledgers the review did not name: arm-named-export-8784, which demands a barrel export or an ABSENT_BY_DECISION row (row added), and the zod-mirror-parity EXCLUSIONS census of every exported zod const (row added). No TypeScript twin is needed, as its comment says. zod/README.md gains a prose note; check:doc-types stays green on it with no exemption, because that file is not in its scan. The changeset now says the literal is refused by name with the remedy, and Clause-②: no (narrowing) stays.
    • Gates at 47da571a: vitest packages/types/ plus the cli ratchet: 389 files and 10573 tests passed. pnpm --filter @object-ui/types type-check exit 0, and it compiles the 8802 file and the new pin. A cli closure build (8/8 tasks) then cli type-check exit 0. check:doc-types, check:changeset-claims, changeset:check and check-changeset-presence all exit 0. The governed guard reports NOT GOVERNED (49 paths).
    • Ablation: I deleted the arm from AnyComponentSchema (anchor 1 to 0, blob changed). Result: 2 files and 4 tests red (suite 1 times three, plus the cli case), and the controls stayed green. The restore was proven (blob equal to HEAD, empty git diff HEAD), and the rerun was 40/40 passed.
    • PR feat(app-shell,types,i18n,cli)!: retire cloud:onboarding-next and cloud:plan-status (objectui#12954) #12969 body: one acceptance-note line was added naming the tombstone and superseding the earlier note. 13623 bytes sent and 13623 stored, identical.
    • cloud:onboarding-next is untouched (registration-only).

    Generated by Claude Code

  8. 5 remaining items

  9. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Maintainer-action answered: the cloud reading, and the maintainer's go-ahead · p1 + target:v18 · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-19T07:26Z

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

    The reading this card asked for, taken by this seat on objectstack-ai/cloud origin/main 72042a4c with git grep -F, .changeset/** and CHANGELOG.md excluded:

    token live declarations other mentions
    cloud:onboarding-next 0 comments, and welcome.page.test.ts:234 not.toContain
    cloud:plan-status 0 comments, pricing.page.test.ts:141 not.toContain, and a test title that quotes the old words
    CloudOnboardingNext 0 one test comment
    CloudPlanStatus 0 none

    Every mention is a comment, a test that asserts absence, or a changeset. cloud has no consumer left.

    The maintainer's go-ahead. The seat put to the maintainer in chat: 「可以回「12954 免 cloud 核查」放行」. The maintainer answered 「同意你的建议」. The Maintainer-action line is done.

    Grade p3 → p1 + target:v18, pm:awaiting-maintainer → pm:queue.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 13 (priority:p1, landing: bring PR #12969 up to date with main and land it)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12954-retire-cloud-widgets (PR #12969, head 47da571a; released by domain:ui seat 1 at its clock-out, Release: comment on this card)
    Worktree: objectui-issue-12954-land
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: PR #12969's existing 49 files, plus only what merging origin/main (35 commits ahead, incl. objectui#13020's vite-declared-lazy-views count) requires to resolve. ⛔ No new behaviour. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
    Clause-②: no (narrowing). Contract review PASS 6251481920 on 47da571a (after FAIL 6251061657); a merge of main adds no contract change, so it is re-judged only if the merge touches the retired surface.
    Responsibility: n/a — a retirement card (the maintainer's go-ahead 「同意你的建议」 and the cloud reading of 0 consumers, triage 6261999412)
    Thread-read: 6261999412
    Serial constraints cleared: no other open objectui PR touches these files.
    Claimed at: 2026-10-19T08:25Z


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12954,
    "status": "done",
    "branch": "claude/issue-12954-retire-cloud-widgets",
    "pr": "#12969",
    "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
    "premise_still_valid": true,
    "summary": "Landing round: merged origin/main d14ba96 (35 commits) into the PR branch as merge commit 1152059 (parents 47da571 + d14ba96); pushed, remote ref reads 1152059. Zero textual conflicts: the 13 files both sides touched (EnvironmentListToolbar.tsx, useEnvironmentEntitlements.ts, known-schema-types.ts, the ten locales) took disjoint hunks, kept both. Count/ledger re-derivation: the PR never moved the declared-lazy-views count (it edited only a comment in scripts/vite-declared-lazy-views.ts), so main's 12 with AppReportIndexView stands and its pin passes; main's retirement of field:permission-facet-link and the PR's cloud retirements compose (cli ratchet, registration pins 18/18, product-neutral allowlist all green). The retired surface (tombstone, Clause-2 narrowing, changeset) is byte-unchanged by the merge, so no contract re-review is triggered. No new behaviour, no new files. mergeable_state after push: behind (main advanced 1 commit to b014f5e, objectui#13031 tooling-only pin manifests) with mergeable true; the merge queue rebuilds on main, so I did not chase it.",
    "tests": "All at head 1152059. Closure build (cli^/app-shell^/i18n^/types^ deps) under lock VERDICT command-exit 0. type-check: types 0, app-shell 0, cli 0, i18n 0 (each echoed its type-check script; app-shell/i18n/types include tsconfig.test.json). Targeted vitest --maxWorkers=1, 18 files (every PR-touched test plus families cloud-plan-status, navRunAction, registered-types-validate, zod-mirror-parity incl. base-schema, check-sdui-registration-pins, check-side-effects-array, vite-declared-lazy-views, appRouteChunks, console-copy-system-noun, productBlocks, product-neutral-renderer ratchet): Test Files 18 passed (18), Tests 301 passed (301), VERDICT command-exit 0. Console closure build (turbo 35/35) under lock exit 0, then check:eager-closure 0 and check-sdui-registration-pins 0 (All 18 registrations present, 2261 chunks). Pre-tsc battery: check:phantom-deps 0, check:self-import 0, check:unreferenced-sources 0, check:doc-example-readers 0, check:handler-key-reads 0, check:side-effects-array 0, check:element-data-source-declaration 0, check:spec-symbols 0, check:action-forward-parity 0, check:designer-field-key-parity 0, check:icon-record-names 0, check:i18n-keys 0, check:i18n-drift 0, check:i18n-designer-parity 0, check:control-bytes 0; check-hand-rolled-comment-mask 0. check:spec-floors 1 (no-artifact for unbuilt packages; recorded per order, not fixed). Changesets: check-changeset-fixed 0, check-changeset-presence 0, check:changeset-claims 0, changeset:check 0, check-changeset-no-major 0. eslint narrowed: 38 changed ts/tsx/mjs files vs origin/main merge-base, population = root eslint.config.js, count from --format json = 38 files, 0 errors 63 warnings, 0 ignored; config has no type-aware linting (no parserOptions.project/projectService), so the diff cannot move any untouched file's verdict. NOT MEASURED: whole-package-directory vitest runs for types/app-shell/cli/i18n/scripts, reason: the order's Lock section forbids whole-package-directory runs; declared to CI. No ablation this round (no new assertion).",
    "mcp_calls": "0",
    "api_writes": "1 — fleet-write relay op comment POST /repos//issues/12954/comments (this report); plus 1 git push (not REST)",
    "open_questions": [
    {
    "question": "The order both says run each touched package dir under the lock and, in its Lock section, forbids whole-package-directory runs. I followed the prohibition and declared full dirs to CI. Should the landing seat require them locally?",
    "options": [
    "A keep declared to CI (merge queue runs the full suite on rebuilt main)",
    "B a follow-up round runs types/app-shell/cli/i18n dirs under the lock"
    ],
    "recommendation": "A, because the merge was conflict-free with disjoint hunks, every family the order named passed, and the queue runs the full matrix anyway"
    }
    ],
    "out_of_scope_findings": [],
    "deviations": [
    "merge commit message amended locally before push to carry the model-free trailer pair (git's default merge message has none)",
    "package-dir vitest runs declared to CI, see open_questions"
    ],
    "files_changed": "merge only: no file outside the merge of main changed; branch diff vs main is still the PR's 49 files",
    "gates": {
    "tc-types": "0",
    "tc-app-shell": "0",
    "tc-cli": "0",
    "tc-i18n": "0",
    "vitest-targeted": "0",
    "check:phantom-deps": "0",
    "check:self-import": "0",
    "check:unreferenced-sources": "0",
    "check:doc-example-readers": "0",
    "check:handler-key-reads": "0",
    "check:side-effects-array": "0",
    "check:element-data-source-declaration": "0",
    "check:spec-symbols": "0",
    "check:action-forward-parity": "0",
    "check:designer-field-key-parity": "0",
    "check:icon-record-names": "0",
    "check:i18n-keys": "0",
    "check:i18n-drift": "0",
    "check:i18n-designer-parity": "0",
    "check:control-bytes": "0",
    "check:spec-floors": "1",
    "check-hand-rolled-comment-mask": "0",
    "check-changeset-fixed": "0",
    "check-changeset-presence": "0",
    "check:changeset-claims": "0",
    "changeset:check": "0",
    "check-changeset-no-major": "0",
    "eslint-narrowed": "0",
    "check:eager-closure": "0",
    "check-sdui-registration-pins": "0"
    }
    }


    Generated by Claude Code

  12. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT · objectui#12954 · PR #12969 · domain:ui#2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-19T09:06Z

    PR #12969 at head 1152059 (Fixes #12954), landed by this seat after domain:ui seat 1's release at clock-out. Reviewed against seat 1's Release: comment, the triage 6261999412 (the cloud reading of 0 consumers, and the maintainer's go-ahead 「同意你的建议」 to 「12954 免 cloud 核查」), the contract reviews 6251061657 (FAIL, no tombstone) and 6251481920 (PASS on 47da571a), this seat's claim 6262954430 and the landing-round report 6263402993.

    • What the PR does (seat 1's accepted scope, unchanged): it retires the cloud:onboarding-next and cloud:plan-status page node types and their CloudOnboardingNext / CloudPlanStatus widgets. RetiredCloudPlanStatusNodeSchema refuses the retired literal by name (retiredNodeType, the objectui#8802 shape). Registration pins, the cli known-types ratchet, the product-neutral allowlist and the i18n keys follow.
    • Landing round (1152059, a merge commit; parents 47da571a, main d14ba963): 35 commits of main were merged with no textual conflict. Thirteen files were touched on both sides with no overlapping hunks; both sides were kept.
      • The PR only edits a comment in scripts/vite-declared-lazy-views.ts, so main's count of 12 (objectui#13020) stands.
      • main's retirement of field:permission-facet-link composes with this one: the cli ratchet, the registration pins (18/18) and the allowlist are green.
      • The seat checked the diff against main: still exactly the PR's 49 files. The tombstone, cloud.zod.ts, cloud.ts and the changeset are byte-identical to the reviewed head 47da571a, so the PASS 6251481920 stands with no new review owed.
    • Clause-②: no (narrowing) with contract review PASS; target:v18; a breaking narrowing that rides the major (objectui is in pre on next).
    • Local gates (landing round): 18 files / 301 tests across every touched test file and the named families; types / app-shell / cli / i18n type-check 0; check:eager-closure 0; check-sdui-registration-pins 0; the pre-tsc battery 0; every changeset check 0; eslint 0 errors. Package directories are declared to CI, the dev's open question answered A.
    • Commits: trailers are model-free, the merge commit included.
    • CI at head: 36/36 check-runs success or skipped on 1152059 (filter=latest), mergeable_state clean.

    Verdict: ACCEPT. The seat marks the PR ready and enables auto-merge; the merge queue lands it on current main.


    Generated by Claude Code

  13. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · objectui#12954 · PR #12969 · domain:ui#2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-19T09:25Z

    • Merged as 30083da on main. Verified by content against the accepted head 1152059: 44 of the 49 files in 30083da^1..30083da are blob-identical, and the other 5 are the PR's deletions (CloudOnboardingNext.tsx, CloudPlanStatus.tsx, their two tests, and cloud-plan-status-arm-10919.test.ts), absent on both sides. The squash message is model-free.
    • What landed: the cloud:onboarding-next and cloud:plan-status page node types and their widgets are retired. A page that still names cloud:plan-status is refused by name (RetiredCloudPlanStatusNodeSchema). This is a breaking narrowing under target:v18, with contract review PASS 6251481920; cloud carries 0 consumers (triage 6261999412).
    • The card closed via Fixes #12954; pm:dispatched is removed with this note. Thanks to domain:ui seat 1 for the PR, the review rounds and the release state that made the hand-over clean.

    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

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p1target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions