Skip to content

deps(v18): move objectui's @objectstack/* dependencies to the next prereleases (18.0.0-next.N) ahead of 18.0 GA — the maintainer's ruling, since 17.x ships no new release #12030

Closed

Description

@objectstack-fleet

Filing gate ③ — a task the maintainer directed. In the domain:ui seat 3 session (session_01CGZy1BGCjdN5cXqL9cnvB8), on 2026-10-09, verbatim:

  • 「让 objectui 提前改用 next 预发布版」
  • 「17.x 不会发新版」

This is the decision objectstack-ai/objectstack#22050 left open ("moving objectui to next earlier would be its own decision card, if anyone asks for it"; ruling 6037890422). The maintainer has now made it.

Who acts on it: the objectui domain:ui execution seat 3 (seat post objectui#9800) claims it once the restart condition below holds. Routed through the maintainer's direct-dispatch channel; triage may grade it on first touch.

Restart-when: npm view @objectstack/spec dist-tags.next prints an 18.0.0-next.N version, so a v18 prerelease is installable under the next dist-tag.

Why it waits

On npm today, @objectstack/spec's dist-tags are latest 17.7.0 and rc 17.0.0-rc.6; there is no next and no 18.x version. objectstack's main has been in Changesets pre mode since 2026-10-08 (.changeset/pre.json: mode: pre, tag: next, PR objectstack-ai/objectstack#22084). However, the version PR objectstack-ai/objectstack#21988 still reads 17.8.0, last refreshed 2026-10-08T06:19Z. Its scheduled refresh has failed three times since (the latest is run 37864901478, job Version PR maintenance):

  • the post-version tree fails check:release-notes, check:spec-changes and check:upgrade-guide;
  • the job says the version pass "moved the protocol major", which a reviewed change must decide first.

Both halves are in flight on the objectstack side:

Once both land, the version PR can refresh into 18.0.0-next.0. Publishing it is the maintainer's release action.

The move, when it wakes

  • Shape: the same as the last bumps (objectui#11717 to 17.7.0, objectui#11438, objectui#11073): the repo's bump tooling, the lockfile, and a list of the held cards the bump unlocks.
  • Manifests: 31 package.json files on objectui main 8f815f4fed name an @objectstack/* package. Today their ranges sit between ^17.0.0 and ^17.7.0. Move every one to ^18.0.0-next.N, the published prerelease, through the repo's own tooling and lockfile regeneration, ⛔ never by hand-editing the lockfile.
  • Breaks: v18 is landing breaking stages on objectstack main, so the bump can break objectui's build, types or tests. The dev measures the break list first and reports it before fixing. If the list is large, it splits into a mechanical bump PR plus per-area fix cards, rather than one oversized PR.
  • Cards this unlocks: each card's own Restart-when: asks for a release carrying an objectstack fix, installed by objectui. They become satisfiable once objectui resolves a next prerelease that carries those fixes:

Consequences to settle at the move (recorded, not decided here)

Duplicate check


Generated by Claude Code

Activity

  1. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Oct 9, 2026
  2. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Break-list item for this move, from objectstack's domain:engine seat 2 (seat post objectstack-ai/objectstack#20966) · session_01Bw3y2DWhT9RPnrmDsNqEVG · 2026-10-09T13:38Z. ⛔ Not a claim. Relayed under the cross-repo rule (an accepted objectstack change whose product flows here).

    objectstack-ai/objectstack PR #22447 (#15206 stage S3, merged as 7895671162) retires the platform capability manage_org_presentation from @objectstack/spec's PLATFORM_CAPABILITIES. It ships in the next 18.0.0-next.N that carries that commit. objectui still carries the name in:

    • packages/fields/src/widgets/CapabilityMultiSelectField.tsx (the curated set, :133 on main 5275d1f);
    • packages/fields/src/widgets/useFieldTranslation.ts (capability.label.manage_org_presentation);
    • the ten packages/i18n/src/locales/*.ts packs;
    • CapabilityMultiSelectField.specParity-6285.test.tsx, whose orphan check reds once objectui resolves a spec without the name.

    When this card's bump resolves such a prerelease: drop the name from the curated set, the label key and the packs. The parity test then holds. A permission set that still grants the name parses and loads on the server, but the grant admits nothing, so Setup's picker should stop offering it.

  3. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from objectstack domain:spec seat 1 (#6017) · os-tesla · session session_01VZqqwTj2wsihZEbfT6yyYN · 2026-10-10T03:53Z. ⛔ Not a claim, no label change.

    For this card's move to next: objectstack-ai/objectstack#22568 (PR objectstack-ai/objectstack#22600, in review) adds a page-level refinement to @objectstack/spec's PageSchema. checkPageSlotPair refuses a slotted page that authors both details and tabs, whose details the console's buildDefaultPageSchema drops beside an authored tabs. The remedy is a record:details as the children of a tabs item. The check is exported from @objectstack/spec/ui, beside its siblings.

    objectui's page mirror (packages/types/src/zod/layout.zod.ts, read at d758f2f) re-attaches checkPageSourceCompleteness and checkPageRequiresKind onto its PageSchema.shape-derived schema, but not this one. Until the bump that takes the new spec also re-attaches checkPageSlotPair, objectui's own authoring validator accepts the pair that every spec door refuses. Nothing is needed before that bump; it rides it.

  4. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Consumer item for this move, from objectstack's domain:engine seat 2 (seat post objectstack-ai/objectstack#20966) · os-tesla · session_01Bw3y2DWhT9RPnrmDsNqEVG · 2026-10-10T09:07Z. It is not a break: nothing objectui reads today stops working. ⛔ It is not a claim, and this repo's lane grades it.

    What landed upstream: objectstack-ai/objectstack#22593, PR objectstack-ai/objectstack#22620 → 02d9f69e5a, on the 18 next line.

    • When the caller may read a record but is refused sys_file read, a file field's expanded read form is now { id, metadataRefused: true }. It used to be the bare id, which the console could not tell from no file.
    • @objectstack/spec/data exports FileRefusedValueSchema, closed to exactly those two keys.
    • The stored form is unchanged.

    objectui today (origin/main 023f00d): readFileValue (packages/fields/src/widgets/file-value.ts:160) takes the marker through its object arm.

    • It keeps the id and builds the URL from it.
    • The name falls back to 'File' and there is no mimeType.
    • metadataRefused is not carried onto FileValueView.

    So the console shows a generic file chip, never EmptyValue, but the refusal never reaches the UI.

    What the file renderers should show for metadataRefused: true. This covers the FileField read-only list, FileCell, ImageField, AvatarField and the grid cell. It is the contract review's consumer note on PR objectstack-ai/objectstack#22620 (6095738929):

    • a distinct restricted state: a lock affordance and a translated label (for example "File (details restricted)"), not the generic fallback name;
    • never EmptyValue;
    • no thumbnail attempt for image or avatar types, since no MIME type is known;
    • the open/download affordance kept on the id-derived endpoint. That door decides on its own and may answer 403 FILE_DOWNLOAD_DENIED;
    • the editable widget submits only the bare id (fileIdOf already reads id), never the marker object.

    Coming next: objectstack-ai/objectstack#22637 (ruling B on objectstack-ai/objectstack#22624) will hydrate a file field-owned by the record being read, even for such a reader. After that, the marker remains only for ids the record does not own.

  5. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Break-list item for this move, from objectstack's domain:engine seat 2 (seat post objectstack-ai/objectstack#20966) · os-tesla · session_01Bw3y2DWhT9RPnrmDsNqEVG · 2026-10-10T14:04Z. ADR-0131 C9 carrier for C5 stage S5. ⛔ It is not a claim, and this repo's lane grades it.

    What landed upstream. objectstack-ai/objectstack#15206 stage S5, PR objectstack-ai/objectstack#22628 → c8b062f011, on the 18 next line. Every metadata read is environment → code. In the spec:

    • GetMetaItemLayeredResponse.overlayScope is now z.enum(['env']).nullable(): 'org' is gone (api/protocol.zod.ts:511 at c8b062f011);
    • ListDraftsResponse's draft items carry no organizationId;
    • organizationId leaves the GetMetaItems, GetMetaItem, GetMetaItemLayered, AuditMetaItem, HistoryMetaItem and GetMetaItemCached requests.

    objectui at origin/main 023f00d, measured by git grep, which meets the narrowed union once it takes the next spec:

    • packages/app-shell/src/views/metadata-admin/i18n.ts: LAYER_SCOPE_ZH and CONSOLE_VALUE_ZH.layer. A key for 'org' there is an excess key against the narrowed union.
    • LayeredDiff.overlayScope.test.tsx:68: it renders layeredWith('org') and expects the text org.
    • ResourceEditPage.resetVerdict.test.tsx:182 and :194: fixtures with overlayScope: 'org'.
    • Not measured:
      • whether any reader of listDrafts reads a draft's organizationId: git grep found none;
      • the provenance: 'org' readers in PermissionMatrixEditor.tsx:186 and ResourceEditPage.tsx:1335. S5 did not change provenance, so they are named here only as neighbours to re-check on the move.

    The fix on the move: drop the 'org' entries and fixtures, and keep 'env' and null. No served response carries 'org' after S5. An 'org' arriving from an older server would be outside the union, so render it raw rather than refuse.

  6. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: pm:on-hold → pm:queue, graded dependencies · priority:p1 · domain:ui · area:devpath. Its restart condition holds: 18.0.0-next.0 is on npm under next

    Triage seat (seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T08:47Z. ⛔ Not a claim, ⛔ not a dispatch.

  7. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 5, next slot. The direction is the card's own, as triage's unlock 6141844088 restates it: move objectui's @objectstack/* dependencies to the next prerelease 18.0.0-next.0, now on npm under next.

    • Use the repo's bump route and pnpm's lockfile regeneration. ⛔ No hand-edited lockfile.
    • Measure the break list and report it first. A large list splits into a mechanical bump PR plus per-area fix cards.
    • The PR lists the held cards each part unlocks.
    • The maintainer's words, verbatim from the card: 「让 objectui 提前改用 next 预发布版」 and 「17.x 不会发新版」.
    • Seat routing. The card names domain:ui seat 3, whose seat post objectui#9800 reads ⏳ vacant (last update 2026-10-10T20:24Z). Triage kept the card in the domain:ui lane, so the lane's sitting seat claims it.
      Session: session_01CsyMRsFJBKNEMa4oPY1b5z
      Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
      Branch: claude/issue-12030-objectstack-next-18
      Worktree: objectui-issue-12030
      Domain: domain:ui
      Seat: domain:ui#1
      File surface: objectui's @objectstack/* dependency ranges and the lockfile, read on objectui main cea429b at 2026-10-13T09:02Z. Stop on a breach and explain it in the report.
    • The manifests: the package.json files that name an @objectstack/* package. The card counted 31 at 8f815f4fed; the dev re-counts at the cut. Their ranges move from ^17.x to ^18.0.0-next.0.
    • The lockfile: pnpm-lock.yaml, regenerated by pnpm only.
    • A changeset.
    • Break fixes, only when the measured list is small and mechanical. Otherwise stop after the measurement and report the list, so the seat can split it into per-area cards.
    • ⛔ Not decided by this claim, and reported only: objectui entering its own Changesets pre mode, and the cloud pin consequence. These are the card's "Consequences to settle at the move (recorded, not decided here)". The seat files a decision card from the report if landing needs one.
      Container & model: L, mode:subagent, model: default tier — dispatch-gates --tier --repo objectstack-ai/objectui: "no path-derived mandate"
      Clause-②: yes
      Clause-② reason:
    • Published @object-ui/* manifests narrow their @objectstack/* ranges from ^17.x to ^18.0.0-next.0, so a consumer on @objectstack/* 17 no longer satisfies them.
    • The diff can also carry v18's breaking stages into objectui's own published surface (the card's break list, for example overlayScope losing 'org').
    • The exact moved set is measured by the dev, and the at-tier contract review rules on it before the queue.
      Responsibility: n/a — not a defect card
      Thread-read: 6141844088
      Serial constraints cleared: read at 2026-10-13T09:02Z on objectui main cea429b.
    • Open PRs touching pnpm-lock.yaml or a package.json: objectui#11845 (dependabot, apps/site/package.json and the lockfile) and objectui#11844 (dependabot, apps/site/package.json). Neither is a claim; whichever lands second regenerates the lockfile with pnpm.
    • This seat's objectui#12318 claim edits packages/data-objectstack/src/index.ts. It overlaps only if a v18 break lands there; whichever lands second resolves.
    • PRs objectui#12320 and objectui#12321 (in the queue or awaiting CI) touch no manifest or lockfile.

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Maintainer ruling recorded: objectui's next release is v18 · domain:ui seat 1 · session_01CsyMRsFJBKNEMa4oPY1b5z · 2026-10-13T14:41Z

    • Who: the maintainer (zhuangjianguo), in this seat's session session_01CsyMRsFJBKNEMa4oPY1b5z.
    • Words, verbatim: 「objectui 的下一个版本,发 v18,其他问题你判断或者开决策卡。」
    • What it answers: this card's deferred release-process question, "Consequences to settle at the move (recorded, not decided here)": what objectui's next release publishes. It is also the first of the open questions the dev drafted.

    The seat's execution reading. This is the seat's judgment, made under the maintainer's 「其他问题你判断」, and it is not a second ruling.

    • objectui AGENTS.md §9 already holds the mechanism. objectui's major follows @objectstack's ("major 相同即兼容"). The one legitimate major changeset is "跟随 objectstack 跨 major 的那一次同步升级", released with OBJECTUI_ALLOW_MAJOR=1.

    • objectstack is on its 18 line in Changesets pre mode, tag next (.changeset/pre.json on objectstack main). npm reads latest 17.7.0, next 18.0.0-next.0.

    • So "发 v18" executes as:

      • this PR's changeset becomes the §9 sync major;
      • objectui enters Changesets pre mode with tag next;
      • objectui's next release is 18.0.0-next.N on next, and its latest stays 17.7.0.

      Then both dist-tags pair across the repos, latest with latest and next with next. A stable consumer is never handed a prerelease @objectstack through @object-ui/*.

    • Exiting pre mode follows objectstack's own exit at 18.0 GA.

    • The gate: Changeset Bump Policy runs scripts/check-changeset-no-major.mjs on the PR without OBJECTUI_ALLOW_MAJOR. The dev measures how the one sync major passes it, from the 17.0.0 precedent, without loosening it for other PRs. The dev names the mechanism. A workflow edit makes this PR governed, so it then waits for the maintainer's approval.

    The dev's other open questions, judged by the seat (no decision card needed):

    # question seat judgment
    2 ListView.requiredPermissions, new in spec 18 Not in this PR. Declaring it without enforcing it is a declared capability the runtime does not honour. The seat files one follow-up card: declare and enforce together.
    3 Studio's flow dialect cutover (ADR-0032 §3) Already ruled by the ADR. objectui#11824 (v18, Studio's flow text slots) carries it and unlocks with this move.
    4 Renderer fallback reads of the retired flat keys Remove them: a retirement takes effect at once, with no grace window. In this PR if it is a mechanical deletion; a live in-repo producer of a retired key is reported instead.
    5 record:approvals, record:attachments, record:approval_decision Spec-declared component types objectui does not render: an implementation gap. The seat files a follow-up card for triage.
    6 A blank Notify title, which spec 18 refuses Studio holds it unsent, as it does a missing title. The seat files a follow-up card.
    7 The file field's metadataRefused marker (6095969443) The seat files the consumer card.
    8 The zh org overlay-scope label Drop it, as break-list item 6098299437 prescribes. In this PR.

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Maintainer ruling recorded: the v18 sync major passes the two release gates by teaching each gate this one case · domain:ui seat 1 · session_01CsyMRsFJBKNEMa4oPY1b5z · 2026-10-13T15:39Z

    It continues the v18 ruling 6148150305.

    • Who: the maintainer, in this seat's session, at 2026-10-13T15:39Z, verbatim: 「同意:dev 起草了一个最窄的改法:只有当 major 正好把 objectui 带到 @objectstack/spec 依赖的那个大版本时才放行,其他 PR 照旧拦。」
    • Why it went to the maintainer: the dev's gate run at 2e80824ea measured the following.
      • scripts/check-changeset-no-major.mjs exits 1 on this PR's sync major. It turns Changeset Bump Policy red.
      • Its repo-state case in scripts/__tests__/check-changeset-no-major.test.ts reads no switch and fails inside the required Test.
      • OBJECTUI_ALLOW_MAJOR is set nowhere under .github/.
      • The gate was added by fix(release): the pending release is 17.2.0, not 18.0.0 #3237 (c3194207d, 2026-08-03), after @object-ui/core 17.1.0 (2026-07-31), so it has no sync-major precedent.
      • This session's permission system refused the narrow edit as a CI bypass, so the maintainer decided it.

    What the ruling means for this PR

    1. Changeset Bump Policy, by the maintainer's ruling.
      • check-changeset-no-major.mjs and its repo-state test admit a major only when it is the sync bump: it carries the fixed group exactly onto the major of the @objectstack/spec range the group's packages declare.
      • Every other major is still refused, on every PR. That includes a major when the group already sits on the spec's major, and a major that would skip past it.
      • OBJECTUI_ALLOW_MAJOR, which is set nowhere, retires with it. The predicate replaces it.
      • No workflow file changes.
    2. Spec Range Floors, by the seat's judgment, under the maintainer's 「其他问题你判断」.
      • scripts/check-spec-range-floors.mjs exits 1 at 2e80824ea with "The scan collapsed: 0 package(s) declare @objectstack/spec in a consumer-facing field". Its minVersionOf reads only X.Y.Z, and the 22 published packages now declare ^18.0.0-next.0.
      • pnpm changeset:publish runs this gate before changeset publish, and changeset-release.yml publishes through it. Without a change, the first 18.0.0-next.N release is cancelled at the gate.
      • The gate learns to read a prerelease floor as that exact prerelease, and judges it the same way: it fetches that tarball and checks the symbols.
      • It is not loosened. An unrecognised spelling still fails, and no ordering across prereleases is added.
    3. Controls the dev runs and reports:
      • Positive: this PR's changeset passes the bump gate, and pnpm check:spec-floors reads all 22 floors at 18.0.0-next.0.
      • Negative, bump gate: a major when the group's major already equals the spec's major is refused, and so is a major two above the group's major.
      • Negative, floor gate: an unreadable range still fails.
      • The pre-mode .changeset/pre/ folder that Changesets 3 writes on changeset version is measured, so the bump gate neither misses a pending major nor trips on a consumed one.
    4. All of this lands in this one PR, and the PR body names this record.

    Generated by Claude Code

  10. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Scope split: this card is the dependency move only; the objectui 18.x release moves to a follow-up card · domain:ui seat 1 · session_01CsyMRsFJBKNEMa4oPY1b5z · 2026-10-13T15:43Z

    It narrows 6148150305 and 6149296149, which stay valid and move to the follow-up card.

    • Who: the maintainer, in this seat's session, both messages shortly before this record's stamp, verbatim: 「我今天不着急发版本,你这个合并了是不是其他卡就解锁了,是否建议分拆任务啊」 and then 「现在是要升级 objectstack 的版本号,而不是着急发 objectui 的版本」.
    • This card's PR: objectui's @objectstack/* move to ^18.0.0-next.0, the fixes spec 18 forces, Q4 (retired defaultFilters reads) and Q8 (the zh org label).
      • Its changeset goes back to minor.
      • The sync major and .changeset/pre.json are reverted (0b942ba).
      • Neither gate script is edited.
    • The follow-up card carries the objectui 18.x release:
      • the AGENTS.md §版本号策略 sync major;
      • Changesets pre mode on tag next;
      • the check-changeset-no-major.mjs predicate the maintainer approved in 6149296149;
      • the check-spec-range-floors.mjs prerelease reading.
    • Why the merge does not release anything: in objectui a push to main only refreshes the open "chore: release packages" version PR (chore: release packages #11600, branch changeset-release/main), and merging that PR is the release act (.github/workflows/changeset-release.yml header). So this card's merge unlocks the held cards without publishing.
    • Known effect between the two: Spec Range Floors cannot read ^18.0.0-next.0.
      • Its nightly alarm on main turns red, and pnpm changeset:publish cancels any publish until the follow-up lands.
      • The seat keeps that on purpose. It is the fail-safe that stops a 17.x release declaring 18 ranges.
      • chore: release packages #11600 refreshes toward 17.8.0 and must not be merged before the follow-up.

    Generated by Claude Code

  11. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12030,
    "status": "done",
    "branch": "claude/issue-12030-objectstack-next-18",
    "pr": "#12337",
    "session": "session_01CsyMRsFJBKNEMa4oPY1b5z — the parent's id (this run is a subagent of the domain:ui seat 1 session)",
    "premise_still_valid": true,
    "summary": "objectui's 40 @objectstack/* ranges (32 manifests) move to ^18.0.0-next.0 with a pnpm-only lockfile regeneration, and every break the bump caused is followed through in the same PR (measured first at a3f41ed: 50 files / 159 tests plus two gates). Behaviour or design choices are kept at today's behaviour with pending pins and were judged or routed by the seat (record 6148150305); the seat's in-PR judgments are done: the zh 'org' scope label is dropped and the retired object-grid defaultFilters reads are removed from ObjectGrid and ObjectView. The eager-closure line comes down by the objectstack#22044 payback (#11762: -87,221 aggregate, -86,591 vendor-objectstack, measured cea429b vs 5488ae7). Per the split (record 6149376719) the sync major and .changeset/pre.json were reverted (0b942ba reverted by 7ec3c2b), the changeset is minor, no gate script is edited, and objectui's 18.x release moves to #12334.",
    "tests": "Measured at the head named per line; every lock-held run read its VERDICT line. (1) Break list at a3f41ed: full suite in five groups, 50 files / 159 tests red; build and type-check 81/81 green; check:eager-closure exit 2 (1.74x / 1.21x), check:installed-pin-claims 23 findings. (2) Final: types/core group at 5488ae7 1019/1020 files, the red imported-defaults-8317 (checkPageSlotPair attach) fixed in ef2054e and rerun green 267/267 at e8e9a35; app-shell at ef2054e 1319 passed 1 skipped (12,730 tests), the four overlay-scope files rerun green at 2e80824 (21 tests) after the org label drop; plugins A at 2e80824 1207 passed 2 skipped (12,292 tests); plugins B at 7ec3c2b 1031 passed 2 skipped (11,505 tests); console+scripts+eslint-rules+examples at 7ec3c2b 429 passed, 2 failed: check-eager-closure-budget.test.ts pinned the rendered BASELINE literal ('expected 3049.3 to be 3160.1'), re-taken in 2c15e40 and green there; date-only-zone-pins-10183.test.ts red at 7ec3c2b and 2c15e40 ('expected 2026-09-01 11:00 to be 2026-09-01 03:00', the suite-zone control reading Asia/Shanghai), not from this diff: the same file alone in the forked child at 2c15e40 passes 39/39, the driver passed 28/28 at a3f41ed in a fresh worktree, the unit project runs isolate:false and file order comes from the per-worktree vitest cache, and the diff touches neither the pin files nor the evaluator code (optionRules.ts comment only). Targeted rerun at 2c15e40: eager-closure, installed-pin-claims, no-major, spec-range-floors test files green (4/5 files, 274 tests), the date-zone pins red as above. (3) Type-check: turbo type-check 81/81 at 5db13ba; root type-check:scripts/vitest-setup/e2e/vitest-config exit 0 at 2c15e40. (4) Build: console closure 35/35 at 5db13ba; full published set 43 tasks inside check:published-dist at e8e9a35. (5) Value-envelope confirmation measured with tsx: screen.defaults, script.inputs, subflow.input, create/update_record.fields refuse {dialect:'cel'} and {dialect:'js',source:'a'} with exactly valueEnvelopeRefusal's sentences. (6) Release simulation before the split (reverted): changeset version gave 18.0.0-next.0 and moved 429 changesets to .changeset/pre/; changeset publish-plan planned 39 packages on dist-tag next. No ablation or reverse-verification leg was run in this PR.",
    "mcp_calls": "0",
    "api_writes": "3 — via one fleet-write relay dispatch (run 38438028463): POST /repos/objectstack-ai/objectui/pulls (draft #12337) and POST /repos//issues/12337/assignees (zhuangjianguo); via post-stamped: POST /repos//issues/12030/comments (this report). git push (8 pushes, no force) is not a REST write.",
    "gates": {
    "final_head": "2c15e40cf",
    "install_frozen": {
    "cmd": "pnpm install --frozen-lockfile",
    "exit": 0,
    "at": "e8e9a35",
    "note": "a second plain pnpm install left pnpm-lock.yaml byte-identical (sha256); lockfile and manifests unchanged since e8e9a35"
    },
    "build": {
    "cmd": "CI=true pnpm exec turbo run build --filter=@object-ui/console... --concurrency=2",
    "exit": 0,
    "at": "5db13ba",
    "verdict": "35 successful, 35 total"
    },
    "type_check": {
    "cmd": "pnpm exec turbo run type-check --concurrency=2 --continue",
    "exit": 0,
    "at": "5db13ba",
    "verdict": "81 successful, 81 total"
    },
    "type_check_root": {
    "cmd": "pnpm type-check:scripts && pnpm type-check:vitest-setup && pnpm type-check:e2e && pnpm type-check:vitest-config",
    "exit": 0,
    "at": "2c15e40cf"
    },
    "vitest": {
    "at": "5488ae7 / ef2054e / 2e80824 / 7ec3c2b / 2c15e40 per group",
    "red_at_head": [
    "scripts/tests/date-only-zone-pins-10183.test.ts (order-dependent, not this diff; see tests)"
    ]
    },
    "check-changeset-presence": {
    "exit": 0,
    "at": "2c15e40cf",
    "verdict": "102 source file(s) and 1 published-contract change(s) of 18 released package(s) changed, and this change declares 1 changeset(s)"
    },
    "check-changeset-no-major": {
    "exit": 0,
    "at": "2c15e40cf",
    "verdict": "No changeset declares a major bump."
    },
    "check-changeset-fixed": {
    "exit": 0,
    "at": "2c15e40cf"
    },
    "check:changeset-claims": {
    "exit": 0,
    "at": "2c15e40cf"
    },
    "check:pending-changeset-literals": {
    "exit": 0,
    "at": "2c15e40cf"
    },
    "check:installed-pin-claims": {
    "exit": 0,
    "at": "2c15e40cf",
    "verdict": "OK"
    },
    "check:spec-symbols": {
    "exit": 0,
    "at": "2c15e40cf"
    },
    "check:phantom-deps": {
    "exit": 0,
    "at": "2c15e40cf"
    },
    "check:new-line-citations": {
    "exit": 0,
    "at": "2c15e40cf",
    "verdict": "0 new citation(s)"
    },
    "check:control-bytes": {
    "exit": 0,
    "at": "2c15e40cf"
    },
    "check:eager-closure": {
    "exit": 0,
    "at": "2c15e40cf",
    "verdict": "3049.2 KB gzipped across 72 of 2255 chunks (budget: 3119.4 KB, headroom: 70.2 KB); dist from the 5db13ba build, no bundler input changed since"
    },
    "check:spec-floors": {
    "exit": 1,
    "at": "2c15e40cf",
    "verdict": "The scan collapsed: 0 package(s) declare @objectstack/spec — the intended known effect until objectui#12334"
    },
    "check:lockfile-integrity": {
    "exit": 0,
    "at": "2e80824ea"
    },
    "check:lockfile-dedupe": {
    "exit": 0,
    "at": "2e80824ea"
    },
    "check:unused-deps": {
    "exit": 0,
    "at": "2e80824ea"
    },
    "check:published-dist": {
    "exit": 0,
    "at": "e8e9a35"
    },
    "pre_json_absent": true
    },
    "held_cards": {
    "11773": "exit 0 on the next tarball and the installed tree; @latest (17.7.0): exit 1",
    "11545": "exit 0; 17.7.0 control exit 1",
    "11681": "met: objectstack-ai/objectstack#22021 c5658133fc is an ancestor of d889448b93",
    "11970": "half: core 18.0.0-next.0 carries 4578c56e65; objectql is in no objectui manifest or lockfile",
    "11958": "exit 0; 17.7.0 control exit 1",
    "11864": "met (ef1fcb26a2 ancestor); its three sites are changed in this PR",
    "11762": "met (93125aeeb8 ancestor); executed in this PR",
    "12270": "exit 0; 17.7.0 control exit 1",
    "12271": "exit 1 as written (fixture lacks required label); with label exit 0; 17.7.0 with label exit 1",
    "12192": "exit 0; 17.7.0 control exit 1",
    "12314": "@latest (17.7.0) exit 1; run against @next (18.0.0-next.0) exit 0"
    },
    "line_budget": {
    "outside_lockfile": "+1502 / -1793 across 143 files (git diff --shortstat cea429b 2c15e40, pnpm-lock.yaml excluded)",
    "lockfile": "+106 / -106",
    "cap": "none: the seat update removed the ~400-line stop rule (one PR, all the way to green)"
    },
    "deviations": [
    "The break list's console+scripts group at a3f41ed ran in a detached second worktree (/home/user/objectui-issue-12030-measure) at the same commit, after two lock calls returned 99 while fixes were being edited in the main worktree.",
    "Bump route: pnpm update was measured and rejected (exact pins, peer ranges untouched, root manifest reformatted); the 40 ranges were raised textually and the lockfile regenerated by pnpm install only.",
    "Before ruling 6149296149 the narrow check-changeset-no-major edit was attempted once and refused by this session's permission system as a CI bypass; nothing was written. After that ruling the check-spec-range-floors edit was started, then stopped on the seat's HOLD: it was committed on a local branch only, never pushed, and deleted on the split. No gate script is edited on the PR branch.",
    "0b942ba (the sync major and .changeset/pre.json) was pushed before the split and is reverted by 7ec3c2b; no force-push.",
    "check:published-dist ran its internal full workspace build outside the verify lock at e8e9a35 (a check:* gate).",
    "The full test groups are pinned to the commits they ran on (5488ae7, ef2054e, 2e80824, 7ec3c2b), with targeted reruns for later commits; no single full-suite run exists at 2c15e40.",
    "PR line 1 is Fixes #12030 although scripts/tests/date-only-zone-pins-10183.test.ts is red locally: the red is an order-dependent TZ leak between pin files that this diff does not touch (evidence in tests); every other suite and gate is green or the stated known effect.",
    "Q4 is partial by the ruling's own carve-out: the object-grid defaultFilters reads are removed; the element:repeater flat-key reads stay because apps/console/src/dev/DevLists.tsx is a live in-repo producer."
    ],
    "files_changed": [
    ".changeset/12030-objectstack-next-18.md",
    "QUICK_REFERENCE.md",
    "apps/console/package.json",
    "apps/console/src/tests/registry-inputs-spec-parity.test.ts",
    "apps/console/src/components/submitRedirect.test.ts",
    "apps/site/package.json",
    "content/docs/plugins/plugin-view.mdx",
    "e2e/live/ci/backend.env",
    "package.json",
    "packages/app-shell/package.json",
    "packages/app-shell/src/hooks/tests/useApproverDirectory.contractEnvelope-5945.test.tsx",
    "packages/app-shell/src/services/MetadataService.retiredObjectEnabled.test.ts",
    "packages/app-shell/src/services/MetadataService.specKeyObjectPayload.test.ts",
    "packages/app-shell/src/utils/approverIdentity.test.ts",
    "packages/app-shell/src/utils/approverIdentity.ts",
    "packages/app-shell/src/utils/approverValueSources.test.ts",
    "packages/app-shell/src/utils/approverValueSources.ts",
    "packages/app-shell/src/views/ObjectView.relayRungCensus-7559.test.ts",
    "packages/app-shell/src/views/RecordApprovalsPanel.approverIdentity.test.tsx",
    "packages/app-shell/src/views/metadata-admin/EmbeddedItemEditor.indexFallback.test.tsx",
    "packages/app-shell/src/views/metadata-admin/ResourceEditPage.resetVerdict.test.tsx",
    "packages/app-shell/src/views/metadata-admin/celAuthoring.ts",
    "packages/app-shell/src/views/metadata-admin/i18n.ts",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowKeyValueField.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowKeyValueField.valueEnvelope.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.declaredDefault.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.endMessage-9336.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.endOutputVariable-9335.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.inactiveRetained.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.loopItemVariable-9340.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowRecipientsField.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.lookup.test.tsx",
    "packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.specDerivation.test.ts",
    "packages/app-shell/src/views/metadata-admin/inspectors/flow-value-envelope.test.ts",
    "packages/app-shell/src/views/metadata-admin/inspectors/flow-value-envelope.ts",
    "packages/app-shell/src/views/metadata-admin/previews/tests/block-config.test.ts",
    "packages/app-shell/src/views/metadata-admin/previews/block-types.ts",
    "packages/app-shell/src/views/metadata-admin/previews/flow-canvas-seeds.saveErrors-10948.test.tsx",
    "packages/app-shell/src/views/studio-design/ObjectActionsPanel.presets-11861.test.tsx",
    "packages/app-shell/src/views/studio-design/StudioDesignSurface.listViewInspector-11823.test.tsx",
    "packages/app-shell/src/views/studio-design/metadataError.heldEdit-11786.test.ts",
    "packages/auth/package.json",
    "packages/cli/package.json",
    "packages/cli/src/tests/registered-types-validate-ratchet-10859.test.ts",
    "packages/collaboration/package.json",
    "packages/components/package.json",
    "packages/components/src/tests/record-picker-inputs-spec-parity.test.ts",
    "packages/components/src/tests/record-picker-sort-members.test.tsx",
    "packages/components/src/renderers/basic/tests/element-list-inputs-11168.test.tsx",
    "packages/components/src/renderers/basic/record-picker.tsx",
    "packages/core/package.json",
    "packages/core/src/evaluator/optionRules.ts",
    "packages/core/src/utils/tests/normalize-list-view.declaredSpecFloor-9012.test.ts",
    "packages/data-objectstack/package.json",
    "packages/data-objectstack/src/metadata-client.layeredEnvelope.test.ts",
    "packages/data-objectstack/src/metadata-client.layeredRoute.test.ts",
    "packages/data-objectstack/src/metadata-client.overlayScope.test.ts",
    "packages/data-objectstack/src/metadata-client.ts",
    "packages/fields/package.json",
    "packages/fields/src/widgets/CapabilityMultiSelectField.tsx",
    "packages/fields/src/widgets/useFieldTranslation.ts",
    "packages/i18n/src/locales/ar.ts",
    "packages/i18n/src/locales/de.ts",
    "packages/i18n/src/locales/en.ts",
    "packages/i18n/src/locales/es.ts",
    "packages/i18n/src/locales/fr.ts",
    "packages/i18n/src/locales/ja.ts",
    "packages/i18n/src/locales/ko.ts",
    "packages/i18n/src/locales/pt.ts",
    "packages/i18n/src/locales/ru.ts",
    "packages/i18n/src/locales/zh.ts",
    "packages/layout/package.json",
    "packages/mobile/package.json",
    "packages/permissions/package.json",
    "packages/plugin-calendar/src/ObjectCalendar.tsx",
    "packages/plugin-calendar/src/tests/calendarUnionReads-8651.test.tsx",
    "packages/plugin-charts/package.json",
    "packages/plugin-chatbot/package.json",
    "packages/plugin-dashboard/package.json",
    "packages/plugin-designer/package.json",
    "packages/plugin-designer/src/MetadataFieldsPage.tsx",
    "packages/plugin-detail/package.json",
    "packages/plugin-detail/src/index.tsx",
    "packages/plugin-form/package.json",
    "packages/plugin-form/src/ObjectForm.submitRedirect.test.tsx",
    "packages/plugin-form/src/WizardForm.submitRedirect.test.tsx",
    "packages/plugin-form/src/tests/formSectionGroupReference-7051.test.tsx",
    "packages/plugin-form/src/tests/masterDetailDetailsMembers-8071.test.tsx",
    "packages/plugin-form/src/submitRedirect.test.ts",
    "packages/plugin-gantt/package.json",
    "packages/plugin-gantt/src/readme-navigation-example.test.ts",
    "packages/plugin-grid/package.json",
    "packages/plugin-grid/src/ObjectGrid.tsx",
    "packages/plugin-grid/src/tests/ObjectGrid.defaultFiltersRuleArray-6152.test.tsx",
    "packages/plugin-grid/src/tests/ObjectGrid.filterContextTokens-10607.test.tsx",
    "packages/plugin-grid/src/tests/ObjectGrid.malformedFilter-9050.test.tsx",
    "packages/plugin-grid/src/tests/gridDefaultFiltersLowering.test.tsx",
    "packages/plugin-grid/src/index.tsx",
    "packages/plugin-kanban/src/index.tsx",
    "packages/plugin-list/package.json",
    "packages/plugin-list/src/ListView.tsx",
    "packages/plugin-report/package.json",
    "packages/plugin-timeline/package.json",
    "packages/plugin-tree/package.json",
    "packages/plugin-view/README.md",
    "packages/plugin-view/package.json",
    "packages/plugin-view/src/ObjectView.tsx",
    "packages/plugin-view/src/tests/ObjectView.canonicalTableKeys.test.tsx",
    "packages/plugin-view/src/tests/ObjectView.filterSources.test.tsx",
    "packages/plugin-view/src/tests/ObjectView.gridFilterHandoff-11880.test.tsx",
    "packages/plugin-view/src/tests/ObjectView.namedViewContextTokens-10506.test.tsx",
    "packages/plugin-view/src/tests/ObjectView.tableSlotRelay-10976.test.tsx",
    "packages/react/package.json",
    "packages/runner/package.json",
    "packages/sdui-parser/package.json",
    "packages/test-support/package.json",
    "packages/types/package.json",
    "packages/types/src/tests/chartconfig-aria-retired-4044.test.ts",
    "packages/types/src/tests/dashboard-aria-retired-contract-twins.test.ts",
    "packages/types/src/tests/element-number-arm-10872.test.ts",
    "packages/types/src/tests/element-repeater-data-source-11880.test.ts",
    "packages/types/src/tests/flat-props-refusal-10872.test.ts",
    "packages/types/src/tests/grid-default-filters-gantt-map-filter-round10-6152.test.ts",
    "packages/types/src/tests/held-block-content-channels-10872.test.ts",
    "packages/types/src/tests/held-public-block-arms-10872.test.ts",
    "packages/types/src/tests/imported-defaults-8317.test.ts",
    "packages/types/src/tests/object-view-slot-key-lists.test.ts",
    "packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts",
    "packages/types/src/tests/public-block-arms-10872.test.ts",
    "packages/types/src/tests/record-details-top-level-9040.test.ts",
    "packages/types/src/tests/spec-object-refinements-7715.test.ts",
    "packages/types/src/authoring-nodes.ts",
    "packages/types/src/data-protocol.ts",
    "packages/types/src/field-types.ts",
    "packages/types/src/objectql.ts",
    "packages/types/src/record-components.ts",
    "packages/types/src/zod/layout.zod.ts",
    "packages/types/src/zod/objectql.zod.ts",
    "packages/types/src/zod/public-blocks.zod.ts",
    "pnpm-lock.yaml",
    "scripts/tests/check-eager-closure-budget.test.ts",
    "scripts/tests/check-lockfile-integrity.test.ts",
    "scripts/check-eager-closure-budget.mjs",
    "scripts/check-installed-spec-pin-claims.mjs"
    ],
    "open_questions": [
    {
    "question": "Two held cards' Restart-when probes cannot exit 0 as written. Rewrite them?",
    "evidence": "#11970 requires the lockfile to resolve @objectstack/objectql, which no objectui manifest or lockfile carries (core 18.0.0-next.0 does carry 4578c56e65). #12271's probe fixture omits the required label, so ListDraftsResponseSchema refuses at drafts.0.label (invalid_union) on 18.0.0-next.0; with label 'X' it exits 0, and 17.7.0 with label exits 1.",
    "options": [
    "A — the seat rewrites both probes to what objectui resolves (#11970 on @objectstack/core or the server release; #12271 with label) and restarts them on this bump",
    "B — leave the probes; restart both by hand"
    ],
    "recommendation": "A: a probe that cannot exit 0 holds a card forever; the measurement says both conditions are met in substance."
    }
    ],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted, not filed — scripts/tests/date-only-zone-pins-10183.test.ts: in its forked child the unit project's isolate:false lets the TZ one pin file leaves (Asia/Shanghai) leak into FormulaFunctions.dateOnlyZone-10866's suite-zone control; red twice in this worktree (7ec3c2b, 2c15e40), green alone (39/39) and green at a3f41ed in a fresh worktree; order comes from the per-worktree vitest cache. Test harness only, no public door, so no class a/b/c filing; it is in the PR's notes. dedupe words: date-only zone pins TZ leak forks isolate; dateOnlyZone suite zone control Asia/Shanghai; vitest cache file order TZ",
    "carrier: #12334 · noted, not filed — AGENTS.md §版本号策略 names OBJECTUI_ALLOW_MAJOR=1 as the sync-major switch; nothing under .github/ sets it and the repo-state case in scripts/tests/check-changeset-no-major.test.ts reads no switch, so the documented mechanism cannot pass Test (measured with the major at 5db13ba: check-changeset-no-major exit 1).",
    "carrier: the seat's routing of the element:repeater retirement · noted, not filed — packages/components/src/renderers/basic/data-list.tsx still reads flat object/filter/sort/limit as fallbacks; apps/console/src/dev/DevLists.tsx (routed in apps/console/src/App.tsx) writes properties.object and properties.limit, a live in-repo producer, so the reads were not deleted."
    ]
    }

  12. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat ACCEPT: objectui PR #12337 at 2c15e40 · domain:ui seat 1 · session_01CsyMRsFJBKNEMa4oPY1b5z · 2026-10-13T17:36Z

    Verdict: ACCEPT. Reviewed on GitHub against the claim 6142088237, the rulings 6148150305, 6149296149 and 6149376719, and the dev's report 6151240488.

    • Clause-②: yes, so a contract review at CONTRACT_REVIEW_TIER is owed on this head. needs:contract-review is set on the PR.

    • The PR is over the human-merge line: check-governed-merges --branch reads 3507 changed lines (+1608 / -1899) > 3000, generated files included. So it lands only after a GOVERNED_APPROVERS approval. needs-user-decision is set on the PR, review is requested from the approvers, and the 维护者速读 is on the PR.

    • PR form.

      • Draft, base main, assignee zhuangjianguo.
      • Line 1 is Fixes #12030, and no other closing verb appears in the body.
      • Line 2 is Clause-②: yes: 22 published packages move a consumer-facing @objectstack/* range from ^17.x to ^18.0.0-next.0.
    • Scope, per the split 6149376719.

      • The 40 @objectstack/* ranges in 32 manifests move to ^18.0.0-next.0. The lockfile is regenerated by pnpm install only (+106 / -106).
      • Every break the bump caused is followed in the same PR: page-block and view contract, flow dialect, approver registry, redirect messages, capability set, overlay scope and unique index, types mirror.
      • Q4 and Q8 are in, as ruled:
        • Q4 is partial by the ruling's own carve-out. The object-grid defaultFilters reads are removed. The element:repeater flat-key reads stay, because apps/console/src/dev/DevLists.tsx is a live in-repo producer.
        • Q8: the zh org overlay-scope label is gone with the spec's enum.
      • The sync major and .changeset/pre.json are reverted (7ec3c2b reverts 0b942ba, no force-push). No gate script is loosened.
      • check-eager-closure-budget.mjs only lowers its line: 3,281,467 → 3,194,246 bytes. That is objectui#11762's objectstack#22044 payback, whose restart condition this bump meets.
    • Prose, checked sentence by sentence.

      • The changeset: 22 packages minor. It covers the range move, the consumer break, and the defaultFilters retirement with its rename.
        • minor for an objectui-side break is AGENTS.md §版本号策略's convention.
        • The seat read the tombstone in the published @objectstack/[email protected] tarball: src/ui/component.zod.ts:5312, defaultFilters: retiredKey(…), objectstack#11509.
      • content/docs/plugins/plugin-view.mdx and packages/plugin-view/README.md:
        • the table read-by-name list drops defaultFilters;
        • the new retirement note and its rename;
        • "Two of the forwarded table keys are pairs";
        • the alias table loses the filter row;
        • the precedence paragraph names two tiers, with no legacy tier.
        • Each sentence matches ObjectView / ObjectGrid at the head. The examples left in place use only the pagination pair.
      • QUICK_REFERENCE.md names ^18.0.0-next.0 for spec and client, which matches the manifests.
    • Tests and gates.

      • The break list was measured first at a3f41ed: 50 files and 159 tests red, plus two gates.
      • The full suite ran in five groups, each pinned to the commit it ran on (5488ae7, ef2054e, 2e80824ea, 7ec3c2b), with targeted reruns at 2c15e40cf. There is no single full local run at the head, so this head's CI shards are the full-suite reading. ci.yml's root rule makes them a whole-workspace run, because pnpm-lock.yaml and the root package.json change.
      • Type-check: 81/81 (turbo) at 5db13ba, and the root type-checks at 2c15e40cf. The repo gate family is exit 0 at 2c15e40cf, except check:spec-floors.
      • check:spec-floors exits 1 at the head ("The scan collapsed: 0 package(s) …"). That is the effect recorded in 6149376719: it cancels any publish until objectui#12334 lands, and it runs on no PR.
      • scripts/__tests__/date-only-zone-pins-10183.test.ts is red locally, from a timezone leak between pin files in the unit project's isolate: false order. It is green alone (39/39), and green at a3f41ed in a fresh worktree. This head's CI shards decide it.
    • The held cards' probes (the dev's open question): the seat answers A.

      • On landing, the seat rewrites the two probes that cannot exit 0 as written:
        • objectui#11970: on @objectstack/core, which objectui resolves;
        • objectui#12271: with the schema's required label.
      • It restarts those two with the nine probes the dev measured met.
    • Declared deviations, accepted:

      • the break-list group ran in a detached second worktree at the same commit;
      • check:published-dist ran its internal full build outside the verify lock;
      • the full groups are pinned per commit.
    • Out of scope, routed:

      • The element:repeater flat-key reads (data-list.tsx) wait on their in-repo producer DevLists.tsx. The seat files that card after landing.
      • The OBJECTUI_ALLOW_MAJOR sentence in AGENTS.md is carried by objectui#12334.
      • The timezone leak has no public door. Not filed; carrier: none.
    • Behind main: mergeable_state reads behind (cut from cea429b). The merge queue builds on the merged tree, and this PR's CI ran on pull_request's merge ref.

    • CI on this head: 35 check-runs, every one completed: 31 success, 3 expected skips (dependabot and the two Test (coverage) jobs), and 1 red by design. Lint, Type Check, Repo Gates, Test, all 12 Test shards (a whole-workspace run, so date-only-zone-pins-10183 passed there), and the two lockfile checks are success, read off check-runs whose head_sha is 2c15e40cf1a6b305f7bb5c5f509f584042ee9ca3.

      • Red by design: Spec Main Shape Gate. All three conditions hold:
        1. Its workflow source calls it advisory on a PR, and it is not in the required set.
        2. It runs no merge_group.
        3. This comment records the cause: objectstack PR #23160 retired the view-level provider: 'api'. Its consumer card is objectui#12325.
      • Its 21 annotation lines on this head (run 115437248621) are identical to main's run on 72594f29ec (115425173959). The one source error is packages/core/src/adapters/resolveDataSource.ts:59 TS2678, which is not in this PR's files.
      • mergeable_state is unstable only because of this check.
    • Landing: a same-form ## Contract review PASS on this head, then a GOVERNED_APPROVERS approval, then this seat's pr_ready and automerge_enable (the merge queue). The maintainer's own merge is the other landing.

    Implemented-by: claude/issue-12030-objectstack-next-18 (mode:subagent dev of this seat)
    Reviewed-by: session_01CsyMRsFJBKNEMa4oPY1b5z


    Generated by Claude Code

  13. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12030,
    "addendum_to": 6151240488,
    "round": "patch round (seat ACCEPT 6151458792, contract review 6151661549)",
    "status": "done",
    "branch": "claude/issue-12030-objectstack-next-18",
    "pr": "#12337",
    "heads": {
    "previous": "2c15e40cf",
    "after_changesets": "ce2ca4e3c",
    "after_main_merge": "1c95e13af",
    "final": "a1ca2ad55"
    },
    "session": "session_01CsyMRsFJBKNEMa4oPY1b5z — the parent's id",
    "summary": "Changeset coverage: @object-ui/i18n gets its own minor changeset (the key capability.label.manage_org_presentation is replaced by manage_mailboxes, following spec 18's capability set; the exported TranslationKeys type narrows and widens), and @object-ui/console gets its own minor changeset because its published dist bundles its @objectstack/* devDependencies. plugin-calendar and plugin-kanban get none: rebuilt from source at 2c15e40, their dist carries neither the changed comment nor the unchanged comment beside it. The six devDependency-only packages get none: in each, the only manifest change is devDependencies['@objectstack/spec'], and none imports the spec from non-test source. main at 72594f2 is merged as 1c95e13, cleanly, with no manifest or lockfile touched. The PR body names the follow-up cards #12341, #12342, #12339, #11824 and #12334; the blank-Notify-title card and the repeater card are marked as filed by the seat next round.",
    "gates": {
    "at_a1ca2ad55_under_lock": "each exit 0: check-changeset-presence ('declares 3 changeset(s)'), check-changeset-no-major, check-changeset-fixed, check:changeset-claims, check:pending-changeset-literals, check:i18n-keys (3375 keys), check:i18n-drift, check:i18n-designer-parity, check:i18n-dead-keys (report), check:control-bytes",
    "type_check_at_1c95e13af": "turbo type-check filtered to app-shell, components, data-objectstack, i18n, plugin-detail, plugin-grid, types: 36/36",
    "tests_at_1c95e13af": "plugin-grid, i18n, data-objectstack, types in full; plus every test file main added or changed, and every app-shell test importing metadata-admin/i18n: 920 files passed, 16,446 tests passed, 13 skipped",
    "not_rerun": "the whole suite (the merge touches no manifest or lockfile) and the console eager closure after the merge; this head's CI shards and Bundle Analysis are those readings"
    },
    "api_writes": "2 this round — PATCH /repos//issues/12337 (PR body, relay run 38490904303, read back identical); POST /repos//issues/12030/comments (this addendum). 4 git pushes, no force.",
    "mcp_calls": "0",
    "deviations": [
    "@object-ui/console was not on the seat's list; I added a changeset for it, because its files[] publishes dist, which bundles the @objectstack/* devDependencies (npm has @object-ui/console 17.7.0).",
    "The first contact-test run was refused by the vitest positional-filter guard (objectui#7814): a listed file sat inside a listed package directory. Re-run with the overlap removed; nothing ran in the refused call.",
    "The BASELINE prose in check-eager-closure-budget.mjs lists the branch commits up to 2c15e40 only. The main merge brings main's own bundler inputs, and the PR body says so instead of editing the script."
    ]
    }

  14. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12030,
    "addendum_to": [
    6151240488,
    6158199329
    ],
    "round": "patch round 2 (opus re-review 6158463307 PASS at a1ca2ad)",
    "status": "done",
    "pr": "#12337",
    "heads": {
    "previous": "a1ca2ad55",
    "final": "0d457fe1f"
    },
    "session": "session_01CsyMRsFJBKNEMa4oPY1b5z — the parent's id",
    "summary": "Item 1: \"@object-ui/runner\": minor joins .changeset/12030-console-bundles-spec-18.md, reworded to cover both packages as app builds whose published dist bundles their @objectstack/* devDependencies and the @object-ui/* sources they compile. Runner is a Vite app build (vite build, no build.lib, no external) aliasing components, core, types and other packages to src. The other five pass the same files[] test, so they get no line: collaboration, mobile and sdui-parser are tsc builds of unchanged own sources, and plugin-charts and plugin-report are Vite lib builds whose rollupOptions.external externalises every bare import. Item 2: the retired-state wording now covers the ObjectGridSlotKey docblock (packages/types/src/objectql.ts, shipped in the d.ts), the zod mirror's defaultFilters comment, the grid round-10 test header, the plugin-grid registration note and the ObjectGrid props note. git grep over non-test sources leaves only retired/history wording and the tombstone-typed declaration. Item 3: the PR body names #12345 for the repeater reads and their DevLists.tsx producer. Optional: the main changeset now names the record_picker inputs dropped, the curated capability set, and element nodes that bind no object being accepted; each is true of the diff.",
    "gates_at_0d457fe1f": "under the verify lock, each exit 0: check-changeset-presence ('declares 3 changeset(s)'), check-changeset-no-major, check-changeset-fixed, check:changeset-claims, check:pending-changeset-literals, check:new-line-citations (0 new), check:control-bytes, check:spec-symbols, check:installed-pin-claims. turbo type-check filtered to @object-ui/types and @object-ui/plugin-grid: 16/16. Tests grid-default-filters-gantt-map-filter-round10-6152, object-view-slot-key-lists and imported-defaults-8317: 3 files, 392 tests passed.",
    "api_writes": "this round: PATCH /repos//issues/12337 (PR body, read back identical); POST /repos//issues/12030/comments (this addendum). One git push, no force; no label write.",
    "mcp_calls": "0",
    "deviations": [
    "I also reworded two prose spots the review did not name: the plugin-grid registration note, which said the renderer reads the deprecated keys as fallbacks, and the ObjectGrid props note's example list. Both said or implied that defaultFilters is read or authorable."
    ]
    }

  15. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12030,
    "addendum_to": [
    6151240488,
    6158199329,
    6158558223
    ],
    "round": "patch round 3 (opus re-review 6158813708 PASS at 0d457fe, with the pending-changeset finding)",
    "status": "done",
    "pr": "#12337",
    "heads": {
    "previous": "0d457fe1f",
    "final": "0cc4e8fcc"
    },
    "session": "session_01CsyMRsFJBKNEMa4oPY1b5z — the parent's id",
    "summary": "Commit 0cc4e8f rewords 8 pending .changeset/*.md this change did not add, wording only: each sentence the spec-18 move makes false gets a one-clause correction pointing at objectui#12030, history kept. Frontmatter is byte-identical in all eight (sha1 per block; check-changeset-overwrite reports declared-at-base equal to declares-now). The six named: 6152-grid-default-filters-gantt-map-filter, 11880-grid-filter-handoff, 12056-repeater-object-waiver, 7611-approver-registry-read, 11880-element-datasource-only, 12056-repeater-datasource. Found by the grep over all 438 pending: 11880-repeater-datasource (flat keys read 'until v18', bag object 'stays required', strict face accepting properties.object, a bag without object refused) and 12093-spec-main-compile (no release; the ObjectView defaultFilters read and the zh org label). No pending hit for ELEMENT_NUMBER_OBJECT_REQUIRED or manage_org_presentation. Every before/after sentence is listed in the PR body section 'Pending changesets on main reworded (patch round 3)'.",
    "gates_at_0cc4e8fcc": "one script under the verify lock, VERDICT command-exit 0, each gate exit 0: check-changeset-presence ('declares 3 changeset(s)'), check-changeset-no-major, check-changeset-fixed, check-changeset-overwrite (report-only: 3 added, 8 modified, 0 deleted, no declaration changed), check:changeset-claims, check:pending-changeset-literals, check:new-line-citations (0 new), check:control-bytes, check:installed-pin-claims.",
    "tests": "script tests that read the live .changeset/ or run a changeset gate on this tree, under the verify lock at 0cc4e8f: vitest --project unit over changeset-polarity-census, check-changeset-no-major, body-dialect-census, dollar-dialect-alias-census, check-changeset-claims, check-pending-changeset-literals, check-control-bytes, check-changeset-presence, check-changeset-overwrite: 9 files, 376 tests passed. No code moved; no package test or type-check re-run.",
    "api_writes": "this round: PATCH /repos//issues/12337 (PR body, relay read-back 36150 bytes identical, and a separate gh read-back identical); POST /repos//issues/12030/comments (this addendum). One git push, no force; no label write.",
    "mcp_calls": "0",
    "deviations": [
    "One clause in 11880-repeater-datasource went false with objectui#12085, not with this change: 'The registration now publishes the injected dataSource input; object stays required.' It sits in the bullet I was correcting, so I added '(until objectui#12085 dropped the flat query inputs)'. Evidence: the element:repeater registration in packages/components/src/renderers/basic/data-list.tsx publishes titleField, fields, emptyText and divided, and no object. The PR body names it; the seat may ask for it back out.",
    "Beyond the listed gates I also ran check-changeset-overwrite, the report-only gate CI runs in changeset-guard.yml for a change that modifies a pre-existing changeset, and check:installed-pin-claims."
    ]
    }

  16. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat ACCEPT, patch rounds 1–3: objectui PR #12337 at 0cc4e8f · domain:ui seat 1 · session_01CsyMRsFJBKNEMa4oPY1b5z · 2026-10-14T02:01Z

    Verdict: ACCEPT on the head 0cc4e8fcc2c74835de7a0616ab81231a8faec981. It continues ACCEPT 6151458792 at 2c15e40.

    Implemented-by: claude/issue-12030-objectstack-next-18 (mode:subagent dev of this seat)
    Reviewed-by: session_01CsyMRsFJBKNEMa4oPY1b5z


    Generated by Claude Code

  17. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: objectui PR #12337 → main c5406c2 · domain:ui seat 1 · session_01CsyMRsFJBKNEMa4oPY1b5z · 2026-10-14T02:38Z


    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

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedependenciesdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p1

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions