Skip to content

chore(harden): enforcement-claim checklist item; escalate docs-drift to rung P#5

Merged
dsnger merged 2 commits into
mainfrom
chore/harden-enforcement-and-drift
Jul 18, 2026
Merged

chore(harden): enforcement-claim checklist item; escalate docs-drift to rung P#5
dsnger merged 2 commits into
mainfrom
chore/harden-enforcement-and-drift

Conversation

@dsnger

@dsnger dsnger commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Two reactive hardenings — one ledger row each, both surfaced by the gates or a bot. Plus the bot-matrix correction those findings forced.

1 · unverified-enforcement-claim (new class) → rung P

Six citable instances across one spec, its plan and its diff where something was described as enforced, caught or guaranteed and no mechanism did it:

Claim What refuted it Caught by
"a rogue write cannot be invisible" todos.md's own documented false-✓ paths Gate A, spec
"all four gaps are recorded in todos.md" two were Gate A, spec
"output validation catches a budget overrun" the output carries no call count Gate A, spec
attestation "proves" the precheck ran it is caller-authored text (e30568d) Gate A, spec
"an altered claim lands on the wrong thread" the caller's equality check rejects it Gate A, plan
prose said the hook matched bare agents/ is_prompt_path does not Gate B, pre-merge

Every one was caught by a review gate. None by me. New docs/prompt-standards.md item 11 requires an enforcement claim to name its mechanism, and the author to verify that mechanism exists before writing the sentence. Mirrored into the scaffolded template.

Minted as its own class rather than filed under docs-drift: drift is two artifacts disagreeing; this is one claim untrue on its own terms even with nothing to contradict it. Different fix, so it needs a different grep.

How the count was settled is the strongest argument for the item. It was asserted as six without checking, "corrected" to five from memory when challenged, and only settled at six by reading the commits. Two unverified claims, made while hardening against unverified claims. That's recorded in the checklist item itself.

2 · docs-drift → rung P, escalated from the existing 1 prose row

A Gate-B fix changed behaviour the approved spec specified — reordered a precedence rule, made a row terminal, added a fourth terminal to Done — and the spec was never updated. The two disagreed until a PR bot caught it after merge-readiness.

The prior rung was an AGENTS.md rule about manifest claims: too narrow to reach spec-vs-implementation drift. The new rule lives where the recurring slice lives — the Gate-B instructions themselves: a fix that changes specified behaviour isn't complete until the spec is updated in the same commit, and the re-review covers both.

No mechanical rung, and I argued this rather than forcing one: deciding whether a fix altered behaviour a spec pins down requires reading both artifacts. The crude proxies — "any command change must touch a spec" — would fire on every change no spec covers. Codex agreed after independent analysis.

Bot matrix

Greptile posted summary-only findings on PR #1 and two valid inline comments on PR #4. Its column now reads inconsistent with both observations dated, rather than being reclassified from one more data point — reclassifying on thin evidence is what put the wrong value there originally.

That exposed a routing bug: inconsistent wasn't consumable by a command that knew only line-findings-vs-summary. The Wait for list is now the routing authority across all four copies — the command's Steps 0 and 2, the matrix, AGENTS.md's tree comment, and the scaffolded template — with the table descriptive. The scaffold no longer derives Wait-for from a column that stopped holding yes/no.

Two claims in that file were also wrong and are corrected: a fabricated "four days apart" (the observations are hours apart on the same day; timestamps now cited), and "both post a check" (the check-runs/statuses API returns only quality and CodeRabbit for that head, so Greptile's completion is watched via its comment instead).

Review

Gate B ran 5 passes, final clean on both spec and quality reviews. Codex independently verified each of the six historical instances against the commits, the 4/1/1 provenance split, the PR timestamps, and the API evidence.

Battery green: shellcheck ×4, hook suite, 61 invariant assertions, invariant scan, plugin validate --strict. No executable changed — this is all prompts and docs.

Summary by CodeRabbit

  • Documentation
    • Expanded prompt-quality guidance to require verified mechanisms for enforcement and guarantee claims.
    • Updated PR review bot routing guidance, including completion signals and inline or summary findings.
    • Clarified that behavior-changing review fixes must update the corresponding specification.
    • Added hardening taxonomy and log entries for unsupported enforcement claims and documentation drift.
    • Updated checklist references from 11 to 12 items.

…to rung P

Two reactive hardenings, one ledger row each, both surfaced by the gates or a bot.

1. unverified-enforcement-claim (new class) -> rung P

   Six citable instances across one spec, its plan and its diff where something was
   described as enforced, caught or guaranteed and no mechanism did it. Each was
   caught by a review gate; none by me. New docs/prompt-standards.md item 11
   requires such a claim to name its mechanism and the author to verify the
   mechanism exists first. Mirrored into the scaffolded template.

   The class is minted rather than filed as docs-drift: drift is two artifacts
   disagreeing, this is one claim untrue on its own terms even with nothing to
   contradict it. Different fix, so different grep.

   How the count was settled is the best argument for the item. It was asserted as
   six without checking, "corrected" to five from memory, and only settled at six
   by reading the commits — two unverified claims in the course of hardening
   against unverified claims.

2. docs-drift -> rung P (escalated from the 2026-07-18 `1 prose` row)

   A Gate-B fix changed behaviour the approved spec specified and the spec was
   never updated, so the two disagreed until a PR bot found it. The prior rung was
   an AGENTS.md rule about manifest claims — too narrow to reach this. The rule now
   lives in the Gate-B instructions themselves: a fix that changes specified
   behaviour is not complete until the spec is updated in the same commit.

   No mechanical rung: deciding whether a fix altered behaviour a spec pins down
   needs both artifacts read, and the crude proxies fire on every change no spec
   covers.

BOT MATRIX

Greptile posted summary-only findings on PR #1 and two valid inline comments on
PR #4. Its column now reads `inconsistent` with both observations dated, rather
than being reclassified from one more data point.

That exposed a routing bug: `inconsistent` was not consumable by a command that
knew only line-findings-vs-summary. The Wait-for list is now the routing authority
in all four copies — the command's Steps 0 and 2, the matrix, AGENTS.md's tree
comment, and the scaffolded template — with the table descriptive. The scaffold no
longer derives Wait-for from a column that stopped holding yes/no.

Also corrected: a fabricated "four days apart" (the observations are hours apart on
the same day, timestamps cited), and "both post a check" (the API returns only
quality and CodeRabbit for that head, so Greptile's completion is watched via its
comment instead).

Gate B: five passes, final clean on both reviews. Battery green — shellcheck x4,
hook suite, 61 invariant assertions, invariant scan, plugin validate --strict.
@cursor

cursor Bot commented Jul 18, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@dsnger, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 22 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 42920d98-9177-4625-b01a-9910c66adb63

📥 Commits

Reviewing files that changed from the base of the PR and between c02b099 and 1b9dc38.

📒 Files selected for processing (3)
  • docs/prompt-standards.md
  • docs/superpowers/plans/2026-07-18-finding-triage-agent.md
  • plugins/dev-workflow/commands/workflow-init.md
📝 Walkthrough

Walkthrough

The changes update workflow guidance for enforcement claims, PR-review bot routing, Gate-B specification synchronization, checklist numbering, and historical hardening records.

Changes

Workflow Hardening

Layer / File(s) Summary
Enforcement standards and checklist updates
docs/prompt-standards.md, docs/hardening-taxonomy.md, docs/hardening-log.md, AGENTS.md, docs/superpowers/..., plugins/dev-workflow/commands/workflow-init.md
Adds enforcement-claim verification guidance and taxonomy, records related hardening findings, updates checklist references from 11 to 12 items, and adds historical notes.
PR review bot routing
docs/pr-review-bots.md, plugins/dev-workflow/commands/process-pr-review.md, plugins/dev-workflow/commands/workflow-init.md
Makes the Wait for list authoritative, documents inconsistent bot output channels and completion signals, and routes the workflow through both inline and summary findings.
Gate-B specification synchronization
CLAUDE.md, plugins/dev-workflow/commands/workflow-init.md
Requires behavior-changing Gate-B fixes to update the pinned specification in the same commit and retain full re-review coverage.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Poem

A rabbit checks each claim with care,
Names the mechanism hiding there.
Bots hop through comments, summaries bright,
Gate B keeps specs and behavior tight.
Twelve checklist carrots now align—
A tidy burrow, line by line.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the two main changes: the enforcement-claim checklist update and the docs-drift escalation to rung P.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 18, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds two new hardening entries — unverified-enforcement-claim (a new taxonomy class) and an escalation of docs-drift to rung P — and corrects the bot-matrix file and all its downstream consumers to route on an explicit Wait for list rather than on a binary line-findings column.

  • docs/prompt-standards.md gains item 11 (enforcement claims must name their mechanism), renumbering calibrated-emphasis to 12; the same item is mirrored into the workflow-init scaffold template and the taxonomy file mints unverified-enforcement-claim as a distinct class with a clear distinction from docs-drift.
  • docs/pr-review-bots.md replaces the Greptile "no" with inconsistent (backed by timestamped observations from two PRs), introduces per-bot completion signals, and establishes the Wait for list as the routing authority; Steps 0 and 2 of process-pr-review.md and the scaffolded template are updated in sync.
  • CLAUDE.md and the scaffold's Gate B section gain a rule requiring spec updates in the same commit as any behaviour-altering fix, with the concrete historical instance cited as motivation.

Confidence Score: 4/5

Safe to merge — no executable code changed, all docs and prompt files are internally consistent and cross-referenced.

All ten changed files are documentation and prompt text with no executable code. The Wait-for routing change is applied consistently across five locations. The only issue is a prose structure problem in docs/prompt-standards.md where the actionable remedy sentence for item 11 is appended to the anecdote paragraph without a blank line.

docs/prompt-standards.md — item 11's remedy instruction is buried at the end of the anecdote paragraph; the scaffold version in workflow-init.md is cleaner.

Important Files Changed

Filename Overview
AGENTS.md Count updated from 11 to 12 checklist items in two places; description of pr-review-bots.md updated to reflect Wait-for routing authority. Consistent with the rest of the PR.
CLAUDE.md Gate B section gains a new paragraph requiring spec updates in the same commit as any behaviour-altering fix; rationale cites the concrete historical instance that motivated the rule.
docs/hardening-log.md Two new append-only ledger rows: unverified-enforcement-claim (Gate A majority, P std) and docs-drift escalation (bot-caught, P std). Both reference the right remediation targets.
docs/hardening-taxonomy.md Adds unverified-enforcement-claim class with clear distinction from docs-drift; updates promotion-candidate note to plural. Definitions are clean and the diff-vs-single-claim distinction is well explained.
docs/pr-review-bots.md Greptile reclassified to inconsistent with timestamped observations; Wait-for declared authoritative over the table column; completion signal section added; fabricated 'four days apart' and 'both post a check' corrected.
docs/prompt-standards.md Item 11 (enforcement claims) added, old item 11 becomes 12. The actionable remedy sentence is appended to the anecdote paragraph without a blank-line separator, making it harder to skim. Template copy in workflow-init.md does not have this issue.
docs/superpowers/plans/2026-07-18-finding-triage-agent.md Historical note added correcting item-number references that became stale when the checklist renumbered.
docs/superpowers/specs/2026-07-18-subagent-definitions-design.md Historical note added mirroring the plan; correctly documents that item 11 in the spec refers to the old calibrated-emphasis entry.
plugins/dev-workflow/commands/process-pr-review.md Steps 0 and 2 updated to route on the Wait-for list rather than the table column; inconsistent is correctly described as an observation, not an instruction. Changes are self-consistent.
plugins/dev-workflow/commands/workflow-init.md Scaffolded Gate B paragraph and pr-review-bots template updated to match the live files; item 11/12 renumbering applied. Template copy of item 11 is better structured than the main docs version.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Step 0: Read docs/pr-review-bots.md] --> B{Wait for list present?}
    B -- No --> C[gh pr view --json comments,reviews\nProcess only what is visibly there]
    B -- Yes --> D[Step 2: Route on Wait for list]
    D --> E[Wait for every listed bot]
    E --> F[Read BOTH channels per bot\ninline comments + PR summary body]
    F --> G{Table column reads inconsistent?}
    G -- Yes --> H[Observation only — not a routing instruction\nStill read both channels]
    G -- No --> I[Follow bot-specific completion signal\nnot always a status check]
    H --> J[Step 3: Process claims]
    I --> J
    C --> J
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[Step 0: Read docs/pr-review-bots.md] --> B{Wait for list present?}
    B -- No --> C[gh pr view --json comments,reviews\nProcess only what is visibly there]
    B -- Yes --> D[Step 2: Route on Wait for list]
    D --> E[Wait for every listed bot]
    E --> F[Read BOTH channels per bot\ninline comments + PR summary body]
    F --> G{Table column reads inconsistent?}
    G -- Yes --> H[Observation only — not a routing instruction\nStill read both channels]
    G -- No --> I[Follow bot-specific completion signal\nnot always a status check]
    H --> J[Step 3: Process claims]
    I --> J
    C --> J
Loading

Fix All in Claude Code Fix All in Codex

Prompt To Fix All With AI
Fix the following 1 code review issue. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 1
docs/prompt-standards.md:81-85
**Actionable instruction buried in anecdote paragraph**

The remedy sentence — "When the mechanism turns out not to exist, say what actually happens instead" — is appended mid-run onto the anecdote paragraph that concludes "which is the strongest available argument for this item." A reader skimming item 11 for what to *do* has to read through the historical anecdote to reach it. In `workflow-init.md`, the same instruction is cleanly the final line of the item's own prose, not embedded in the anecdote. A blank line before the remedy sentence here would separate the justification from the rule.

Reviews (1): Last reviewed commit: "chore(harden): enforcement-claim checkli..." | Re-trigger Greptile

Comment thread docs/prompt-standards.md Outdated
Comment on lines +81 to +85
Worth knowing how that count was arrived at: it was first asserted as six without
checking, then "corrected" to five from memory, and only settled at six by reading
the commits. Both wrong numbers were themselves unverified claims — which is the
strongest available argument for this item. When the mechanism turns out not to exist, say what actually happens
instead ("this is a rule the agent keeps; nothing counts for it").

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Actionable instruction buried in anecdote paragraph

The remedy sentence — "When the mechanism turns out not to exist, say what actually happens instead" — is appended mid-run onto the anecdote paragraph that concludes "which is the strongest available argument for this item." A reader skimming item 11 for what to do has to read through the historical anecdote to reach it. In workflow-init.md, the same instruction is cleanly the final line of the item's own prose, not embedded in the anecdote. A blank line before the remedy sentence here would separate the justification from the rule.

Prompt To Fix With AI
This is a comment left during a code review.
Path: docs/prompt-standards.md
Line: 81-85

Comment:
**Actionable instruction buried in anecdote paragraph**

The remedy sentence — "When the mechanism turns out not to exist, say what actually happens instead" — is appended mid-run onto the anecdote paragraph that concludes "which is the strongest available argument for this item." A reader skimming item 11 for what to *do* has to read through the historical anecdote to reach it. In `workflow-init.md`, the same instruction is cleanly the final line of the item's own prose, not embedded in the anecdote. A blank line before the remedy sentence here would separate the justification from the rule.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Claude Code Fix in Codex

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accepted — fixed in 1b9dc38.

Fair, and the asymmetry you spotted is the tell: the scaffolded copy in workflow-init.md already had the remedy as its own closing line, because I wrote that one from scratch. The repo copy got the remedy appended mid-line onto the anecdote in a later edit, and nobody re-read the paragraph afterwards.

The remedy is now its own paragraph ahead of the anecdote, so item 11 reads rule-then-justification like every other item.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
docs/hardening-taxonomy.md (1)

40-43: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Move this stack-neutral class to the base taxonomy.

These lines acknowledge that unverified-enforcement-claim belongs in the harden-finding base list, while this file is reserved for project-specific vocabulary. Keeping it here leaves the taxonomy internally inconsistent and makes recurrence detection repository-local. Add it to the base taxonomy, or make the class genuinely project-specific before merging.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/hardening-taxonomy.md` around lines 40 - 43, Move the
unverified-enforcement-claim class from the project taxonomy in
docs/hardening-taxonomy.md into the harden-finding base taxonomy, preserving its
existing definition and references. Do not leave it listed as a project-specific
class unless you revise it into genuinely project-specific vocabulary.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/superpowers/plans/2026-07-18-finding-triage-agent.md`:
- Around line 3-7: Remove the blank line between the historical note’s
blockquote lines so the entire note remains one contiguous blockquote and
satisfies markdownlint MD028.

In `@plugins/dev-workflow/commands/workflow-init.md`:
- Around line 560-563: Update the authoritative bot-waiting instructions in the
workflow-init template to use each bot’s configured completion signal from the
Notes column, rather than requiring a posted finding. Preserve the requirement
to wait for every listed bot, including zero-finding completions, and read both
channels for findings after each bot signals completion.

---

Nitpick comments:
In `@docs/hardening-taxonomy.md`:
- Around line 40-43: Move the unverified-enforcement-claim class from the
project taxonomy in docs/hardening-taxonomy.md into the harden-finding base
taxonomy, preserving its existing definition and references. Do not leave it
listed as a project-specific class unless you revise it into genuinely
project-specific vocabulary.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7ecfb63f-5920-430a-a4e0-d7461364f102

📥 Commits

Reviewing files that changed from the base of the PR and between b952d95 and c02b099.

📒 Files selected for processing (10)
  • AGENTS.md
  • CLAUDE.md
  • docs/hardening-log.md
  • docs/hardening-taxonomy.md
  • docs/pr-review-bots.md
  • docs/prompt-standards.md
  • docs/superpowers/plans/2026-07-18-finding-triage-agent.md
  • docs/superpowers/specs/2026-07-18-subagent-definitions-design.md
  • plugins/dev-workflow/commands/process-pr-review.md
  • plugins/dev-workflow/commands/workflow-init.md

Comment thread docs/superpowers/plans/2026-07-18-finding-triage-agent.md Outdated
Comment thread plugins/dev-workflow/commands/workflow-init.md Outdated
Processing PR #5's comments. Step 0 fired — the PR touches AGENTS.md, CLAUDE.md
and two commands — so subagent triage was skipped and these were validated here.
First live use of that rule, working as designed.

CodeRabbit (major) — the scaffolded template said processing starts once each bot
"has posted, even with zero comments". A bot that finds nothing can complete via
its status check without posting anything, so that instruction hangs forever on a
clean review. It is also the exact hang docs/pr-review-bots.md exists to prevent,
reintroduced by my own wording while fixing the routing model. Now waits on the
per-bot completion signal recorded in Notes, and says why a post is not it.

Greptile (P2) — item 11's actionable remedy was appended mid-line to the anecdote
paragraph, so a reader skimming for the rule had to read the story first. The
remedy is now its own paragraph ahead of the anecdote, matching how the scaffolded
copy already reads.

CodeRabbit (minor) — MD028: the plan's historical note sat directly above the
pre-existing agentic-workers blockquote with a bare blank line between, which
renderers may merge. Joined with a quoted separator. Checked the spec for the same
pattern; its blockquote is followed by prose, so it does not apply.

Battery green. Gate B skipped per CLAUDE.md §5 (trivial): three prose edits, no
change to any contract.
@dsnger
dsnger merged commit fe5e296 into main Jul 18, 2026
2 checks passed
@dsnger
dsnger deleted the chore/harden-enforcement-and-drift branch July 18, 2026 21:17
dsnger added a commit that referenced this pull request Jul 18, 2026
…ic category

Folding in the third and fourth data points, and correcting what the earlier rows
claimed.

The verification revised the premise. My earlier queries filtered issue comments on
the login `greptile-apps`, but they are authored by `greptile-apps[bot]`, so they
returned zero and looked like absence. Across #1, #2, #4 and #5 the summary comment
was posted EVERY time; it is the inline comments that varied — present on #2, #4
and #5, absent only on #1. So the row now reads "summary always; inline usually",
not "inconsistent findings channel". The login trap is written down, since it is
what produced the wrong reading.

The completion signal is the genuinely unreliable part: `gh pr checks` displayed a
Greptile entry for #4 and #5, while the check-runs and statuses APIs return none for
any observed head. Two tools, two answers, so neither is proof.

That forced a third routing category. Greptile is a real findings source with no
signal you can block on — blocking hangs the loop, dropping it loses findings, and
the file exists to prevent exactly those two failures. Routing is now: wait for
(block), process opportunistically (never block), ignore. Propagated to
process-pr-review Steps 0 and 2 and the scaffolded template in the same commit,
rather than leaving copies disagreeing — which is the drift this repo hardened
against two commits ago.

Docs-only; no executable changed. Battery green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant