Conversation
Documentation, clarity, and functionality pass from the bamr87/bamr87 repo-evolution loop (run 34826256105). Draft for human review; nothing merges automatically.
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.
Done. Here's the PR body:
What changed
project-init.sh:2-41— replaced the Python-style"""…"""header block with a#-prefixed banner comment matchingSTASHME/stashme.sh's convention. Content is unchanged, only re-commented and re-wrapped.git_init.sh:390-391— added a--dry-runbranch to thegh-unavailable path sogit remote add originis printed, not executed.git_init.sh:398-404— guarded the previously unconditionalgit branch -M "$DEFAULT_BRANCH"behind the dry-run check.git_init.sh:49,54,56,113,119— documented--dry-runinusage(), added the dry-run example, and madeusagetake an exit code so--helpexits 0 while error paths still exit 1.git_init.sh:59-64,69-120— added amissing_value()helper and an explicit[ $# -ge 2 ]arity check to every value-taking option; collapsed-*|--*=to-*.SECURITY.md(new) — disclosure policy scoped to what these tools actually are..github/ISSUE_TEMPLATE/bug_report.yml,feature_request.yml(new) — GitHub issue forms.Why
project-init.sh's"""block was the repo's only shellcheckerror. Bash does not have triple-quoted strings: the quote opened at line 2 col 3 closes on the"in line 35's"$HOME/github/my-react-app", reopens, and runs to line 41 — so lines 2–41 tokenize as a single command word containing newlines, which bash tries to execute. It only fails soft becauseset -euo pipefailis on line 43, after it. Every invocation printed a multi-linecommand not foundto stderr before doing anything. CLAUDE.md states the hub'stools/run-all-tests.shshellchecks the top-level*.shhere, so this error was failing the hub's aggregate checks too.git branch -Mleaked past--dry-run. In dry-run the script deliberately skips thecd "$REPO_PATH", so every later git command runs in the caller's current directory.git branch -M mainwas outside every dry-run guard — meaning the smoke test CLAUDE.md documents (./git_init.sh --headless -n previewme --dry-run) silently renames the current branch of whatever repo you happen to be standing in. Same class of leak on thegit remote addin the no-ghpath.--dry-runwas implemented but absent from--help. README.md and CLAUDE.md both document it;usage()did not.--helpalso exited 1, which breaksgit_init.sh --help | lessin aset -ewrapper.X="$2" && shift 2 || usagecrashed instead of explaining. Underset -u(line 4),git_init.sh --namewith no value aborts on$2: unbound variablebefore the|| usagefallback can run. This also cleared 8 SC2015 findings, and the--*=arm of-*|--*=was dead (SC2221/SC2222) since-*already matched it.SECURITY.md/ issue templates close conformance rowsUPS-REPO-14andUPS-REPO-18(both MUST) from the brief. PR chore: retire tooling superseded by the hub's fan-out kits #9 independently flags issue templates as a real gap that.github.sh's removal leaves open and that the hub's standardize kit does not seed.Verification
shellcheck --severity=error *.sh FORKME/forkme.sh STASHME/stashme.sh linting/*.sh→ clean (no output).git show HEAD:project-init.sh | shellcheck --severity=error -s bash -→ reproducesSC2289on line 2, confirming the error is pre-existing and now fixed.shellcheck git_init.sh project-init.sh→SC2289,SC2221,SC2222and all 8SC2015findings gone. Remaining findings in both files are pre-existing and untouched (SC2155,SC2162,SC2223,SC2294,SC2001).python3 tools/unwrap-prose.py --check→ "All markdown prose already unwrapped." Also run explicitly on the untrackedSECURITY.md→ same.python3 -c "import yaml; ..."on both issue templates → parses.git status --short→ only the 2 modified scripts and the 2 new paths; no scratch files.Not verified: this sandbox blocks executing the scripts, so I could not run
bash -n git_init.shor a live--dry-run. Shellcheck parses both files end-to-end without a parse error, which covers syntax, but the dry-run output lines are unexercised. Worth one manual./git_init.sh --headless -n previewme --dry-runfrom a throwaway branch before merge.Not done
README.mdis untouched on purpose. Open PR chore: retire tooling superseded by the hub's fan-out kits #9 rewrites it (+106/−412), so any edit here becomes a guaranteed conflict for work already in flight. Two consequences a human should pick up:.github/files — after chore: retire tooling superseded by the hub's fan-out kits #9 lands, the tool index needs a pointer toSECURITY.md../stashme.shthroughout (lines 20-21, 79-98, 105-110), but there is no root symlink for it — onlyforkme.sh -> FORKME/forkme.shexists. The real path is./STASHME/stashme.sh. chore: retire tooling superseded by the hub's fan-out kits #9 claims to have verified the tool index againstgit ls-files; worth confirming that specific path survived the rewrite, since either the docs or a missing symlink is wrong.UPS-AGENT-03andUPS-AGENT-22left open. Both need the hub's copies to lift from (the<!-- kit: agent-context vX.Y.Z -->stamp version, and the canonicaltools/unwrap-prose.py), andgh api repos/bamr87/bamr87/contents/...is not reachable from this runner. Guessing a kit version string would be worse than leaving the row red.CLAUDE.mdis also modified by PR chore: retire tooling superseded by the hub's fan-out kits #9.UPS-QA-32,UPS-REPO-13(release-please config, CHANGELOG) skipped — release plumbing is explicitly out of bounds for this pass.UPS-QA-41(.github/dependabot.yml) skipped, and I think the row is genuinely contested rather than merely unaddressed: PR chore: retire tooling superseded by the hub's fan-out kits #9 argues at length that the fleet's ALWAYS-LATEST policy removes the pins Dependabot exists to bump. Someone should reconcile the spec row againstdocs/DEPENDENCIES.mdrather than have each repo decide.UPS-QA-10(no test files) is the largest real gap and needs more than a surgical pass. The natural shape: atests/runner driving each script's--dry-run/--helppath against a scratchGIT_DIR, which would have caught thegit branch -Mleak above.git_init.sh,stashme.sh, andforkme.shall have dry-run modes to build on;project-init.shandrename-directory.shdo not, and adding one to each is a prerequisite.git_init.sh:150run_or_echouseseval "$@"(SC2294). Every call site passes a single pre-quoted string so it works today, but it is one careless call away from injecting a repo name into a shell. Converting to an array-based runner touches ~10 call sites — too broad for this pass.SC2155warnings inFORKME/forkme.sh(lines 440, 444, 488, 1604) and 2 inSTASHME/stashme.sh(57, 58).forkme.shis symlinked into the top level, so these are in the set CLAUDE.md asks to keep clean. Mechanical to fix but it is a lint sweep, not a targeted change.🤖 Generated with Claude Code
Draft opened by the bamr87/bamr87 repo-evolution loop — run; the brief the agent worked from is attached to that run as
evolution-workorders. Machine-authored: review it as you would any contribution. Nothing here merges automatically, and no new pass is opened for this repository while this one is open.