Skip to content

Bump the objectui pin to current main — 149 commits of frontend are outside the release record #10129

Description

@os-project-manager

Measured on origin/main, not recalled:

.objectui-sha (objectstack) 82a94170c4058d45 — objectui, 2026-08-17 21:51
objectui origin/main 0fd11444a89e5711 — 2026-08-20 04:51
commits in between 149

Why this matters beyond "it's old"

The platform ships as one version-locked train and the frontend enters the changesets pipeline exactly once: when .objectui-sha moves and bump-objectui.sh writes the @objectstack/console changeset for the range it crossed. Everything objectui merged after the pin is, by construction, in no changeset, no CHANGELOG and no release page. That is the failure scripts/check-objectui-pin-fresh.mjs exists for (#3340) — cutting v16 that way lost four frontend changes, two of them minor features.

That gate is enforcing on the Version Packages / release PR. So this is not cosmetic staleness: at the next GA cut it is red, and 149 commits of frontend are missing from the record.

Procedure — use the script, do not hand-edit the pin

scripts/bump-objectui.sh              # bumps .objectui-sha to ../objectui HEAD + writes the changeset
pnpm sdui:manifest                    # the other half (ADR-0082 D4 parity ratchet)

scripts/bump-objectui.sh --help prints the full contract. Two things it does that a manual edit does not: it derives the @objectstack/console changeset from objectui's own declared changesets over the range (package names decide inclusion, declared level decides the bump — nothing inferred from commit subjects, #4731), and it refuses to pretend a truncated walk is a complete one.

The trap that is live right now

The local objectui checkout is shallow — git -C ../objectui rev-parse --is-shallow-repository returns true. This is exactly the shape of objectstack#9408: a walk that stops inside the range still answers, and the oldest visible commit (shown as parentless, diffed against the empty tree) absorbs a whole batch. On the bump that produced the current pin's changeset, that credited 36 of 119 entries to a single commit that adds exactly one.

So:

  • Do NOT set OBJECTUI_NO_DEEPEN=1. Let the script deepen (git fetch --unshallow, measured ~6 s / ~4 MB on objectui).
  • After the bump, verify the changeset is not the degraded one. The degraded path labels itself — ⚠️ Degraded list — and names only the tip subject. A degraded entry becomes permanent published CHANGELOG text. If you get one, deepen and re-run rather than editing the table by hand.
  • The range is long enough that CONSOLE_CHANGES_MAX (default 100) may fire. If it caps, the script says so with the real count — carry that number into the PR body rather than letting it read as a complete list.

A free correctness check on the digest

The range contains objectui's @changesets/cli v3 migration (objectui e7c3b3e91, PR objectui#5307). That PR ships a changeset with empty frontmatter — changesets' own "releases nothing". So it must not appear in the @objectstack/console list. If it does, the digest is reading commit subjects instead of declarations and the whole list is suspect.

Acceptance

  • .objectui-sha equals objectui's main tip at bump time; record which SHA and its date in the PR body.
  • Exactly one @objectstack/console changeset, derived (no ⚠️ Degraded list banner), with the resolved bump level and why it resolved that way.
  • pnpm sdui:manifest actually run — Playwright chromium is pre-installed in this environment at /opt/pw-browsers and PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 is set, so do not run playwright install. If it produces parity changes, include them; if it cannot run, say so explicitly rather than skipping in silence (the gate exits 1 on a missing manifest since check:react-declaration-parity 是唯一没接进任何 workflow 的源码审计门禁,且无 MANIFEST 时静默 skip 退出 0 —— 它现在永远不可能红 #4690, so "it passed" without running it is not a thing).
  • CI's Console Pin Gate green (does the pinned SHA still build) — note this is a different question from freshness; both must be green.

Non-goals

  • No release. No publish, no version tag, no release-workflow dispatch, no merging of a Version Packages PR.
  • Do not touch .github/workflows/cut-rc.yml — it has its own pin handling and its own gate.
  • Do not edit content/docs/releases/**. The changeset is this PR's input to the release notes; release notes are written centrally at release time.
  • objectui's own version PR (objectui#4655, would cut 17.6.0) is open and unmerged and is none of this card's business — the pin is a SHA, not an npm version.

Activity

  1. os-project-manager commented on Aug 20, 2026

    @os-project-manager
    CollaboratorAuthor

    Claimed and dispatched by the PM loop.

    • Session: session_01HDA9nN6nXQngoQUAAzRdMb
    • Branch: claude/issue-10129-objectui-pin
    • Worktree: ../objectstack-issue-10129 (dedicated, per repo — no edits in the shared checkout, no git stash)
    • Model: opus. The contract-review tier (claude-fable-5) measured unavailable on quota twice today; the 2026-08-13 exemption applies, and this is a scripted pin bump with a verification step, not a contract review.

    Routing authority, verbatim from the maintainer: "objectui 最新版更新到 objectstack".

    File territory this claim covers

    .objectui-sha, one .changeset/console-<sha>.md, and whatever pnpm sdui:manifest legitimately regenerates. Nothing else.

    Explicitly not covered: .github/workflows/cut-rc.yml, scripts/bump-objectui.sh itself, content/docs/releases/**, and anything in the objectui repo.

    Serial constraints handed to the dev seat

    1. Use scripts/bump-objectui.sh. Hand-editing .objectui-sha skips the changeset derivation, which is the entire point of the pin bump.
    2. The objectui checkout is shallow — let the script deepen it. OBJECTUI_NO_DEEPEN=1 is forbidden here. A truncated walk does not fail, it answers wrong, and the answer becomes published CHANGELOG text.
    3. A ⚠️ Degraded list banner in the emitted changeset is a failed run, not a partial success. Deepen and re-run; never hand-edit the list.
    4. pnpm sdui:manifest must actually run. Chromium is pre-installed at /opt/pw-browsers — do not run playwright install. "Skipped it" is a reportable blocker, not a quiet omission.
    5. Perform no release, and do not touch objectui#4655.

    Self-check available for free: objectui e7c3b3e91 (the @changesets/cli v3 migration) is inside the range and ships an empty-frontmatter changeset, so it must be absent from the console list. Its presence would prove the digest is reading subjects rather than declarations.


    Generated by Claude Code

  2. os-project-manager commented on Aug 20, 2026

    @os-project-manager
    CollaboratorAuthor

    Re-dispatched. The first dev seat died to an API error (connection lost mid-response) before doing any work.

    State verified before re-dispatching, rather than assumed:

    • worktree ../objectstack-issue-10129 exists on claude/issue-10129-objectui-pin, working tree clean
    • git log origin/main..HEAD — empty; git diff --stat origin/main..HEAD — empty
    • the branch was pushed, carrying no work; no PR was opened
    • .objectui-sha on the branch is still 82a94170c405, i.e. unchanged

    So there is nothing half-done to clean up and nothing to reconcile. The second seat reuses the existing worktree and branch (a fresh git worktree add would fail on the occupied path), brings it up to current origin/main first, and carries the same constraints — same model tier, same file territory, same non-goals.

    Recording it here because a dispatch that dies at launch and one that dies mid-edit need different handling, and the difference is only visible if someone checked.


    Generated by Claude Code

  3. os-project-manager commented on Aug 20, 2026

    @os-project-manager
    CollaboratorAuthor
    {
      "issue": 10129,
      "status": "blocked",
      "branch": "claude/issue-10129-objectui-pin",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/10137",
      "premise_still_valid": true,
      "old_sha": "82a94170c4058d451ce3ac179d99296d90554479 (objectui, 2026-08-17 21:51:40 +0000)",
      "new_sha": "0fd11444a89e57114903afa2cc8115a3871f3e16 (objectui, 2026-08-20 04:51:32 +0000)",
      "commit_count": 149,
      "bump_level": "minor",
      "bump_level_why": "Highest level objectui itself declared over the range: 108 releasing changesets = 20 minor + 88 patch + 0 major. objectui declares no major inside a launch window (its own check-changeset-no-major.mjs), so minor is the ceiling. 5 entries are breaking by the author's own annotation rather than by declared level (#6099); each is marked BREAKING in the list.",
      "files_touched": [".objectui-sha", ".changeset/console-0fd11444a89e.md"],
      "digest": "clean/derived - NO degraded banner. --check-walkable returned exit 0 on the first ask, so the script never deepened.",
      "console_changes_max": "CAPPED. Default 100 fired; real count is 108 releasing changesets. The changeset carries the script's own line: '...and 8 more releasing changesets in this range (list capped at 100)'. Left at the default so the artifact is reproducible from the documented command; the cap is carried into the PR body.",
      "sdui_manifest": "RAN, green. 57 public blocks written to packages/console/dist/sdui.manifest.json; ADR-0082 D4 ratchet: 90 spec-only divergences, 0 blocks missing, 'no new DECLARATION divergence vs accepted baseline'. packages/spec/react-declaration-parity.baseline.json therefore needs no update and is NOT in the diff. Playwright: the objectui tree at this pin resolves playwright@1.62.1 which wants chromium build 1234 while /opt/pw-browsers holds 1194, so the docs/releases-maintenance.md symlink-tree remedy was applied in the session scratchpad with PLAYWRIGHT_BROWSERS_PATH set for that one invocation. 'playwright install' was never run.",
      "summary": "The pin bump itself is complete and verified: .objectui-sha moved from 82a94170c405 to objectui main 0fd11444a89e (149 commits), with the @objectstack/console changeset DERIVED from objectui's own declarations, and pnpm sdui:manifest run green. Blocked on the card's remaining acceptance item: CI's Console Pin Gate cannot pass, because scripts/build-console.sh cannot build objectui at any commit at or after objectui 6d5368ac8. objectui#5323 added a vite generateBundle probe (assert-lazy-linter-stays-lazy) whose private module-id regex /@objectstack[\\/+]spec/ is defeated by our own OBJECTSTACK_SPEC_DIST injection (#8134), which rewrites all 18 @objectstack/spec* specifiers to absolute framework-tree paths with no @objectstack segment; zero module ids match, the counter-probe refuses, the build dies. Isolated to one variable on the same tree and same pin: injection set = 'Build failed in 11.73s'; injection unset = exit 0, dist written. The fix is one parameter in objectui's apps/console/vite.config.ts (it already computes the injection-aware vendorObjectstackTest three lines away) and is outside this card's file territory, so it is filed as #10136 rather than attempted here. The SHA was passed to the script EXPLICITLY: the shared ../objectui checkout sits on another agent's branch (claude/pm-dispatch-upgrade-jyngga, 375efb4026), so the script's default rev-parse HEAD would have pinned that branch tip instead of main. The ADR-0087 disposition placeholder the script emits (adr-0087: TODO, #6494) was answered by hand as not-required (no-migration-prescription), argued per-entry against all five breaking upstream changesets - that step appears in neither the issue nor the dispatch and is the one part of the diff a reviewer should read closely.",
      "tests": "All at HEAD 656f413a4 (final commit; working tree clean, nothing landed after the union). Union re-derived from the real changed paths with `node scripts/pm/dispatch-gates.mjs .objectui-sha .changeset/console-0fd11444a89e.md` (5 families, all run): `pnpm check:changeset-gate-self-tests` -> 'check-empty-changeset --self-test: 118 assertions', 'check-adr-0087-registration --self-test: 212 assertions', 'check-changeset-no-major --self-test: 116 assertions'; `pnpm check:objectui-changeset` -> 'objectui-changeset-digest --self-test: all checks passed' + 'objectui-range --self-test: all checks passed'; `node scripts/check-adr-0087-registration.mjs --base origin/main` -> '1 declared-breaking changeset(s), each carrying an ADR-0087 disposition ... not-required (no-migration-prescription)'; `node scripts/check-changeset-no-major.mjs --base origin/main` -> 'This diff introduces no major bump.'; `node scripts/check-empty-changeset.mjs --base origin/main` -> 'No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added).'. Plus `pnpm check:nul-bytes` -> 'OK (scanned 6371 text file(s))' and a manual control-byte scan of both changed files (clean), and `pnpm check:objectui-pin-fresh` -> 'objectui pin is FRESH'. RED: `pnpm objectui:build` (scripts/build-console.sh) fails at objectui 0fd11444a89e with the assert-lazy-linter-stays-lazy counter-probe error - that is the blocker, not a regression from this diff. Controlled isolation, same build tree, only OBJECTSTACK_SPEC_DIST varied: with it set, 'Build failed in 11.73s'; with it unset, `pnpm --filter @object-ui/console exec vite build` exits 0. Mechanism proven directly rather than inferred: resolveSpecDistInjection emits 18 aliases of the form '@objectstack/spec/ai => /home/user/objectstack-issue-10129/packages/spec/dist/ai/index.mjs', and the probe's /@objectstack[\\/+]spec/ tests false on every one, while the same helper's returned vendorChunkTest IS widened with the override path. No ablation was performed (nothing in this diff is a guard).",
      "measurements_in_issue_that_were_wrong": "One. The issue body and the dispatch both state the shallow-clone trap (#9408) is LIVE for this range and instruct that the script must be allowed to deepen. The clone IS shallow (rev-parse --is-shallow-repository = true), but the truncation is OUTSIDE the range, so no deepening was needed or performed. Verified three ways rather than trusting one: --check-walkable returned exit 0 first ask; .git/shallow holds a5eb827156 (2026-08-13) and db8184cd91 (2026-08-16), both older than the old pin and neither inside 82a94170c405..0fd11444a89e; and walking all 149 range commits, every parent resolves under git cat-file -e (0 missing). Everything else in the issue body measured correct: pin 82a94170c405, objectui main 0fd11444a89e, 149 commits, and the free correctness check (objectui e7c3b3e91, the @changesets/cli v3 migration with empty frontmatter, is ABSENT from the console list as it must be).",
      "could_not_verify": "CI's own gate conclusions - the report is filed at draft-PR time per the dispatch contract, so the Console Pin Gate's real verdict on PR #10137 has not been read. It is PREDICTED red on the evidence above (the gate runs `bash scripts/build-console.sh`, and the probe is registered unconditionally in the plugins array with its own comment saying it runs on CI too); the CI runner path /home/runner/work/objectstack/objectstack/packages/spec has no @objectstack segment either, so the mismatch is not local-path-specific. Also unverified: whether the LINT half of the same probe would break if #9659's proposal to inject four more @objectstack/* packages lands - flagged in #10136, not tested.",
      "open_questions": [
        {
          "question": "How should the pin get past objectui 6d5368ac8? Answering this is what unblocks #10129; it is a cross-repo contract call, not a coding choice, so it is escalated rather than guessed.",
          "options": [
            "A - Fix objectui: pass the injection-aware spec test into assertLazyLinterStaysLazy() instead of hardcoding /@objectstack[\\/+]spec/. The file already computes it (vendorObjectstackTest). Needs a companion objectui PR, then re-run the bump on this branch at the fixed commit.",
            "B - Stopgap: pin below 6d5368ac8 now, chase the real fix later. Buys most of the 149-commit catch-up immediately at the cost of a second bump round and a second console changeset.",
            "C - Drop or weaken OBJECTSTACK_SPEC_DIST in scripts/build-console.sh so the probe's regex matches again."
          ],
          "recommendation": "A. Real business need: the injection (#8134) exists because a key added to packages/spec is otherwise unreachable in the Studio designer until three ordered cross-repo publishes complete - that is a measured authoring defect with real users, and C reinstates it, which is why C is not merely worse but actively harmful. Long-term soundness: the producer already publishes the right answer - resolveSpecDistInjection returns a widened vendorChunkTest precisely because it knows the rewrite moves the spec out of node_modules - and the defect is one consumer in the same file not reading it; fixing that is contract-first, while B and C are both workarounds in the AGENTS.md #0.1 sense. Hard to get wrong for AI-written code: A leaves a single source of truth for 'where does the injected spec live', so the next mechanism that needs it reads the producer instead of minting a sixth private regex - the exact failure that produced this bug. B is defensible ONLY as an explicit, time-boxed maintainer decision to take partial catch-up now, and it should say so out loud in its PR body; it is not something a dev seat should choose on its own, because it silently re-opens the freshness gap this card exists to close."
        }
      ],
      "out_of_scope_findings": [
        "filed as #10136: Console Pin Gate cannot build any objectui pin at/after 6d5368ac8 - the lazy-linter counter-probe is blind to the OBJECTSTACK_SPEC_DIST injection. This is THIS card's blocker, not an incidental find; filed in objectstack rather than objectui because the failing gate and the blocked card both live here, with the objectui-side fix location named in the body and a companion objectui PR called out as required.",
        "filed as #10138 (label: finding): pnpm sdui:manifest dies with ENOENT when packages/console/dist/ does not exist - gen-sdui-manifest.sh owns TARGET and never mkdir -p's it, and every failure branch there prints a Playwright remedy, so the printed advice points at the wrong layer. It bites exactly when the console build is broken, which is when an independent read on the registry is most wanted; the ratchet itself does not need the built dist (it drives a vite dev server over .cache/objectui-*)."
      ]
    }

    Generated by Claude Code

  4. os-project-manager commented on Aug 20, 2026

    @os-project-manager
    CollaboratorAuthor
    {
      "issue": 10129,
      "status": "done",
      "branch": "claude/issue-10129-objectui-pin",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/10137",
      "premise_still_valid": true,
      "old_sha": "82a94170c4058d451ce3ac179d99296d90554479 (objectui, 2026-08-17 21:51:40 +0000) — the pin on origin/main, which is what the range is derived FROM, not the superseded 0fd11444a89e",
      "new_sha": "9a3daf8d37ad973a621e5edd276fe32467f90684 (objectui, 2026-08-20 08:41:53 +0000) — objectui origin/main at bump time, re-read after 'git -C ../objectui fetch origin main'. Passed to the script EXPLICITLY: the shared ../objectui checkout still sits on another agent's branch (claude/pm-dispatch-upgrade-jyngga, 375efb402), so the default rev-parse HEAD would have pinned that branch tip.",
      "commit_count": 151,
      "bump_level": "minor",
      "bump_level_why": "Highest level objectui itself declared over the range: 108 releasing changesets = 20 minor + 88 patch + 0 major. objectui declares no major inside a launch window (its own check-changeset-no-major.mjs), so minor is the ceiling. 5 entries are breaking by the author's own annotation rather than by declared level (#6099); each is marked BREAKING in the list. Nothing inferred from commit subjects (#4731).",
      "files_touched": [".objectui-sha", ".changeset/console-9a3daf8d37ad.md (replaces .changeset/console-0fd11444a89e.md, which is deleted — exactly one console changeset, not two)"],
      "digest": "clean/derived — NO degraded banner. Accounting line: 108 releasing of 125 changesets added across 151 non-merge commits; omitted 17 release-nothing changesets and 27 commits carrying no changeset.",
      "deepening_needed": "NO, and re-checked rather than assumed. 'node scripts/objectui-changeset-digest.mjs --from 82a94170c405 --to 9a3daf8d37ad --check-walkable' returned exit 0 on the first ask, so the script never deepened and OBJECTUI_NO_DEEPEN was never set. Confirmed independently by the sound test only: walking all 151 range commits and resolving every parent with 'git cat-file -e' gives 0 missing. The clone IS still shallow (rev-parse --is-shallow-repository = true); the truncation is outside the range.",
      "console_changes_max": "CAPPED. Default 100 fired; the real count is 108 releasing changesets. The changeset carries the script's own line: '…and 8 more releasing changesets in this range (list capped at 100)'. Left at the default so the artifact is reproducible from the documented command; the real count is carried into the PR body.",
      "objectui_build": "SUCCESS — this is the whole point of the re-run. 'pnpm objectui:build' (scripts/build-console.sh) exit 0 at pin 9a3daf8d37ad: 'Bundle canary import/jobs present', 'Console bundle carries THIS tree's @objectstack/spec, and only it', '@objectstack/console dist ready (52004 KB) from objectui@9a3daf8d37ad'. Last run it died in generateBundle with 'counter-probe failed: no eagerly loaded chunk contains an @objectstack/spec module'. Proven to be a real green rather than a skipped probe two ways: the plugin is registered UNCONDITIONALLY in the plugins array of the config that actually built (.cache/objectui-9a3daf8d37ad/apps/console/vite.config.ts:435, no env guard), and the build's own spec-provenance assertion fired, which is the OBJECTSTACK_SPEC_DIST injection being active — i.e. the exact condition that used to defeat the probe was present and the build walked past generateBundle anyway.",
      "sdui_manifest": "RAN, green, no tracked files changed. '57 public blocks written to packages/console/dist/sdui.manifest.json'; ADR-0082 D4 ratchet: 'Summary: 90 spec-only divergences, 0 blocks missing from the registry' and 'no new DECLARATION divergence vs accepted baseline'. So packages/spec/react-declaration-parity.baseline.json needs no update and is NOT in the diff; git status clean after the run. Playwright: same revision mismatch as the first run (objectui at this pin resolves playwright@1.62.1 wanting chromium build 1234; /opt/pw-browsers holds 1194), fixed with the docs/releases-maintenance.md symlink-tree remedy in the session scratchpad with PLAYWRIGHT_BROWSERS_PATH set for that one invocation. 'playwright install' was never run. The #10138 ENOENT did not bite this time because the console build now succeeds and creates packages/console/dist/.",
      "adr_0087_disposition": "not-required (no-migration-prescription) — RE-DERIVED for the grown range, not copied. The measurement that matters and contradicts the expectation in the re-dispatch: the breaking set is STILL FIVE, not six. The range gained exactly two commits over the first run — objectui 413629a89 (docs/skills plus one pin test) and 9a3daf8d3 (objectui#5390, build-config only) — and BOTH ship an empty-frontmatter, release-nothing changeset, read directly from their frontmatter rather than inferred from subjects. Consequence: the console list is byte-identical to the previous revision's apart from the tip SHA, the accounting line and the range line (verified by diff). Each of the five was still judged one at a time against its upstream changeset, and the three repo-side facts the argument leans on were re-measured at THIS HEAD rather than carried over: packages/spec/src/ui/action.zod.ts still declares 'confirm' as a live alias of 'confirmText'; translateApp is still present in packages/spec/src/system/i18n-resolver.ts; packages/console/package.json still publishes a frozen prebuilt SPA (files = dist/README.md/CHANGELOG.md, sole exports entry ./package.json), so it re-exports none of the five surfaces. Gate agrees: check-adr-0087-registration reports '1 declared-breaking changeset(s), each carrying an ADR-0087 disposition'.",
      "free_correctness_check": "PASSES. objectui e7c3b3e91 (the @changesets/cli v3 migration, objectui#5307) ships an empty-frontmatter changeset and is inside the range; grep confirms it is ABSENT from the console list, as it must be.",
      "summary": "The pin bump is complete and the blocker is gone. .objectui-sha moved from 82a94170c405 (the pin on origin/main) to objectui main 9a3daf8d37ad, 151 commits, with the @objectstack/console changeset DERIVED from objectui's own declarations and the stale console-0fd11444a89e.md deleted rather than kept alongside. objectui#5390 is in this pin and was verified by CONTENT in the tree that actually built, not by sha ancestry: assertLazyLinterStaysLazy now takes the spec module-id test as a parameter and is handed specDistInjection.specModuleTest. 'pnpm objectui:build' consequently exits 0 where it previously died in generateBundle, and 'pnpm sdui:manifest' ran green with no tracked-file changes. One deviation from the dispatch, deliberate: the branch was brought up to origin/main by MERGE, not rebase — 656f413a4 was already pushed, so rebasing it would have required a force-push, which AGENTS.md branch-hygiene rule 3 forbids outright. Net diff against main is still exactly two files (+146/-1).",
      "tests": "All at HEAD a71b20ae0 (final commit; working tree clean, nothing landed after the union). Union re-derived from the real changed paths with 'node scripts/pm/dispatch-gates.mjs .objectui-sha .changeset/console-9a3daf8d37ad.md .changeset/console-0fd11444a89e.md' (5 families, all run). Self-tests: 'check-empty-changeset --self-test: 118 assertions over real temp git repos', 'check-adr-0087-registration --self-test: 212 assertions over real temp git repos', 'check-changeset-no-major --self-test: 116 assertions', 'objectui-changeset-digest --self-test: all checks passed', 'objectui-range --self-test: all checks passed'. Diff-scoped: 'check-adr-0087-registration: 1 declared-breaking changeset(s), each carrying an ADR-0087 disposition'; 'This diff introduces no major bump.'; 'No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added).'. Plus 'check-nul-bytes: OK (scanned 6383 text file(s))' with a manual control-byte scan of both changed files (grep -naP over the 0x00-0x1f/0x7f class — clean), and 'objectui pin is FRESH — .objectui-sha is objectui main (objectui@9a3daf8d37ad)'. Heavy steps, both under flock /tmp/os-heavy-verify.lock: 'pnpm objectui:build' exit 0 (evidence above) and 'pnpm sdui:manifest' exit 0 (57 blocks, no new divergence). No ablation performed — nothing in this diff is a guard.",
      "could_not_verify": "CI's own gate conclusions. The report is filed at draft-PR time per the dispatch contract, so Console Pin Gate's real verdict on the new head a71b20ae0 has not been read. It is PREDICTED green: the gate runs 'bash scripts/build-console.sh', which is exactly the command that now exits 0 locally, and the previous failure was proven not to be local-path-specific (the CI runner path carries no @objectstack segment either) — but a prediction is not a conclusion, and the PM reads the real job. Also unverified: whether the LINT half of the same probe would break if #9659's proposal to inject four more @objectstack/* packages lands — flagged in #10136, still untested.",
      "measurements_in_dispatch_that_were_wrong": "Two. (1) The re-dispatch anticipated the grown range would carry SIX breaking changesets ('a disposition argued for five breaking changesets is not automatically right for six'). Measured: still five — both commits the range gained ship release-nothing changesets. The disposition was still re-derived per entry rather than copied, and the repo-side facts re-measured, but the conclusion is unchanged and the reason is stated. (2) The dispatch said to REBASE onto origin/main; that was not done, because the branch tip was already pushed and rebasing a pushed branch requires a force-push, which AGENTS.md forbids. A merge commit (39a3befa8) was used instead and the push was a fast-forward. Everything else in the dispatch measured correct: objectui origin/main is 9a3daf8d37ad with objectui#5390's content at the stated lines; the old worktree was indeed gone; PR #10137 was open and draft; the shallow-clone deepening was again not needed; and objectui e7c3b3e91 is absent from the console list.",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Notes on the two findings the first run filed: #10136 is closed out in substance by objectui#5390 and this PR's green build — it is the PM's call whether to close it; #10138 (sdui:manifest ENOENT on a missing packages/console/dist/) is still live as filed, it simply did not fire this time because the console build now succeeds and creates the directory. No new findings this round.


    Generated by Claude Code


    Generated by Claude Code

  5. os-project-manager commented on Aug 20, 2026

    @os-project-manager
    CollaboratorAuthor

    Landed. PR #10137 went through the merge queue.

    Verified by content on origin/main (7f0cfdba92a1), not by sha ancestry — the queue lands as a squash, so ancestry proves nothing:

    • .objectui-sha = 9a3daf8d37ad973a621e5edd276fe32467f90684
    • .changeset/console-9a3daf8d37ad.md present, range line 82a94170c405...9a3daf8d37ad, no ⚠️ Degraded list banner
    • .changeset/console-0fd11444a89e.md absent — the superseded first-attempt changeset was deleted rather than left alongside

    151 commits crossed, @objectstack/console: minor, derived from objectui's own declarations (108 releasing changesets: 20 minor, 88 patch, 0 major). The list is capped at 100 of 108 by CONSOLE_CHANGES_MAX's default and says so in its own line — read the range, not the list, if you need all of them.

    Three things this card got wrong, all corrected by measurement

    1. The shallow-clone trap (bump-objectui.sh's walkability guard cannot detect a shallow objectui clone — the digest silently ships a complete-looking release record derived from a truncated history #9408) was not live here. The card said it was and told the dev seat to let the script deepen. The clone is shallow, but the truncation sits outside the pin range, so the walk was complete on the first ask. Sound test: all 151 commits walked, every parent resolves, 0 missing.
    2. The re-run's dispatch predicted six declared-breaking changesets in the grown range. Still five — both commits the range gained ship empty-frontmatter, release-nothing changesets. The ADR-0087 disposition was still re-derived per entry rather than copied, and the three repo-side facts re-measured at the landing HEAD.
    3. The re-run's dispatch said to rebase onto origin/main. Wrong instruction: the branch tip was already pushed, and rebasing a pushed branch needs a force-push, which AGENTS.md branch hygiene forbids. The dev seat used a merge commit and pushed fast-forward. Net diff stayed two files.

    What this card actually turned up

    The first attempt failed CI on Console Pin Gate — scripts/build-console.sh could not build objectui at any pin at or after objectui 6d5368ac8, because that repo's assert-lazy-linter-stays-lazy counter-probe carried a private module-id regex our own OBJECTSTACK_SPEC_DIST injection abolishes. Filed as #10136, fixed upstream in objectui#5390, and invisible to objectui's own CI because objectui never builds in injected mode. A routine pin bump is what surfaced a cross-repo build contract defect; that is the argument for bumping the pin regularly rather than letting it drift 149 commits.

    Both gates are green on the landed commit — Console Pin Freshness (is the pin current) and Console Pin Gate (does the pinned SHA build). They ask opposite questions and this card needed both.

    Follow-ups left open: #10138 (pnpm sdui:manifest ENOENT), objectui#5391 (resolveSpecDistInjection does not validate the override's own dependency resolution). No release was performed.


    Generated by Claude Code

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions