You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(plans): conditional flag lifecycle + persona triad ordering
Two refinements to confound_quarantine + v1_refinement based on user
review:
1. Flag lifecycle is decided in 1.0, not deferred to 1.2 in
experimental limbo. Three branches conditional on Phase A outcome:
clean pass → flags removed in 1.0 (commit-hash pinning covers
re-verification); conditional pass → graduate to public-stable +
document scaffold dependencies; fail → re-scope claim, keep flags
as evidence. No experimental tier carry-over past 1.0.
2. v1_refinement.md "Execution order" rewritten to interleave the
persona-cleanup triad with the V1 phased re-run. Final chain:
scene_actor_affordances Stages 1-2 → confound_quarantine flags →
V1 phased re-run → bio_emergent (scope decided after Phase A) →
persona_cleanup Stage 1. Ordering is load-bearing because Phase E
of the dial-down exercises persona-disabled runs and Phase F
exercises embodiment-disabled runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
**Ships in:** 0.9.x (post-1.0-freeze branch — see "Risks" §R1 below for the lifecycle decision)
4
+
**Ships in:** 0.9.x (experimental); flag lifecycle decided in 1.0 conditional on Phase A outcome — see "Risks" §R1 for branches
5
5
**Owns:** prompt-injection gates in [src/maxim/agents/prompt_builder.py](../../src/maxim/agents/prompt_builder.py), [src/maxim/agents/exec_prompts.py](../../src/maxim/agents/exec_prompts.py), [src/maxim/prompts/acting_coach.py](../../src/maxim/prompts/acting_coach.py); orchestrator state path in [src/maxim/simulation/orchestrator.py](../../src/maxim/simulation/orchestrator.py); persona default in [src/maxim/simulation/personas.py](../../src/maxim/simulation/personas.py); arc routing in [src/maxim/cli.py](../../src/maxim/cli.py); env-var contract doc in [docs/user/configuration.md](../user/configuration.md) under CC4
@@ -205,20 +205,19 @@ The unit tests are short — the value is that **silently removing any condition
205
205
206
206
## Risks
207
207
208
-
### R1 — Flags become permanent public surface
208
+
### R1 — Flag lifecycle decided in 1.0 based on Phase A outcome
209
209
210
-
**Tradeoff:**
211
-
-**(a) Ship as public 1.0 contract:** future researchers can reproduce the V1 numbers verbatim against a 1.0+ install. Costs an ongoing maintenance commitment for four flags whose only purpose is auditing the substrate.
212
-
-**(b) Mark experimental, plan removal post-1.0:** smaller public surface; researchers reproducing V1 against post-1.0 installs need a pinned 0.9.x commit.
210
+
The flags ship in 0.9.x as experimental (per CC4). Their disposition is **decided in 1.0**, conditionally on what the Phase A re-run reveals. No experimental limbo through 1.1+.
213
211
214
-
**Recommendation: (b), with a documented removal target of 1.2.** Reasons:
212
+
**Three branches, decided when Phase A results land:**
215
213
216
-
1. The substrate has to stand on its own without the scaffold-disable flags being a permanent option. Keeping them public-stable signals that the maintainers don't trust the substrate, and that's the wrong message for 1.0+.
217
-
2. CC4 explicitly carves out an "experimental — may change without notice" tier. These flags are textbook fits for it. The configuration.md doc warns users they may be removed.
218
-
3. Reproducibility is preserved by **pinning the V1 experiment to a specific commit hash in the experiment's README**, not by freezing 0.9-era debug flags into the 1.0 contract. This is how academic ML reproduces results — by commit hash, not by flag stability.
219
-
4. Removal is a one-line revert per gate site. Cheap.
214
+
-**Clean pass** — substrate alone reproduces the V1 cross-session recall result without the scaffolds. **Flags removed in 1.0.** They did their job (attribution). Reproducibility for the V1 numbers is preserved by pinning the experiment README to a specific 0.9.x commit hash — that's the academic-ML standard, not freezing debug flags into the 1.0 contract. Removal is a one-line revert per gate site.
220
215
221
-
The plan ships in 0.9.x. The flags survive through 1.1 to give early-1.0 researchers a re-run window. Removal in 1.2 is tracked as a one-line entry in `v1_refinement.md`'s "post-1.0 cleanup" section.
216
+
-**Conditional pass** — substrate works but specific scaffolds materially boost the result. **Flags graduate from experimental to public-stable in 1.0**, classified under the public env-var contract per CC4. Documentation explicitly states which scaffold combinations the claim is conditional on. The flags become part of the production diagnostic surface (researchers and users debugging substrate behavior can disable scaffolds to isolate signal).
217
+
218
+
-**Fail** (R2 fires) — substrate alone does NOT reproduce V1. **Re-scope the 1.0 claim** to "the substrate produces cross-session recall when supported by scaffold X+Y." Keep the flags as evidence of the re-scoping. Update the README and stable_api.md accordingly.
219
+
220
+
The disposition decision is part of the V1 phased re-run experiment doc — Phase A results land, the doc records which branch fires, and the 1.0 release blocks on that decision. No deferral past 1.0.
222
221
223
222
### R2 — Phase A reveals the substrate alone doesn't reproduce V1
Copy file name to clipboardExpand all lines: docs/plans/v1_refinement.md
+19-15Lines changed: 19 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -83,6 +83,8 @@ The phase deltas attribute the V1 result to specific contributors. Phase A is th
83
83
84
84
**Existential risk flagged:** if Phase A shows the cross-session recall signal disappears once the scaffold is removed, the 1.0 substrate-attribution claim must be re-scoped. That's the point of the experiment — discover this before 1.0, not after.
85
85
86
+
**Flag lifecycle — decided in 1.0, not deferred.** Flags ship in 0.9.x as experimental. Their disposition is forced at 1.0, conditional on Phase A results: (a) clean pass → flags removed in 1.0, V1 reproducibility via 0.9.x commit-hash pinning; (b) conditional pass → flags graduate from experimental to public-stable, claim documents which scaffolds it depends on; (c) fail → re-scope the 1.0 claim, keep flags as evidence. No experimental limbo through 1.1+.
87
+
86
88
**Why before 1.0:** the substrate-attribution claim is the central 1.0 marketing claim. Shipping it on contaminated data is a credibility risk. The flag surface is ~40 production LOC; the test surface and harness are larger but cheap.
1.**V1** (validation) — proves the claim. If it fails, everything else is moot.
273
-
2.**B1** (protocol enrichment) — cheap now, expensive later. Do early while interfaces are still warm.
274
-
3.**P1 + P2** (pipeline gaps) — small, can run in parallel with B1.
275
-
4.**B2** (SCN oscillator) — depends on P1 (ToolPainBridge temporal migration provides diverse TemporalEvents for the oscillator to learn from).
276
-
5.**B3** (SEM world enrichment Phase 3) — Phases 1+2 shipped; Phase 3 (composable body archetypes) optional for 1.0.
277
-
6.**B4** (cradle) — depends on B2 (SCN feedback) and B3 (rich world). The capstone demo. **Includes P3** (energy bridge replacement ships as cradle Stage 1c). Also includes drive protocol interfaces (`CouplingSpec`, `ModulationSpec`, `pain_model`) that must freeze at 1.0.
8.**C4-C6** (deprecation phase) — 0.9 warnings, 1.0 hard errors.
280
-
9.**D1-D3** (docs) — last, after content stabilizes.
274
+
The persona-cleanup track (1.1-T-persona-triad: scene_actor_affordances → bio_emergent → persona_cleanup) interleaves with the V1 re-run because Phase E of the dial-down protocol exercises persona-disabled runs and Phase F exercises embodiment-disabled runs. Both need infrastructure landed before the re-run is meaningful. Final ordering:
275
+
276
+
1.**B1, P1, P2** — already shipped; baseline.
277
+
2.**scene_actor_affordances Stages 1-2** (target_effect field on `AffordanceSchema` + `OrchestratorActorTool`) — absorbs the world-physics-engine job from the adversarial persona prompt, so killing persona doesn't break narrative→SEM coupling.
278
+
3.**confound_quarantine flags** — opt-in disable env vars + `--no-acting-coach` / `--no-persona` CLI flags + autouse scrub fixture + per-flag pin tests. ~40 production LOC. See [confound_quarantine.md](confound_quarantine.md).
279
+
4.**V1 phased re-run** (Phases A–G) — the dial-down experiment. Phase A produces the substrate-only baseline number for the 1.0 claim. Phase A's outcome forces the flag-lifecycle decision in 1.0 (clean pass / conditional pass / fail).
280
+
5.**bio_emergent_persona_foundations** — scope decided after Phase A. If Phase A reveals the substrate needs richer disposition mechanics (learned aversions, risk sensitivity), implement Stages 0-3 before 1.0. Otherwise reserve fields on `GatingContext` and `OutcomePrediction` and ship implementation in 1.1.
281
+
6.**persona_cleanup_and_mode_transition Stage 1** — additive `--mode` flag + deprecation warning on `--persona` and `register_persona`. Hard-remove in 1.1.
11.**C4-C6** (deprecation phase) — 0.9 warnings, 1.0 hard errors.
287
+
12.**D1-D3** (docs) — last, after content stabilizes.
281
288
282
289
## Timing
283
290
284
-
- B1 and P1+P2 are the quickest wins — ship first.
285
-
- B2→B3→B4 is the critical chain for the sensorimotor grounding story.
286
-
- B4 is the largest single item (~550-650 LOC) but stages are independently shippable and testable.
287
-
- P3 (dead energy code removal) ships inside B4 Stage 1c, not as a separate PR.
288
-
- C1-C3 are internal hard-removes, zero user impact — shipped 2026-04-26 (PR #196).
289
-
- C4-C6 need a 0.9 deprecation release before 1.0 hard errors.
291
+
- Items 2-6 are the new triad-plus-validation chain. Ordering is load-bearing: target_effect must exist before persona is disabled in Phase E; confound_quarantine flags must exist before V1 re-run; V1 results must land before bio_emergent and persona-cleanup scopes are decided.
292
+
- Items 7-11 are largely shipped or low-LOC; the critical-path constraint is the 2-6 chain.
293
+
- Date pressure is light per user direction (no external dependents on a specific 1.0 ship date) — foundation correctness matters more than calendar.
0 commit comments