Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

scripts/setup.sh hand-lists a six-package build chain that fails on a clean checkout (same class as objectui#7292), and then calls pnpm test:root, a script the root manifest does not declare #7987

Closed

Description

@baozhoutao

Filed by the domain:devx @ objectui execution seat (PM session session_01MM7kaS4dPpYHV5BsMyu4tQ, R45) on behalf of the #7292 dev, whose os-dev-report on that card (comment 5557283627) handed back two out-of-scope findings it could not file before its session closed. Dedup: semantic search on scripts/setup.sh hand-listed build chain fails clean checkout test:root undeclared returned 0 issues at 2026-09-06T06:40Z, with a control query (the #7292 wording) returning #7292 first, so the zero is live. Unassigned, unlabelled — recording two measurements, not claiming a priority.

1 · The hand-listed build chain

scripts/setup.sh:54–69 on origin/main (9de3141a0) builds six packages one at a time, in a hand-written order:

pnpm --filter @object-ui/types build
pnpm --filter @object-ui/core build
pnpm --filter @object-ui/react build
pnpm --filter @object-ui/components build
pnpm --filter @object-ui/fields build
pnpm --filter @object-ui/layout build

This is the same defect class #7292 measured on packages/components/package.json's prebuild: a hand-maintained copy of the dependency graph that drifts from the manifests turbo derives the real closure from. The #7292 dev's reading (quoted, not re-measured by this seat): under set -e, the pnpm --filter @object-ui/react build step fails on a clean checkout for the identical TS2307: Cannot find module '@object-ui/i18n' / '@object-ui/data-objectstack' reason, both before and after PR #7986 — that PR does not change this file's behaviour, because setup.sh already built types/core/react itself, which is what made the deleted prebuild redundant there. The fix shape #7292's triage picked (delete the hand list, let turbo run build own the order) applies verbatim.

2 · pnpm test:root is not a script

scripts/setup.sh:74:

if pnpm test:root; then

The root package.json on the same ref declares no test:root (measured: grep -c '"test:root"' → 0). Because the call sits inside an if, it degrades to the ⚠ Some tests failed, but setup is complete branch and never surfaces as an error — so the script's "run tests" step has been silently a no-op for as long as the script has been undeclared.

Readers

git grep -l 'setup\.sh' origin/main → only the root README.md names the script. No workflow runs it, so CI cannot see either defect; only a human following the README does.

Suggested disposition (for triage, not a claim)

One S-sized card: replace the six-line chain with one turbo run build (or the documented pnpm build), and either point the test step at a script the root manifest declares or delete the step. Both edits are in one file with one reader.

Refs: #7292 (the manifest half of the class) · PR #7986 (its fix; does not touch this file).

Activity

  1. added
    bugSomething isn't working
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    on Sep 8, 2026
  2. added theissue type on Sep 8, 2026
  3. os-zhuang commented on Sep 8, 2026

    @os-zhuang
    Contributor

    Triage routing

    Labels bug tooling finding domain:devx pm:queue priority:p3 · Type Bug

    Lane — domain:devx. scripts/setup.sh — the engineering face. Both defects and both fixes are in that one file.

    Re-measured on 83d4fda16 — both confirmed, with anchors.

    Defect 1 — the hand-listed build chain, scripts/setup.sh:55, 58, 61, 64, 67, 70:

    pnpm --filter @object-ui/types build
    pnpm --filter @object-ui/core build
    pnpm --filter @object-ui/react build
    pnpm --filter @object-ui/components build
    pnpm --filter @object-ui/fields build
    pnpm --filter @object-ui/layout build
    

    Defect 2 — pnpm test:root is not a script, scripts/setup.sh:75 — if pnpm test:root; then. I re-ran the card's measurement independently: "test:root" in the root package.json → 0 occurrences. Confirmed undeclared.

    Admission — class (a) for defect 1 (reproducible failure on a clean checkout), class (b) for defect 2 (a step that declares it runs tests and cannot).


    Grade p3, and the reason is the readers count

    git grep -l 'setup\.sh' returns only the root README.md. No workflow runs it, so CI cannot see either defect — only a human following the README does. That caps the blast radius at "a new contributor's first hour", which is a real cost but a bounded and recoverable one.

    Re-grade to p2 if setup.sh is ever referenced from a workflow, an onboarding doc beyond the README, or a skill — any of which turns a human-only trap into an automated one.


    ⭐ Defect 2 is the more interesting of the two, and it should not be treated as the small one

    Because the call sits inside an if, it degrades to the ⚠ Some tests failed, but setup is complete branch and never surfaces as an error. ⇒ the script's "run tests" step has been silently a no-op for as long as the script has been undeclared, while printing a message that reads as though tests ran and some failed.

    That is worse than a hard failure in both directions: a contributor who sees the warning believes tests exist and are partly broken, and a contributor who does not read it believes tests passed. ⛔ Neither is true, and nothing distinguishes them. This is this repo's recurring shape — a check that cannot fail is indistinguishable from one that passed — here inverted into a check that cannot run while reporting that it did.

    Defect 1 — the class is already settled, so the fix shape is not open

    The card's attribution is right and I am adopting it: this is the same defect class objectui#7292 measured on packages/components/package.json's prebuild — a hand-maintained copy of the dependency graph that drifts from the manifests turbo derives the real closure from. #7292's triage picked the fix shape (delete the hand list, let turbo run build own the order) and it applies verbatim here.

    ⚠️ One provenance flag, stated because the card states it and it matters for who verifies what. The failure reading — that under set -e the pnpm --filter @object-ui/react build step fails on a clean checkout with TS2307: Cannot find module '@object-ui/i18n' / '@object-ui/data-objectstack' — is quoted from the #7292 dev, not re-measured by the filing seat, and I have not re-measured it either. It is plausible and consistent with #7292's own finding, but ⛔ a claimant should reproduce it on a clean checkout before writing the fix rather than inheriting it. The structural claim (six hand-listed builds where turbo would derive the order) is measured and needs no re-check.

    ⚠️ Also recorded correctly by the card: PR #7986 does not change this file's behaviour — setup.sh already builds types/core/react itself, which is exactly what made the deleted prebuild redundant there. ⛔ Do not read #7986's landing as having fixed this.


    Disposition — I concur with the card: one S-sized card, not two

    Replace the six-line chain with one turbo run build (or the documented pnpm build), and either point the test step at a script the root manifest declares or delete the step. Both edits are in one file with one reader, and splitting them would double the review for a file nothing gates.

    ⛔ On defect 2, decide and state which: pointing at a real script and deleting the step are materially different promises to a new contributor. If a script is chosen, name it in the claim comment; if the step is deleted, say so in the README's setup section too, so the document and the script agree.

    Dedup accepted as filed and correctly controlled: a semantic search returned 0 issues at 06:40Z with a control query (the #7292 wording) returning #7292 first, so the zero is live rather than a dead channel.

    Refs: #7292 (the manifest half of the class) · PR #7986 (its fix; ⛔ does not touch this file).

    Triage seat only — no claim, no dispatch, no code.


    Generated by Claude Code

  4. claude commented on Sep 8, 2026

    @claude
    Contributor

    Claim: PM loop round R47 — domain:devx @ objectui execution seat.
    Session: session_01FhBNJcLRZLe8M87VcUgpKr
    Branch: claude/issue-7987-setup-sh-build-chain
    Worktree: /home/user/objectui-issue-7987
    Domain: domain:devx
    Dispatch: one os-dev subagent of this session (mode:subagent, model: opus); the dispatch note with the brief follows. Labels pm:queue → pm:dispatched and assignee set in one write, read back and diffed against the union at 2026-09-08T10:54:19Z.

    Why this card now — the total order, stated because the answer is counter-intuitive

    The lane's written order is priority:p0 > pm:blocking > target: > type Bug > the rest, tie-broken by card age. ⭐ Below p0, the priority label does not feature in that order. Re-derived at 10:53Z: no p0, no pm:blocking at all, no target: items ⇒ the live level is type Bug, and the queue holds 30 dispatchable cards it cannot empty this round ⇒ oldest first. This card is among the oldest Bugs in the lane.

    ⚠️ One honest note on the card taken before this one. objectui#8542 was claimed first and this seat called it "top of the total order" citing priority:p1. ⛔ Under the written order p1 does not rank; the justification that actually holds is a different rule — an advisory gate red on main is shared damage, to be stopped by whichever lane finds it. ⇒ Right card, ⛔ wrong reason given, corrected here.

    ⚠️ objectui#8380 is graded p1 + pm:queue and is already fixed by 83d4fda16 (main's CI is green again; the proof is on that card). ⇒ Skipped by the premise check, ⛔ not dispatched.

    ⚠️ Every fence, number and card status the brief carries is a PREDICTION. ⛔ A zero-hit reading means nothing without a control term known present in the same run — and without its exit code: a probe this seat ran today returned exit 128 (not a git repository), which prints as no output and reads exactly like a clean zero.

    ⭐ Filing rule: a concrete defect carries no labels at all; an observation carries finding only. ⛔ Never a domain:*, ⛔ never an assignee.


    Generated by Claude Code

  5. baozhoutao commented on Sep 8, 2026

    @baozhoutao
    ContributorAuthor

    os-dev-report

    {
      "issue": 7987,
      "status": "done",
      "branch": "claude/issue-7987-setup-sh-build-chain",
      "pr": "https://github.com/objectstack-ai/objectui/pull/8560",
      "head_sha": "7376a4c106ba3a9385ae9396bcf8d454163211dd",
      "premise_still_valid": true,
      "summary": "Both halves of the card fixed in scripts/setup.sh, the only file touched. Half 1: the six-line hand-written build chain is replaced by one `pnpm build` (turbo run build --filter=!@object-ui/site), so the order comes from the manifests. Half 2: the test step now calls `pnpm test` -- the script README.md's manual-setup path and this script's own 'Available commands' block both prescribe -- and, because swapping in a name that happens to exist would repair the symptom and leave the mechanism, a new `require_root_script` helper reads the script name back out of the root package.json before invoking it and exits 1 with a specific message when it is absent. Both the build and the test step go through it. The tolerant `else` branch survives on purpose but is now bounded to genuine test failures: an undeclared name can no longer reach it. Governed-surface check: scripts/setup.sh is not in GOVERNED_SURFACES, so this is an ordinary draft PR. Assignee was already set by the PM dispatch and I did not write it.",
      "measurements": [
        {"what": "half 1 defect, clean checkout at 3f775eeb8", "command": "pnpm --filter @object-ui/{types,core,react} build, in the hand list's order", "reading": "types exit 0, core exit 0, react exit 2 -- TS2307 Cannot find module '@object-ui/i18n' AND '@object-ui/data-objectstack', 6 errors across 6 source files", "exit_code": 2},
        {"what": "half 1 mechanism", "command": "read packages/react/package.json + packages/i18n/package.json exports", "reading": "react declares i18n and data-objectstack as workspace:* deps; both packages' exports point at ./dist/*; neither was on the hand list, so neither had a dist at step 3", "exit_code": 0},
        {"what": "half 2 defect, as a running program", "command": "pnpm test:root", "reading": "ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL Command \"test:root\" not found / Did you mean \"pnpm test:unit\"?", "exit_code": 254},
        {"what": "half 2 declaration, quoted form", "command": "grep -rn '\"test:root\"' (json/sh/md/yml/mjs)", "reading": "0 hits", "exit_code": 1, "control": "grep -rn '\"lint:root\"' package.json -> 1 hit, exit 0"},
        {"what": "half 2 use sites, repo-wide", "command": "grep -rn 'test:root' . --exclude-dir=node_modules --exclude-dir=.git", "reading": "exactly 1 hit: scripts/setup.sh:75 -- its only use site, no declaration anywhere", "exit_code": 0},
        {"what": "same class elsewhere in tracked shell", "command": "git ls-files '*.sh' | xargs grep -nE '\\bpnpm +[a-z]'", "reading": "12 tracked shell files; setup.sh:75 was the only live undeclared-script invocation. All five commands the 'Available commands' block advertises (dev, build, test, lint, create-plugin) ARE declared.", "exit_code": 0},
        {"what": "the fix, half 1", "command": "os-verify-lock.sh -c 'turbo run build --filter=!@object-ui/site --concurrency=2'", "reading": "Tasks: 43 successful, 43 total; Time 1m37.578s; VERDICT command-exit 0, held 99s, waited 0s (shared-box seconds)", "exit_code": 0},
        {"what": "the fix, half 2 -- ablation on the SHIPPED bytes", "command": "function body extracted from the committed scripts/setup.sh with sed (not re-typed) and sourced; three legs", "reading": "leg A require_root_script test -> exit 0, silent. leg B require_root_script test:root -> exit 1 + 'setup.sh bug: root package.json declares no \"test:root\" script'. leg C require_root_script build -> exit 0. The guard demonstrably CAN fail, and does not fire on a declared name.", "exit_code": 0},
        {"what": "grammar", "command": "bash -n scripts/setup.sh", "reading": "clean", "exit_code": 0},
        {"what": "gate", "command": "pnpm check:bash32-floor", "reading": "verdict line: '12 tracked shell file(s) ... name no bash 4+ construct outside a comment ...; 19 constructs checked, floor bash 3.2'", "exit_code": 0},
        {"what": "gate", "command": "pnpm check:control-bytes", "reading": "verdict line: 'OK (scanned 6756 tracked text file(s); skipped 85 binary)'", "exit_code": 0},
        {"what": "gate", "command": "pnpm check:shell-escape-residue", "reading": "verdict line: 'OK (206 file(s) and 1310 fenced block(s) examined)'", "exit_code": 0},
        {"what": "the test that names this file", "command": "os-verify-lock.sh -c 'vitest run --project unit scripts/__tests__/bash32-floor-wiring.test.ts'", "reading": "Test Files 1 passed, Tests 9 passed; VERDICT command-exit 0, held 3s", "exit_code": 0},
        {"what": "changeset owed?", "command": "node scripts/check-changeset-presence.mjs", "reading": "'1 file(s) changed, 0 of them published source ... no changeset is owed'. No changeset added, and per the objectui rule no skip-changeset label applied -- the gate verdict is authoritative here.", "exit_code": 0},
        {"what": "affected packages", "command": "TURBO_SCM_BASE=3f775eeb8 turbo ls --affected", "reading": "'0 no packages' -- setup.sh belongs to no workspace package, so no package test/type-check is owed", "exit_code": 0},
        {"what": "byte discipline self-scan", "command": "grep -naP '[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]' scripts/setup.sh", "reading": "0 hits", "exit_code": 1, "control": "grep -c 'require_root_script' scripts/setup.sh -> 4"}
      ],
      "tests": "See measurements. Every exit code captured by redirect BEFORE any pipe; no exit code read across a '| tail' or '| head'. Heavy runs went through bash /home/user/objectstack/scripts/pm/os-verify-lock.sh (invoked as `bash PATH` -- it is mode 0644): two locked runs, both 'VERDICT command-exit 0', held 18s and 99s, waited 0s each, plus a 3s vitest run. Ablation: the half-2 guard was proven able to fail using the committed bytes of scripts/setup.sh, extracted with sed rather than re-typed, in both directions (leg A declared name -> exit 0 silent; leg B the old undeclared name -> exit 1 loud). No dist/build ablation was needed: the change is a shell script with no build step, and the half-1 fix was verified by a real full-graph build (43/43) rather than by mutation. Lint NARROWED and the narrowing proved, three pieces: (1) population read from eslint's own config resolution, not guessed -- `eslint --no-inline-config --format json scripts/setup.sh` returns message 'File ignored because no matching configuration was supplied'; (2) file count read from that --format json output: 1 result, errorCount 0, i.e. 0 files actually linted from this diff; (3) invariance -- the diff contains no eslint config or rule file, so no untouched file's verdict can move. The repo-wide `pnpm lint` farm run is left to CI.",
      "mcp_calls": "7 -- issue_read get, issue_read get_comments, search_issues (dedup, DEAD channel), search_issues (control, proved it dead), issue_write create #8559, create_pull_request #8560, add_issue_comment (this report). All card and comment reads beyond the first two, plus the whole dedup fallback, went through the zero-quota REST list channel.",
      "channel_declaration": "REST probe: repo-scoped list endpoint returned HTTP 200, but the REST SEARCH endpoint returned 403 unauthenticated. Switched to MCP search_issues as the rules direct -- and it returned 0 for the target AND 0 for a control query using #7987's own wording while #7987 is open and indexed, so that channel is DEAD and its zero is not a reading. Fell back to the REST list channel that had probed 200: fetched all 472 open non-PR issues (5 pages) and grepped locally. Control /setup\\.sh/i returned #7987 and #8537 in the same run -> live. Target /ARCHITECTURE_EVALUATION/i -> 0. That is the zero #8559 was filed on.",
      "false_predictions_in_the_brief": [
        {"prediction": "the TS2307 reading, explicitly flagged as quoted from the #7292 dev and re-measured by neither the filing seat nor triage", "verdict": "TRUE, verbatim and in both modules -- reproduced at exit status 2 on a clean checkout at 3f775eeb8. Not a false prediction; recorded because the brief singled it out as the one most likely to be wrong."},
        {"prediction": "card + triage: `git grep -l 'setup\\.sh'` returns only the root README.md", "verdict": "FALSE as written. Run verbatim on origin/main it returns 7 files (exit 0, control returning 4447 in the same run). Five are substring artifacts -- the pattern matches inside `vitest.setup.shared-...`. The sixth, scripts/__tests__/bash32-floor-wiring.test.ts, is a genuine reference naming scripts/setup.sh as the motivating example for the bash-3.2 floor. The filing seat reported a result narrower than the command it quoted actually produces."},
        {"prediction": "triage: 'CI cannot see either defect' generalised to the file", "verdict": "PARTLY FALSE. Correct about these two defects -- no workflow EXECUTES setup.sh. But scripts/setup.sh IS inside pnpm check:bash32-floor's population (that gate's own verdict counts it among '12 tracked shell file(s)'), and that gate runs on pull requests via lint.yml. So the file is not ungated; only its runtime behaviour is. The p3 grade's reasoning survives, its supporting grep does not."},
        {"prediction": "brief: PR #7986 does not change this file's behaviour", "verdict": "TRUE -- #7986 touches packages/components/package.json, not scripts/setup.sh, and the react-step failure reproduces on today's main which already contains it."},
        {"prediction": "brief: the two halves may want different appetites and may need splitting", "verdict": "Did not arise. Both are the same shape -- a name the script asserts that the repository does not back -- in one file, and the fix for half 2 (require_root_script) also guards half 1's new `pnpm build` call. Shipped as one PR, as the triage's disposition preferred."},
        {"prediction": "brief req 12: touching .github/workflows/** invokes the new check-action-ref-convention gate", "verdict": "N/A -- the diff touches no workflow."},
        {"prediction": "brief req 10: os-verify-lock.sh is mode 0644 and must be run as `bash PATH`", "verdict": "TRUE -- confirmed by use; invoked as `bash /home/user/objectstack/scripts/pm/os-verify-lock.sh` throughout."},
        {"prediction": "brief req 11: Bundle Analysis red on main, not mine, not required", "verdict": "Accepted as given, not independently re-measured. Reported and moved on as instructed."}
      ],
      "decision_taken": "The triage required the dev to decide and state which shape half 2 takes. DECIDED: point the step at `pnpm test` AND make an undeclared name refuse, rather than deleting the step or pointing at `pnpm test:unit`. Reasoned on the four axes -- (1) real need: the reader is measured, README.md's manual-setup block prescribes exactly install/build/test and the automated path must not disagree with it, as the triage warned; (2) long-term soundness: deleting the step leaves a setup script that verifies nothing after building and would have to be re-added; (3) hard-to-get-wrong: the invocation now asserts its precondition and refuses loudly instead of tolerating a miss on the consumer side -- `pnpm test:unit` would have been a third promise declared in no document, the tolerant-alias shape this repo rejects; (4) startup-stage focus: no new script, no new gate, no new verification surface -- nine lines inside the file that already had the defect. The class-level fix (a repo-wide gate asserting every `pnpm SCRIPT` call in tracked shell against the manifest) was deliberately NOT built: I measured the population and setup.sh:75 was the class's only live instance across all 12 tracked shell files, so it would be a verification surface for a set of size zero. No README edit was needed -- README already prescribes `pnpm build` and `pnpm test`, so the document and the script now agree without touching it.",
      "cost_stated": "pnpm build builds 43 packages rather than 6, so a first-run setup is slower than the hand list WOULD have been had it worked. It does not work: the comparison is against a script that exits at step 3.",
      "open_questions": [],
      "out_of_scope_findings": [
        "filed as #8559 (no labels, no assignee -- concrete defect): scripts/setup.sh's 'Next steps' block sends every contributor to ARCHITECTURE_EVALUATION.md, which is not a tracked file (git ls-files --error-unmatch exit 1, control exit 0 same run). Not repaired in this PR: three defensible replacements exist (docs/ARCHITECTURE.md, the published guide URL README already links, or deleting the line), so the fix shape is a documentation decision and not mechanical -- it fails the in-place-fix bar."
      ],
      "ci": "in_progress -- reported at draft-PR time as the contract requires. Bundle Analysis is known red on main (#8542), not caused by this change and not a required check."
    }

    Generated by Claude Code

  6. claude commented on Sep 8, 2026

    @claude
    Contributor

    ACCEPT — PR #8560, one file, reviewed against the tree. domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R47, 2026-09-08T11:20Z. Head 7376a4c10, base 3f775eeb8, scripts/setup.sh +57/-20.

    Both halves, and the second one is repaired at the mechanism rather than the symptom

    Half 1 — the six-line hand-written build chain becomes one pnpm build (turbo run build), so the order comes from the manifests. The docblock carries the reproduction (TS2307: Cannot find module '@object-ui/i18n', exit 2 on a clean checkout at 3f775eeb8) and, more usefully, the reason it could never be kept correct by review: "nothing tells the person adding a dependency that this file exists."

    Half 2 — ⭐ this is the part worth the card. The brief warned that swapping in a name that happens to exist would repair the symptom and leave the mechanism. The dev did not do that. A new require_root_script helper reads the script name back out of the root manifest before invoking it, and both the build and the test step go through it.

    The docblock states the mechanism exactly, and it is the interesting half:

    pnpm exits 254 on an unknown script — but that call sat inside an if, and an if condition suppresses set -e, so the miss took the else branch and printed "Some tests failed, but setup is complete".

    ⭐ "A step that cannot run while reporting that it did is worse than one that fails: the contributor who reads the warning believes the suite exists and is partly broken, the one who does not believes it passed, and nothing distinguishes the two." ⇒ The tolerant else survives on purpose but is now bounded to genuine test failures; an undeclared name can no longer reach it.

    ⭐ Non-vacuity, on the SHIPPED bytes

    The guard was proven able to fail using the committed bytes — the function extracted from scripts/setup.sh with sed, ⛔ not re-typed — in both directions: a declared name (test) exits 0 silently; the old undeclared name (test:root) exits 1 with setup.sh bug: root package.json declares no "test:root" script. ⇒ A guard demonstrated to fire, ⛔ not asserted from its source.

    ⚠️ A falsified premise this seat passed on — verified here

    The card and its triage comment both state that git grep -l 'setup\.sh' returns only the root README.md. Run verbatim on origin/main today it returns 7 files (control in the same run: pnpm → 480, so the grep works):

    README.md · scripts/__tests__/bash32-floor-wiring.test.ts
    scripts/__tests__/shared-global-leak-guard.test.ts · scripts/__tests__/unit-registry-absence-collision.test.ts
    vitest.config.mts · vitest.setup.shared-global-leak-guard.ts · vitest.setup.shared-global-leak.ts
    

    Five are substring artefacts (vitest.setup.shared-…), but bash32-floor-wiring.test.ts is a genuine reference naming this file. ⚠️ Three of the seven landed today via objectui#8500 — so the filing seat's reading may have been true when written and drifted since. ⇒ Either way the corrected conclusion stands: the file is not ungated. scripts/setup.sh is inside check:bash32-floor's population (its verdict counts "12 tracked shell file(s)") and that gate runs on pull requests. ⛔ Only its runtime behaviour is unseen by CI, ⛔ not the file. The p3 grade survives; the grep quoted under it does not.

    The class-level fix was measured and declined, which is the right call

    A repo-wide gate asserting every pnpm SCRIPT call in tracked shell against the manifest was not built, because the dev measured the population first: across all 12 tracked shell files, setup.sh:75 was the class's only live instance. ⇒ ⭐ A gate for a set of size zero. ⛔ Declining it with the measurement is better than building it.

    ⚠️ A platform fact worth carrying forward — a dead search channel caught by a control

    The dev's dedup ran into this: REST /search/issues is 403 here (known), so it fell back to MCP search_issues — which returned 0 for the target AND 0 for a control query using objectui#7987's own wording, while #7987 is open and indexed. ⇒ ⭐ That channel is dead and its zeros are not readings. It then fell back to the REST list channel that had probed 200, fetched all 472 open non-PR issues across 5 pages, and grepped locally with a live control (/setup\.sh/i → #7987 and #8537 in the same run). ⛔ That is the only zero objectui#8559 was filed on.

    objectui#8559, and a trap this seat walked into while checking it

    Filed correctly: ✔ no labels at all, ⛔ no assignee — a concrete defect, left for triage to grade.

    ⚠️ Verifying its premise, this seat first ran git ls-tree origin/main --name-only ARCHITECTURE_EVALUATION.md and read $? — which returned 0, because ls-tree exits 0 whether or not the path matches. ⇒ The exit code was not the signal; only the empty output was. Re-done properly: git ls-files --error-unmatch exits 1 (control README.md exits 0), and ls-tree output line counts read 0 vs 1. The file is genuinely untracked and scripts/setup.sh still points contributors at it. ⭐ Same family as the exit-128 zero earlier today: a command that succeeds at finding nothing looks exactly like a command that failed to look.

    ⇒ ACCEPT. Ready-flip, guard, queue and landing probe follow the CI verdict.


    Generated by Claude Code

  7. claude commented on Sep 8, 2026

    @claude
    Contributor

    LANDED — e9ddd8fb4 on origin/main. domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R47, 2026-09-08T12:06Z. PR #8560 (card objectui#7987), 29 checks green, merged first pass.

    Landing probe, on a re-fetched origin/main

    probe expect read exit
    require_root_script in scripts/setup.sh > 0 4 0
    pnpm build — the turbo replacement > 0 3 0
    negative — pnpm --filter @object-ui/types build, the hand list 0 0 1
    ⭐ firing control — pnpm install > 0 1 0
    ⭐ nonsense control — zzq-not-a-real-token-7987 0 0 1

    ⚠️ One probe of this seat's came back wrong, and the reason is the day's recurring lesson

    A negative probe on test:root predicted 0 and read 1. ⛔ That is not a failed landing — the hit is at scripts/setup.sh:30, inside the new docblock, where the fix quotes the old name to explain the defect it removes:

    # to call `pnpm test:root`, a script the root manifest has never declared. pnpm
    

    The question the probe meant to ask was "is there still a live invocation?", and a whole-file grep cannot answer a question about one region of a file. Re-asked in the invocation form:

    76:  pnpm install
    99:  pnpm build
    112: if pnpm test; then
    

    ⇒ Three live pnpm calls, ⛔ none of them test:root. ⭐ Fourth encounter today of the same family — after the exit-128 zero, the ls-tree exit code, and a control byte outside the class being controlled. This one is the mirror image: a probe that returns a hit it should not, for the same reason the others returned a zero they should not.

    What is now on main

    The six-line hand-written build chain is one pnpm build, so the order comes from the manifests — and the docblock records why the hand list could never be kept right by review: "nothing tells the person adding a dependency that this file exists."

    ⭐ And the half that matters more: require_root_script reads the script name back out of the root manifest before invoking it. The old call sat inside an if, and an if condition suppresses set -e, so an undeclared name took the "some tests failed, but setup is complete" branch — a step that could not run while reporting that it did. The tolerant branch survives, ⛔ bounded now to genuine test failures.

    ⚠️ objectui#8559 remains open and untouched by this PR: scripts/setup.sh still sends contributors to ARCHITECTURE_EVALUATION.md, which is not a tracked file (git ls-files --error-unmatch exit 1; control README.md exit 0). ⛔ Left for triage to grade — the fix shape is a documentation decision, ⛔ not mechanical.


    Generated by Claude Code

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

    bugSomething isn't workingdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpriority:p3tooling

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions