Filing gate ① — a finding: a repo script silently swaps the checkout it was told to use. reach: scripts/build-console.sh, which pnpm objectui:build runs (AGENTS.md: "Moving the pin has a second half: regenerate the committed manifest — pnpm objectui:build …").
What is wrong
At origin/main 27a8b33dec, scripts/build-console.sh:162–:166:
if [[ -n "${OBJECTUI_ROOT:-}" && -d "${OBJECTUI_ROOT}/.git" ]]; then
SOURCE_ROOT="$OBJECTUI_ROOT"
elif [[ -d "${FRAMEWORK_ROOT}/../objectui/.git" ]]; then
SOURCE_ROOT="$(cd "${FRAMEWORK_ROOT}/../objectui" && pwd)"
fi
- In a linked git worktree,
.git is a regular file holding a gitdir: pointer, so -d is false for every linked objectui worktree.
- An
OBJECTUI_ROOT that names one is ignored with no message, and the script falls back to the sibling ../objectui checkout.
- It then works in that shared checkout:
git fetch when the pin is missing (:178–:179), git worktree prune (:200), and the build worktree for .cache/objectui-<sha> is registered there.
scripts/bump-objectui.sh already fixed the same test. Its comment at :157–:160 reads: "-e, not -d: in a git WORKTREE .git is a regular file holding a gitdir: pointer, so a -d test rejected every linked worktree — and AGENTS.md requires one per task, so this rejected the mandated workflow and only ever worked from a primary clone." build-console.sh did not get the same change.
Where it was met
Done when
build-console.sh accepts a linked worktree as OBJECTUI_ROOT, the way bump-objectui.sh does.
- An
OBJECTUI_ROOT that is set but is not a checkout is refused with a message. It is never silently replaced by the sibling.
- The fix is pinned by a test or self-test the repo already runs.
Generated by Claude Code
Filing gate ① — a
finding: a repo script silently swaps the checkout it was told to use. reach:scripts/build-console.sh, whichpnpm objectui:buildruns (AGENTS.md: "Moving the pin has a second half: regenerate the committed manifest —pnpm objectui:build…").What is wrong
At
origin/main27a8b33dec,scripts/build-console.sh:162–:166:.gitis a regular file holding agitdir:pointer, so-dis false for every linked objectui worktree.OBJECTUI_ROOTthat names one is ignored with no message, and the script falls back to the sibling../objectuicheckout.git fetchwhen the pin is missing (:178–:179),git worktree prune(:200), and the build worktree for.cache/objectui-<sha>is registered there.scripts/bump-objectui.shalready fixed the same test. Its comment at:157–:160reads: "-e, not-d: in a git WORKTREE.gitis a regular file holding agitdir:pointer, so a-dtest rejected every linked worktree — and AGENTS.md requires one per task, so this rejected the mandated workflow and only ever worked from a primary clone."build-console.shdid not get the same change.Where it was met
5bc55c0c5a1e— it carries objectstack-ai/objectui#11880, which #11509's v18 retirement must ship with #22385), the dev saw the fallback and recorded it in the PR's Acceptance notes.6075438386) escalated it as owed a card. This is that card.Done when
build-console.shaccepts a linked worktree asOBJECTUI_ROOT, the waybump-objectui.shdoes.OBJECTUI_ROOTthat is set but is not a checkout is refused with a message. It is never silently replaced by the sibling.Generated by Claude Code