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

Closed as not planned

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. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    domain:devxDomain lane — seat card indexed by label:pm:seat
    on Oct 9, 2026
  2. 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

    Labels

    domain:devxDomain lane — seat card indexed by label:pm:seatpriority:p3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions