Uh oh!
There was an error while loading. Please reload this page.
fix(create-objectstack): track declared bin as executable - #11075
Conversation
The declared bin packages/create-objectstack/bin/create-objectstack.js was tracked 100644 despite having a shebang and being pnpm's bin link target. pnpm chmods it to 755 on every install, and with core.fileMode=true that registers as a tracked mode change in every fresh worktree — a file nobody edited shows up dirty, and a routine git add -A can sweep it into an unrelated PR. Matches the sibling declared bin packages/cli/bin/run.js, which is already tracked 100755. Mode-only change; blob content and hash are unchanged.
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 8 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Uh oh!
There was an error while loading. Please reload this page.
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32589381607 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Fixes#10991
What
packages/create-objectstack's declared bin (bin/create-objectstack.js) wastracked in git as
100644despite carrying a#!/usr/bin/env nodeshebang andbeing pnpm's link target for the
create-objectstackcommand. Withcore.fileMode = true, pnpm's install-time chmod to755registered as atracked mode change on every fresh worktree — a file nobody edited showed
up dirty, and a routine
git add -Acould sweep it into an unrelated PR.Measurements (before)
Confirms the issue's report exactly: the declared bin was
100644(thedefect), the sibling declared bin
packages/cli/bin/run.jswas already100755, and the file does start with a shebang.Fix
git update-index --chmod=+x packages/create-objectstack/bin/create-objectstack.jssets the bit in the index, but — worth noting for anyone reaching for this
recipe again — it does not touch the physical file on disk, so
git diffstill showed a mode mismatch (
755in the index/commit vs644on disk)until a plain
chmod +xwas also applied to the working-tree file. Both areincluded in this PR's first commit, so
git statusis clean immediately aftercloning it.
Mode-only change — the blob hash (
924fff1...) is byte-identical before andafter.
Verified the symptom is gone
Fresh
pnpm installon this branch leavesgit status --porcelainclean withrespect to this file (previously it printed
M packages/create-objectstack/bin/create-objectstack.jsevery time).
Scope bar — no new gate
Triage's ruling on this card: a trivial assertion belongs here only if a
natural home already exists in an existing check family; otherwise, no new
standing gate file for one bit. I looked and did not find one:
scripts/check-published-files.mjsalready walks every publishablepackage's manifest and even mentions
packages/cli/bin/run.jsin a comment,but its five invariants (DECLARED/COMPLETE/SUFFICIENT/MINIMAL/REGISTERED)
are entirely about the npm
filespublish whitelist — a different axisthan git-tracked file mode. Bolting an executable-bit check onto it would
grow its documented charter for this one bit, not drop in naturally.
scripts/check-regen-pending.mjs/scripts/git-merge-regen.mjsalreadyassert a
git ls-files -smode of100755for a given path via self-test,but each is hardcoded to one specific git-hook path (
.githooks/pre-push/.githooks/pre-commit) for a narrower reason (git silently ignores anon-executable hook) — not a general "every declared bin with a shebang"
family.
scripts/*.mjs/*.mtsforbin/chmod/shebang/100755/fileMode— no script walkspackages/*/package.jsonbindeclarations generically.
So per the scope bar, this PR ships the one-bit fix only — no new check.
Changeset
.changeset/create-objectstack-bin-exec-bit.md— patch bump forcreate-objectstack. This is a packaging-mode correction with no content,API, or behavior change (blob hash identical); it only affects how the file
is tracked in git and therefore how it's packed for npm.
Gates
Derived via
node scripts/pm/dispatch-gates.mjs(no path args) on the finalcommit (
6b0a719abb) — 11 local gates named, pluscheck:nul-bytes(mandatory for any edit per AGENTS.md). All green, verdict lines quoted:
pnpm check:changeset-gate-self-tests—✓ check-changeset-no-major --self-test: 116 assertions (...)pnpm check:objectui-changeset—✓ objectui-range --self-test: all checks passedpnpm check:slot-lookup—✓ slot-lookup ratchet holds: 107 unswept site(s) in 25 file(s), none new (...)pnpm check:test-source-alias—check-test-source-alias OK — 72 packages with tests scanned (...)pnpm check:type-source-resolution—check-type-source-resolution OK — 77 packages with a tsconfig.json scanned (...)node scripts/check-adr-0087-registration.mjs—✓ check-adr-0087-registration: this PR adds no declared-breaking changeset (1 non-breaking changeset(s) seen).node scripts/check-changeset-no-major.mjs—✓ This diff introduces no \major` bump.`node scripts/check-ci-filter-parity.mjs—OK: all 83 declared cross-package glob(s) (72 unique) are covered (...)node scripts/check-empty-changeset.mjs—✓ No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added).node scripts/check-plugin-teardown-shape.mjs—✓ check:plugin-teardown-shape: 63 Plugin implementation(s) across 4448 source(s) (...)node scripts/docs-audit/check-affected-docs.mjs—✓ affected-docs self-test: 339 cases pass.node scripts/check-nul-bytes.mjs—check-nul-bytes: OK (scanned 6401 text file(s) ...; no raw ASCII control bytes).CI itself is not awaited (per dispatch instructions) — draft PR reported at
open time.
Generated by Claude Code