Skip to content

fix(create-objectstack): track declared bin as executable - #11075

Merged
os-elon merged 2 commits into
mainfrom
claude/issue-10991-create-objectstack-bin-exec-bit
Aug 22, 2026
Merged

fix(create-objectstack): track declared bin as executable#11075
os-elon merged 2 commits into
mainfrom
claude/issue-10991-create-objectstack-bin-exec-bit

Conversation

@os-elon

@os-elonos-elon commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

Fixes#10991

What

packages/create-objectstack's declared bin (bin/create-objectstack.js) was
tracked in git as 100644 despite carrying a #!/usr/bin/env node shebang and
being pnpm's link target for the create-objectstack command. With
core.fileMode = true, pnpm's install-time chmod to 755 registered as a
tracked mode change on every fresh worktree — a file nobody edited showed
up dirty, and a routine git add -A could sweep it into an unrelated PR.

Measurements (before)

$ git ls-files -s packages/create-objectstack/bin/create-objectstack.js
100644 924fff1230b60d80ceddc0a0a332e12fa95cc9f0 0	packages/create-objectstack/bin/create-objectstack.js
$ git ls-files -s packages/cli/bin/run.js
100755 3f35139b586864f2147cbe47394e90a15d373b33 0	packages/cli/bin/run.js
$ head -1 packages/create-objectstack/bin/create-objectstack.js
#!/usr/bin/env node

Confirms the issue's report exactly: the declared bin was 100644 (the
defect), the sibling declared bin packages/cli/bin/run.js was already
100755, and the file does start with a shebang.

Fix

git update-index --chmod=+x packages/create-objectstack/bin/create-objectstack.js
sets 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 diff
still showed a mode mismatch (755 in the index/commit vs 644 on disk)
until a plain chmod +x was also applied to the working-tree file. Both are
included in this PR's first commit, so git status is clean immediately after
cloning it.

$ git ls-files -s packages/create-objectstack/bin/create-objectstack.js # after
100755 924fff1230b60d80ceddc0a0a332e12fa95cc9f0 0	packages/create-objectstack/bin/create-objectstack.js
$ git diff --stat --cached
packages/create-objectstack/bin/create-objectstack.js | 0
1 file changed, 0 insertions(+), 0 deletions(-)

Mode-only change — the blob hash (924fff1...) is byte-identical before and
after.

Verified the symptom is gone

Fresh pnpm install on this branch leaves git status --porcelain clean with
respect to this file (previously it printed M packages/create-objectstack/bin/create-objectstack.js
every 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.mjs already walks every publishable
    package's manifest and even mentions packages/cli/bin/run.js in a comment,
    but its five invariants (DECLARED/COMPLETE/SUFFICIENT/MINIMAL/REGISTERED)
    are entirely about the npm files publish whitelist — a different axis
    than 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.mjs already
    assert a git ls-files -s mode of 100755 for 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 a
    non-executable hook) — not a general "every declared bin with a shebang"
    family.
  • Grepped scripts/*.mjs / *.mts for bin / chmod / shebang /
    100755 / fileMode — no script walks packages/*/package.jsonbin
    declarations generically.

So per the scope bar, this PR ships the one-bit fix only — no new check.

Changeset

.changeset/create-objectstack-bin-exec-bit.mdpatch bump for
create-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 final
commit (6b0a719abb) — 11 local gates named, plus check: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 passed
  • pnpm check:slot-lookup✓ slot-lookup ratchet holds: 107 unswept site(s) in 25 file(s), none new (...)
  • pnpm check:test-source-aliascheck-test-source-alias OK — 72 packages with tests scanned (...)
  • pnpm check:type-source-resolutioncheck-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.mjsOK: 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.mjscheck-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

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.
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • 1 changed file(s) yielded no anchor (packages/create-objectstack/bin/create-objectstack.js) — pages documenting those are invisible to this run

Coarse fallback — 8 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 1c3a46f876822d488d3af43189dbc33273b28015packageMentionDocs.

@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 32589381607 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Console Pin Gate — 失败步骤: Build the Console SPA at the pinned objectui SHA

    ✗ Build failed in 6.25s
    

↳ 失败原因 是判读的关键:超时Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

跨 PR 相同签名(24h,按失败测试文件聚合):

  • ⚠️本次没有可用的聚合签名(日志里没有能解析出测试文件名的 FAIL 行)—— 这不是「没有同签名的其他 PR」,是这一轮没测到。跨 PR 聚合本次不可用,请手工比对其他 PR 的同类评论。
  • ⚠️ 24h 评论账本没读完(超过 5 页仍未读到窗口尽头),所以上面的「不同 PR 数」是下界,不是全量。

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 86 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] create-objectstack's declared bin is tracked non-executable, so pnpm install dirties every fresh worktree

2 participants

@os-elon@claude