Skip to content
26 changes: 26 additions & 0 deletions docs/design/iter-slm255-lot3-02-not-authorized-20260725.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"contract_hash": "f7de49d6dafc7c7ae46f0b628f6428840dfde7c51ebd209fd7c44cac98df0e92",
"contract_id": "alternative-valid-latent-gate-v1",
"issue": {
"activation_requirement": "SLM-249 provides accepted targets and deterministic trace canonicalization; SLM-253 provides the selected token/structured/set-valued readout contract; and SLM-254 establishes at least one valid causal factor/intervention encoding or explicitly authorizes a bounded neighborhood diagnostic.",
"alias": "LOT3-02",
"gate_contract_id": "alternative-valid-latent-gate-v1",
"linear_issue": "SLM-255",
"slug": "lot3-02-alternative-valid-latents",
"title": "Learn and intervene on alternative-valid compiler-trace neighborhoods without single-reference collapse"
},
"lot1_01_disposition": "not_authorized",
"lot1_02_disposition": "not_authorized",
"schema_version": "lot_downstream_gate/v1",
"verdict": "not_authorized",
"verdict_rationale": "LOT3-02 (SLM-255) activation requires: SLM-249 provides accepted targets and deterministic trace canonicalization; SLM-253 provides the selected token/structured/set-valued readout contract; and SLM-254 establishes at least one valid causal factor/intervention encoding or explicitly authorizes a bounded neighborhood diagnostic. The LOT1-02 launch gate reports 'not_authorized' (LOT1-01 disposition 'not_authorized'): no faithful K x c model path, curriculum, Stage 0 parent, or continued-explicit control exists, and SLM-249's oracle ceiling is not positive. Closing not_authorized in plan-only/bounded-diagnostic mode; no training, factorial, intervention, or systems code is added by this disposition.",
"version_stamp": {
"code_commit": "28330a952fdda30dadad5696da357e4090ab0675",
"code_dirty": true,
"components": {
"harness.experiments": "v114"
},
"stamp_schema": "version_stamp/v1",
"stamped_at": "2026-07-25T16:14:30.946681+00:00"
}
}
15 changes: 15 additions & 0 deletions docs/design/iter-slm255-lot3-02-not-authorized-20260725.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# SLM-255 LOT3-02 — Downstream-gate disposition (alternative-valid-latent-gate-v1)

Verdict: **not_authorized**

LOT3-02 (SLM-255) activation requires: SLM-249 provides accepted targets and deterministic trace canonicalization; SLM-253 provides the selected token/structured/set-valued readout contract; and SLM-254 establishes at least one valid causal factor/intervention encoding or explicitly authorizes a bounded neighborhood diagnostic. The LOT1-02 launch gate reports 'not_authorized' (LOT1-01 disposition 'not_authorized'): no faithful K x c model path, curriculum, Stage 0 parent, or continued-explicit control exists, and SLM-249's oracle ceiling is not positive. Closing not_authorized in plan-only/bounded-diagnostic mode; no training, factorial, intervention, or systems code is added by this disposition.

## Upstream chain

- LOT1-02 launch gate (SLM-251): `not_authorized`
- LOT1-01 activation gate (SLM-250): `not_authorized`
- Activation requirement: SLM-249 provides accepted targets and deterministic trace canonicalization; SLM-253 provides the selected token/structured/set-valued readout contract; and SLM-254 establishes at least one valid causal factor/intervention encoding or explicitly authorizes a bounded neighborhood diagnostic.

## Non-goals honored

No training campaign, factorial, readout/decoder, intervention, systems measurement, or production default change. This disposition is itself the deliverable while the upstream activation gate is unmet.
15 changes: 15 additions & 0 deletions src/slm_training/harnesses/experiments/lot_downstream_gate.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,21 @@ def to_dict(self) -> dict[str, Any]:
"gold/oracle trace substitution ceiling is nonzero."
),
),
"SLM-255": DownstreamIssueSpec(
linear_issue="SLM-255",
alias="LOT3-02",
title="Learn and intervene on alternative-valid compiler-trace neighborhoods without single-reference collapse",
gate_contract_id="alternative-valid-latent-gate-v1",
slug="lot3-02-alternative-valid-latents",
activation_requirement=(
"SLM-249 provides accepted targets and deterministic trace "
"canonicalization; SLM-253 provides the selected "
"token/structured/set-valued readout contract; and SLM-254 "
"establishes at least one valid causal factor/intervention "
"encoding or explicitly authorizes a bounded neighborhood "
"diagnostic."
),
),
}


Expand Down
25 changes: 21 additions & 4 deletions src/slm_training/resources/versions.json
Original file line number Diff line number Diff line change
Expand Up @@ -1912,7 +1912,7 @@
]
},
"harness.experiments": {
"version": "v120",
"version": "v121",
"kind": "harness",
"paths": [
"scripts/run_slm298_capacity_context_curriculum.py",
Expand All @@ -1921,6 +1921,11 @@
"tests/test_scripts/test_run_slm298_capacity_context_curriculum.py"
],
"history": [
{
"version": "v121",
"date": "2026-07-25",
"note": "register SLM-255 LOT3-02 in the LOT downstream gate registry; closes not_authorized off the unmet LOT1/LOT2 chain"
},
{
"version": "v120",
"date": "2026-07-25",
Expand Down Expand Up @@ -1991,6 +1996,11 @@
"date": "2026-07-25",
"note": "add SLM-300 AP-015 self-context exposure-bias curriculum manifest, policy-origin-mixture wiring/fixture harness, and mixture-zero legacy-equivalence invariant"
},
{
"version": "v114",
"date": "2026-07-25",
"note": "register SLM-255 LOT3-02 in the LOT downstream gate registry; closes not_authorized off the unmet LOT1/LOT2 chain"
},
{
"version": "v113",
"date": "2026-07-25",
Expand Down Expand Up @@ -9816,7 +9826,7 @@
]
},
"harness.experiments.lot_downstream_gate": {
"version": "v3",
"version": "v4",
"kind": "gate",
"paths": [
"docs/design/iter-slm252-lot2-01-not-authorized-20260725.json",
Expand All @@ -9825,16 +9835,23 @@
"docs/design/iter-slm253-lot2-02-not-authorized-20260725.md",
"docs/design/iter-slm254-lot3-01-not-authorized-20260725.json",
"docs/design/iter-slm254-lot3-01-not-authorized-20260725.md",
"docs/design/iter-slm255-lot3-02-not-authorized-20260725.json",
"docs/design/iter-slm255-lot3-02-not-authorized-20260725.md",
"scripts/evaluate_lot_downstream_gate.py",
"src/slm_training/harnesses/experiments/lot_downstream_gate.py",
"tests/test_harnesses/experiments/test_lot_downstream_gate.py",
"tests/test_scripts/test_evaluate_lot_downstream_gate.py"
],
"history": [
{
"version": "v3",
"version": "v4",
"date": "2026-07-25",
"note": "add SLM-254 LOT3-01 registry entry + not_authorized iter docs (causal-latent-use-gate-v1)"
"note": "add SLM-255 LOT3-02 registry entry + not_authorized iter docs (alternative-valid-latent-gate-v1)"
},
{
"version": "v4",
"date": "2026-07-25",
"note": "add SLM-255 LOT3-02 registry entry + not_authorized iter docs (alternative-valid-latent-gate-v1)"
},
{
"version": "v3",
Expand Down
11 changes: 11 additions & 0 deletions tests/test_harnesses/experiments/test_lot_downstream_gate.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,3 +121,14 @@ def test_slm254_real_contracts_are_not_authorized() -> None:

assert contract.verdict == NOT_AUTHORIZED
assert contract.contract_id == "causal-latent-use-gate-v1"


def test_slm255_real_contracts_are_not_authorized() -> None:
"""LOT3-02 requires SLM-254's valid intervention encoding; with the
LOT1/LOT2 chain unmet there is no latent neighborhood to interpret.
"""
fidelity, trace = _real_contracts()
contract = evaluate_downstream_gate(DOWNSTREAM_ISSUES["SLM-255"], fidelity, trace)

assert contract.verdict == NOT_AUTHORIZED
assert contract.contract_id == "alternative-valid-latent-gate-v1"
9 changes: 9 additions & 0 deletions tests/test_scripts/test_evaluate_lot_downstream_gate.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,12 @@ def test_slm254_run_reports_not_authorized(tmp_path: Path) -> None:
data = json.loads((out / "lot3_01_causal_latent_use_gate.json").read_text())
assert data["verdict"] == "not_authorized"
assert data["issue"]["alias"] == "LOT3-01"


def test_slm255_run_reports_not_authorized(tmp_path: Path) -> None:
out = tmp_path / "gate255"
rc = evaluate_lot_downstream_gate.main(["--issue", "SLM-255", "--out", str(out)])
assert rc == 0
data = json.loads((out / "lot3_02_alternative_valid_latents_gate.json").read_text())
assert data["verdict"] == "not_authorized"
assert data["issue"]["alias"] == "LOT3-02"
Loading