diff --git a/docs/design/iter-slm418-dsh5-10-disposition-20260727.json b/docs/design/iter-slm418-dsh5-10-disposition-20260727.json new file mode 100644 index 000000000..3d96e92a5 --- /dev/null +++ b/docs/design/iter-slm418-dsh5-10-disposition-20260727.json @@ -0,0 +1,102 @@ +{ + "schema": "operator_event_memory_report/v1", + "report": "OperatorEventMemoryReportV1", + "issue": "SLM-418 (DSH5-10)", + "date": "2026-07-27", + "claim_class": "fixture_scale_disposition", + "disposition": "no_held_out_benefit_at_fixture_scale_retain_dag_only", + "falsification_rule_invoked": "If replay-grounded history yields no held-out benefit, retain the event DAG for runtime/evaluation only and do not add preference training complexity.", + "pattern_coverage": { + "extracted_and_tested": 7, + "named_total": 7, + "relations": [ + "edit_then_undo", + "undo_then_redo", + "partial_rollback", + "checkout_another_state", + "fork_then_choose_one_branch", + "merge_success", + "pronoun_focus_followup" + ], + "merge_conflict": "deliberately not modeled as a row: a conflicting merge has no successor state to replay to; honored by construction (merge candidates only enter the legal set after merge_conversation_branches confirms success), proven by test_merge_conflict_never_yields_a_preference_row", + "module": "src/slm_training/dsl/operators/replay_preference.py (v7)", + "tests": "tests/test_dsl/test_replay_preference.py" + }, + "ablation": { + "source": "python -m scripts.run_replay_preference_context_view_ablation (PR #1129, merged 57f5bdbb)", + "corpus": { + "kind": "bounded deterministic synthetic fixture (never real user telemetry)", + "session_count": 8, + "train_session_count": 6, + "held_out_session_count": 2, + "row_count": 40, + "split": "group-stable via split_for_group; conversation variants stay in one split" + }, + "grid": { + "context_views": 5, + "turn_depths": [ + 1, + 2, + 4, + 8, + 16 + ], + "cells": 25 + }, + "undo_family_rate": 0.9, + "held_out_pairwise_accuracy": { + "current_state_only_baseline": 1.0, + "best_cell": { + "view": "state_plus_recent_receipts", + "turn_depth": 1, + "accuracy": 1.0 + }, + "all_25_cells": 1.0, + "verdict": "no_benefit_fixture_scale", + "explanation": "honest ceiling effect: is_history_control, computable from the decision state alone with zero history, already perfectly separates chosen from rejected on the 4-pair held-out split; history context adds nothing it could add at this scale" + }, + "calibration_proxy_brier": { + "current_state_only": 0.00011, + "state_plus_recent_receipts_depth_1": 0.00059, + "trend": "narrows toward 0.00007 by depth 16; reflects trained weights' own confidence, not accuracy" + }, + "structural_grid_finding": "state_plus_recent_receipts (recency) and state_plus_retrieved_events (ancestry) show genuinely different windows on rollback_chain_8 PARTIAL_ROLLBACK rows (most-recent action_kind 'undo' vs 'operator'); the views are not interchangeable even though the fixture corpus cannot show one out-predicting the other" + }, + "acceptance_criteria_status": { + "every_pair_shares_one_exact_input_state_and_replays": "met (per-relation replay tests)", + "state_authority_never_depends_on_transcript": "met by construction (LAST_THREE_TEXT_HISTORY strips state ids; join keys only)", + "at_least_one_receipt_context_improves_held_out_followups": "NOT met at fixture scale (ceiling 1.0 including baseline)", + "negative_and_no_effect_results_remain_in_evidence": "met (this disposition + docs/design/dsh5-10-replay-preference-rows.md sixth slice)" + }, + "non_goals_honored": [ + "no transcript as event store / artifact authority (ConversationTraceV1 DAG remains sole state authority)", + "no free-form model summaries as authority", + "no permanent semantic use of state ids (opaque join/evidence keys only)", + "no preference training complexity added (no SFT/preference training, no checkpoint, no TypedOperatorPolicyScorer wiring)" + ], + "adapter_gap": { + "doc": "docs/design/dsh5-10-policy-scorer-adapter-gap-20260727.md", + "summary": "6 of 7 relations choose history-control actions (undo/redo/checkout/merge tokens) that cannot be expressed as OperatorActionViewV1 rows in TypedOperatorPolicyExampleV1; only pronoun_focus_followup maps as-is. Recommended next design: a separate history-control head (option B), but no evidence yet justifies building it." + }, + "successor_conditions": [ + "a real (non-synthetic, argument-bound) replay-preference corpus build -- the VAR3-04/05 pattern (docs/design/var3-04-turn-disposition-real-corpus-20260727.md) of pointing the unmodified pipeline at build_symbolic_operator_corpus real admitted documents -- showing held-out benefit over current_state_only / derived_only baselines", + "a powered held-out split large enough that is_history_control alone does not ceiling (the fixture's 4-pair held-out split is exhausted by a state-only feature)", + "if preference training is ever re-opened, prototype the adapter-gap option B (separate HistoryControlPolicyInputV1 head) first; do not extend the frozen OperatorActionViewV1 schema unilaterally" + ], + "evidence_docs": [ + "docs/design/dsh5-10-replay-preference-rows.md (slices v1-v7)", + "docs/design/dsh5-10-policy-scorer-adapter-gap-20260727.md" + ], + "version_stamp": { + "stamp_schema": "version_stamp/v1", + "code_commit": "0fd832146d5c217e7f34298fc0b147cd985d6d98", + "code_dirty": true, + "components": { + "harness.experiments.slm418_dsh5_10_disposition": "v1", + "dsl.operators.replay_preference": "v7", + "dsl.operators.replay_preference_context_views": "v1", + "harness.preference.replay_preference_context_view_variants": "v2" + }, + "stamped_at": "2026-07-27T16:56:33.287630+00:00" + } +} diff --git a/docs/design/iter-slm418-dsh5-10-disposition-20260727.md b/docs/design/iter-slm418-dsh5-10-disposition-20260727.md new file mode 100644 index 000000000..39a25fd5c --- /dev/null +++ b/docs/design/iter-slm418-dsh5-10-disposition-20260727.md @@ -0,0 +1,162 @@ +# SLM-418 (DSH5-10) final disposition: replay-grounded preference signal from undo/redo/fork history + +Date: 2026-07-27 +Status: **final issue-level disposition — falsification close.** +Companion JSON: `docs/design/iter-slm418-dsh5-10-disposition-20260727.json` +(`operator_event_memory_report/v1`, real `version_stamp`). +Honesty: fixture-scale measured result, honestly labeled. Not a capability, +ship, or promotion claim. No checkpoint was created by this issue; no model +card update applies. + +## Decision + +**`no_held_out_benefit_at_fixture_scale_retain_dag_only`** + +The issue's own falsification / stop rule is invoked, verbatim: + +> If replay-grounded history yields no held-out benefit, retain the event +> DAG for runtime/evaluation only and do not add preference training +> complexity. + +This is the issue's designed, legitimate negative close — not a failure. +The conversation event DAG (`ConversationTraceV1`) is retained as the sole +state authority for runtime and evaluation; the extraction machinery stays +as evaluated wiring; **no SFT/preference training complexity is added.** + +## What the issue asked and what was delivered + +SLM-418 asked whether exact undo/redo/checkout/fork outcomes can provide +useful preference supervision for ambiguous follow-ups without making +transcript text the artifact authority. Delivered across merged slices +(`docs/design/dsh5-10-replay-preference-rows.md`, v1–v7): + +### Pattern coverage: 7 of 7 named patterns extracted and tested + +`src/slm_training/dsl/operators/replay_preference.py` (v7): + +| # | Pattern (`ReplayPreferenceRelation`) | Extraction | Replay-verified tests | +| --- | --- | --- | --- | +| 1 | `edit_then_undo` | turn-pair scan (`AST_EDIT` → `UNDO`) | ✅ | +| 2 | `undo_then_redo` | turn-pair scan (`UNDO` → `REDO`) | ✅ | +| 3 | `partial_rollback` | second+ consecutive `UNDO` | ✅ | +| 4 | `checkout_another_state` | same-branch `CHECKOUT_STATE` | ✅ | +| 5 | `fork_then_choose_one_branch` | cross-branch checkout over a `FORK` boundary | ✅ | +| 6 | `merge_success` | standalone `extract_merge_preference_row` on a verified merge | ✅ | +| 7 | `pronoun_focus_followup` | consecutive `AST_EDIT` with focus-set overlap and a legal sibling | ✅ | + +Merge *conflict* is deliberately not a row (no successor state to replay +to); it is excluded from every ranking denominator **by construction** +(merge candidates only enter the legal set after +`merge_conversation_branches` confirms success), proven by +`test_merge_conflict_never_yields_a_preference_row`. + +Every row shares one exact `input_state_id`, is checked against the exact +legal set at that state (`legal_set_fingerprint`), and independently +replays to its recorded `chosen_output_state_id` — the issue's first two +acceptance criteria. + +### The ablation that measured no benefit (PR #1129, merged `57f5bdbb`) + +Real run of `python -m scripts.run_replay_preference_context_view_ablation` +on the bounded deterministic synthetic corpus (never real user telemetry): + +- **Corpus:** 8 sessions (6 train / 2 held-out), 40 rows, all 7 relations + present; group-stable split (conversation variants stay in one split). +- **Grid:** the issue's own 5 context views × turn depths {1,2,4,8,16} = + 25 cells. +- **`undo_family_rate` = 0.9** (corpus composition: 90% of rows are the + undo family, by rollback-chain design). +- **Held-out pairwise accuracy: 1.0 in all 25 cells, including the + `current_state_only` baseline** → verdict **`no_benefit_fixture_scale`**. + This is an honest **ceiling effect**: `is_history_control`, computable + from the decision state with zero history, already perfectly separates + chosen from rejected on the 4-pair held-out split; history context has + nothing left to add at this scale. +- **Calibration proxy (Brier, not CAP-gated):** 0.00011 + (`current_state_only`) vs 0.00059 (`state_plus_recent_receipts`, depth 1), + narrowing toward 0.00007 by depth 16 — reflects the two-parameter + scorer's own confidence, not accuracy. +- **Structural grid (genuinely informative):** on `rollback_chain_8` + `PARTIAL_ROLLBACK` rows, `state_plus_recent_receipts` (recency) shows + most-recent `action_kind="undo"`, while `state_plus_retrieved_events` + (ancestry) shows the forward edit chain (`"operator"`) — the two views + are not interchangeable, even though the fixture corpus cannot show one + out-predicting the other. + +Re-verified in this session: `no_benefit_fixture_scale`, +`undo_family_rate=0.9`, 8 sessions / 40 rows, all 25 cells at 1.0 +(see "Reproducibility"). + +### The adapter gap (design note, merged) + +`docs/design/dsh5-10-policy-scorer-adapter-gap-20260727.md`: 6 of 7 +relations choose history-control actions (`undo`, `redo:`, +`checkout:`, merge tokens) that **cannot be expressed as +`OperatorActionViewV1` rows** in `TypedOperatorPolicyExampleV1` at all; +only `pronoun_focus_followup` maps as-is. Training against the +DSH3-selected `TypedOperatorPolicyScorer` therefore requires an adapter +design (recommended: a separate history-control head, option B) — but the +fixture-scale measurement above shows no benefit that would justify +building it. Identified, not warranted: no evidence, no training. + +## Acceptance criteria — final status + +| Criterion | Status | +| --- | --- | +| Every valid preference pair shares one exact input state and independently replays | **Met** (per-relation replay tests) | +| State/event authority never depends on transcript reconstruction | **Met by construction** (join keys only; `LAST_THREE_TEXT_HISTORY` strips state ids so text history cannot reconstruct a different state than the DAG) | +| At least one receipt/event context improves held-out ambiguous follow-ups | **Not met at fixture scale** (baseline-ceilinged 1.0 everywhere) | +| Negative and no-effect results remain in evidence | **Met** (this disposition + the sixth-slice measured results) | + +## Non-goals honored + +- No transcript as event store or artifact authority — the + `ConversationTraceV1` DAG remains the sole state authority throughout. +- No free-form model summaries as authority. +- No permanent semantic use of state ids (opaque join/evidence keys only). +- **No preference training complexity added** — no SFT/preference training + run, no checkpoint, no `TypedOperatorPolicyScorer` or `ObjectiveView` + wiring, no schema change to the frozen `OperatorPolicyInputV1`. + +## Successor conditions (what would re-open preference training) + +Per goal-drift guard I14, this closes the *approach*, never the *goal*. +Preference training on replay history re-opens when: + +1. A **real, argument-bound corpus build** exists — the VAR3-04/05 pattern + (`docs/design/var3-04-turn-disposition-real-corpus-20260727.md`): + point the unmodified extraction/conversion pipeline at + `build_symbolic_operator_corpus` real admitted documents instead of the + 8-session synthetic fixture, and measure against + `current_state_only` / derived-only baselines. +2. A **powered held-out split** large enough that a state-only feature + (`is_history_control`) does not already ceiling — the fixture's 4-pair + held-out split is exhausted by it, which is exactly why this run is + honest `no_benefit_fixture_scale` and not a powered claim either way. +3. If re-opened, prototype adapter-gap **option B** (a separate + `HistoryControlPolicyInputV1` head) first; never extend the frozen + `OperatorActionViewV1` schema unilaterally. + +## Reproducibility + +```bash +python -m scripts.run_replay_preference_context_view_ablation +NODE_OPTIONS= pytest -q tests/test_dsl/test_replay_preference.py \ + tests/test_harnesses/preference/test_operator_history_pairs.py \ + tests/test_evals/test_ambiguous_operator_followups.py +python -m scripts.verify_version_stamps --check +python -m scripts.repo_policy +``` + +Result (this session, on `slm-418-dsh5-10-disposition` branched from +`origin/main` `0fd83214`): ablation run re-produced +`no_benefit_fixture_scale` (8 sessions, 40 rows, `undo_family_rate=0.9`, +all 25 cells 1.0, best `state_plus_recent_receipts` depth 1 at 1.0 tied +with baseline). Tests: **50 passed**. `verify_version_stamps --check`, +`repo_policy`, and `git diff --check`: clean (see PR body). + +Note: the task-brief claim of a merged demo pairs builder +(`scripts/build_replay_preference_pairs.py`, PRs #1125/#1127/#1128) does +not hold on `origin/main` — those commits live only on an unmerged branch +(`origin/claude/great-dirac-ni43oh`). The disposition does not depend on +them; every number above comes from merged main. diff --git a/src/slm_training/resources/versions.json b/src/slm_training/resources/versions.json index 4f8295b31..a28cb930a 100644 --- a/src/slm_training/resources/versions.json +++ b/src/slm_training/resources/versions.json @@ -620,7 +620,7 @@ { "version": "v1", "date": "2026-07-25", - "note": "DSH5-02: initial exact atomic bulk openui.map_set_property operator over SelectorRefV1 — one schema-valid property update applied to every exact selected node atomically, with per-target effect deltas, replay, fresh post-commit reference-table continuation, and a diagnostic-only primitive-lowering equivalence oracle" + "note": "DSH5-02: initial exact atomic bulk openui.map_set_property operator over SelectorRefV1 \u2014 one schema-valid property update applied to every exact selected node atomically, with per-target effect deltas, replay, fresh post-commit reference-table continuation, and a diagnostic-only primitive-lowering equivalence oracle" } ] }, @@ -1000,7 +1000,7 @@ { "version": "v1", "date": "2026-07-25", - "note": "no-bump: DSH5-05 extracts the private _merge_value/_StructuralConflict/MergeConflictKind primitive into the new src/slm_training/dsl/operators/ast_merge.py module (merge_ast_value/StructuralMergeConflict/MergeConflictKind) so the transaction executor's N-way fold can reuse it without importing merge.py (which imports conversation.py) and closing an import cycle; merge.py now imports from ast_merge.py instead of defining these locally — public behavior and every test_operator_merge.py test are unchanged" + "note": "no-bump: DSH5-05 extracts the private _merge_value/_StructuralConflict/MergeConflictKind primitive into the new src/slm_training/dsl/operators/ast_merge.py module (merge_ast_value/StructuralMergeConflict/MergeConflictKind) so the transaction executor's N-way fold can reuse it without importing merge.py (which imports conversation.py) and closing an import cycle; merge.py now imports from ast_merge.py instead of defining these locally \u2014 public behavior and every test_operator_merge.py test are unchanged" }, { "version": "v1", @@ -1274,7 +1274,7 @@ { "version": "v1", "date": "2026-07-25", - "note": "DSH5-05: initial atomic multi-action operator transaction executor — independent per-action constituent replay against one fixed base, base-relative N-way AST composition (a fold over the new shared ast_merge.merge_ast_value primitive, extracted from merge.py to avoid a conversation<->transaction_executor import cycle), a real structural-conflict safety net over declared-but-unverified commutativity, full pack-authority validation, fresh branch-local reference-table continuation via a caller-supplied builder, exact commit replay, and one CRDT conversation turn (TRANSACTION_COMMIT) carrying the whole transaction with every constituent application ID retained" + "note": "DSH5-05: initial atomic multi-action operator transaction executor \u2014 independent per-action constituent replay against one fixed base, base-relative N-way AST composition (a fold over the new shared ast_merge.merge_ast_value primitive, extracted from merge.py to avoid a conversation<->transaction_executor import cycle), a real structural-conflict safety net over declared-but-unverified commutativity, full pack-authority validation, fresh branch-local reference-table continuation via a caller-supplied builder, exact commit replay, and one CRDT conversation turn (TRANSACTION_COMMIT) carrying the whole transaction with every constituent application ID retained" } ] }, @@ -1290,7 +1290,7 @@ { "version": "v3", "date": "2026-07-25", - "note": "DSH5-05: extend _target_lineage to also map ReferenceTableV1.selectors (not just .entries), so a selector-argument operator (openui.map_set_property, DSH5-02's only bulk operator) can be prepared into a transaction at all — previously unresolvable in both prepare_operator_action's semantic-id derivation and derive_read_write_set's precondition footprint, invisible until DSH5-05's bulk-plus-primitive matrix requirement exercised it; purely additive, no existing non-selector lineage entry changes" + "note": "DSH5-05: extend _target_lineage to also map ReferenceTableV1.selectors (not just .entries), so a selector-argument operator (openui.map_set_property, DSH5-02's only bulk operator) can be prepared into a transaction at all \u2014 previously unresolvable in both prepare_operator_action's semantic-id derivation and derive_read_write_set's precondition footprint, invisible until DSH5-05's bulk-plus-primitive matrix requirement exercised it; purely additive, no existing non-selector lineage entry changes" }, { "version": "v2", @@ -1300,7 +1300,7 @@ { "version": "v1", "date": "2026-07-25", - "note": "DSH5-04: initial OperatorTransactionV1/PreparedOperatorActionV1/OperatorReadWriteSetV1 base-state, dependency, and conflict contracts — one-base multi-action preparation, semantic read/write footprints, write/write and write/read conflict resolution via mutual commutativity (reusing merge.py's _effect_targets and mutually-commuting gate), dependency-cycle detection, and canonical permutation-invariant transaction identity; schema/safety layer only, no execution path wired" + "note": "DSH5-04: initial OperatorTransactionV1/PreparedOperatorActionV1/OperatorReadWriteSetV1 base-state, dependency, and conflict contracts \u2014 one-base multi-action preparation, semantic read/write footprints, write/write and write/read conflict resolution via mutual commutativity (reusing merge.py's _effect_targets and mutually-commuting gate), dependency-cycle detection, and canonical permutation-invariant transaction identity; schema/safety layer only, no execution path wired" } ] }, @@ -1901,7 +1901,7 @@ { "version": "v9", "date": "2026-07-19", - "note": "add EFS2-01 X22 tree-edit beam-width × edit-depth scaling harness (TreeEditScalingConfig, run_scaling_grid, valid-state beam search) on top of quantized-energy/solver-state/verifier-cascade stack" + "note": "add EFS2-01 X22 tree-edit beam-width \u00d7 edit-depth scaling harness (TreeEditScalingConfig, run_scaling_grid, valid-state beam search) on top of quantized-energy/solver-state/verifier-cascade stack" }, { "version": "v8", @@ -2589,7 +2589,7 @@ ] }, "harness.experiments": { - "version": "v139", + "version": "v140", "kind": "harness", "paths": [ "scripts/run_slm298_capacity_context_curriculum.py", @@ -2601,6 +2601,11 @@ "tests/test_harnesses/experiments/test_locked_manifest_digest_threading.py" ], "history": [ + { + "version": "v140", + "date": "2026-07-27", + "note": "SLM-418 (DSH5-10): final disposition doc pair added (own component harness.experiments.slm418_dsh5_10_disposition v1); no file under harness.experiments's watched paths changed. Falsification close: no held-out benefit at fixture scale, event DAG retained for runtime/evaluation only." + }, { "version": "v139", "date": "2026-07-27", @@ -2609,7 +2614,7 @@ { "version": "v138", "date": "2026-07-27", - "note": "SLM-431 (LAR0-06): land src/slm_training/harnesses/experiments/slm317_repair_hybrid.py byte-identical from unmerged branch commit 48e5cadc (its own tests pass unmodified against main HEAD); the harness module itself carries no logic changes — the powered-rerun surface lives in scripts/run_slm317_repair_hybrid.py under harness.experiments.slm317_repair_hybrid v2." + "note": "SLM-431 (LAR0-06): land src/slm_training/harnesses/experiments/slm317_repair_hybrid.py byte-identical from unmerged branch commit 48e5cadc (its own tests pass unmodified against main HEAD); the harness module itself carries no logic changes \u2014 the powered-rerun surface lives in scripts/run_slm317_repair_hybrid.py under harness.experiments.slm317_repair_hybrid v2." }, { "version": "v137", @@ -3274,7 +3279,7 @@ { "version": "v31", "date": "2026-07-20", - "note": "add SLM-148 SPV1-05 plan-conditioned X22 × conflict-slice staged campaign wiring/fixture harness" + "note": "add SLM-148 SPV1-05 plan-conditioned X22 \u00d7 conflict-slice staged campaign wiring/fixture harness" }, { "version": "v30", @@ -3314,7 +3319,7 @@ { "version": "v24", "date": "2026-07-19", - "note": "add SLM-133 EFS3-06 AST-sketch dedup × choice-native retrieval factorial wiring/fixture harness" + "note": "add SLM-133 EFS3-06 AST-sketch dedup \u00d7 choice-native retrieval factorial wiring/fixture harness" }, { "version": "v23", @@ -3374,7 +3379,7 @@ { "version": "v13", "date": "2026-07-19", - "note": "add CAP3-05 (SLM-94) equal-byte width × precision ladder planner and dry-run manifest support" + "note": "add CAP3-05 (SLM-94) equal-byte width \u00d7 precision ladder planner and dry-run manifest support" }, { "version": "v12", @@ -3495,7 +3500,7 @@ { "version": "v1", "date": "2026-07-19", - "note": "initial registration; SLM-133 EFS3-06 AST-sketch dedup × choice-native retrieval factorial wiring/fixture harness" + "note": "initial registration; SLM-133 EFS3-06 AST-sketch dedup \u00d7 choice-native retrieval factorial wiring/fixture harness" } ] }, @@ -4080,7 +4085,7 @@ { "version": "sde5-03-v1", "date": "2026-07-21", - "note": "initial registration; SLM-210 SDE5-03 prompt-plan × grammar-mass × high-debt exposure floor-escape matrix wiring/fixture harness" + "note": "initial registration; SLM-210 SDE5-03 prompt-plan \u00d7 grammar-mass \u00d7 high-debt exposure floor-escape matrix wiring/fixture harness" } ] }, @@ -4558,7 +4563,7 @@ { "version": "v1", "date": "2026-07-20", - "note": "initial registration of SLM-148 SPV1-05 plan-conditioned X22 × conflict-slice staged campaign wiring/fixture harness" + "note": "initial registration of SLM-148 SPV1-05 plan-conditioned X22 \u00d7 conflict-slice staged campaign wiring/fixture harness" } ] }, @@ -5617,7 +5622,7 @@ { "version": "v4", "date": "2026-07-25", - "note": "no-bump: shrink the Vercel bundle from ~10.4 GB to under half of the first working 247 MB deploy — exclude local build/run artifacts (/outputs, /.venv, /node_modules, /build, /session, /_uv, /tests), published training records.jsonl, sourcemaps, oversized historical docs/design JSON, and the fixture checkpoint; ship a slim requirements.txt without numpy/onnxruntime (generation hands off to the browser path honestly); stop installing the project into the function venv (tool.uv package=false)" + "note": "no-bump: shrink the Vercel bundle from ~10.4 GB to under half of the first working 247 MB deploy \u2014 exclude local build/run artifacts (/outputs, /.venv, /node_modules, /build, /session, /_uv, /tests), published training records.jsonl, sourcemaps, oversized historical docs/design JSON, and the fixture checkpoint; ship a slim requirements.txt without numpy/onnxruntime (generation hands off to the browser path honestly); stop installing the project into the function venv (tool.uv package=false)" }, { "version": "v4", @@ -8292,7 +8297,7 @@ { "version": "v19", "date": "2026-07-25", - "note": "no-bump: additive self-contained module operator_nl_turns.py (SLM-379 operator NL edit turns); no existing train_data builder, validator, preference, quality, leakage, or publication path is modified — the new module is versioned under harness.experiments.slm379_operator_frames v1" + "note": "no-bump: additive self-contained module operator_nl_turns.py (SLM-379 operator NL edit turns); no existing train_data builder, validator, preference, quality, leakage, or publication path is modified \u2014 the new module is versioned under harness.experiments.slm379_operator_frames v1" }, { "version": "v19", @@ -11029,6 +11034,21 @@ "note": "SLM-434 (LAR0-07): port the SLM-308 bounded distance oracle (EXACT/BOUNDED/UNKNOWN cost-to-go over SLM-299 canonical fingerprints, training-time only, never reachable from decode) from unmerged branch commit ae5448c5 onto main's evolved edit space (SLM-425 N_ACTIONS=12 / SLM-426 pack-owned actions); dependencies (_canonical_key/_check_invariants/_enumerate_children/_normalize_inventory) verified signature-compatible with main's slm299_edit_reachability." } ] + }, + "harness.experiments.slm418_dsh5_10_disposition": { + "version": "v1", + "kind": "harness", + "paths": [ + "docs/design/iter-slm418-dsh5-10-disposition-20260727.json", + "docs/design/iter-slm418-dsh5-10-disposition-20260727.md" + ], + "history": [ + { + "version": "v1", + "date": "2026-07-27", + "note": "SLM-418 (DSH5-10): final issue-level disposition. Publishes OperatorEventMemoryReportV1-style final report + disposition invoking the issue's own falsification/stop rule: fixture-scale ablation (8 sessions, 40 rows, 25 context-view x turn-depth cells) showed no held-out benefit over the current_state_only baseline (ceiling 1.0 everywhere), so the conversation event DAG is retained for runtime/evaluation only and no preference training complexity is added. Successor conditions (real argument-bound corpus build showing benefit over derived_only baselines, per the VAR3-04/05 pattern) are recorded for re-opening." + } + ] } } }