fix: accept AGENTS.md or legacy CLAUDE.md in the pre-claim preflight check #495

Merged
igor merged 3 commits from agent/493-fix-pre-claim-context-file-check-must-accept into master 2026-08-09 20:59:42 +00:00
Collaborator

What this PR does

  • fix: accept AGENTS.md or legacy CLAUDE.md in the pre-claim preflight check
  • Factor the check into rc_context_file_exists_at (lib/repo-checks.sh) so tick.sh's preflight and its tests share one implementation
  • Update the block message to name AGENTS.md first, CLAUDE.md as the legacy fallback
  • Apply the same either/or to bin/site-work-block.sh's prompt feed (prefers the repo's AGENTS.md dossier, falls back to CLAUDE.md)
  • Apply the same either/or to the vacuous-test block message in bin/tick.sh, which also names CLAUDE.md specifically
  • Tests: repo with only AGENTS.md -> claimable, repo with only CLAUDE.md -> claimable, both present -> claimable, repo with neither -> blocked, plus a check that the block message wording is AGENTS.md-first

Deliverable 2 sweep report

grep -n "CLAUDE.md" bin/tick.sh bin/site-work-block.sh after this change:

bin/site-work-block.sh:19:#          (docs/agents-md-spec.md) if present, else legacy CLAUDE.md
bin/site-work-block.sh:186:# legacy CLAUDE.md for a repo that hasn't converted (igor#493).
bin/site-work-block.sh:190:elif [ -f "$WORKTREE/CLAUDE.md" ]; then
bin/site-work-block.sh:191:  REPO_CLAUDE_MD=$(cat "$WORKTREE/CLAUDE.md")
bin/tick.sh:15:#   5. Claim, clone-if-needed, preflight (AGENTS.md or CLAUDE.md present),
bin/tick.sh:381:# Per-repo CLAUDE.md is NOT concatenated here; Claude Code auto-
bin/tick.sh:4584:# CLAUDE.md -- must exist on the ref we actually branch from
bin/tick.sh:4594:# also carry the legacy CLAUDE.md symlink (igor#493).
bin/tick.sh:4598:  log "preflight: missing AGENTS.md/CLAUDE.md on origin/${PR_BASE}, blocking"
bin/tick.sh:4599:  agent-block.sh "The agent cannot work this repo: \`AGENTS.md\` (or legacy \`CLAUDE.md\`) is missing at the repo root.
bin/tick.sh:4601:The agent relies on \`AGENTS.md\` (or legacy \`CLAUDE.md\`) for project conventions (test commands, code style, gotchas). Add one, remove \`Status/Blocked\`, and the next tick will re-claim this issue."
bin/tick.sh:4647:# Distillery (issue_system_prompt). Per-repo CLAUDE.md is auto-loaded
bin/tick.sh:4917:    agent-block.sh "Tests ran but reported zero tests executed. Definition of done failed: the test suite must run at least one assertion. Either this repo's \`AGENTS.md\` (or legacy \`CLAUDE.md\`) declares a meaningless test command, or the change skipped the relevant suite. Fix and remove \`Status/Blocked\` to re-queue."

Left as-is: bin/tick.sh:381 and bin/tick.sh:4647 are comments documenting that Claude Code's own CLI auto-loads a repo's context file from the worktree root -- that auto-load is Claude Code's behavior, not this harness's code, so it already picks up whichever filename is present with no change needed here.

Out of scope per the issue: the worker-contract skill's prose (Distillery-side), validation's advisory check_claude_md (lib/repo-checks.sh:70, still gates only the advisory checklist, untouched), and un-blocking joshtronic/distillery#1 itself.

Test plan

  • bin/test-repo-checks.sh -- new cases: AGENTS.md-only, CLAUDE.md-only, both, neither, plus the block-message-wording assertion
  • make test passes (full suite, including the new cases)
  • make lint passes (shellcheck + mdl)
  • No manual verification needed beyond the above; this is a pure repo-local git-clone check with no live-service dependency

Closes #493

## What this PR does - [x] fix: accept AGENTS.md or legacy CLAUDE.md in the pre-claim preflight check - [x] Factor the check into `rc_context_file_exists_at` (`lib/repo-checks.sh`) so tick.sh's preflight and its tests share one implementation - [x] Update the block message to name `AGENTS.md` first, `CLAUDE.md` as the legacy fallback - [x] Apply the same either/or to `bin/site-work-block.sh`'s prompt feed (prefers the repo's `AGENTS.md` dossier, falls back to `CLAUDE.md`) - [x] Apply the same either/or to the vacuous-test block message in `bin/tick.sh`, which also names `CLAUDE.md` specifically - [x] Tests: repo with only `AGENTS.md` -> claimable, repo with only `CLAUDE.md` -> claimable, both present -> claimable, repo with neither -> blocked, plus a check that the block message wording is AGENTS.md-first ## Deliverable 2 sweep report `grep -n "CLAUDE.md" bin/tick.sh bin/site-work-block.sh` after this change: ``` bin/site-work-block.sh:19:# (docs/agents-md-spec.md) if present, else legacy CLAUDE.md bin/site-work-block.sh:186:# legacy CLAUDE.md for a repo that hasn't converted (igor#493). bin/site-work-block.sh:190:elif [ -f "$WORKTREE/CLAUDE.md" ]; then bin/site-work-block.sh:191: REPO_CLAUDE_MD=$(cat "$WORKTREE/CLAUDE.md") bin/tick.sh:15:# 5. Claim, clone-if-needed, preflight (AGENTS.md or CLAUDE.md present), bin/tick.sh:381:# Per-repo CLAUDE.md is NOT concatenated here; Claude Code auto- bin/tick.sh:4584:# CLAUDE.md -- must exist on the ref we actually branch from bin/tick.sh:4594:# also carry the legacy CLAUDE.md symlink (igor#493). bin/tick.sh:4598: log "preflight: missing AGENTS.md/CLAUDE.md on origin/${PR_BASE}, blocking" bin/tick.sh:4599: agent-block.sh "The agent cannot work this repo: \`AGENTS.md\` (or legacy \`CLAUDE.md\`) is missing at the repo root. bin/tick.sh:4601:The agent relies on \`AGENTS.md\` (or legacy \`CLAUDE.md\`) for project conventions (test commands, code style, gotchas). Add one, remove \`Status/Blocked\`, and the next tick will re-claim this issue." bin/tick.sh:4647:# Distillery (issue_system_prompt). Per-repo CLAUDE.md is auto-loaded bin/tick.sh:4917: agent-block.sh "Tests ran but reported zero tests executed. Definition of done failed: the test suite must run at least one assertion. Either this repo's \`AGENTS.md\` (or legacy \`CLAUDE.md\`) declares a meaningless test command, or the change skipped the relevant suite. Fix and remove \`Status/Blocked\` to re-queue." ``` Left as-is: `bin/tick.sh:381` and `bin/tick.sh:4647` are comments documenting that Claude Code's own CLI auto-loads a repo's context file from the worktree root -- that auto-load is Claude Code's behavior, not this harness's code, so it already picks up whichever filename is present with no change needed here. Out of scope per the issue: the worker-contract skill's prose (Distillery-side), validation's advisory `check_claude_md` (`lib/repo-checks.sh:70`, still gates only the advisory checklist, untouched), and un-blocking `joshtronic/distillery#1` itself. ## Test plan - [x] `bin/test-repo-checks.sh` -- new cases: AGENTS.md-only, CLAUDE.md-only, both, neither, plus the block-message-wording assertion - [x] `make test` passes (full suite, including the new cases) - [x] `make lint` passes (`shellcheck` + `mdl`) - [x] No manual verification needed beyond the above; this is a pure repo-local git-clone check with no live-service dependency Closes #493
fix: accept AGENTS.md or legacy CLAUDE.md in the pre-claim preflight check
All checks were successful
Lint / check-sync (pull_request) Successful in 7s
Lint / check-sync (push) Successful in 7s
95b9827705
Author
Collaborator

🤖 Review — REQUEST_CHANGES (automated)

CI for 95b98277: success

Small, well-scoped change: preflight now accepts root AGENTS.md or legacy CLAUDE.md via a new rc_context_file_exists_at in lib/repo-checks.sh, with matching message/prompt updates and four new unit cases. The logic itself reads correct and the sweep report matches the diff. One thing blocks me.

Blocking

  • bin/tick.sh:4598 calls rc_context_file_exists_at, but nothing in this diff shows bin/tick.sh sourcing lib/repo-checks.sh. If it doesn't already source it, the call returns 127, if ! ... swallows it (no set -e trip in a condition), and every repo gets blocked at preflight — a total work stoppage that no test in this PR would catch. CI is green, but make testcheck-sync.sh only runs bin/test-*.sh; the new cases exercise the library function directly and the fifth case only greps tick.sh's message string. Nothing executes tick.sh's preflight path.
    • Fixed looks like: cite the existing . "$AGENT_HOME/lib/repo-checks.sh" line number in tick.sh (if it's already there, that resolves this outright), or add it; and ideally add a check that tick.sh actually sources the lib it now depends on, so the wiring — not just the wording — is covered.
    • Note the new helper deliberately bypasses rc_local_init/_RC_REF (per its own doc comment), which is a hint that repo-checks.sh's other consumers are the validation path, not tick.sh. That's what makes the sourcing worth proving rather than assuming.

Non-blocking notes

  • bin/site-work-block.sh:186-192: the header now says "No harness worker-contract AGENTS.md -- non-issue-work surface" while the code reads $WORKTREE/AGENTS.md as "repo conventions". For any repo where AGENTS.md is a worker-contract-style document (igor itself, per check-sync.sh's fallback), this surface would now ingest exactly what the comment says it excludes. Probably fine for the site repo, but worth a sentence confirming which worktrees this runs against.
  • REPO_CLAUDE_MD is now a misnomer (it may hold AGENTS.md). Renaming would be a drive-by, so leaving it is the right call — just flagging it for the follow-up ticket if one exists.
  • The fifth test asserts on tick.sh's literal source text (grep -qF '\AGENTS.md` (or legacy ...'`). It matches the escaped backticks in tick.sh:4599 as written, but it's a brittle wording test — it will break on any innocuous rephrasing while still not covering the branch's behavior.
  • What I could not verify from the diff alone: that new_fixture/commit_fixture/ok/no exist with the assumed semantics and default branch master (CI green is decent evidence they do), and the tick.sh source line above.

Checklist vs. diff: every checked item corresponds to real changes, and the deliverable-2 sweep report matches what's in bin/tick.sh / bin/site-work-block.sh. No scope creep, no comment-contract issues, no security surface touched.


Independent review by the harness on claude-opus-5 (effort: high). The human reviewer is requested once Igor has reviewed; a human still merges.

### 🤖 Review — `REQUEST_CHANGES` _(automated)_ CI for `95b98277`: **success** Small, well-scoped change: preflight now accepts root `AGENTS.md` **or** legacy `CLAUDE.md` via a new `rc_context_file_exists_at` in `lib/repo-checks.sh`, with matching message/prompt updates and four new unit cases. The logic itself reads correct and the sweep report matches the diff. One thing blocks me. ## Blocking - **`bin/tick.sh:4598` calls `rc_context_file_exists_at`, but nothing in this diff shows `bin/tick.sh` sourcing `lib/repo-checks.sh`.** If it doesn't already source it, the call returns 127, `if ! ...` swallows it (no `set -e` trip in a condition), and **every repo gets blocked at preflight** — a total work stoppage that no test in this PR would catch. CI is green, but `make test` → `check-sync.sh` only runs `bin/test-*.sh`; the new cases exercise the library function directly and the fifth case only `grep`s tick.sh's message string. Nothing executes tick.sh's preflight path. - Fixed looks like: cite the existing `. "$AGENT_HOME/lib/repo-checks.sh"` line number in tick.sh (if it's already there, that resolves this outright), or add it; and ideally add a check that tick.sh actually sources the lib it now depends on, so the wiring — not just the wording — is covered. - Note the new helper deliberately bypasses `rc_local_init`/`_RC_REF` (per its own doc comment), which is a hint that repo-checks.sh's other consumers are the validation path, not tick.sh. That's what makes the sourcing worth proving rather than assuming. ## Non-blocking notes - `bin/site-work-block.sh:186-192`: the header now says "No harness worker-contract AGENTS.md -- non-issue-work surface" while the code reads `$WORKTREE/AGENTS.md` as "repo conventions". For any repo where AGENTS.md *is* a worker-contract-style document (igor itself, per `check-sync.sh`'s fallback), this surface would now ingest exactly what the comment says it excludes. Probably fine for the site repo, but worth a sentence confirming which worktrees this runs against. - `REPO_CLAUDE_MD` is now a misnomer (it may hold AGENTS.md). Renaming would be a drive-by, so leaving it is the right call — just flagging it for the follow-up ticket if one exists. - The fifth test asserts on tick.sh's literal source text (`grep -qF '\`AGENTS.md\` (or legacy ...'`). It matches the escaped backticks in tick.sh:4599 as written, but it's a brittle wording test — it will break on any innocuous rephrasing while still not covering the branch's behavior. - What I could not verify from the diff alone: that `new_fixture`/`commit_fixture`/`ok`/`no` exist with the assumed semantics and default branch `master` (CI green is decent evidence they do), and the tick.sh source line above. Checklist vs. diff: every checked item corresponds to real changes, and the deliverable-2 sweep report matches what's in `bin/tick.sh` / `bin/site-work-block.sh`. No scope creep, no comment-contract issues, no security surface touched. --- <sub>Independent review by the harness on `claude-opus-5` (effort: high). The human reviewer is requested once Igor has reviewed; a human still merges.</sub> <!-- review sha=95b98277056c75fd7fca3ce24d9adb396adc3e26 verdict=REQUEST_CHANGES ci=success -->
igor added spent time 2026-08-09 16:25:08 +00:00
1 minute 10 seconds
igor self-assigned this 2026-08-09 16:25:09 +00:00
Author
Collaborator

🔧 Rework — round 1 (automated)

Addressed the review on claude-opus-5 at effort high — 1 new commit(s).

### 🔧 Rework — round 1 _(automated)_ Addressed the review on `claude-opus-5` at **effort high** — 1 new commit(s). <!-- audit:rework round=1 effort=high -->
igor removed their assignment 2026-08-09 16:30:53 +00:00
test: cover the preflight's repo-checks wiring, clarify the site-work context source
All checks were successful
Lint / check-sync (push) Successful in 6s
Lint / check-sync (pull_request) Successful in 6s
d3b490243e
Review round 1 on igor#495. tick.sh already sources lib/repo-checks.sh
(bin/tick.sh:89-90), so the preflight call was never a 127 -- but nothing
asserted that, so assert it: tick.sh carries the source line, and the sourced
lib defines rc_context_file_exists_at. Loosen the block-message assertion from
a full-sentence grep -qF to a regex so a rephrasing doesn't fail it.

site-work-block.sh: say explicitly that the excluded worker contract is THIS
repo's, and that the worktree is always carved from WEBSITE_REPO; rename
REPO_CLAUDE_MD to REPO_CONTEXT_MD now that it may hold either filename.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Author
Collaborator

🧑‍⚖️ Rework — findings dismissed (automated)

Dismissed: the blocking finding (tick.sh doesn't source lib/repo-checks.sh)

bin/tick.sh:4598 calls rc_context_file_exists_at, but nothing in this diff
shows bin/tick.sh sourcing lib/repo-checks.sh. [...] every repo gets
blocked at preflight.

It already sources it, and has since long before this PR -- which is why the
line isn't in the diff. bin/tick.sh:89-90:

# shellcheck source=lib/repo-checks.sh
. "$AGENT_HOME/lib/repo-checks.sh"

grep -n "repo-checks.sh" bin/tick.sh returns exactly those two lines. The
source block sits at the top of the file, above every function definition and
~4500 lines above the preflight, so the function is defined by the time the
preflight runs. No 127, no fleet-wide block.

The reviewer's own escape hatch ("if it's already there, that resolves this
outright") applies. I did take the second half of the suggestion, though: the
wiring is now covered by tests rather than assumed. bin/test-repo-checks.sh
asserts both halves -- that tick.sh carries the source line, and that the
sourced lib actually defines rc_context_file_exists_at. A future edit that
drops either one now fails make test.

On the doc-comment hint: the helper bypasses rc_local_init/_RC_REF because
tick.sh's preflight reads a DIFFERENT clone (the work clone at
origin/$PR_BASE) than the validation path's clone, not because tick.sh is a
stranger to the lib. tick.sh already calls validate_repo_local and friends
from the same file.

Fixed (from the non-blocking notes)

  • Brittle wording test: loosened from a grep -qF on the full literal sentence
    to grep -qE 'AGENTS\.md.*legacy.*CLAUDE\.md.*missing at the repo root', so
    an innocuous rephrasing doesn't fail it while the AGENTS-first-with-legacy-
    fallback intent still is asserted.
  • bin/site-work-block.sh header ambiguity: the "No harness worker-contract
    AGENTS.md" line now says explicitly that it means THIS repo's worker contract,
    and that the worktree is always carved from WEBSITE_REPO. That worktree
    comes from $WEBSITE_PATH's origin/master (site-work-block.sh:178), so
    the only AGENTS.md it can ever read is the website repo's own conventions
    dossier -- never igor's.
  • REPO_CLAUDE_MD misnomer: renamed to REPO_CONTEXT_MD. The reviewer called
    leaving it the right call, but this PR is what made the name wrong, the
    variable is local to one script with four references, and three of the four
    lines were already mine.

The rest of the findings were addressed in the commits on this branch. The reviewer will re-review the new head.

### 🧑‍⚖️ Rework — findings dismissed _(automated)_ ## Dismissed: the blocking finding (tick.sh doesn't source `lib/repo-checks.sh`) > `bin/tick.sh:4598` calls `rc_context_file_exists_at`, but nothing in this diff > shows `bin/tick.sh` sourcing `lib/repo-checks.sh`. [...] every repo gets > blocked at preflight. It already sources it, and has since long before this PR -- which is why the line isn't in the diff. `bin/tick.sh:89-90`: ``` # shellcheck source=lib/repo-checks.sh . "$AGENT_HOME/lib/repo-checks.sh" ``` `grep -n "repo-checks.sh" bin/tick.sh` returns exactly those two lines. The source block sits at the top of the file, above every function definition and ~4500 lines above the preflight, so the function is defined by the time the preflight runs. No 127, no fleet-wide block. The reviewer's own escape hatch ("if it's already there, that resolves this outright") applies. I did take the second half of the suggestion, though: the wiring is now covered by tests rather than assumed. `bin/test-repo-checks.sh` asserts both halves -- that tick.sh carries the source line, and that the sourced lib actually defines `rc_context_file_exists_at`. A future edit that drops either one now fails `make test`. On the doc-comment hint: the helper bypasses `rc_local_init`/`_RC_REF` because tick.sh's preflight reads a DIFFERENT clone (the work clone at `origin/$PR_BASE`) than the validation path's clone, not because tick.sh is a stranger to the lib. tick.sh already calls `validate_repo_local` and friends from the same file. ## Fixed (from the non-blocking notes) - Brittle wording test: loosened from a `grep -qF` on the full literal sentence to `grep -qE 'AGENTS\.md.*legacy.*CLAUDE\.md.*missing at the repo root'`, so an innocuous rephrasing doesn't fail it while the AGENTS-first-with-legacy- fallback intent still is asserted. - `bin/site-work-block.sh` header ambiguity: the "No harness worker-contract AGENTS.md" line now says explicitly that it means THIS repo's worker contract, and that the worktree is always carved from `WEBSITE_REPO`. That worktree comes from `$WEBSITE_PATH`'s `origin/master` (`site-work-block.sh:178`), so the only AGENTS.md it can ever read is the website repo's own conventions dossier -- never igor's. - `REPO_CLAUDE_MD` misnomer: renamed to `REPO_CONTEXT_MD`. The reviewer called leaving it the right call, but this PR is what made the name wrong, the variable is local to one script with four references, and three of the four lines were already mine. --- The rest of the findings were addressed in the commits on this branch. The reviewer will re-review the new head. <!-- adjudication:dismissed -->
igor added spent time 2026-08-09 16:30:54 +00:00
4 minutes 36 seconds
Author
Collaborator

🤖 Review — APPROVE (automated)

CI for d3b49024: success

Small, focused fix: the pre-claim preflight now accepts root AGENTS.md or legacy CLAUDE.md via a new rc_context_file_exists_at helper, with the same either/or applied to site-work-block.sh's prompt feed and the vacuous-test block message. Scope matches issue #493's three deliverables exactly; CI is green.

What I checked

  • Checklist honesty — every checked box maps to a real hunk (helper in lib/repo-checks.sh:65-77, preflight rewrite bin/tick.sh:4583-4601, prompt feed bin/site-work-block.sh:186-193, vacuous-test message bin/tick.sh:4917, five new test cases). No fabricated items.
  • Prior blocking finding (tick.sh not sourcing the lib) — the dismissal holds, and the author did better than assert it: bin/test-repo-checks.sh now greps for the exact source line in tick.sh and asserts command -v rc_context_file_exists_at. Green CI means both matched, so the "127 blocks every repo" failure mode is now covered rather than assumed. Point dropped.
  • Comment contract — the new block on rc_context_file_exists_at is a conventional helper doc comment plus a genuine why (path/ref taken explicitly because tick's preflight reads a different clone than rc_local_init's). The tick.sh preflight comment edits are why-comments on an existing block, not narration. No violations.
  • Minimal touch — the REPO_CLAUDE_MDREPO_CONTEXT_MD rename is a drive-by in the strict sense, but this PR is what made the old name wrong and it's confined to the three lines the change already owns. Acceptable.
  • Behaviorcat-file -e against origin/$PR_BASE (not the working tree) is preserved; the short-circuit || gives the intended AGENTS-first-else-legacy semantics; the "neither" case still blocks with the reworded message. No widening of privilege, no CI-config changes, no security surface.

Non-blocking notes

  • bin/site-work-block.sh has no test coverage, so the rename's completeness rests on shellcheck (SC2154 would fire on a stray ${REPO_CLAUDE_MD}); make lint is reported green and CI agrees, but I couldn't confirm by reading — the grep in the PR body wouldn't have caught a leftover either, since CLAUDE.md doesn't match REPO_CLAUDE_MD.
  • The new fixture cases assume the fixture default branch is master; the positive assertions passing in CI proves that, but a future fixture-helper change to main would silently turn no "neither -> absent" vacuous. Not worth churn now.
  • I could not verify from the diff that validation's advisory check_claude_md (lib/repo-checks.sh:70, untouched) truly only feeds the advisory checklist rather than gating discovery — if it gated eligibility, distillery#1 still wouldn't be claimable after this merges. The issue explicitly scopes it out and the author reports it as advisory, so I'm taking that at face value; flagging only so the human knows it's the one link in the chain neither of us confirmed.
  • Assertion style: the wording check is now a loosened regex (AGENTS\.md.*legacy.*CLAUDE\.md.*missing at the repo root) rather than a literal-sentence match — good call, it asserts intent without breaking on rephrasing.

Nothing blocking. Approving.


Independent review by the harness on claude-opus-5 (effort: high). The human reviewer is requested once Igor has reviewed; a human still merges.

### 🤖 Review — `APPROVE` _(automated)_ CI for `d3b49024`: **success** Small, focused fix: the pre-claim preflight now accepts root `AGENTS.md` **or** legacy `CLAUDE.md` via a new `rc_context_file_exists_at` helper, with the same either/or applied to `site-work-block.sh`'s prompt feed and the vacuous-test block message. Scope matches issue #493's three deliverables exactly; CI is green. **What I checked** - **Checklist honesty** — every checked box maps to a real hunk (helper in `lib/repo-checks.sh:65-77`, preflight rewrite `bin/tick.sh:4583-4601`, prompt feed `bin/site-work-block.sh:186-193`, vacuous-test message `bin/tick.sh:4917`, five new test cases). No fabricated items. - **Prior blocking finding (tick.sh not sourcing the lib)** — the dismissal holds, and the author did better than assert it: `bin/test-repo-checks.sh` now greps for the exact source line in `tick.sh` *and* asserts `command -v rc_context_file_exists_at`. Green CI means both matched, so the "127 blocks every repo" failure mode is now covered rather than assumed. Point dropped. - **Comment contract** — the new block on `rc_context_file_exists_at` is a conventional helper doc comment plus a genuine *why* (path/ref taken explicitly because tick's preflight reads a different clone than `rc_local_init`'s). The `tick.sh` preflight comment edits are why-comments on an existing block, not narration. No violations. - **Minimal touch** — the `REPO_CLAUDE_MD` → `REPO_CONTEXT_MD` rename is a drive-by in the strict sense, but this PR is what made the old name wrong and it's confined to the three lines the change already owns. Acceptable. - **Behavior** — `cat-file -e` against `origin/$PR_BASE` (not the working tree) is preserved; the short-circuit `||` gives the intended AGENTS-first-else-legacy semantics; the "neither" case still blocks with the reworded message. No widening of privilege, no CI-config changes, no security surface. **Non-blocking notes** - `bin/site-work-block.sh` has no test coverage, so the rename's completeness rests on `shellcheck` (SC2154 would fire on a stray `${REPO_CLAUDE_MD}`); `make lint` is reported green and CI agrees, but I couldn't confirm by reading — the grep in the PR body wouldn't have caught a leftover either, since `CLAUDE.md` doesn't match `REPO_CLAUDE_MD`. - The new fixture cases assume the fixture default branch is `master`; the positive assertions passing in CI proves that, but a future fixture-helper change to `main` would silently turn `no "neither -> absent"` vacuous. Not worth churn now. - I could not verify from the diff that validation's advisory `check_claude_md` (`lib/repo-checks.sh:70`, untouched) truly only feeds the advisory checklist rather than gating discovery — if it gated eligibility, distillery#1 still wouldn't be claimable after this merges. The issue explicitly scopes it out and the author reports it as advisory, so I'm taking that at face value; flagging only so the human knows it's the one link in the chain neither of us confirmed. - Assertion style: the wording check is now a loosened regex (`AGENTS\.md.*legacy.*CLAUDE\.md.*missing at the repo root`) rather than a literal-sentence match — good call, it asserts intent without breaking on rephrasing. Nothing blocking. Approving. --- <sub>Independent review by the harness on `claude-opus-5` (effort: high). The human reviewer is requested once Igor has reviewed; a human still merges.</sub> <!-- review sha=d3b490243ebd0aa7a85aea9df1a481215df9f9f9 verdict=APPROVE ci=success -->
igor added spent time 2026-08-09 16:33:00 +00:00
1 minute 13 seconds
Merge branch 'master' into agent/493-fix-pre-claim-context-file-check-must-accept
All checks were successful
Lint / check-sync (push) Successful in 8s
Lint / check-sync (pull_request) Successful in 8s
a7dabb9de6
igor merged commit 16c5365b40 into master 2026-08-09 20:59:42 +00:00
igor deleted branch agent/493-fix-pre-claim-context-file-check-must-accept 2026-08-09 20:59:42 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No assignees
1 participant
Notifications
Total time spent: 6 minutes 59 seconds
igor
6 minutes 59 seconds
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
joshtronic/igor!495
No description provided.