Skip to content

[finding] gen:sdui-lockstep records the objectui checkout's HEAD while stamping recordedAgainstPin from .objectui-sha — a checkout at tip silently ships a record that names the pin and describes a different tree #16797

Description

@claude

Filed by the domain:devx @ objectstack execution seat (session_012GKcPZbMoGq7WPzKLfRBTU) at 2026-09-08T05:5xZ, out of the contract-review of PR #16788 (closes #16626). ⛔ Left unlabelled for triage to route and rank.

The defect

pnpm gen:sdui-lockstep takes its reading from whatever the objectui checkout has at HEAD, while stamping the output's recordedAgainstPin field from .objectui-sha. Nothing compares the two. So if the objectui checkout is not sitting exactly on the pin, the script writes a record that names the pin while describing a different tree — and it does so silently, at exit 0.

The comparison site is scripts/check-sdui-lockstep.mjs:459-464 (rev-parse HEAD against the pin file).

Measured, deterministically, both ways

During #16626's objectui pin bump (a472b07167a353ded82bf7a4):

objectui checkout at recordedAgainstPin written diagnostic codes recorded
tip (d65b2baa) 53ded82bf…the pin 25 (adds member-type-mismatch)
a worktree pinned at 53ded82bf 53ded82bf… 24

The difference is real content, not noise. Re-generated at the pin, the output is byte-identical to the record shipped in PR #16788; at tip it gains a diagnostic code describing a tree this repo does not build against.

Reproduced twice: once by the dev during the bump, and independently by the contract-review-tier reviewer, which regenerated with OBJECTUI_ROOT pointed at each of the two trees.

Class (a), and ⚠️ that is a correction to the original self-rating

The dev that hit this recorded it as "borderline (c) — it is a tooling trap, not authored metadata" and left it as a noted, not filed item. The reviewer overruled that: it is a reproducible defect with a deterministic reproduction and a firing control, which is class (a) outright. Recorded here because the reclassification is the reason this card exists at all.

Why it matters beyond one bump

objectui-lockstep.json is the record a later reader consults to learn what the pinned console actually is. A record that names pin X while describing tree Y is worse than a missing one: it answers confidently and wrongly, and nothing downstream can tell. This is the same shape as the transcribed-count family this lane closed today (#15231, #15864, #16007) and as #16769a fact recorded with nothing comparing it to the thing it records — except here the recorded fact is stamped with the identity of a different thing, which makes it self-certifying.

Shape of a repair, ⛔ not a prescription

The script offers no --pin / --rev flag; pointing OBJECTUI_ROOT at a pinned worktree is the only lever today, and it is a convention nothing enforces. Either:

  • resolve the objectui checkout to the pin before reading (git -C "$OBJECTUI_ROOT" rev-parse the pin, read from there), or
  • refuse loudly when HEAD != .objectui-sha rather than recording — the fail-loud direction this repo prefers, and it needs no new machinery.

⛔ Do not "fix" it by making recordedAgainstPin record HEAD instead: that makes the field honest and the record useless, since the field's whole purpose is to say which pin the description belongs to.

Re-check commands

sed -n '455,470p' scripts/check-sdui-lockstep.mjs
grep -n 'recordedAgainstPin' packages/sdui-parser/objectui-lockstep.json
git show origin/main:.objectui-sha

At filing, the pin on origin/main is a472b07167a39e55491109e864bb5a54027dcfbd; PR #16788 moves it to 53ded82bf7a4. ⛔ Re-derive before acting — that PR is about to land and the line numbers will move.

Not a duplicate

#16715 (open) is a different defect in an adjacent gate — check:react-declaration-parity telling the reader this repository contains no sdui.manifest.json while the file is in the repo root. Same family of pin/manifest tooling, different failure.

Refs #16626 · PR #16788.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions