From a7f865ec1b7de6b1904dcaf8cb2a22128f507ed3 Mon Sep 17 00:00:00 2001 From: Taeil Ma Date: Sun, 14 Jun 2026 21:03:30 +0900 Subject: [PATCH] fix(cycle-card): LEARN shows what a build cycle DELIVERED (dogfood finding) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Building the F1 game through OODA-loop surfaced a real gap: a productive implementation cycle that shipped a feature rendered LEARN as 'no new orientation this cycle (observing)' (or a trivial +0.02 confidence tick) — the card lied about build-heavy loops. Added LEARN priority 4 'delivered output' (reads the Step 6-C9 Outcome Record): 'delivered pr_created (quality 0.5) → goal X', above the micro-adjustment. Step 7 spec priority list updated. Existing cycle-card fixture unaffected (its priority-1 human-reject still wins); verified live on the F1 build. verify.py 47/0. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/render_cycle_card.py | 13 ++++++++++++- skills/evolve/SKILL.md | 11 ++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/scripts/render_cycle_card.py b/scripts/render_cycle_card.py index 59b95e3..1446cb0 100644 --- a/scripts/render_cycle_card.py +++ b/scripts/render_cycle_card.py @@ -129,7 +129,18 @@ def render(project: Path) -> tuple[str, str]: f"for {iv.get('expires_after_cycles')} cycle(s)" ) break - # 4) observation micro-adjustment (confidence delta vs previous cycle, same domain) + # 4) delivered output this cycle — for build/implementation-heavy loops the + # headline LEARN is what shipped, not a +0.02 confidence tick. Read the + # latest Outcome Record (outcomes.json, Step 6-C9) for this cycle. + if not learn: + outc = (load(ev / "outcomes.json", {}) or {}).get("entries", []) or [] + oc = next((e for e in reversed(outc) if e.get("cycle_id") == cyc), None) + if oc and (oc.get("quality_multiplier") or 0) > 0: + rt = oc.get("result_type", "output") + goal = oc.get("declared_goal") + tail = f" → goal '{goal}'" if goal else "" + learn.append(f"delivered {rt} (quality {fmt_num(oc.get('quality_multiplier'))}){tail}") + # 5) observation micro-adjustment (confidence delta vs previous cycle, same domain) if not learn and len(log) >= 2: prev = log[-2] if (prev.get("selected_domain", prev.get("domain")) == dom and prev.get("confidence") is not None diff --git a/skills/evolve/SKILL.md b/skills/evolve/SKILL.md index a5973af..266a04a 100644 --- a/skills/evolve/SKILL.md +++ b/skills/evolve/SKILL.md @@ -2246,11 +2246,16 @@ priority order and render exactly one (or two — see below): `lens re-aimed → flaky-alert threshold 0.30→0.25 after 3 confirmations (+0.1)` 3. **A new intervention** written in Step 5-C (`starvation` / `monopoly_breaker` / `contrarian`): `monopoly_breaker → service_health −10.0 for 1 cycle` -4. **An observation micro-adjustment** (Step 2-B1): +4. **Delivered output this cycle** (Step 6-C9 Outcome Record) — for build / + implementation-heavy loops the headline is *what shipped*, not a tiny + confidence tick: `delivered pr_created (quality 0.5) → goal 'ship_v1'`. + (Surfaced by the F1-game dogfood: a productive build cycle was mislabeled + "observing".) +5. **An observation micro-adjustment** (Step 2-B1): `test_coverage produced findings → confidence +0.02` -5. **A re-applied lesson** (Step 2-F) — a past verbal self-critique whose lesson +6. **A re-applied lesson** (Step 2-F) — a past verbal self-critique whose lesson informed this cycle: `recalled lesson: skip backlog after 2× no_remote (held)` -6. **Nothing changed:** `no new orientation this cycle (observing)` +7. **Nothing changed:** `no new orientation this cycle (observing)` If BOTH a human-decision confidence change (1) and a lens change (2) occurred, render both as two LEARN lines — together they are the clearest proof the loop