diff --git a/.claude/wurk/commit.md b/.claude/wurk/commit.md index 45fc846..bd27d92 100644 --- a/.claude/wurk/commit.md +++ b/.claude/wurk/commit.md @@ -111,10 +111,11 @@ tripping a substring match the rule was never meant to catch. Decision: **do not add a `commit-msg` hook.** Enforcement stays inside `/wurk:commit` (Step 2 pre-commit, Step 4.4 post-commit verification). -Reasons: this repo has one contributor and no CI (`CLAUDE.md`'s authority -table), so `/wurk:commit` is already the only path a commit takes in -practice - a plain `git commit` bypassing it would be a self-inflicted -problem, not an outside contributor's. A hook is also another uninstalled-by- +Reasons: this repo has one contributor, and CI (`.github/workflows/ci.yml`) +replays the quality gate but checks nothing about commit messages, so +`/wurk:commit` is already the only message check a commit gets in practice - +a plain `git commit` bypassing it would be a self-inflicted problem, not an +outside contributor's. A hook is also another uninstalled-by- default file: git hooks are not checked in or wired up automatically, so shipping one here would need its own installer step this repo does not have, for a case (bypassing the one workflow the one contributor uses) that has not @@ -122,11 +123,14 @@ come up. This repo removed `.beads/hooks` for the same reason - nothing read them. Revisit if a second contributor, or a habit of using plain `git commit`, actually shows up. -## No CI means the gate is the whole check +## CI replays the gate; the local run is still the trigger The authority table in `CLAUDE.md` makes a full green `mix quality` the trigger -for `git commit`, and there is no second net behind it - no CI run, no -reviewer. So: +for `git commit`. CI (`.github/workflows/ci.yml`) runs the same full gate on +pushes to `main` and on pull requests, reading the command out of +`.claude/wurk.json`'s `gate.full` so the two stay one definition - but it +runs after a push, not before a commit, and there is still no second +reviewer. The local full green remains the trigger: - A `--profile loop` green is not the trigger. It skips dialyzer, doctor, dependencies, and coverage. diff --git a/.claude/wurk/mr.md b/.claude/wurk/mr.md index abb7387..d49a422 100644 --- a/.claude/wurk/mr.md +++ b/.claude/wurk/mr.md @@ -3,17 +3,19 @@ Two project facts. Adds only - see `~/.claude/skills/wurk:mr/SKILL.md` for everything this does not repeat. -## The request is a record, not a review gate +## The request is a record and a CI run, not a human review gate -One contributor, no CI. Nothing runs when the request opens and nobody else is -going to look at it, so: +One contributor, no second reviewer. CI (`.github/workflows/ci.yml`) runs the +full gate on every pull request, so a check does run when the request opens - +but nobody else is going to read the diff, so: -- **Do not wait for checks or review.** There are none to wait for. A request - that sits open pending a signal that will never arrive is just a branch that - has not landed. -- **The gate ran before the push or it did not run at all.** Step 4's full - `mix quality` is the only thing that ever verified this branch. Treat a - skipped or scoped gate here as a hard stop, not a formality to catch up on +- **Do not wait for human review.** There is none to wait for. The CI check is + worth confirming green, but a request that sits open pending a reviewer who + will never arrive is just a branch that has not landed. +- **The gate still runs before the push.** Step 4's full `mix quality` is what + verifies this branch before it becomes public; CI replays the same command + (read from `.claude/wurk.json`'s `gate.full`) only after. Treat a skipped + or scoped local gate here as a hard stop, not something CI will catch up on later. What the request is for is the record: a diff with a written rationale, linked