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
2 changes: 1 addition & 1 deletion .claude/rules/refresh-before-decide.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ loops generally.
`memory/feedback_refresh_before_decide_invariant_two_layer_print_dx_claudeai_2026_05_01.md`

Verbatim packet:
`docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`
`memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type: friction-reducer

# B-0159 — `refresh-github-worldview` cross-cutting refresh script (Claude.ai 2026-05-01)

**Origin:** Claude.ai feedback packet 2026-05-01 — full lineage in [docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md](../../research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) and the maintainer-relayed Claude.ai-2 follow-up calibrating against Otto's running state.
**Origin:** Claude.ai feedback packet 2026-05-01 — full lineage in [memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md](../../../memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) and the maintainer-relayed Claude.ai-2 follow-up calibrating against Otto's running state.

## Problem

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
name: Refresh-before-decide invariant + two-layer print DX (raw → interpretation, mismatch is the bug class) — Claude.ai 2026-05-01
description: Claude.ai feedback packet 2026-05-01 (preserved verbatim at docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) names refresh-before-decide as **the fundamental invariant** for agent loops, and the two-layer print DX (raw output → labeled interpretation, both visible) as the discipline that makes the staleness failure mode catchable rather than silent. The human maintainer's standalone framing: *"refresh-before-decide is the most violated invariant in agent loops generally, not just Otto. The temptation to skip refresh is constant because refresh feels redundant when 'I just refreshed earlier.' The cure is making refresh cheap enough that re-running is friction-free."* Zeta's existing `tools/github/poll-pr-gate.ts` + `poll-pr-gate-batch.ts` ALREADY implement this pattern (cheap, structured-JSON output, interpretation-via-summary-aggregate); the discipline now has explicit framing.
description: Claude.ai feedback packet 2026-05-01 (preserved verbatim at memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) names refresh-before-decide as **the fundamental invariant** for agent loops, and the two-layer print DX (raw output → labeled interpretation, both visible) as the discipline that makes the staleness failure mode catchable rather than silent. The human maintainer's standalone framing: *"refresh-before-decide is the most violated invariant in agent loops generally, not just Otto. The temptation to skip refresh is constant because refresh feels redundant when 'I just refreshed earlier.' The cure is making refresh cheap enough that re-running is friction-free."* Zeta's existing `tools/github/poll-pr-gate.ts` + `poll-pr-gate-batch.ts` ALREADY implement this pattern (cheap, structured-JSON output, interpretation-via-summary-aggregate); the discipline now has explicit framing.
type: feedback
caused_by:
- "Claude.ai 2026-05-01 carved-handoff packet (verbatim at docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) — multi-section architecture document on backlog-driven dual-PM agent loop with refresh as the load-bearing primitive."
- "Claude.ai 2026-05-01 carved-handoff packet (verbatim at memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) — multi-section architecture document on backlog-driven dual-PM agent loop with refresh as the load-bearing primitive."
- "The human maintainer 2026-05-01 standalone framing in same packet: 'refresh-before-decide is the most violated invariant in agent loops generally, not just Otto.' Plus: 'The DX two-layer print is the part most worth flagging for Otto specifically — raw output before interpretation, both visible to the human dev, mismatch as debug surface.'"
- "Empirical Otto failure-pattern this session: I have repeatedly acted on stale derived state without re-running raw refresh. The poll-pr-gate-batch.ts tool exists precisely to make refresh cheap; the discipline of using it before tick decisions is what was missing the explicit naming."
- "Composes with the BLOCKED-with-green-CI investigate-threads-first rule (CLAUDE.md) — that rule is a special case of refresh-before-decide applied to PR thread state."
Expand Down Expand Up @@ -250,4 +250,4 @@ not by maintainer fiat.)

# Sources

- [Claude.ai feedback packet — Backlog-Driven Dual-PM Agent Loop with Refresh Discipline (verbatim)](../docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) — preserved 2026-05-01.
- [Claude.ai feedback packet — Backlog-Driven Dual-PM Agent Loop with Refresh Discipline (verbatim)](../memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) — preserved 2026-05-01.
Comment thread
AceHack marked this conversation as resolved.
Loading