The #259 lesson, both directions: the fix agent rightly refused unauthenticated instructions embedded in the issue body — and then had no channel for the owner's authentic reply 18 minutes later, so a human (me) ended up hand-writing the sweep the agent should have owned.
Owner replies drive the loop now: an assessed issue becomes eligible again when a TRUSTED_AUTHORS comment is newer than the latest assessed-marker (timestamp comparison in jq; busybox ash has no string-<).
Trusted comments reach the agent as a pipeline-built "Verified owner guidance" section in issue.md. The trust anchor is the hardcoded author list (k.renner) in the pipeline file — deliberately NOT the Gitea permission API, because the pipeline itself comments as gitea_admin, and agent-authored comment text must never be able to masquerade as owner guidance.
Prompt contract: verified guidance is authoritative for intent and scope (it may lift the surgical ~30-line ceiling when it calls for removals/sweeps); it does NOT lift the edit-path allowlist; factual mismatches between guidance and live state get surfaced in the summary, never silently resolved in either direction.
Eligibility logic tested against #259's real comment data (assessed 11:46, owner reply 12:04 → retry) and the empty-comments case (fresh).
Note: had this existed this morning, your 12:04 comment on #259 would have re-armed the 13:41 run with your statement as trusted guidance — no human PR needed. #265 (the hand-made sweep) is still up; merge whichever you prefer — if you'd rather the agent redo it as a test of this mechanism, close#265 and remove nothing: the loop picks #259 up at the next :41 after this merges.
The #259 lesson, both directions: the fix agent rightly refused unauthenticated instructions embedded in the issue body — and then had no channel for the owner's authentic reply 18 minutes later, so a human (me) ended up hand-writing the sweep the agent should have owned.
- **Owner replies drive the loop now**: an assessed issue becomes eligible again when a `TRUSTED_AUTHORS` comment is newer than the latest assessed-marker (timestamp comparison in jq; busybox ash has no string-<).
- **Trusted comments reach the agent** as a pipeline-built \"Verified owner guidance\" section in issue.md. The trust anchor is the hardcoded author list (`k.renner`) in the pipeline file — deliberately NOT the Gitea permission API, because the pipeline itself comments as gitea_admin, and agent-authored comment text must never be able to masquerade as owner guidance.
- **Prompt contract**: verified guidance is authoritative for intent and scope (it may lift the surgical ~30-line ceiling when it calls for removals/sweeps); it does NOT lift the edit-path allowlist; factual mismatches between guidance and live state get surfaced in the summary, never silently resolved in either direction.
Eligibility logic tested against #259's real comment data (assessed 11:46, owner reply 12:04 → retry) and the empty-comments case (fresh).
Note: had this existed this morning, your 12:04 comment on #259 would have re-armed the 13:41 run with your statement as trusted guidance — no human PR needed. #265 (the hand-made sweep) is still up; merge whichever you prefer — if you'd rather the agent redo it as a test of this mechanism, close #265 and remove nothing: the loop picks #259 up at the next :41 after this merges.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01NV7bZzZLeoFUEdAeCSLEei
The #259 lesson, both directions: the agent rightly refused
unauthenticated instructions embedded in the issue body — and then had
no channel for the owner's authentic reply 18 minutes later, so a
human ended up doing the sweep the agent should have owned.
- Pick step: an issue with an alert-fix:assessed marker becomes
eligible again when a TRUSTED_AUTHORS comment is NEWER than the
latest marker (timestamps compared in jq — busybox ash test has no
string-<). Owner replies on the issue now drive the loop.
- Trusted comments are appended to the agent's issue.md as 'Verified
owner guidance'. Trust anchor is the hardcoded author list in this
file — deliberately not the Gitea permission API, because the
pipeline itself comments as gitea_admin and agent-authored text must
never be able to masquerade as owner guidance.
- Prompt: verified guidance is authoritative for intent and scope (may
lift the surgical ceiling when it calls for a sweep), does not lift
the edit-path allowlist, and factual mismatches with live state are
surfaced, not silently resolved in either direction.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NV7bZzZLeoFUEdAeCSLEei
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The #259 lesson, both directions: the fix agent rightly refused unauthenticated instructions embedded in the issue body — and then had no channel for the owner's authentic reply 18 minutes later, so a human (me) ended up hand-writing the sweep the agent should have owned.
TRUSTED_AUTHORScomment is newer than the latest assessed-marker (timestamp comparison in jq; busybox ash has no string-<).k.renner) in the pipeline file — deliberately NOT the Gitea permission API, because the pipeline itself comments as gitea_admin, and agent-authored comment text must never be able to masquerade as owner guidance.Eligibility logic tested against #259's real comment data (assessed 11:46, owner reply 12:04 → retry) and the empty-comments case (fresh).
Note: had this existed this morning, your 12:04 comment on #259 would have re-armed the 13:41 run with your statement as trusted guidance — no human PR needed. #265 (the hand-made sweep) is still up; merge whichever you prefer — if you'd rather the agent redo it as a test of this mechanism, close #265 and remove nothing: the loop picks #259 up at the next :41 after this merges.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NV7bZzZLeoFUEdAeCSLEei