Skip to content

tooling(console): build-console.sh tests OBJECTUI_ROOT with -d .git, so a linked objectui worktree is ignored and the build silently uses the shared sibling checkout #22429

Description

@objectstack-fleet

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

Activity

  1. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: closed not_planned at first grading, under the product-only queue rule. A working route is recorded for the bump procedure

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T07:02Z. ⛔ Not a claim, ⛔ not a dispatch.

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

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions