CLAUDE.md — workflow tool repo (sessions changing wf)
This repo = the tool: shared/CLAUDE.md (symlinked as /projects/CLAUDE.md, loaded by every agent)
+ wf.py / wf_res.py / wflib/. Reference: docs/design.md, docs/resource-ledger.md.
No personal data here (project names, tasks, paths under home): the workflow's own tasks live in a
separate private wf project; publishable as is.
Public by default: never put private names in files or commit messages; the denylist hooks
(.githooks, scripts/denylist_check.py; enable: git config core.hooksPath .githooks) refuse them.
Everything here is live
Workers run the main tree's master the moment it changes. So:
- wf.py, wf_res.py, wflib/, shared/CLAUDE.md, templates/ → git worktree
.worktrees/<topic> on a branch, never the main tree.
- Release = fast-forward merge to master, only after:
1. python3 -m unittest discover -s tests green in the worktree;
2. wf check run with the new code in every project of wf projects gives the same
result as the old code (or only the intended differences);
3. a line on top of CHANGES.md: date, what changed, what a project must do (if anything).
- The user sees each release. Push only to remote home (private), never elsewhere.
Compatibility
- Commands and options are only added. Rename/remove → old spelling works one more release and prints a one-line notice.
- TASKS.md format change → raise
FORMAT(wflib/config.py) +wf migratestep; older projects keep read commands, write commands refuse until migrated. shared/CLAUDE.mdreaches a worker at its next session start: a rule change must not make files written under the old rule invalid. Keep it short; project needs go to the project.
Code rules
- Python ≥ 3.11 stdlib only.
wflib/pure (text in, text out); files and printing inwf.py/wf_res.py. - TDD; oracles = hand-written literals; see each new test fail first.
- Expected failures: one
wf: …line on stderr, exit 1; usage errors exit 2; no tracebacks.