Skip to content

feat: SLM-446/447/449/450/451/452/453/455/456 — 9 slm-training issues (VCE/PCT/SRP/SGS) - #1494

Open
Tyler-R-Kendrick wants to merge 9 commits into
mainfrom
claude/inspiring-franklin-o7mjlq
Open

feat: SLM-446/447/449/450/451/452/453/455/456 — 9 slm-training issues (VCE/PCT/SRP/SGS)#1494
Tyler-R-Kendrick wants to merge 9 commits into
mainfrom
claude/inspiring-franklin-o7mjlq

Conversation

@Tyler-R-Kendrick

@Tyler-R-Kendrick Tyler-R-Kendrick commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Summary

Nine related Linear issues from the slm-training team, all landed on this session's single designated branch (extends the same PR rather than opening additional ones, per this session's branch policy).

SLM-446 (VCE-002) — Unify repair residuals with existing SemanticRepairRecordV1 and conflict slices

RepairResidualV1/project_repair_residual in harnesses/distill/semantic_repair.py.

SLM-447 (VCE-004) — Promote existing PlanOracleSubstitutor into a full factor-wise intervention harness

PlanInterventionRecordV1/apply_plan_intervention in data/semantic_plan/oracle.py.

SLM-449 (PCT-002) — Add hermetic replay traces and an optional observability sink

ReplayBundleV1/build_replay_bundle in new runtime/telemetry/replay_bundle.py.

SLM-450 (PCT-003) — Implement an honest end-to-end cold and warm benchmark harness

BenchTrialV1/run_cold_trial/run_warm_trial in new harnesses/model_build/cold_warm_bench.py.

SLM-451 (PCT-005) — Prove OpenUI artifact byte, digest, decision, and tamper parity through the provider seam

New tests/test_dsl/test_completion_artifact_provider_parity.py.

SLM-452 (PCT-007) — Add mechanism activation, choice-change, and disposition telemetry

MechanismActivationV1/build_mechanism_activation added directly to models/decode_stats.py.

SLM-453 (SRP-002) — Implement typed symbolic-expression IR, grammar, codec, and symbol-only contract

New dsl/symbolic_expr_ir.py: typed AST + deterministic structural codec for the symbolic-regression pack.

SLM-455 (SGS-008) — Add fail-closed SyGuS/SemGuS capability reports and conformance fixtures

New data/progspec/synthesis_capability_report.py: classifies every requirement-bearing element of a VerifiedSynthesisProblemV1 as representable/non-representable/extension-required, never silently dropped.

SLM-456 (SGS-009) — Generate mechanism disposition and stale-evidence supersession reports

New harnesses/experiments/mechanism_disposition_report.py: MechanismDispositionRecordV1/MechanismDispositionReportV1/SupersessionEntryV1, generalizing the SLM-160/SPV4-02 SPVMechanismDisposition narrative precedent into reusable code for any mechanism (reuses that module's Disposition enum directly). This is the canonical EVIDENCE_CLASSES registry PCT-007 named as still-Backlog. Fails closed on both acceptance criteria: adopt_primary/adopt_optional requires measured evidence + non-empty activation evidence, and evidence_class="fixture" can never pair with default_state="on". Supersession is a pure append-only pointer between same-mechanism records — a superseded record is never rewritten or removed, only linked, so negative/null results stay visible. Ships the reusable schema/generator proven against a fixture matrix (the issue's own validation ask), not a completed audit of every real mechanism in the current backlog — documented as follow-on work.

All nine extend or newly register their ownership_map.json owners — no undocumented registries or authorities introduced. SLM-448 (VCE-006) was scoped but returned to Backlog with a documented comment. SLM-454 (SGS-006) was already completed by a separate session before this PR started.

Test plan

  • pytest tests/test_harnesses/distill/test_semantic_repair.py — 20 passed
  • pytest tests/test_data/test_semantic_plan_extraction/test_oracle.py — 16 passed
  • pytest tests/test_runtime/test_replay_bundle.py — 11 passed
  • pytest tests/test_harnesses/model_build/test_cold_warm_bench.py — 11 passed
  • pytest tests/test_dsl/test_completion_artifact_provider_parity.py — 14 passed
  • pytest tests/test_models/test_decode_stats.py — 34 passed
  • pytest tests/test_dsl/test_symbolic_expr_ir.py tests/test_dsl/test_symbolic_regression_pack.py — 60 passed
  • pytest tests/test_data/test_progspec/ (full dir) — 132 passed
  • pytest tests/test_harnesses/experiments/test_mechanism_disposition_report.py tests/test_harnesses/experiments/test_slm160_spv_disposition.py — 32 passed
  • pytest tests/test_dsl/test_operator_registry.py tests/test_dsl/test_completion_artifact.py tests/test_dsl/test_completion_artifact_provider.py tests/test_dsl/test_static_control_domain.py — all green
  • pytest tests/test_runtime_trace.py tests/test_dsl/test_solver_replay.py tests/test_evals/test_semantic_failure.py — all green
  • pytest tests/test_harnesses/distill (full suite) — 187 passed, 4 pre-existing failures unrelated to this change
  • python -m scripts.verify_version_stamps --check — ok
  • python -m scripts.verify_ownership_map — ok
  • python -m scripts.refresh_test_cases --check --changed — no fixture drift
  • ruff check on changed files — clean

🤖 Generated with Claude Code

https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg

…E-002)

Add RepairResidualV1, a pure/stateless projection of the existing
SemanticRepairRecordV1/ConflictSlice into an advisory residual-obligation
view (unsatisfied obligations, conflict slice/completeness, protected
regions, legal repair-action domain, witness/source ids, tamper-evident
residual_hash), optionally reconciling VCE-001's VerifierWitnessV1
unresolved localizations as additional obligations without ever
fabricating legal edits, converting UNKNOWN to failure, or letting
HEURISTIC evidence authorize repair. Extends the existing semantic_repair
owner per the pre-registered ownership-map decision instead of adding a
competing registry.

Closes SLM-446.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@vercel

vercel Bot commented Aug 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
slm-training Ready Ready Preview Aug 8, 2026 6:44am

Request Review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@Tyler-R-Kendrick, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7923f73b-359e-4bb3-b098-bc0247dd7da9

📥 Commits

Reviewing files that changed from the base of the PR and between b12eb2c and b57a49e.

📒 Files selected for processing (20)
  • docs/design/repository-ownership-map.md
  • src/slm_training/data/progspec/synthesis_capability_report.py
  • src/slm_training/data/semantic_plan/__init__.py
  • src/slm_training/data/semantic_plan/oracle.py
  • src/slm_training/dsl/symbolic_expr_ir.py
  • src/slm_training/harnesses/distill/semantic_repair.py
  • src/slm_training/harnesses/model_build/cold_warm_bench.py
  • src/slm_training/models/decode_stats.py
  • src/slm_training/resources/ownership_map.json
  • src/slm_training/resources/versions.json
  • src/slm_training/runtime/telemetry/__init__.py
  • src/slm_training/runtime/telemetry/replay_bundle.py
  • tests/test_data/test_progspec/test_synthesis_capability_report.py
  • tests/test_data/test_semantic_plan_extraction/test_oracle.py
  • tests/test_dsl/test_completion_artifact_provider_parity.py
  • tests/test_dsl/test_symbolic_expr_ir.py
  • tests/test_harnesses/distill/test_semantic_repair.py
  • tests/test_harnesses/model_build/test_cold_warm_bench.py
  • tests/test_models/test_decode_stats.py
  • tests/test_runtime/test_replay_bundle.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…tion harness (VCE-004)

Add PlanInterventionRecordV1/apply_plan_intervention to
src/slm_training/data/semantic_plan/oracle.py -- an immutable, replayable
paired baseline/intervention observation over the existing
PlanOracleSubstitutor: before/after plan hashes, the declared-vs-observed
changed-factor set (proving an intervention never touches an undeclared
factor), a frozen per-comparison identity (model/request/candidate-budget/
search-budget/seed/verifier/hardware), and caller-supplied downstream
decision/quality/compute evidence. filter_manifest_safe excludes
contamination-bannered records from any manifest -- documented and tested
against the gap where apply() intentionally never overwrites plan
identity, so a mutated plan's own is_oracle_only cannot be trusted as the
contamination signal.

Extends the existing plan_oracle_substitutor owner per the pre-registered
ownership-map decision instead of adding a competing intervention
registry.

Closes SLM-447.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat(distill): unify repair residuals with SemanticRepairRecordV1 (VCE-002) feat: SLM-446 repair residuals + SLM-447 plan intervention harness (VCE-002, VCE-004) Aug 8, 2026
…PCT-002)

Add ReplayBundleV1/build_replay_bundle to a new
src/slm_training/runtime/telemetry/replay_bundle.py, composing evidence
this repo already owns -- DecodeIdentityV1 (models/decode_stats.py) and
solver_replay_violations (dsl/solver/replay.py) -- into a compact,
content-bound, tamper-evident envelope: request identity, seed, frozen
model/checkpoint/evaluator identity, the discrete decoder-choice sequence,
legal-domain size/status/digest, redacted artifact state and final
evidence, and an explicit replayable/non_replayable_reasons fail-closed
verdict.

Pure and stateless -- never touches telemetry state, so observability
bound or not can never change a bundle for identical inputs.
mirror_bundle_best_effort is an optional sink call that never raises
(mirrors the existing OTLP-mirror contract in runtime/telemetry/trace.py),
and persistence reuses whatever append-only store the caller already has
via a minimal duck-typed ReplayBundleStore protocol rather than opening a
new one.

Extends the pre-registered runtime_telemetry + solver_replay owners
(ownership_map.json downstream_extension_map row for PCT-002); introduces
no new decode/verifier authority and no competing trace store.

Closes SLM-449.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446 repair residuals + SLM-447 plan intervention harness (VCE-002, VCE-004) feat: SLM-446/447/449 repair residuals, plan intervention, replay bundles (VCE-002, VCE-004, PCT-002) Aug 8, 2026
Add src/slm_training/harnesses/model_build/cold_warm_bench.py:
BenchTrialV1/run_cold_trial/run_warm_trial/summarize_trials. A cold trial
always spawns a real fresh subprocess (never simulated by clearing
caches in-process) and reads back phase markers the child process emits
via phase_marker(); a warm trial runs an in-process callable and is
labeled steady_state so it can never blend into cold numbers. Reuses the
existing MEASUREMENT_STAGES/COMPLETENESS_STATES taxonomy from
models/decode_stats.py rather than inventing a second one. A subprocess
timeout or non-zero exit records partial_timeout/aborted -- never
complete -- and summarize_trials excludes incomplete trials from any
percentile. Hardware/runtime identity (HardwareIdentityV1) is captured
and persisted on every trial, and control vs. artifact-enabled arms are
kept in separate summary buckets by config_hash so mismatched configs
are never silently averaged together. Extends the existing bench_*
script family and the decode_telemetry owner; introduces no second
telemetry authority.

Closes SLM-450.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446/447/449 repair residuals, plan intervention, replay bundles (VCE-002, VCE-004, PCT-002) feat: SLM-446/447/449/450 repair residuals, plan intervention, replay bundles, cold/warm bench (VCE-002, VCE-004, PCT-002, PCT-003) Aug 8, 2026
…provider seam (PCT-005)

Add tests/test_dsl/test_completion_artifact_provider_parity.py, a
differential/tamper matrix proving StaticCompletionArtifactProvider
.load_checked (PCT-004) is byte/digest/decision-identical to the direct
load_checked_completion_artifact path it delegates to:

- manifest, direct_map, digest, and full StaticLalrAdapter equality
  between the old and provider-mediated paths
- every-prefix accepts() parity (via adapter structural equality)
- checkpoint artifact-binding identity matches through the provider
- dynamic runtime/scope facts stay absent from the provider payload
- every corruption class -- byte-flipped artifact, stale grammar,
  unsupported manifest/metadata schema, tokenizer row shape abuse, and
  tampered rule_origins/rule_lengths/state_min_terminals -- fails closed
  identically through the provider seam (never a partial/degraded
  CompletionArtifact), with the exact live-construction fallback proven
  to remain available and correct

test_completion_artifact.py already proved most of these vectors through
the old direct path only; this closes the "through the provider seam"
gap PCT-005 asks for without duplicating existing coverage.

Closes SLM-451.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446/447/449/450 repair residuals, plan intervention, replay bundles, cold/warm bench (VCE-002, VCE-004, PCT-002, PCT-003) feat: SLM-446/447/449/450/451 repair residuals, plan intervention, replay bundles, cold/warm bench, artifact parity (VCE-002/004, PCT-002/003/005) Aug 8, 2026
…-007)

Add MechanismActivationV1/build_mechanism_activation directly to
src/slm_training/models/decode_stats.py: a common eligible/invoked/
abstained/no_op/changed_top_choice/changed_final_program/forwards/
verified_states/verifier_calls/wall_ms/failure_reason envelope any
optional semantic/search/repair/controller mechanism can emit.

build_mechanism_activation fails closed on internally inconsistent
claims -- an ineligible mechanism cannot be invoked, invoked and
abstained are mutually exclusive, and a choice-change claim requires
invoked=True and no_op=False -- the concrete guard against representing
a wired-but-never-active mechanism as a successful intervention.

evidence_class/default_state stay caller-declared advisory fields
(MECHANISM_EVIDENCE_CLASSES is an illustrative, non-exhaustive set) since
no single canonical disposition enum spanning fixture/measured/
promotable/rejected/blocked exists yet -- SGS-009 (SLM-456) is still
Backlog, and the only real precedent today is the duplicated per-experiment
Disposition enum pattern in slm160/228/236_*_disposition.py. This does not
fabricate that registry ahead of SGS-009; it stays a pure, additive
telemetry record extending the existing decode_telemetry owner.

Closes SLM-452.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446/447/449/450/451 repair residuals, plan intervention, replay bundles, cold/warm bench, artifact parity (VCE-002/004, PCT-002/003/005) feat: SLM-446/447/449/450/451/452 — VCE-002/004, PCT-002/003/005/007 Aug 8, 2026
…(SRP-002)

Add src/slm_training/dsl/symbolic_expr_ir.py: a real typed AST for the
symbolic-regression pack (VarRef/CoefficientHole/OpApply) plus a
deterministic canonical structural codec (serialize_expr/parse_expr),
superseding the untyped dict-shaped expression tree in
symbolic_regression_pack.py. The Lark surface grammar SRP-001 registered
stays as input-surface syntax; this module owns the canonical structural
form.

Symbol-only by construction: variables are referenced by an opaque index
into the problem's variable tuple, never by name, and coefficients are
referenced by an opaque index only -- no free numeric literal or string
can ever appear in the structural codec's output, and the token grammar
makes this a parser-enforced guarantee, not a convention. This makes the
codec alpha-renaming safe for free: renaming the underlying problem's
variable names never changes a byte of the serialized form, since names
never enter the IR.

parse_expr/parse_problem_expr take the authorized operator set from the
active problem contract (never a hardcoded default) and fail closed on
depth/node budget overrun, unknown/unauthorized operators, wrong arity,
and any malformed or smuggled token. validate_expr_budget extends the
same budget guarantee to directly-constructed trees.

Registers a new 'symbolic_expr_ir' ownership-map subsystem per the
pre-registered SRP-002 downstream_extension_map row (new_owner_justified:
true, layered under output_contract's symbol-only policy, does not fork
OUTPUT_CONTRACT_VERSION or reuse production_codec's OpenUI-specific
encode/decode logic).

Closes SLM-453.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446/447/449/450/451/452 — VCE-002/004, PCT-002/003/005/007 feat: SLM-446/447/449/450/451/452/453 — VCE-002/004, PCT-002/003/005/007, SRP-002 Aug 8, 2026
Add src/slm_training/data/progspec/synthesis_capability_report.py:
SyGuSCapabilityReportV1/build_sygus_capability_report classify every
requirement-bearing element of a VerifiedSynthesisProblemV1 (runtime
symbols, verification requirements, prompt-side facts/ambiguity groups,
objective terms, search budget, evidence provenance) as representable,
non_representable, or extension_required -- never silently dropped.

Fidelity boundary kept narrow and demonstrable: a runtime symbol's
existence/name is representable as an opaque SMT-LIB String-sorted
declaration; a symbolic_regression pack's finite operator vocabulary
(dsl/symbolic_expr_ir.py, SRP-002) is representable as a synth-fun
grammar that mirrors its BINARY_OPERATORS/UNARY_OPERATORS exactly.
Everything else -- this repo's own verifier gate/evaluator identities,
prompt ambiguity/preference semantics, multi-objective optimization,
resource budgets, provenance metadata -- has no SyGuS-IF equivalent and
is reported with a typed status + reason, reusing the same idiom
dsl/grammar_capabilities.py's UnsupportedCapabilityV1 already uses.

No solver dependency is introduced and no external solver is ever
called, so nothing here can widen exact compiler support. The emitted
sygus_program is explicitly inspired-interoperability, not standards
conformance (no (check-synth), no example-table constraints) --
conformance/conformance_note make that distinction machine-readable.

Round-trip fixtures cover both required fragments: a finite
symbolic-regression grammar and a restricted OpenUI symbol-existence
fragment.

Registers a new 'sygus_capability_report' ownership-map subsystem;
the pre-registered SGS-008 downstream-extension row predicted extending
dsl_pack_registry_canonical/completion_domain directly, but the
implementation is a small self-contained module over the
verified_synthesis_problem envelope instead -- documented as a
deliberate divergence in the new subsystem's notes.

Closes SLM-455.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446/447/449/450/451/452/453 — VCE-002/004, PCT-002/003/005/007, SRP-002 feat: SLM-446/447/449/450/451/452/453/455 — VCE-002/004, PCT-002/003/005/007, SRP-002, SGS-008 Aug 8, 2026
… (SGS-009)

Add src/slm_training/harnesses/experiments/mechanism_disposition_report.py:
MechanismDispositionRecordV1/MechanismDispositionReportV1/SupersessionEntryV1,
generalizing the SLM-160/SPV4-02 SPVMechanismDisposition narrative
precedent into reusable code for any mechanism, not just the SPV family.
Reuses that module's Disposition enum directly instead of redefining the
same seven values a second time.

This is the canonical EVIDENCE_CLASSES registry PCT-007 (decode_stats.py's
MECHANISM_EVIDENCE_CLASSES) named as still-Backlog when it stayed a
caller-declared advisory field instead of a closed registry.

build_mechanism_disposition_record fails closed on both acceptance
criteria: adopt_primary/adopt_optional requires evidence_class in
{measured,promotable,ship} plus non-empty activation_evidence -- a
wired-but-unmeasured mechanism can never be recorded as adopted -- and
evidence_class='fixture' can never pair with default_state='on', so
fixture-only results can never promote a default/checkpoint.
append_supersession is a pure, append-only function linking two
same-mechanism_id records; the superseded record is never rewritten or
removed from a report, only pointed at, so negative/null results stay
linked and visible. build_disposition_report/to_markdown prove the
closeout-from-structured-records capability the issue asks for.

Scope note: ships the reusable schema/validation/generator proven against
the issue's own fixture-matrix validation ask (known positive/null/
blocked mechanisms), not a completed audit of every real mechanism across
the current SGS/VCE/PCT/SRP/SIE/RSP backlog -- that data-entry pass is
follow-on work, mirroring how SLM-160's own audit was a separate pass
from building its harness.

Closes SLM-456.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fssz1GjfLHoUSeZuP1K3zg
@Tyler-R-Kendrick Tyler-R-Kendrick changed the title feat: SLM-446/447/449/450/451/452/453/455 — VCE-002/004, PCT-002/003/005/007, SRP-002, SGS-008 feat: SLM-446/447/449/450/451/452/453/455/456 — 9 slm-training issues (VCE/PCT/SRP/SGS) Aug 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants