v1.7.2 — Adversarial Convergence
Adversarial-subagent convergence pass. Three rounds of evaluation by minimal-context subagents simulating first-time users — round 1 found 8 issues (3 critical), round 2 found 4 (3 critical), round 3 found 1 critical + 4 blocking + 5 minor. Critical-defect count: 8 → 3 → 1 per round. All fixed; the 20-case smoke gate now locks every defect class in.
Round-3 highlights
- Git Bash silent-build trap (critical) — `idf.py` exited 0 with `MSys/Mingw is no longer supported` from Git Bash. AI agents flashed stale binaries with no warning. `build.py` now detects the message + ELF-mtime gate; fails closed with `exit_code=100`.
- `?keys press [HOLD_MS]` (new) — synthesize physical BOOT / USER / PWR button presses from host. Synth-override window + count integration; AI agents can now exercise button-gated flows.
- PORTING.md gains the `bsp/esp-bsp.h` convention + `bsp_display_start()` entry-point documentation that round-3's port-pretend subagent had to discover by grep.
- 5 post-monorepo path islands swept: `sim/README.md` 3-scenes claim, `aurora-harness/README.md` `esp32-harness-showcase` refs, `tests/README.md` stale pytest path, `PR_TEMPLATE.md` double-prefixed relative links.
- Last `1.5.0` stragglers in `docs/index.html`, repo-layout SVG, `architecture.md` → `1.7.x`.
Smoke gate
20 / 20 cases green (6 host + 14 device). New since v1.7.1:
- `build refuses MSys/Mingw exit-0 (R3-CRIT regression)`
- `?keys press boot synth (R3-bug regression)`
Convergence trajectory
| Round | Defects | Critical | Blocking | Minor |
|---|---|---|---|---|
| Author E2E (v1.7.0→1) | 8 | 5 | — | 3 |
| Subagent 1 (1.7.1→) | 8 | 3 | 2 | 3 |
| Subagent 2 | 4 | 3 | — | 1 |
| Subagent 3 | 10 | 1 | 4 | 5 |
20 distinct defects across 4 rounds of validation on a single codebase. The framework is at the point where further adversarial rounds find papercuts rather than blockers.
🤖 Generated with Claude Code