Repository navigation
1.14.1 — apply the declared identity during bootstrap (#116), surface a shadowed VERSION + list dry-run permissions (#117) - #119
Merged
Conversation
… a shadowed VERSION (#117), list dry-run permission rules (#117) Field-report round from a full greenfield build (cportka/design-a-home, bootstrapped and shipped in one hosted session). repo-bootstrap -> 1.14.1; other plugins unchanged. - #116: the SessionStart hook could only apply .claude/commit-identity at the NEXT session, but the run that declares it is usually the one whose first commits land. bootstrap-repo.sh now writes user.name/user.email itself (from --identity or an existing declaration) and says so, under the same guard as the hook: only when git config is unset or a noreply@ harness default, so a deliberate identity is never clobbered. --dry-run states it would apply and writes nothing. The hook's rule widened from the literal noreply@anthropic.com to any noreply@ address so the two stay symmetric (user@users.noreply.github.com is unaffected). - #117: a VERSION file shadowed by a later-added manifest was silently ignored, so bumping it kept CI green while shipping the old version. The scaffolded tests/run-tests.sh now FAILS on a disagreement and notes the redundancy when they agree; bootstrap flags the file at detection time. (Closes the deferred #81 "all-present version sources should agree" item.) - #117: --dry-run now lists each permission rule it would add instead of only counting them — it printed the whole settings.json, so permissions were the one unreviewable part. - #118 needed no code change: branch-pinned detection, the superset test-runner contract, CI dedupe, tests/cases/*.sh and the workflow contract all behaved as designed on a real project. Docs: CHANGELOG [1.14.1] + footer link, README header/row, SKILL.md identity wording, HANDOFF stamp (notes why the guard requires a bump even when the prior tag was never cut), IMPROVEMENTS swaps the shipped #81 item for the remaining auto-delete follow-on. Suite: 297 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
…o the repo root, stamp the block's own version Fixes from the pre-merge adversarial review of the 1.14.1 diff: - The new `.claude/commit-identity` read was an unguarded pipeline in a standalone assignment: under `set -euo pipefail` a comment-only/empty declaration (grep exits 1) or a SIGPIPE from `head` aborted the whole run, leaving the repo with settings.json but no test runner, no CI and no explanation. Guarded with `|| true` + a NOTE naming the missing declaration. - The immediate identity apply required only `--is-inside-work-tree`, which is true for ANY subdirectory — so `--dir repo/sub --identity ...` rewrote the ENCLOSING repo's git config. It now requires `--show-toplevel` to equal the resolved `--dir`. - The block's `portka-standard-version` stamp was the PLUGIN version, so this patch release alone would have nagged every 1.14.0-bootstrapped repo (including this one) to commit a refresh whose only diff is the stamp comment. The stamp now comes from a dedicated skills/repo-bootstrap/standard-version.txt = the release in which the BLOCK TEXT last changed (1.14.0); the hook compares against the same file, falling back to plugin.json for older installs. Bump that file only when editing STD_CLAUDE_BLOCK. - Docs that still described next-session-only apply: --help for --identity, the plugin.json / marketplace.json descriptions (byte-parity kept), the hook header and an internal comment. Tests: +2 cases (comment-only declaration completes + subdir can't re-identify the parent; stamp == standard-version.txt and no nag when only the plugin version moved); the 1.14.0 stamp assertion now reads standard-version.txt. Suite: 299 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
This was referenced Aug 1, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Field-report round from a full greenfield build (
cportka/design-a-home— bootstrapped, tested and shipped in one hosted session). The contract itself held end-to-end (#118); the two friction points it exposed are fixed here. repo-bootstrap → 1.14.1; video-bug-analyzer stays 1.14.0, evaluator/tab-chord stay 1.13.0. Closes #116, closes #117, closes #118.#116 —
--identitynow applies to git config in the same run.The SessionStart hook could only help the next session, but the run that declares the identity is usually the one whose first commits land — so a fresh bootstrap left
user.emailon the harness default until someone read the CLAUDE.md fine print. Bootstrap now writesuser.name/user.emailitself (from--identityor an existing.claude/commit-identity) and says so. Same guard as the hook — only when git config is unset or anoreply@harness default — so a deliberate identity is never clobbered, and--dry-runstates it would apply while writing nothing. The hook's rule widened from the literalnoreply@anthropic.comto anynoreply@address so the two stay symmetric (a personaluser@users.noreply.github.comis unaffected: it doesn't start withnoreply@).#117 — a shadowed
VERSIONfile is no longer silent.Greenfield runs seed
VERSION; once the repo gains apackage.json/pyproject.toml/Cargo.toml, that manifest wins detection and the leftover file is ignored — so bumping it kept CI green while shipping the old version everywhere. The scaffoldedtests/run-tests.shnow fails when the two disagree and notes the redundancy when they agree; bootstrap flags the file at detection time. This closes the deferred #81 "all-present version sources should agree" item.#117 —
--dry-runlists the permission rules it would add.It printed the entire
settings.jsonbut only a count for permissions — the one part of the preview you couldn't review. Each rule now gets its own[dry-run] + …line.#118 — no code change needed. Branch-pinned detection, the superset test-runner contract, CI dedupe, the
tests/cases/*.shextension point and the workflow contract all behaved as designed on a real 3.5k-LOC project; acknowledged on the issue.Versioning note: 1.14.0 is merged to
mainbut not yet tagged. Since the marketplace installs frommain(not from Releases), those files are already distributed, so this round correctly bumps to 1.14.1 rather than amending 1.14.0 — cuttingv1.14.1publishes both rounds at once.docs/HANDOFF.mdnow records that reasoning.Tests: +3 suite assertions (same-run identity apply incl. deliberate-identity preservation and dry-run parity; shadowed-VERSION note/FAIL/redundancy; dry-run permission listing) — 297 passing, 0 failed.
Release checklist
versionin.claude-plugin/plugin.jsonfor each plugin whose files changed(CI's
version-bump-guardenforces this).## [x.y.z]entry toCHANGELOG.mdfor the new version (CI checks every pluginversion has a matching heading).
bash tests/run-tests.shlocally → 0 failures (or relied on CI).🤖 Generated with Claude Code
https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
Generated by Claude Code