Files
waggle-os/docs/decisions/2026-04-26-phase-1-acceptance-gate-results.md
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

189 lines
8.8 KiB
Markdown

---
decision_id: 2026-04-26-phase-1-acceptance-gate-results
date: 2026-04-26
authority: PM (Marko) — Phase 1 gate ratified PASS WITH WAIVER
type: acceptance gate close-out + Phase 2 authorization
predecessors:
- decisions/2026-04-26-pilot-verdict-FAIL.md
- decisions/2026-04-26-agent-fix-sprint-plan.md
phase: 1 — Foundations (output-normalize + prompt-shapes + run-meta)
verdict: PASS_WITH_WAIVER
---
# Phase 1 Acceptance Gate — Results
**Sprint:** agent-fix sprint (2026-04-26 → ~2026-05-10)
**Phase:** 1 — Foundations (3 sub-commits)
**Outcome:****PASS WITH WAIVER** on 4 of 5 criteria; criterion 4 (substrate-reproduction smoke) **WAIVED** at this gate, deferred to Phase 2.
---
## Per-criterion results
### Criterion 1 — `tsc --noEmit` strict clean on `packages/agent/`
**Status:****PASS**
**Evidence:** `cd packages/agent && npx tsc --noEmit` → exit 0 (no errors).
**Notes:** TypeScript strict mode active per `packages/agent/tsconfig.json`. All Phase 1.x files conform.
---
### Criterion 2 — Phase 1.x test suite (134 tests)
**Status:****PASS**
**Evidence:** `npx vitest run` on three new test files; output recorded in commits `4a557cc`, `bc5b54f`, `12c7334`.
| Sub-phase | Tests | Wall | Source file |
|-----------|-------|------|-------------|
| 1.1 output-normalize | 43 | 14 ms | `packages/agent/tests/output-normalize.test.ts` |
| 1.2 prompt-shapes | 65 | 12 ms | `packages/agent/tests/prompt-shapes.test.ts` |
| 1.3 run-meta | 26 | 52 ms | `packages/agent/tests/run-meta.test.ts` |
| **Phase 1.x total** | **134** | — | — |
All Phase 1 acceptance sub-criteria from sprint plan covered:
- Output normalization round-trip property test (100 random adversarial inputs preserve abstention) ✅
- Prompt-shapes selector picks correctly for 4+ shapes (5 shipped) + override + default fallback ✅
- Run-meta byte-identical replay verifier on greedy decoding ✅
---
### Criterion 3 — GEPA regression (121 tests)
**Status:****PASS** (zero regression)
**Evidence:** Same vitest run as Criterion 2; 121 GEPA tests included in batch.
| Suite | Tests | Status |
|-------|-------|--------|
| compose-evolution | 21 | ✅ |
| evolution-orchestrator | 21 | ✅ |
| evolution-gates | 42 | ✅ |
| iterative-optimizer | 37 | ✅ |
| **GEPA total** | **121** | ✅ |
**Combined Criteria 2+3 total: 255/255 in 1.52s wall.**
---
### Criterion 4 — Stage 3 v6 oracle reproduction smoke (substrate no-regression)
**Status:** 🟡 **WAIVED at Phase 1 gate; deferred to Phase 2 acceptance gate**
**Rationale (CC-1 analysis, PM-accepted):**
Phase 1 added only new files in `packages/agent/src/`:
- `output-normalize.ts` (Phase 1.1)
- `prompt-shapes/` directory (Phase 1.2)
- `run-meta.ts` (Phase 1.3)
No code path changes in `packages/core/src/mind/` or `packages/core/src/harvest/`. Substrate behavior cannot have regressed because substrate code was not touched. Per behavioral rule 3.2 ("simplicity first; no error handling for impossible scenarios"), running a smoke at this gate has no detectable risk surface.
The substrate-reproduction smoke is appropriately scheduled for **Phase 2 acceptance gate** — when loop unification will actually consume substrate via the public API (`HybridSearch`, `FrameStore`, `SessionStore`, `MindDB` from `@waggle/core`) and could plausibly regress it through misuse.
#### PM brief authoring — methodology baseline confusion (acknowledged)
The PM Phase 1 gate kickoff specified BOTH:
- "Trio-strict ensemble (Opus + GPT + MiniMax) with judge max_tokens=3000"
- "consistent with full-run 74% (e.g., 70-78% range acceptable)"
**These cannot share one baseline.** Stage 3 v6 reality (verified by reading binding evidence committed at `b7e19c5` and `afe6422`):
| Methodology | Source artefact | Oracle baseline |
|-------------|------------------|-----------------|
| Trio-strict (Opus + GPT + MiniMax) | `benchmarks/results/pilot-2026-04-26/...` and `benchmarks/results/stage3-n400-v6-final-5cell-summary.md` | **33.5%** (134/400) |
| Self-judge (Qwen subject + Qwen judge, Mem0-style) | `benchmarks/results/v6-self-judge-rebench/qwen-self-judge-results.jsonl` | **74.0%** (296/400) |
This is the **second config-inheritance class failure** in the current sprint cycle (first was the Qwen alias bridge `qwen3.6-35b-a3b-via-openrouter` actually routing to Qwen 3.5 in pilot brief amendment v1, also surfaced post-smoke). Both fall under the binding rule established in pilot amendment v2 §5: **`INHERITED_CONFIGS_REQUIRE_TASK_TYPE_AUDIT`**.
#### PM brief path correction (recorded for audit)
The PM brief referenced `benchmarks/manifests/v6-2026-04-24.yaml` as the Stage 3 v6 manifest path. **That path does not exist.** The actual binding manifest lives at:
```
benchmarks/preregistration/manifest-v6-preregistration.yaml
benchmarks/preregistration/manifest-v6-preregistration.md
```
(SHA verified 2026-04-25 in commit `afe6422` audit chain: `5d5c1023421cd1a79f4913bb4c0a59415e21f50797255bff7dfec8e16b68e3ed`.)
Phase 2 acceptance gate brief should reference the actual path.
---
### Criterion 5 — Sub-criteria from sprint plan
**Status:****PASS** (all covered by Phase 1.1/1.2/1.3 tests; no separate execution)
| Sub-criterion | Phase | Test |
|---------------|-------|------|
| Round-trip property: 100 adversarial inputs preserve abstention | 1.1 | `output-normalize.test.ts` "hard constraint — abstention preservation property" |
| Prompt shapes ≥ 4 + selector picks correctly | 1.2 | `prompt-shapes.test.ts` "selector — alias resolution" + "every shape — required metadata" |
| Run-meta byte-identical replay (greedy decoding) | 1.3 | `run-meta.test.ts` "verifyDeterministicReplay — HARD GATE" |
---
## Commit chain (Phase 1)
| Commit | Phase | Description | Files |
|--------|-------|-------------|-------|
| `4a557cc` | 1.1 | output-normalize layer | 2 (src + tests) |
| `bc5b54f` | 1.2 | prompt-shapes/ + selector + config + README | 11 |
| `12c7334` | 1.3 | run-meta capture + deterministic replay verifier | 2 |
| `2ad3688` | 1.0 | sprint plan addendum (Phase 4 re-score gate) | 1 |
| `4f6a962` | (pred) | pilot 2026-04-26 close-out | 32 |
---
## Phase 2 acceptance gate substrate smoke — DUAL METHODOLOGY (PM-ratified)
PM has authorized **both** methodologies at the Phase 2 gate to close the methodology-baseline confusion definitively:
### (a) Trio-strict reproduction smoke
- Subject: `qwen3.6-35b-a3b-via-dashscope-direct` (thinking=on, max_tokens=16000)
- Judges: Opus 4.7 + GPT-5.4 + MiniMax M2.7 (max_tokens=3000)
- Sample: N=20 oracle-context cell, seed=42 random subset of `benchmarks/data/locomo/locomo-1540.jsonl`
- Baseline: **33.5%** (Stage 3 v6 trio-strict oracle)
- Pass range: **28-38%**
- Cost cap: $0.50 hard, $0.40 halt
- Manifest: `benchmarks/preregistration/manifest-v6-preregistration.yaml`
### (b) Self-judge reproduction smoke
- Subject + Judge: `qwen3.6-35b-a3b-via-dashscope-direct` (thinking=on, max_tokens=16000 for subject; thinking=off, max_tokens=3000 for judge per Mem0-style binary correctness)
- Sample: same N=20, seed=42 for replay determinism
- Baseline: **74.0%** (apples-to-apples Mem0 methodology)
- Pass range: **70-78%**
- Cost cap: $0.10 hard, $0.08 halt
### (c) Joint pass: BOTH (a) and (b) must pass
If either drifts outside expected range → halt + investigate before merging Phase 2.
### Total Phase 2 substrate smoke envelope
- Cost: ~$0.55 expected, $0.50 halt threshold
- Wall: ~5-10 min for N=20
---
## Phase 2 authorization
PM has authorized Phase 2 (multi-step agent loop unification) per sprint plan §"Phase 2 — Multi-step agent loop unification (3-5 days)". Commit boundaries (proposed, CC-1 may adjust):
- **Commit 2.1**: extract `runAgentLoop` (or new `runRetrievalAgentLoop` for the pilot pattern) into `packages/agent/src/agent-loop.ts` + tests; halt + PM review
- **Commit 2.2**: refactor `scripts/run-pilot-2026-04-26.ts` to consume `packages/agent/` public API; halt + PM review
- **Commit 2.3**: refactor `benchmarks/harness/src/cells.ts` to consume `packages/agent/` public API + deprecate hardcoded "compressed" scaffold; halt + PM review
- **Phase 2 acceptance gate**: dual-methodology substrate smoke (a)+(b) + standard regression (tsc + 255 baseline + new Phase 2 tests + grep verifications)
---
## Audit chain SHAs
```
amendment_v2_doc_sha256 = 1ab5082ff773538a26b3c3294f7fbee4e30063a8d994bdb3753bdc9dd6d6cd99
amendment_v1_doc_sha256 = 3946d3e00fbb1996fb7e63096ecef51abf1e209e5ff166fd0d8758e9a3a14aad
cc1_brief_sha256 = 9805adae478333178d36d71b88795afc37f8fb543c2ebccaecb7b01faf06afee
v6_manifest_yaml_sha256 = 5d5c1023421cd1a79f4913bb4c0a59415e21f50797255bff7dfec8e16b68e3ed
phase_1_head_sha = 12c7334 (Phase 1.3 close)
sprint_plan_doc_path = decisions/2026-04-26-agent-fix-sprint-plan.md
```
---
**End of Phase 1 acceptance gate results. Phase 2 (loop unification) authorized. Standing GREEN for Commit 2.1.**