Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions .claude/wurk/commit.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,22 +111,26 @@ 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
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.
Expand Down
20 changes: 11 additions & 9 deletions .claude/wurk/mr.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down