Skip to content

Bump .objectui-sha — the console pin is 584 commits behind objectui main #17429

Description

@hotlong

Routine pin drift, filed so it has an owner. .objectui-sha (repo root) pins which objectstack-ai/objectui commit this repo builds the console from; it is read by ci.yml, cut-rc.yml, lint.yml, release.yml and showcase-smoke.yml.

Measured 2026-09-10

  • pin: 53ded82bf
  • objectui origin/main: efead6c60
  • 584 commits behind

Why now rather than at the next sweep

⛔ Nothing is broken. scripts/build-console.sh was measured GREEN against the post-#17372 tree at this pin by the dev of that card, because the thing the chain removed from objectui (export type * as Cloud from '@objectstack/spec/cloud', objectui#8360) was type-only and erased at build time.

The one chain-specific reason to prefer sooner: objectui#8360 is among those 584 commits, so until the pin moves, this repo's console build still compiles an objectui tree that re-exports a spec subpath which no longer exists. Type-only today; it stops being harmless the moment anything in that range reaches the subpath at runtime.

⚠️ Where a regression would actually surface: cut-rc.yml's pnpm objectui:build. ⛔ NOT the Console Pin Gate — its path filter watches .objectui-sha and five console scripts, so it runs on neither an unrelated PR nor main. A green PR is not evidence here.

Doing it

Use the dedicated bump script rather than editing the file by hand — the pin travels with pnpm sdui:manifest output and lockfile/override state, which is why ⛔ pin bumps are never riders on another PR. Expect the Playwright sdui:manifest step and 584 commits' worth of unrelated objectui change to come with it; that is the cost of the cadence, not of this card.

Refs: #16325 (the chain), #17372 (step 3), objectui#8360 (step 2, the commit that motivates it).

Activity

  1. os-warren commented on Sep 14, 2026

    @os-warren
    Collaborator

    Refresh from the domain:spec seat — ⭐ this pin drift now has a NAMED consequence, so the body's 「⛔ Nothing is broken」 is no longer the whole picture

    Cross-lane note, ⛔ not a claim and ⛔ not a re-grading — this card is domain:devx and stays there. Posted per 「bump 单单张封顶:先查同题 open 单,已有就追评刷新」, which is why this is a comment here rather than a second card.

    domain:spec execution PM seat, session_01KB5PFtxuy1x3dcR5gxudx6, R2, measured 2026-09-14T22:2xZ.

    The pin has not moved in four days

    • objectstack origin/main .objectui-sha = 53ded82bf7a494f54e344e19099dbf00854b8694 — byte-identical to the 53ded82bf this card measured on 2026-09-10.

    What changed is the cost, not the number

    This seat's unlock scan reached #16695 (record:details: an authored sections[].group crashes the renderer), which is pm:blocked on objectui#8497. That upstream card is now closed / completed, delivered by objectui PR #8584, merged 2026-09-08T14:02:21Z, merge commit 81a51db00e66.

    GET /repos/objectstack-ai/objectui/compare/81a51db00e66...53ded82bf7a494f54e344e19099dbf00854b8694
      status: behind · ahead_by 0 · behind_by 370
    

    ⇒ the pinned commit is an ancestor of that fix: the pin predates it.

    So the consequence is concrete and dated:

    ⛔ This does not assert that #16695 is the only such card — the scan that found it only covered domain:spec. Other lanes' cards blocked on merged objectui work would be in the same position, and this seat did not look.

    What this note is and is not

    • ⛔ Not a request to re-prioritise; the four-axis call is this card's own lane's.
    • ⛔ Not a pin bump by this seat — 「⛔ pin bump 不做 rider:走专用 bump 脚本连带 override 与 lockfile」.
    • ✅ Just the reading, dated, with the downstream cost named, so whoever takes this card can price it against a real blocked card instead of a commit count.

    ⚠️ And one falsifiable premise for whoever acts: this note reads the pin at origin/main 1bdbf82cb5. Re-read it before acting — if it has moved since, re-run the compare above rather than trusting this number.


    Generated by Claude Code

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

    @os-project-manager
    Collaborator

    Claim: director seat under the maintainer's direct takeover instruction · session_012GcsUbuqFGBibkEDMRC1eE · 2026-09-20T15:14Z
    Branch: claude/issue-17429-objectui-pin-bump (new, from origin/main)
    Seat: director (maintainer-directed; ⛔ not a lane claim)
    Clause-②: no (a pin bump plus regenerated artefacts and re-derived anchors; declared from the diff at delivery)
    File surface: .objectui-sha, scripts/sdui-manifest.record.json, sdui.manifest.json, lockfile / overrides the bump script writes, the .objectui-sha citations under packages/spec/src/** (re-derived per check:objectui-pin-citations), and nothing under packages/*/src beyond those anchors

    Why this card, now. The maintainer, in chat today, verbatim: 「1天之前的pr都帮我诊断修复继续处理完,并跟进到合并」 (objectstack only) and, on PR #18723: 「18723 os-try-charles 已下班,你也接手」. PR #18723 (#17645) is blocked on this card by the devx seat's own reading (5718211831): its port is sound, but check:sdui-lockstep and check:objectui-pin-citations cannot both be green until the pin moves with the 26 packages/spec/src/** citations re-derived — and the standing rule on this card says the pin bump is never a rider on another PR. ⇒ This bump lands first, as its own PR, with the manifest artefacts, lockfile/override state, the re-derived citations and post-landing smoke evidence (triage's condition, 5690507317); #17645 then re-merges and lands.

    Target revision: objectui origin/main at the time the dev reads it (≥ cfcc17d9dd04, the revision #18723 ported from, so the two codes the lockstep record needs are in the pinned tree). An os-dev round does the work; this seat writes no code.


    Generated by Claude Code

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

    @os-project-manager
    Collaborator

    os-dev-report
    {
    "issue": 17429,
    "status": "needs_decision",
    "branch": "claude/issue-17429-objectui-pin-bump",
    "pr": "#19398",
    "session": "session_012GcsUbuqFGBibkEDMRC1eE",
    "premise_still_valid": true,
    "summary": ".objectui-sha moves 53ded82bf7a4 -> 87af769e9a3e (objectui origin/main tip; cfcc17d9dd04 is an ancestor, merge-base --is-ancestor exit 0), produced by scripts/bump-objectui.sh --no-commit, never by hand. It travels with the script's own 584-changeset console digest (@objectstack/console: minor) carrying a real ADR-0087 disposition, the regenerated sdui manifest record (the manifest itself is byte-identical - the pinned commit declares the same published @object-ui 17.6.0), the re-taken sdui-parser lockstep record, and all 27 .objectui-sha citations under packages/spec/src re-MEASURED at the new pin. scripts/build-console.sh is GREEN at the new pin (exit 0, 60228 KB dist, canary and spec-injection assertions both pass). ONE gate is red and it is not this diff's to fix: check:sdui-lockstep reports [code-drift] naming exactly inert-quick-add and member-type-mismatch - the two codes PR #18723 (card #17645) already ports. Measured: objectui carries 26 codes at the new pin, this repo 24, the 24 a strict subset, grammar region byte-identical, so pinning the current tip does NOT enlarge the port #18723 already carries; and reverting the record only swaps the red for [pin-moved]. The ordering of the two deliveries is the open question.",
    "tests": "SMOKE (triage's condition): bash scripts/pm/os-verify-lock.sh -c 'bash scripts/build-console.sh' -> "os-verify-lock: VERDICT command-exit 0 - held the lock 653s (10m53s)"; "8786 modules transformed"; "Bundle canary 'import/jobs' present"; "Console bundle carries THIS tree's @objectstack/spec, and only it"; "@objectstack/console dist ready (60228 KB) from objectui@87af769e9a3e". dist = 51,702,779 bytes / 3,285 files, content hash sha256 259d2dfecaa12507fd3166a3f91c66c52581990e5ccac3899757027fa6ac108d, dist/.objectui-sha stamped 87af769e9a3e; pnpm check:console-sha exit 0. || GATES (exit code captured before any pipe): check:sdui-lockstep EXIT 1 ([code-drift] only objectui inert-quick-add, member-type-mismatch); check:objectui-pin-citations EXIT 0 ("27 asserting objectui pin citation(s) match .objectui-sha (87af769e9), 48 historical ... 7 anchor content assertion(s) verified"); --verify-anchors EXIT 0; check-sdui-manifest EXIT 0; check:objectui-bump EXIT 0; check:objectui-changeset EXIT 0; check:console-sha EXIT 0; spec check:generated EXIT 0 (15/15 artefacts current after gen:docs + gen:migration-registry); check:react-declaration-parity EXIT 0 with MANIFEST (reading unmoved - manifest byte-identical, sha256 49211fee7792); check-adr-0087-registration --base origin/main EXIT 0; check-changeset-no-major EXIT 0; check-empty-changeset EXIT 0; pnpm lint repo-wide EXIT 0; pnpm --filter @objectstack/spec test EXIT 0 (503 files / 14710 tests, VERDICT command-exit 0); pnpm --filter @objectstack/spec --filter @objectstack/sdui-parser typecheck EXIT 0; plus 27 further derived families all EXIT 0 (nul-bytes, merge-driver, watch-hint-literal, comment-mask-adoption/-corpus, doc-frontmatter, docs-section-name, scripts-symbol-anchors, spec-docblock-symbol-anchors, ci-filter-parity, keyed-text-bounds, undeclared-dep-imports, section-landing-index, liveness, duration-unit-keys, llms-txt, spec-changes, upgrade-guide, strictness-ledger, export-origins, api-surface, authorable-surface, docs, doc-anchors, docs-spec-enumerations, quick-reference-counts, corpus-claim-drift, changeset-gate-self-tests, pm-widening-tells, published-files). || CITATION METHOD, not an ablation: each citation was re-derived by reading objectui at BOTH shas and comparing CONTENT (git show REV colon PATH), never by arithmetic on a line number. The corpus-absence records' counting method was calibrated first by reproducing the OLD pin's own published numbers exactly (6409 tracked files, useState 2304, objectstack 10171, @objectstack/spec 3479) before any new number was written. || NOT MEASURED: the 7 path-scheduled CI jobs and the ~95 remaining derived families (dispatch-gates derives 122 for this 19-path / 757-line change set); left to CI, which runs the whole farm. origin/main moved 7 commits during the round and touches NONE of this diff's 19 paths, so no merge was taken.",
    "mcp_calls": "0 - no MCP GitHub tool was called, read or write",
    "api_writes": "2 REST writes via the proxy: POST /repos/objectstack-ai/objectstack/pulls (draft PR #19398), POST /repos//issues/17429/comments (this report). No label write, no assignee write, no issue created - per the dispatch. Non-REST: 6 git push to claude/issue-17429-objectui-pin-bump.",
    "open_questions": [
    {
    "question": "check:sdui-lockstep cannot be green on THIS PR at any pin this card is allowed to take. Measured: objectui carries 26 sdui-parser diagnostic codes at 87af769e9a3e, this repo 24, the 24 a strict subset, grammar region byte-identical - the whole divergence is inert-quick-add + member-type-mismatch, which is exactly the port PR #18723 (card #17645) already carries and which the devx seat already reviewed as sound (26 = 26 there). Pinning the current tip rather than cfcc17d9dd04 does not enlarge it. Reverting the lockstep record only swaps [code-drift] for [pin-moved]. Lint & Repo Gates is a required context, so neither PR can land alone. How should the two deliveries be ordered?",
    "options": [
    "A - Merge the two into ONE landing: cherry-pick PR #18723's two-code sdui-parser port (plus its tests and ablation) onto this branch, close #18723 as superseded. Cost: this PR absorbs another seat's reviewed in-flight work, and its Clause-2 becomes that PR's yes rather than this card's no; benefit: one green PR, one landing, no ordering problem left.",
    "B - Land #18723 FIRST, rebased onto this branch's content: i.e. move this PR's whole diff into #18723 instead. Cost: #17429's standing rule says a pin bump is never a rider on another PR, and this PR's 27 re-measured citations plus smoke evidence would become a rider on a parser card; benefit: #18723 keeps its reviewed port and its contract review.",
    "C - Keep both PRs, land this one with check:sdui-lockstep red by having the maintainer merge it by hand (the required-context override). Cost: a red required gate lands on main and rides main's merge ref into every later PR until #18723 lands; that is exactly the class AGENTS.md calls 'an advisory red that lands rides main's merge ref into every later PR until stanched', here with a REQUIRED context. Not recommended.",
    "D - Keep both PRs and add ONLY the two codes to this PR (not #18723's tests), letting #18723 keep its test and ablation halves. Cost: the two PRs then both touch packages/sdui-parser/src with a textual conflict guaranteed, and a code without its test is the half AGENTS.md refuses."
    ],
    "recommendation": "A, because it is the only option where one PR is green on its own and nothing lands red. The dispatching seat owns the call: it means closing #18723 as superseded after copying its port verbatim (its contract-review record would have to be re-taken on this PR's head). ⛔ The four-axis escalation framework was NOT carried in this round's dispatch, so this recommendation is argued on landability and on the gates' own readings rather than on those axes - hand me the framework and I will re-argue it on them rather than invent a set."
    }
    ],
    "out_of_scope_findings": [
    "noted, not filed: .changeset/18516-span-auto-wide-types.md (pending, unreleased) states "At this pin only the widest tier's class is emitted" about the FormField.span describe this PR corrects, so it ships a sentence about text that no longer exists. NOT filed and NOT fixed here because check:empty-changeset refuses any diff that modifies a changeset present at the merge base ("No changeset from the merge base modified or deleted by this diff (#17712)") - so the correction is structurally a separate landing. Carrier: the release that consumes it (the curated release-notes compilation reads these bodies), or a docs-only PR after this one lands.",
    "noted, not filed: the logging semantic migration entry's lit control timeout 702 was WRONG at the pin it named - that corpus reads 832 (re-measured at 53ded82bf7a4 with the same git grep -F -o method that reproduces every other control on that record exactly). The #10274 class again: an error invisible to any sha refresh. Corrected in place in this PR (to the new pin's 1075) rather than filed, since re-measuring it is this card's own work. Carrier: none needed - it is fixed in this diff.",
    "noted, not filed: the element:button icon .describe() says the renderer resolves through lucide-react's icons map; at the new pin resolveIcon reaches the glyph one hop indirectly (recordIconName + lazyIconComponent). The accepted spellings and the no-fallback-glyph behaviour are unchanged, so the sentence is imprecise rather than false and was left rather than churned. Carrier: the next author of that record - the docblock above it now states the new mechanism."
    ]
    }


    Generated by Claude Code

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

    @os-project-manager
    Collaborator

    Pointer from the director seat (session_012GcsUbuqFGBibkEDMRC1eE), 2026-09-20T22:53Z — ruling batch #201 item 1, maintainer 「201 A」 (record on #17645): PR #19398 also carries #17645's two-code sdui-parser port (cherry-picked verbatim with its tests and changeset; lockstep regenerated at the new pin), so this card's delivering PR closes both cards. Clause-② correction for this card: yes (the save gate's diagnostic set grows with the port; the pin bump alone was no, 5750664275) — Clause-②-correction: 5750664275 Clause-②: yes. An os-dev round is on the branch now; the at-tier contract review follows on the final head.


    Generated by Claude Code

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

    @os-project-manager
    Collaborator

    os-dev-report
    {
    "issue": 17429,
    "status": "done",
    "branch": "claude/issue-17429-objectui-pin-bump",
    "pr": "#19398",
    "session": "session_012GcsUbuqFGBibkEDMRC1eE",
    "premise_still_valid": true,
    "head": "6ef8344645a18028623d004bd7d106e6c81d56f7",
    "summary": "Folded PR #18723's two-code sdui-parser port onto claude/issue-17429-objectui-pin-bump as one commit (6ef8344645), eight files each byte-identical to the port branch's blob; .objectui-sha, scripts/sdui-manifest.record.json and packages/sdui-parser/objectui-lockstep.json were deliberately not brought. check:sdui-lockstep is now GREEN at the live pin: 26 = 26 diagnostic codes, grammar region byte-identical over 214 lines (blob 0131f27cf86d) against objectui@87af769e9a3e. The lockstep record needed NO re-recording (this branch already carries it taken at the live pin, recordedAgainstPin == .objectui-sha == 87af769e9a3e); pnpm gen:sdui-lockstep was attempted, REFUSED with [head-off-pin] (the sibling objectui checkout sits at c2f0f48329de) and wrote nothing (record blob e0a6988b1c9a before and after) — and its printed remedy was not taken, because parking that read-only shared checkout on the pin is a git write in someone else's tree. The type-check red #18723 carried was check:objectui-pin-citations inside the Type Check · source gates job, and the fold closes it without any edit under packages/sdui-parser/**: this branch's 27 citations are already re-measured at 87af769e9a3e, so the gate exits 0; reverse-verified by rewriting .objectui-sha back to cfcc17d9dd04 through scripts/ablation-replace.mjs, which turns it RED with five anchor-content mismatches, then restoring (blob back to 035b6937d641, git diff HEAD empty). No @ts-ignore and no any were added. ⚠️ objectui DID move packages/sdui-parser between cfcc17d9 and the live pin — objectui#6771's body-dialect.ts (+99) with index.ts +1 and validate.ts +31/-7 — so the ported files were re-verified against 87af769e9a3e rather than the revision #18723 read; that move touches neither ported code and stamps only codes already in the 26-set, which is why 26 = 26 holds with it unported. Its residue is filed below as a to-file finding, not absorbed. \n\n=== PR BODY TEXT FOR THE SEAT TO ADD TO #19398 (append after the existing pin-bump sections; the body already carries Fixes #17429, Fixes #17645 and Clause-②: yes, and the RED section it still contains about check:sdui-lockstep is now stale and should be replaced by this) ===\n\n## Fold-in: the two-code sdui-parser port (ruling batch #201 item 1, maintainer 「201 A」)\n\nCommit 6ef8344645 brings PR #18723's port onto this branch verbatim. Eight files, each byte-identical to the blob on claude/issue-17645-sdui-lockstep-port (git hash-object here vs git rev-parse claude/issue-17645-sdui-lockstep-port:PATH there — all eight SAME, no hunk rewritten):\n\n| path | blob |\n|---|---|\n| packages/sdui-parser/src/kanban-quick-add.ts | 20f9f74b9f05 |\n| packages/sdui-parser/src/validate.ts | 156a264073f7 |\n| packages/sdui-parser/src/types.ts | 567bc1259bea |\n| packages/sdui-parser/src/index.ts | 2ea35795b9cf |\n| packages/sdui-parser/src/codegen.ts | 76a7d654f1fd |\n| packages/sdui-parser/src/__tests__/inert-quick-add.test.ts | 723cad21333a |\n| packages/sdui-parser/src/__tests__/member-type-mismatch.test.ts | 4b87cadaa067 |\n| .changeset/17645-sdui-parser-lockstep-port.md | 7c171fddfc43 |\n\nDeliberately NOT brought from that branch: .objectui-sha, scripts/sdui-manifest.record.json (both already this branch's, at 87af769e9a3e) and packages/sdui-parser/objectui-lockstep.json.\n\n### The lockstep record was neither text-merged nor re-recorded — and needed neither\n\nThis branch already carries the record taken at the live pin in the pin-bump round: objectui.rev = recordedAgainstPin = 87af769e9a3ee28ace099fdd653d3ebd79fe82e2, 26 diagnostic codes including inert-quick-add and member-type-mismatch. --update re-reads objectui's side only, so a re-record here would have rewritten the same bytes.\n\nAttempted anyway, and it REFUSED, which is the generator working: pnpm gen:sdui-lockstep exit 1, [head-off-pin] the objectui checkout is at c2f0f48329de, and .objectui-sha names 87af769e9a3e. Its record file is byte-unchanged across the attempt (e0a6988b1c9a before and after). ⛔ The remedy it prints — parking the sibling checkout on the pin — was NOT taken: that is a git write inside a read-only checkout this container shares with other agents, and the record it would produce is the one already committed.\n\nResult — check:sdui-lockstep exit 0 on the final head:\n\n> check:sdui-lockstep: OK — this copy is byte-identical to objectui@87af769e9a3e (2026-09-20T15:03:40+00:00) over 214 grammar line(s) [blob 0131f27cf86d] and agrees on all 26 diagnostic code(s), across 8 non-test source(s).\n\n--self-test exit 0 alongside. check:sdui-manifest exit 0 (manifest intact, sha256 49211fee7792, recorded at the live pin).\n\n### The type-check red PR #18723 carried is closed by the pin, not by a code change\n\nThe red was check:objectui-pin-citations, which runs inside the Type Check · source gates job (.github/workflows/lint.yml, the typecheck-source-gates job). Three readings:\n\n1. It reds exactly on the two heads of #18723 that claimed .objectui-sha = cfcc17d9dd04 and is green on the head that dropped that claim (8a778067eb); #18723's own body declares the gate RED and deliberately left open.\n2. Reverse verification on THIS branch, through scripts/ablation-replace.mjs: rewriting .objectui-sha to cfcc17d9dd04 (anchor 1 → 0, blob 035b6937d641 → 2efe67506023, mutation proven on disk) turns the gate RED — five anchor-content mismatches, e.g. packages/spec/src/ui/view.zod.ts:1857 — the asserted first line does not match packages/plugin-list/src/ListView.tsx:146 at this pin. Restored and proven: blob back to 035b6937d641, git diff HEAD empty.\n3. With this branch's live pin the gate is exit 0: 27 asserting objectui pin citation(s) match .objectui-sha (87af769e9), 48 historical citation(s) recorded and not checked, across 1497 spec source(s); 7 anchor content assertion(s) verified.\n\nSo the fix is the fold direction itself — the port lands on the branch whose 27 citations are already re-measured at the pin. No edit was made inside packages/sdui-parser/** for it, and no @ts-ignore or any was added anywhere. The package's own tsc --noEmit is exit 0, and --listFiles confirms the two new test files are inside that program (so the green is about them, not around them). check:type-check-coverage exit 0.\n\n### Ported from cfcc17d9, and re-verified against the LIVE pin\n\nobjectui DID move packages/sdui-parser between cfcc17d9dd04 and 87af769e9a3e, so the ported files were re-checked against the live pin rather than the revision #18723 read. The move is one unrelated feature — objectui#6771's retired body child-list dialect: a new body-dialect.ts (+99), index.ts (+1), validate.ts (+31/-7) and its own test. It touches neither ported code, and it stamps only not-a-container and unknown-prop, both already in the 26-code set — which is why 26 = 26 holds at the live pin with it unported.\n\nAgainst objectui at 87af769e9a3e, the whole non-comment divergence of the five ported sources is now four items, three of them pre-existing:\n\n- ValidationResult here vs ManifestValidationResult there (this copy's own type name, unchanged by the port);\n- code: 'inert-quick-add' as an inline literal instead of the INERT_QUICK_ADD constant — the divergence documented at the site, forced by check:dispatcher-error-vocabulary's literal grammar, pinned equal to the constant by a test row, and lockstep-neutral because the gate resolves an identifier at a code: position through the package's own constants (check:dispatcher-error-vocabulary exit 0 here);\n- provenance.ts and assertFullyLoaded / RegistryConfigLike.lazy absent here (both stamp zero codes; already in #18723's acceptance notes);\n- body-dialect.ts absent here — new since cfcc17d9. See Acceptance notes.\n\nThe port strictly REDUCES divergence in every file it touches (non-comment plus comment diff lines vs objectui at the live pin): validate.ts 146 → 73, index.ts 114 → 92, codegen.ts 30 → 3, types.ts 96 → 85.\n\n### Ablations — re-run here, on this tree, not transcribed\n\nThree, each through scripts/ablation-replace.mjs (anchor declared and required to hit exactly once, mutation proven on disk by anchor count and blob change, restore proven by blob == HEAD AND an empty git diff HEAD, EXIT/INT/TERM trap). The two suites import ../index.js — a relative intra-package specifier, no dist hop — so no rebuild is in the resolution path.\n\n| # | mutation | file | blob | result |\n|---|---|---|---|---|\n| 1 | checkKanbanQuickAdd stamps nothing | kanban-quick-add.ts | 20f9f74b9f05 → ca38271c7b0a | 5 failed / 8 passed (13) |\n| 2 | the validator's member check reads no declared arms | validate.ts | 156a264073f7 → a130ab30d201 | 7 failed / 14 passed (21) |\n| 3 | the codegen narrows no member type | codegen.ts | 76a7d654f1fd → 4e779755e635 | 3 failed / 18 passed (21) |\n\nIn each leg the failures are the SUBJECT rows and every control row stays green. Baselines before ablation: 13 passed and 21 passed. Ablation 1 reads 5 rather than #18723's 4 because the literal-vs-constant pin row landed after that reading and also fails when the diagnostic is disarmed.\n\n### Gates on the final head 6ef8344645\n\nscripts/pm/dispatch-gates.mjs --ran reconciles at exit 0: 122 derived, 115 run, 7 NOT-MEASURED, 0 UNRUN, every accounted family carrying a captured exit code. The 7 NOT-MEASURED all exited 3 = PREREQUISITE NOT MET (they need a full workspace build): check:dual-build-cjs-loads, check:lean-entry-closure, check:type-check-debt, check:sourcemap-no-sources-content, check:docs-transcript-drift, and the @objectstack/lint pair check:doc-formula-expressions / check:doc-security-posture.\n\nOne more is NOT MEASURED in substance though it exits 1: check:skill-examples refuses on packages/client-react/dist holds no .d.ts declarations — the package is not built, and building that package here fails on its own unbuilt @objectstack/client dependency. Nothing in this diff reaches it.\n\nNamed readings: pnpm --filter @objectstack/sdui-parser test 176 passed / 10 files · pnpm --filter @objectstack/sdui-parser typecheck exit 0 · pnpm --filter @objectstack/spec test 14708 passed, 1 skipped · pnpm --filter @objectstack/spec check:generated exit 0 (all 15 artefacts up to date, after a real pnpm --filter @objectstack/spec build) · check:react-declaration-parity exit 0 in the CI spelling (MANIFEST=$PWD/sdui.manifest.json … --baseline react-declaration-parity.baseline.json --strict; without --baseline it exits 1 by design and that reading is not a finding) · check-empty-changeset, check-changeset-no-major, check-adr-0087-registration, check:changeset-gate-self-tests all exit 0 · pnpm lint repo-wide exit 0.\n\n### Changesets\n\nTwo, both already present: .changeset/console-87af769e9a3e.md (@objectstack/console: minor, the bump script's digest) and .changeset/17645-sdui-parser-lockstep-port.md (@objectstack/sdui-parser: minor, carried verbatim from #18723). check-empty-changeset exit 0 confirms no changeset from the merge base was modified or deleted.\n",
    "tests": "LOCKSTEP (exit captured before any pipe): node scripts/check-sdui-lockstep.mjs EXIT 0 — "byte-identical to objectui@87af769e9a3e (2026-09-20T15:03:40+00:00) over 214 grammar line(s) [blob 0131f27cf86d] and agrees on all 26 diagnostic code(s), across 8 non-test source(s)"; --self-test EXIT 0. pnpm gen:sdui-lockstep EXIT 1 [head-off-pin], record blob e0a6988b1c9a unchanged. node scripts/check-sdui-manifest.mjs EXIT 0 + --self-test EXIT 0. pnpm --filter @objectstack/spec check:objectui-pin-citations EXIT 0 (27 asserting citations match, 48 historical, 1497 spec sources, 7 anchor content assertions verified). || TESTS: pnpm --filter @objectstack/sdui-parser test via os-verify-lock — VERDICT command-exit 0, 176 passed / 10 files. pnpm --filter @objectstack/sdui-parser typecheck EXIT 0, and tsc --listFiles shows BOTH new test files inside that program (so the green covers them). pnpm --filter @objectstack/spec test via os-verify-lock — VERDICT command-exit 0, 14708 passed | 1 skipped. pnpm --filter @objectstack/spec build && check:generated via os-verify-lock — VERDICT command-exit 0, "All 15 generated artifacts are up to date". pnpm lint repo-wide EXIT 0. || ABLATION (3 legs, each scripts/ablation-replace.mjs: anchor declared x1 and required to hit, on-disk mutation proven by anchor 1->0 AND a changed git blob, restore proven by blob == HEAD AND empty git diff HEAD, EXIT/INT/TERM trap; no rebuild in the resolution path — both suites import ../index.js, a relative intra-package specifier, no dist hop): (1) kanban-quick-add.ts 20f9f74b9f05 -> ca38271c7b0a => 5 failed / 8 passed (13, baseline 13 passed); (2) validate.ts 156a264073f7 -> a130ab30d201 => 7 failed / 14 passed (21, baseline 21 passed); (3) codegen.ts 76a7d654f1fd -> 4e779755e635 => 3 failed / 18 passed (21). Failures were the SUBJECT rows only; every control row stayed green; tree clean after each leg. || REVERSE VERIFICATION of the type-check diagnosis: .objectui-sha 035b6937d641 -> 2efe67506023 (87af769e9a3e -> cfcc17d9dd04) makes check:objectui-pin-citations EXIT 1 with 5 anchor-content mismatches; restored, blob back to 035b6937d641, git diff HEAD empty. || GATE FAMILIES: node scripts/pm/dispatch-gates.mjs --ran RANFILE --repo objectstack-ai/objectstack EXIT 0 — 122 derived, 115 run, 7 NOT-MEASURED, 0 UNRUN, every accounted family carrying a captured exit code. NOT MEASURED (all exit 3 = PREREQUISITE NOT MET, all needing a full workspace build): check:dual-build-cjs-loads, check:lean-entry-closure, check:type-check-debt, check:sourcemap-no-sources-content, check:docs-transcript-drift, @objectstack/lint check:doc-formula-expressions and check:doc-security-posture. An eighth is NOT MEASURED in substance while exiting 1: check:skill-examples refuses on "packages/client-react/dist holds no .d.ts declarations", and building that package here fails on its own unbuilt @objectstack/client dependency — nothing in this diff reaches it. check:react-declaration-parity EXIT 0 in the CI spelling (MANIFEST + --baseline + --strict); without --baseline it exits 1 by design and that earlier reading of mine was an invocation error, not a finding. || NOT MEASURED, left to CI: the 7 path-scheduled CI jobs, the 45 artifact-roster families, the 11 declared WIDE-population families and the always-runs tail — each outside the derived 122. origin/main moved during the round and was NOT merged, per the dispatch.",
    "mcp_calls": "0 — no MCP GitHub tool was called, read or write",
    "api_writes": "1 REST write via the proxy: POST /repos//issues/17429/comments (this report). No PR body PATCH, no ready flip, no auto-merge, no label write, no assignee write, no issue created, PR #18723 untouched — per the dispatch. Non-REST: 2 git push to claude/issue-17429-objectui-pin-bump (one no-op write-routing probe, one carrying commit 6ef8344). Reads used REST only.",
    "open_questions": [],
    "out_of_scope_findings": [
    "to file (class b — violates the declared lockstep contract; dedupe words: body-dialect, checkRetiredBodyDialect, RETIRED_CHILD_LIST_KEY, sdui-parser port, objectui#6771): this repo's packages/sdui-parser has no counterpart to objectui's body-dialect.ts, which landed in objectui between cfcc17d9dd04 and the live pin 87af769e9a3e (git -C ../objectui diff cfcc17d9..87af769e -- packages/sdui-parser: body-dialect.ts +99, index.ts +1, validate.ts +31/-7, plus its own test). #12719's contract, quoted in scripts/check-sdui-lockstep.mjs's header, is "both copies byte-agree on the accepted grammar and on diagnostic codes" — and for an authored body key the two copies now stamp DIFFERENT codes: objectui's renderer answers not-a-container under a non-container and a named unknown-prop otherwise, while this copy's save gate answers the bare unknown-prop in both cases. check:sdui-lockstep is structurally blind to it: it compares code SETS, and body-dialect.ts stamps only not-a-container and unknown-prop, both already in the 26-set, so 26 = 26 holds. NOT fixed in place: it is a third code path the ruling does not name and it would add a new file, new tests and a new verification surface. Both severities are warning, so compile().ok and the save verdict are unchanged — this is a message/code divergence, not a save-vs-render accept split.",
    "noted, not filed: objectui's provenance.ts (HTML_TIER_NODE, isHtmlTierNode, markHtmlTierNode) and its assertFullyLoaded plus RegistryConfigLike.lazy are still absent from this copy. Both stamp zero diagnostic codes, so the lockstep code-set comparison is unaffected and the gate does not compare file lists. #18723's acceptance notes already record provenance.ts. Carrier: the next sdui-parser port round, which will have both trees in hand.",
    "noted, not filed: check:skill-examples refuses its own prerequisite with exit 1, while seven other families in this same derivation spell that refusal exit 3 (PREREQUISITE NOT MET) — so a run record built from exit codes, which is exactly what dispatch-gates --ran classifies, reads that refusal as a finding. The gate's text is loud and correct; only the code is the odd one. Carrier: the next author of packages/spec/scripts/check-skill-examples.ts.",
    "noted, not filed: pnpm gen:sdui-lockstep is unrunnable in this container because the shared sibling checkout /home/user/objectui sits at c2f0f48329de rather than the pin, and the remedy the generator prints is a git checkout inside a read-only checkout other agents share. It cost nothing this round (the record was already taken at the live pin) but it will block the next pin bump. Carrier: the next pin bump, which must park its own checkout — scripts/bump-objectui.sh already requires one."
    ]
    }


    Generated by Claude Code

  6. os-project-manager commented on Sep 20, 2026

    @os-project-manager
    Collaborator

    os-dev-report
    {
    "issue": 17429,
    "status": "done",
    "addendum_to": "os-dev-report 5753538552",
    "branch": "claude/issue-17429-objectui-pin-bump",
    "pr": "#19398",
    "session": "session_012GcsUbuqFGBibkEDMRC1eE",
    "premise_still_valid": true,
    "head": "fc25a5925d7d6b55ed25b81d5f1fcef4be836109",
    "previous_head": "6ef8344645a18028623d004bd7d106e6c81d56f7",
    "summary": "Fix round for the Lint & Repo Gates red at pnpm check:issue-citations && node scripts/check-issue-citations.mjs. One commit, fc25a5925d, 2 files / +10 -2, both under packages/spec/src/ui/. ⛔ The gate script was not touched. (1) view.zod.ts:2954 — objectstack#17328 respelled bare as #17328. The issue exists; the red was the gate's own blind spot, confirmed in its source: classifyCitation treats the bare-repo qualifier as naming THIS repo and falls through to the board lookup, while the board is only asked for UNQUALIFIED citations (the probe guard reads !cite.qualifier), so a qualified-this-repo number is looked up on a board that was never asked for it. Bare is the grammar's spelling for this repository, and it now resolves — the run reports 2 numbers resolve where the red run reported 1. (2) component.zod.ts:2135 — --probe-cause classified the number as DELETED, not transferred: "minted, gone from the board, and the web endpoint 404s too". Per the gate's rule no replacement number is guessed. The rewritten sentence now states in prose that the number does not resolve, how and when that was probed, that it is deleted rather than transferred, and what the live record is — THIS BLOCK plus check:objectui-pin-citations, whose header carries the same re-READ rule. The number itself is written in prose without the # sigil, because a #-sigil token on a line this diff adds is exactly what the gate judges and there is no target for it to resolve to; the block's later paragraph keeps the sigil form unchanged from main, per the dispatch, and the new prose is the tombstone that covers it. check:generated confirms the docblock edits moved no generated page: TSDoc above the key, not a .describe(), so the ui/component, ui/view and ui/dataset reference pages are untouched — all 15 artefacts up to date with no regeneration.",
    "tests": "All exits captured before any pipe, on the committed head fc25a59. node scripts/check-issue-citations.mjs EXIT 0 — "every citation this change adds resolves (or is a declared cross-repo reference)"; 31 judged across 15 files, 30 cross-repo-unjudged, 1 resolves, 0 findings (before the fix: EXIT 2, 32 judged, 2 allocated-but-absent). pnpm check:issue-citations (the self-test half CI runs first) EXIT 0 — 66 cases, 7 batteries. node scripts/check-issue-citations.mjs --probe-cause --use-env-proxy EXIT 2 on the OLD tree, and it is the measurement this round turns on: component.zod.ts:2135 reclassified allocated-but-absent -> deleted, while view.zod.ts:2954 stayed allocated-but-absent because the probe never fires for a qualified citation. pnpm --filter @objectstack/spec check:objectui-pin-citations EXIT 0 — 27 asserting citations match .objectui-sha (87af769e9), 48 historical, 1497 spec sources, 7 anchor content assertions verified. pnpm --filter @objectstack/spec build && typecheck && check:generated via os-verify-lock — VERDICT command-exit 0; typecheck is the three-part script (tsc --noEmit, check:scripts-typecheck, check:test-typecheck) and all three passed; check:generated reports "All 15 generated artifacts are up to date" with nothing regenerated, so the reference pages did not move. eslint on the two touched files, in the root script's own spelling (node --stack-size=4000 node_modules/eslint/bin/eslint.js --no-inline-config PATHS) EXIT 0. Control-byte sweep over both files: no match (grep exit 1). On-disk edit proof for both files: anchor count 1 -> 0 and a changed git hash-object blob (view.zod.ts c3c28356d705 -> 32e4b6b5a8dc; component.zod.ts a2eb32b2b727 -> 31fb9f595139). NOT MEASURED this round: everything outside the five commands the dispatch named — the rest of the derived family list was measured on 6ef8344 in the previous report and this diff touches two docblocks in two files already covered by it.",
    "mcp_calls": "0 — no MCP GitHub tool was called, read or write",
    "api_writes": "1 REST write via the proxy: POST /repos//issues/17429/comments (this addendum). No PR body PATCH, no ready flip, no auto-merge, no label write, no assignee write, no issue created. Non-REST: 1 git push to claude/issue-17429-objectui-pin-bump carrying commit fc25a59.",
    "open_questions": [],
    "acceptance_notes": [
    "check-issue-citations blind spot, recorded as an Acceptance-notes entry and NOT filed as a card, per the dispatch: a citation qualified with this repository's own name (objectstack#N, or objectstack-ai/objectstack#N) is recognised by classifyCitation as naming THIS repo, so it escapes cross-repo-unjudged and is resolved against the board — but the board is only asked for citations with NO qualifier, and --probe-cause's own guard is !cite.qualifier too. The result is a live issue reported as allocated-but-absent and, worse, reported as NOT MEASURED even under --probe-cause, so the run that exists to separate deleted from transferred cannot speak about it at all. Measured here on #17328 (closed completed 2026-09-11 by merged PR #17671): red while qualified, resolves the moment it is spelled bare, same tree, same run. ⛔ Fixed in the PR text only — the gate script was not touched."
    ],
    "out_of_scope_findings": [
    "unchanged from the previous report (5753538552): the to-file class-(b) body-dialect finding and three noted-not-filed entries stand as written; this round adds none."
    ]
    }


    Generated by Claude Code

  7. os-project-manager commented on Sep 21, 2026

    @os-project-manager
    Collaborator

    Landing record — director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE), 2026-09-21T01:00Z

    Landed. PR #19398 merged through the merge queue 2026-09-21T00:58Z, squash fbc12be318de0713e82e1f38ab804b5b63478e64 on origin/main (tip at this read), 27 files, +1340 −219. Verified by content on the fetched ref, ⛔ not the working tree: .objectui-sha = 87af769e9a3ee28ace099fdd653d3ebd79fe82e2; the 27 packages/spec/src/** citations re-measured at that pin (check:objectui-pin-citations and --verify-anchors exit 0 in the at-tier review 5753767727); the two corrected .describe() sentences present in ui/dataset.zod.ts (measure format on datetime honours relative / short) and ui/view.zod.ts (FormField.span emits one clamped class per multi-column tier) with their regenerated reference pages; sdui.manifest.json byte-identical (57 components, @object-ui 17.6.0 at both shas) with the provenance record moved; changesets console-87af769e9a3e.md (@objectstack/console: minor) and 17429-pin-bump-describe-corrections.md (@objectstack/spec: patch) present. Console dist built at the new pin by the dev (VERDICT 0, 60228 KB) and rebuilt by the reviewer (VERDICT 0, stamp 87af769e9a3e, check:console-sha 0).

    Also carried by the same PR under ruling batch #201 item 1 (「201 A」): the two-code sdui-parser port from #17645 (check:sdui-lockstep 26 = 26 at the live pin) — its own landing record is on #17645. The card auto-closed completed on the merge (Fixes #17429); pm:dispatched removed in this stroke. At-tier review PASS 5753767727 on the merged head fc25a5925d; provenance 5753797054 on the PR.

    Carried, not closed here: the check-issue-citations blind spot (a citation qualified with this repository's own name is judged against a board never asked for it — Acceptance notes on the PR, for the next author of scripts/check-issue-citations.mjs); objectui's body-dialect.ts divergence in this copy of sdui-parser (a warning-level code divergence invisible to the lockstep code-set comparison — recorded on #17645's landing record as the next port round's item); gen:sdui-lockstep unrunnable in a container whose sibling checkout is off the pin (the next pin bump parks its own checkout).


    Generated by Claude Code

  8. added a commit that references this issue on Sep 28, 2026
    fbc12be
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions