Skip to content

fix(ooda): dedup no-progress breaker issue filing via GitHub-durable goal-key backstop (#16) - #4971

Open
rysweet wants to merge 1 commit into
mainfrom
feat/issue-2925-nodeoptions-max-old-space-size32768-saved-preferen
Open

fix(ooda): dedup no-progress breaker issue filing via GitHub-durable goal-key backstop (#16)#4971
rysweet wants to merge 1 commit into
mainfrom
feat/issue-2925-nodeoptions-max-old-space-size32768-saved-preferen

Conversation

@rysweet

@rysweet rysweet commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Summary

Fixes the no-progress-breaker / stewardship issue filer re-filing identical GitHub issues every OODA cycle (issue spam), e.g. repeated OODA no-progress breaker UNCLEAR-CRITERIA issues for one goal and repeated [stewardship] recurring_goal_reblock issues sharing one stewardship-signature.

Adds an additive, non-breaking second suppression guard so the breaker deduplicates by identity key before filing:

  • fold_goal_identity (goal_curation::no_progress_breaker): pure, total, injection-safe fold of a churny ActiveGoal.idsha256[..8] (16 lowercase hex), safe to interpolate into a gh --search argument.
  • NoProgressIssueFiler::issue_open_with_marker trait method, default false so every existing impl/fake is unchanged. GhIssueFiler implements a direct argv-only gh issue list --state open --label ooda-stuck --search '<marker> in:body' query, confirming the match against the strongly-consistent JSON body; fails OPEN on any error.
  • Two-guard filing gate in escalate_with_tracking_issue: board-local WipRef fast path first (zero steady-state API calls), GitHub-durable backstop only on a miss. Survives goal-id churn and goal-board reset.
  • Reuses stewardship::dedup redaction (redact_token / redact_uuids widened to pub(crate)) for recurring_goal_reblock stewardship-signature dedup.

Behavior

  • First filing still proceeds.
  • Duplicate filing is suppressed for both issue kinds (goal id for ooda-stuck / UNCLEAR-CRITERIA; stewardship-signature for recurring_goal_reblock).
  • Existing breaker thresholds and PRD preserved; change only gates the file step behind an existence/dedup check.

Tests

tests_no_progress_breaker.rs and ooda_loop/no_progress.rs cover: first-filing, duplicate suppression across id churn / board reset, the zero-API fast path, fail-open, and the pure fold contract (charset/determinism/no-leak).

Constraints honored

  • No Bridge naming; no stray print!/println! (structured tracing + OpenTelemetry only).
  • Additive, non-breaking by default.

Refs #16

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

…h a GitHub-durable goal-key backstop

The board-local `WipRef` suppression marker stops the UNCLEAR-CRITERIA
duplicate-issue storm only while the goal id is stable and the goal board
survives — two conditions that fail under goal-id churn (a fresh id each cycle
has no marker) and a goal-board reset (the marker is erased), letting the
breaker re-file identical `ooda-stuck` issues.

Add an additive, non-breaking second suppression guard:

- `fold_goal_identity` (goal_curation::no_progress_breaker): pure, total,
  injection-safe folding of a churny `ActiveGoal.id` to `sha256[..8]` = 16
  lowercase hex, mirroring `stewardship::failure_signature`. Safe to embed and
  to interpolate into a `gh --search` argument (SR1).
- `NoProgressIssueFiler::issue_open_with_marker` trait method, default `false`
  so every existing impl/fake is unchanged. `GhIssueFiler` implements it as a
  direct argv-only `gh issue list --state open --label ooda-stuck --search
  '<marker> in:body' --json number,body` query, confirming the match against
  the strongly-consistent JSON `body` (`body_contains_marker`); fails OPEN on
  any error (SR2/SR4/SR5).
- Two-guard filing gate in `escalate_with_tracking_issue`: board-local `WipRef`
  fast path first (zero steady-state API calls, SR7), backstop only on a miss;
  a backstop hit re-seeds the `WipRef` and suppresses re-filing. The filed body
  embeds a trailing `ooda-goal-key: <folded_id>` line so a later churned/reset
  cycle recognises the breaker's own open issue.
- Promote `redact_token` / `redact_uuids` to `pub(crate)` (stewardship::dedup)
  so goal_curation can reuse them for body redaction (SR3/SR6) — non-breaking
  visibility widening.

Tests cover first-filing, duplicate suppression across id churn / board reset,
the zero-API fast path, fail-open, and the pure fold contract
(charset/determinism/no-leak). Docs added for the concept, how-to, and API
reference, wired into mkdocs nav.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

📊 Coverage Summary

Generated by cargo llvm-cov --workspace --summary-only (nightly, excluding test files)

Module Lines Covered Coverage
Total 211873 178758 84.4%

Coverage data from CI run. Test files matching tests?/ are excluded from line counts.

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