Files
jpmschweitzerandClaude Opus 5 338644b409 refactor(tooling): T-1286 — generate, pr and dev become reach domains
Twelve scripts retired, three domains registered. `reach` now covers nine.

generate: `generate-brands` and `generate-corporations` were the second and
third copies of the same 24-line build-if-missing-then-exec bash `tooling/atlas`
carried, so they collapsed into `core.process.cargo_binary` rather than being
ported. `import_economics` shelled out to the first of those, so it now calls
that helper — `generated_brands.toml` comes back byte-identical, and the stamp
registry swaps the retired wrapper for `core/process.py`.

pr: `watchlist-diff` derives its watched set from `generator_sources.py` instead
of restating it, so it cannot drift from the stamp check.

dev: the environment scripts split decision from performing, per D-263's
guarded-exec rule. `godot_plan()` and `worktree_plan()` decide what would
happen; `install_godot()`, `install_rust()` and `setup_worktree()` do it.
`tooling/test_environment.py` pins the version pin, both override precedences,
the already-current skip, the platform refusal and both worktree refusals —
none of them performed. `make setup` now installs reach first, since the
targets that install rust and godot are reach verbs.

Two live bugs found while porting:

- The clerk read its decision index from `decisions/README.md`, a path that
  stopped existing when the DQR tree moved to `governance/`. Every clerk agent
  has been grepping blind; its prompt pointed at the same dead directory.
- The conformance exec-check matched any `x.system()` regardless of receiver,
  so `platform.system()` read as `os.system()`. Narrowed and re-proved against
  a real mutant.

`process.run` gains `input=`, `timeout=` and a `ProcessTimeout` subclass so a
killed run stays distinguishable from a verdict. The pre-push hook no longer
merges the clerk's stderr into its stdout — under streaming the last merged
line is a JSONL event, which would read as an unrecognised verdict and block.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 17:00:46 +02:00

112 lines
2.8 KiB
JSON

{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
},
"teammateMode": "auto",
"permissions": {
"allow": [
"Bash(git add *)",
"Bash(git commit *)",
"Bash(git push *)",
"Bash(git fetch *)",
"Bash(git merge *)",
"Bash(git pull *)",
"Bash(git status *)",
"Bash(git log *)",
"Bash(git diff *)",
"Bash(git show *)",
"Bash(git checkout *)",
"Bash(git stash *)",
"Bash(git branch *)",
"Bash(git worktree *)",
"Bash(git config *)",
"Bash(git mv *)",
"Bash(git rm *)",
"Bash(git ls-tree *)",
"Bash(git rev-parse --show-toplevel)",
"Bash(tooling/db/audio-generate *)",
"Bash(tooling/db/audio-health)",
"Bash(tooling/db/audio-post *)",
"Bash(tooling/db/audio-batch *)",
"Bash(make *)",
"Bash(make)",
"Bash(pql)",
"Bash(pql *)",
"Bash(reach)",
"Bash(reach *)",
"Bash(tea *)",
"Bash(cargo test *)",
"Bash(cargo test)",
"Bash(cargo build *)",
"Bash(cargo build)",
"Bash(cargo check *)",
"Bash(cargo check)",
"Bash(cargo clippy *)",
"Bash(cargo clippy)",
"Bash(ruff check *)",
"Bash(ruff check)",
"Bash(tests/run-*)",
"Bash(godot4:*)",
"Bash(gdformat:*)",
"Bash(chmod *)",
"Bash(ls *)",
"Bash(find *)",
"Bash(list *)",
"Bash(tree *)",
"Bash(sed -n *)",
"Read(//var/mnt/data/projects/settled-reach/**)",
"Edit(//var/mnt/data/projects/settled-reach/**)",
"Read(//tmp/**)",
"Grep",
"Glob",
"Skill(git-commit)",
"Skill(whats-next)",
"Skill(pr-process)",
"Skill(pr-review)",
"Skill(ticket)",
"Skill(workshop-start)"
],
"deny": [
"Bash(git push --force *)",
"Bash(git push --force:*)",
"Bash(git push --force)",
"Bash(git reset --hard *)",
"Bash(git reset --hard:*)",
"Bash(git reset --hard)",
"Bash(git clean -f *)",
"Bash(git clean -f:*)",
"Bash(git clean -f)",
"Bash(rm -rf *)",
"Bash(rm -rf:*)"
],
"ask": [
"Edit(.claude/settings.json)",
"Edit(.claude/settings.local.json)",
"Edit(.claude/hooks/**)",
"Edit(.config/hooks/**)",
"Edit(.worktrees/**/.claude/settings.json)",
"Edit(.worktrees/**/.claude/hooks/**)",
"Edit(.worktrees/**/.config/hooks/**)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/git-lock-guard.sh",
"timeout": 5
},
{
"type": "command",
"command": ".claude/hooks/git-centralize-guard.sh",
"timeout": 5
}
]
}
]
}
}