RP6 (child of epic #257). DEPENDS ON: RP4 (RP5 when used). BLOCKS: RP10. ACCEPTANCE: - Attacks leading candidate(s): contradicting evidence, weak assumptions, failure modes, simpler alternatives, duplicate authority, Rune constraint violations. - Ret… #269

Closed
opened 2026-09-08 23:36:10 +01:00 by conductor · 4 comments
Owner
No description provided.
Author
Owner

Parent epic: #257 (Research Runtime P0 — canonical pipeline amendment). Canonical handoff 2026-09-08.

Parent epic: #257 (Research Runtime P0 — canonical pipeline amendment). Canonical handoff 2026-09-08.

⚠️ Priority gate: this issue has no priority. Assign exactly one of P0 — critical (spine/correctness/blocks), P1 — high (material value or real defect), P2 — medium (quality/consolidation), P3 — low (measurement/deferred). An issue without a priority is not filed.

⚠️ **Priority gate:** this issue has no priority. Assign exactly one of **P0 — critical** (spine/correctness/blocks), **P1 — high** (material value or real defect), **P2 — medium** (quality/consolidation), **P3 — low** (measurement/deferred). An issue without a priority is not filed.
Author
Owner

#269 ADVERSARIAL acceptance — REAL RUN on issue #161 (canonical RP6, branch rp2-canonical-stage-model, commits fb70092 + bac9f58)

The red team did real damage — which is the point:

  • 16 attacks across all 7 dimensions, every leading candidate targeted (gate-enforced)
  • 25 repo-verification tool calls + 2 targeted external checks (arXiv 2608.15008 fetched live: partially vindicates and partially undercuts the O15 grounding; confirms the anchor harness O12 has weaker provenance than claimed)
  • Highest-value finding (A1): the "hybrid" being validated is NOT guaranteed to run in hybrid mode — memory_store._embed silently degrades when the embedding model is unavailable. A harness built without mode-observability would validate the wrong system. (This became falsification test FT1.)
  • Cache-pollution finding (A4): recall() has a process-level result cache + embedding cache — naive benchmark runs would measure the cache, not the backend.
  • Duplicate-authority rejection: memory-adapter-protocol REJECTED — Rune already has a backend abstraction at exactly that integration point (memory_selector.py source registry, authority map: ContextBroker.memory_selector as v1_owner). O12's parallel 4-method MemoryAdapter would create a second pluggable-backend protocol in the domain just consolidated. The candidate's INTENT survives via the existing registry; the mechanism as specified dies.
  • 6 candidates survive with required mitigations recorded; 2 falsification kill-tests defined (FT1: harness run with embedding backend unreachable — any unlabeled mode switch voids validation; FT2: frozen-clock reproducibility check).

Gate semantics proven: rubber-stamp fails; unattacked leading candidate fails; unrebutted fatal on survivor fails; rebutted fatal passes; missing finding fails (7 unit tests).

Gate fixes from the real run (bac9f58): worker dimension naming normalized (snake/kebab -> spaces); falsification accepted as dedicated kill-tests, not only attack dimensions.

§22-parallel evidence: one event = one stage (idempotency guard), desktop runner (placement gate embedded), no self-walking (executor returned after one stage), foreground did not sleep/poll.

Artifact hash 3827446e701a, persisted to master research/issue-161/adversarial.json + task tree.

Tree now at SYNTHESIS — READY. Stopping per instruction: SYNTHESIS (RP7/#270) next.

**#269 ADVERSARIAL acceptance — REAL RUN on issue #161** (canonical RP6, branch rp2-canonical-stage-model, commits fb70092 + bac9f58) **The red team did real damage — which is the point:** - **16 attacks** across all 7 dimensions, every leading candidate targeted (gate-enforced) - **25 repo-verification tool calls** + **2 targeted external checks** (arXiv 2608.15008 fetched live: partially vindicates and partially undercuts the O15 grounding; confirms the anchor harness O12 has weaker provenance than claimed) - **Highest-value finding (A1):** the "hybrid" being validated is NOT guaranteed to run in hybrid mode — memory_store._embed silently degrades when the embedding model is unavailable. A harness built without mode-observability would validate the wrong system. (This became falsification test FT1.) - **Cache-pollution finding (A4):** recall() has a process-level result cache + embedding cache — naive benchmark runs would measure the cache, not the backend. - **Duplicate-authority rejection:** memory-adapter-protocol REJECTED — Rune already has a backend abstraction at exactly that integration point (memory_selector.py source registry, authority map: ContextBroker.memory_selector as v1_owner). O12's parallel 4-method MemoryAdapter would create a second pluggable-backend protocol in the domain just consolidated. The candidate's INTENT survives via the existing registry; the mechanism as specified dies. - **6 candidates survive** with required mitigations recorded; **2 falsification kill-tests** defined (FT1: harness run with embedding backend unreachable — any unlabeled mode switch voids validation; FT2: frozen-clock reproducibility check). **Gate semantics proven:** rubber-stamp fails; unattacked leading candidate fails; unrebutted fatal on survivor fails; rebutted fatal passes; missing finding fails (7 unit tests). **Gate fixes from the real run** (bac9f58): worker dimension naming normalized (snake/kebab -> spaces); falsification accepted as dedicated kill-tests, not only attack dimensions. **§22-parallel evidence:** one event = one stage (idempotency guard), desktop runner (placement gate embedded), no self-walking (executor returned after one stage), foreground did not sleep/poll. Artifact hash 3827446e701a, persisted to master research/issue-161/adversarial.json + task tree. Tree now at **SYNTHESIS — READY**. Stopping per instruction: SYNTHESIS (RP7/#270) next.
Author
Owner

Pipeline correction amendment (2026-09-09) — ADVERSARIAL disposition contract recorded

ADVERSARIAL is now the FINAL EPISTEMIC GATE (was: attack-and-report). It must produce an explicit disposition:

  • SURVIVES → SYNTHESIS READY
  • SURVIVES_WITH_MITIGATIONS → SYNTHESIS READY (mitigations are MANDATORY synthesis inputs, not optional prose)
  • EVIDENCE_DEFICIENT → targeted OUTWARD → APPLICABILITY → ADVERSARIAL
  • APPLICABILITY_DEFICIENT → APPLICABILITY → ADVERSARIAL
  • INNOVATION_WARRANTED → INNOVATION → ADVERSARIAL
  • NO_VIABLE_CANDIDATE → targeted OUTWARD (expand candidate space)

Implemented in commit a553fb1: ADVERSARIAL_DISPOSITIONS / ADVERSARIAL_REFINEMENT_ROUTES / synthesis_readiness() invariant in research_task_tree.py. advance() raises without a valid disposition — an adversarial pass cannot unlock anything silently.

This issue's real run (#161) recorded disposition SURVIVES_WITH_MITIGATIONS (mode labeling + cache controls + kill-tests FT1/FT2) — consistent with the amendment's §14 determination.

**Pipeline correction amendment (2026-09-09) — ADVERSARIAL disposition contract recorded** ADVERSARIAL is now the FINAL EPISTEMIC GATE (was: attack-and-report). It must produce an explicit disposition: - `SURVIVES` → SYNTHESIS READY - `SURVIVES_WITH_MITIGATIONS` → SYNTHESIS READY (mitigations are MANDATORY synthesis inputs, not optional prose) - `EVIDENCE_DEFICIENT` → targeted OUTWARD → APPLICABILITY → ADVERSARIAL - `APPLICABILITY_DEFICIENT` → APPLICABILITY → ADVERSARIAL - `INNOVATION_WARRANTED` → INNOVATION → ADVERSARIAL - `NO_VIABLE_CANDIDATE` → targeted OUTWARD (expand candidate space) Implemented in commit a553fb1: `ADVERSARIAL_DISPOSITIONS` / `ADVERSARIAL_REFINEMENT_ROUTES` / `synthesis_readiness()` invariant in research_task_tree.py. advance() raises without a valid disposition — an adversarial pass cannot unlock anything silently. This issue's real run (#161) recorded disposition **SURVIVES_WITH_MITIGATIONS** (mode labeling + cache controls + kill-tests FT1/FT2) — consistent with the amendment's §14 determination.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: conductor/rune#269