Actionable GitHub‑issue backlog for the CommitLLM × LeWorldModel pivot. Companion to roadmap.md (plan) and specs.md (spec).
Conventions. Each issue: ID — Title · area label · size (S ≤ 0.5d, M ≈ 1–2d,
L ≈ 3–5d) · deps: blocking issues. Area labels reuse the existing scheme:
area:core, area:export, area:prover, area:verifier, area:testing,
area:ci, area:docs, area:security, area:planner. Acceptance criteria are
the merge gate. Keep files small and focused (no thousand‑line modules).
Legend for status of pre‑pivot work: [reuse] keep as‑is · [adapt] modify · [remove] delete · [new] create.
Goal: a clean, building, stable‑toolchain 5‑crate skeleton with the STARK backend removed and the new corpus in place. No proofs yet.
-
P-001 — Branch & archive legacy STARK corpus · area:docs · S
git mvSTARK‑specific RFCs (range‑check, tensor‑memory AIR, linear/matmul AIR, nonlinear AIR, predictor AIR, rollout AIR, planner AIR, CEM AIR, encoder AIR, recursion, vendoring) and the AIR sections of the spec docs todocs/legacy-stark/. Add adocs/legacy-stark/README.mdexplaining they are superseded by specs.md.- AC: nothing deleted (moved only);
docs/legacy-stark/builds in link‑check; top‑level docs reference the new corpus. - deps: —
-
P-002 — Remove AIR & circuits crates · area:core · S ·
[remove]- Delete
crates/pwm-air,crates/pwm-circuits; drop fromCargo.tomlmembers and[workspace.dependencies]. - AC: workspace resolves without them; no first‑party crate references them.
- deps: P-004
- Delete
-
P-003 — Remove vendored Stwo & stwo‑circuits · area:core · S ·
[remove]- Delete
third_party/stwo,third_party/stwo-circuits; removestwofrom[workspace.dependencies]; updatethird_party/INVENTORY.md/README.md. - AC: no
stwo/stwo-circuitspath or dep anywhere;cargo metadataclean. - deps: P-004, P-005
- Delete
-
P-004 — Switch to stable toolchain · area:ci · S ·
[adapt]- Replace
rust-toolchain.tomlnightly pin with a stable channel pin; bumpworkspace.package.rust-versionMSRV; remove nightly‑only flags. - AC:
cargo +stable buildsucceeds for all remaining crates. - deps: P-002, P-003
- Replace
-
P-005 — De‑Stwo
pwm-core::field· area:core · M ·[adapt]- Replace the M31/QM31 re‑export from Stwo with a native M31 implementation
(centered encoding helpers unchanged) so
pwm-corehas zero proving deps. Add the audit fieldFp61(p = 2⁶¹−1, Mersenne) used by Freivalds. - AC:
pwm-corecargo treeshows nostwo;no_stdbuild passes; existingfield/fixed_pointtests pass against native M31. - deps: —
- Replace the M31/QM31 re‑export from Stwo with a native M31 implementation
(centered encoding helpers unchanged) so
-
P-006 — Update workspace manifest & lints · area:ci · S ·
[adapt]members = 5 crates; remove vendored exclude; keep lints/profiles; blake2 stays.- AC:
cargo build/clippy/fmtgreen on the 5‑crate workspace. - deps: P-002, P-003
-
P-007 — Rewrite README & SPEC pointers · area:docs · S ·
[adapt]- Point README/SPEC to roadmap/specs/backlog; update the crate table and the "what it is" section to commit‑and‑audit.
- AC: links resolve; no STARK/Stwo claims remain in top‑level docs.
- deps: P-001
-
P-008 — Prune CI of AIR/Stwo gates · area:ci · S ·
[adapt]- Remove AIR/LogUp/Stwo‑specific CI steps; keep SPDX, changelog, links, fmt, clippy, deny. Add the new gates as stubs (filled in M7).
- AC: CI passes on the scaffold.
- deps: P-004, P-006
Goal: the shared,
no_std, float‑free primitives the prover and verifier both use.
-
C-101 —
pwm-core::freivalds· area:core · M ·[new]precompute_v(r: &[Fp61], weight: &[i8], rows, cols) -> Vec<Fp61>andcheck(v, x, r, z) -> booloverFp61; int8/int16x, i32z. Port from CommitLLMverilm-core::freivaldsinto our types.no_std.- AC: unit tests (identity, negative weights, wrong‑z reject) pass; property
test: random
W,x→checktrue iffz == Wx. - deps: P-005
-
C-102 — Freivalds challenge derivation · area:core · S ·
[new]- Derive
rvectors (one per weighttensor_id) from the Fiat‑Shamir transcript aftertrace_root; deterministic, documented channel order. - AC: prover and verifier derive identical
r; reorder → differentr. - deps: C-101, [reuse] transcript
- Derive
-
C-103 —
pwm-core::tracedata model · area:core · M ·[new]- The
OpRecordenum and tensor/accumulator reference types (§5), canonical encodings viaCanonicalEncode. Pure data,no_std. Keep per‑variant structs in small submodules. - AC: round‑trip canonical bytes; golden encoding vectors stable.
- deps: [reuse] serialize, tensor
- The
-
C-104 — Trace Merkle commitment · area:core · S ·
[adapt]trace_rootover trace leaves reusingcommit.rsMerkle (selective‑open friendly leaf layout). Merkle inclusion proof + verify.- AC: root stable; valid proof verifies; tampered leaf/proof rejected.
- deps: C-103, [reuse] commit
-
C-105 — Extend commitments for the new artifact · area:core · S ·
[adapt]- Add
trace_rootto the binding/commitment set; keepModelBinding/QuantBinding/PlannerBindingas‑is. - AC: mutating any bound field changes the digest; commitment tests pass.
- deps: C-104
- Add
-
C-106 — Limb accumulator review for Freivalds field · area:core · S ·
[adapt]- Ensure accumulator bounds and limb decomposition are consistent with
Fp61embedding (int32 accumulators fit; limb path documented). - AC: bound‑escape cases produce limb decomposition, not wraparound.
- deps: P-005
- Ensure accumulator bounds and limb decomposition are consistent with
Goal: le‑wm checkpoint → committed quantized manifest + golden vectors; data tuples.
-
E-201 — le‑wm checkpoint ingest · area:export · M ·
[new]- Python: load
JEPAobject /weights.pt+config.json; extract the V0 subgraph (action_encoder,predictor×6 blocks,pred_proj); record shapes/dims. - AC: ingest the reference checkpoint; assert dims (192/3/6/16/64/2048).
- deps: P-004
- Python: load
-
E-202 — Quantization pass · area:export · L ·
[adapt]- int8 weights, int8/int16 activations (per‑tensor), int32 accumulators/biases, pow‑2 scales; per spec §3. Emit per‑op scale ids.
- AC: quantized graph; MAC bounds respected; scales recorded.
- deps: E-201
-
E-203 — BatchNorm folding · area:export · M ·
[new]- Fold
pred_proj(and projector, deferred)BatchNorm1dfrozen stats into the precedingLinear; record provenance. - AC: folded affine ≡ Linear∘BN on golden inputs (within quant); fold is byte‑deterministic.
- deps: E-202
- Fold
-
E-204 — Nonlinear lookup‑table generation · area:export · M ·
[new]- Emit committed integer tables:
gelu_table_v1,silu_table_v1,softmax_table_v1(exp),invsqrt_table_v1; bind underquantization_commitment. - AC: tables committed; table reads reproduce the quantized nonlinearity.
- deps: E-202
- Emit committed integer tables:
-
E-205 — Manifest writer & commitments · area:export · M ·
[adapt]- Write canonical manifest (
ops[], scales, tables, BatchNorm provenance); computemodel_commitment/quantization_commitment; byte‑identical re‑export. - AC: re‑export byte‑identical; commitments stable (SC3).
- deps: E-203, E-204
- Write canonical manifest (
-
E-206 — Rust integer reference inference · area:export · L ·
[new]- Rust path over the exported graph reproducing the quantized ops exactly
(
pwm-core::fixed_point), emitting all activations/accumulators. - AC: Rust ref ≡ golden bit‑for‑bit on the V0 subgraph.
- deps: E-205, [reuse] fixed_point
- Rust path over the exported graph reproducing the quantized ops exactly
(
-
E-207 — Python↔Rust parity gate · area:export/testing · M ·
[new]- Differential: Python quantized ref ≡ Rust ref ≡ golden across seeded inputs.
- AC: parity gate green; any divergence fails CI (SC4).
- deps: E-206
-
E-208 — stable‑worldmodel data adapter · area:export · M ·
[new]- Thin Python:
load_dataset(num_steps=2)→(obs, action, next_obs); encode obs→latent offline; export(z_history, action, z_next), goal latent, and a fixed candidate action set for P2. - AC: produces committed input bundles consumable by the prover.
- deps: E-201
- Thin Python:
-
PR-301 — Reference→trace builder · area:prover · L ·
[new]- Consume the Rust reference activations/accumulators → ordered
OpRecordtrace; assert graph fidelity vs manifestops[](INV‑TRACE‑01). - AC: trace matches manifest op set/order;
GraphMismatchon mismatch. - deps: E-206, C-103
- Consume the Rust reference activations/accumulators → ordered
-
PR-302 — Prover commit & transcript · area:prover · M ·
[new]- Merkle‑commit the trace; absorb the canonical transcript; squeeze
r+ audit selection (full set for V0). - AC:
trace_root+rreproducible; transcript order documented. - deps: PR-301, C-102, C-104
- Merkle‑commit the trace; absorb the canonical transcript; squeeze
-
PR-303 — AuditArtifact assembly & (de)serialize · area:prover/core · M ·
[new]- Build
AuditArtifact { commitments, public_input, openings, claimed_outputs }; canonical binary (de)serialization. - AC: round‑trip stable; artifact self‑contained.
- deps: PR-302, C-105
- Build
-
PR-304 — Prover CLI · area:prover · S ·
[adapt]prove_step|prove_rollout|prove_planningentry points + CLI; load manifest + weights + inputs, emit artifact.- AC: CLI produces a P0 artifact end‑to‑end.
- deps: PR-303
-
V-401 — Verifier skeleton (no_std) · area:verifier · M ·
[new]verify(&AuditArtifact): parse, checkrelation_id, recompute public‑input digest, check commitments +trace_rootMerkle proofs, replay transcript →r.no_std, float‑free.- AC: structural checks pass on a valid artifact; tamper → typed error.
- deps: PR-303, C-102
-
V-402 — Freivalds matmul checks · area:verifier · M ·
[new]- For each
Linearrecord:v = rᵀWfrom committed weights,check(v,x,r,z). - AC: valid matmuls pass; a single wrong accumulator →
FreivaldsCheckFailed. - deps: V-401, C-101
- For each
-
V-403 — Exact replay: requant/elementwise/layernorm · area:verifier · M ·
[new]- Recompute
Requant,Elementwise(add/modulate/gate),LayerNormexactly; range‑check every value. - AC: valid ops pass; mutated remainder/modulation/inv‑std → typed error.
- deps: V-401, [reuse] fixed_point
- Recompute
-
V-404 — Exact replay: attention + nonlinear tables · area:verifier · L ·
[new]- Recompute
AttnScore/AttnApplyinteger dot products; verifySoftmax,Activation(GELU/SiLU) table reads against committed tables. - AC: attention + activations verified exactly; off‑trace prob/activation
rejected (no fake‑
ahole — security test). - deps: V-402, V-403, E-204
- Recompute
-
V-405 — P0 end‑to‑end accept/reject · area:verifier/testing · M ·
[new]- Wire V-402..404 into the P0 relation; accepting + the predictor reject set from the spec.
- AC: P0 proves+verifies; every P0 negative test rejects with the right code.
- deps: V-404, PR-304
-
R-501 — Rollout trace + recurrence check · area:prover/verifier · M ·
[new]- Emit
RolloutSteprecords (le‑wm windowing,history_size=3); verifier checks each step as a P0 step + windowing wiring (INV‑ROLL‑01). - AC: P1 horizon‑5 proves+verifies; mutated intermediate latent rejected.
- deps: V-405
- Emit
-
R-502 — Trajectory commitment · area:core/prover · S ·
[adapt]- Commit the rollout trajectory under
claimed_output_commitment. - AC: trajectory bound; tamper rejected.
- deps: R-501
- Commit the rollout trajectory under
-
PL-601 — Multi‑candidate rollout · area:planner/prover · M ·
[new]- Roll out all
Scommitted candidates (Freivaldsvreused across candidates). - AC: all candidates traced; reuse factor measured.
- deps: R-502
- Roll out all
-
PL-602 — MSE cost check · area:planner/verifier · M ·
[new]cost_s = Σ(z_final,s − goal)²exact/Freivalds; accumulator range‑checked.- AC: costs verified; mutated cost rejected.
- deps: PL-601
-
PL-603 — Argmin + tie‑break check · area:planner/verifier · M ·
[new]selected_cost ≤ cost_s∀s via difference witnesses; smallest‑index tie‑break; allSpresent (no winner‑only proof).- AC: selection verified; lower unselected candidate / wrong index / bad tie‑break each rejected.
- deps: PL-602
-
PL-604 — P2 end‑to‑end (V0 headline) · area:planner · M ·
[new]prove_planning→verifyOk; full negative suite (SC1, SC2).- AC: V0 statement holds end‑to‑end; soundness suite green.
- deps: PL-603
- T-701 — Golden vector corpus · area:testing · M · per‑op + e2e goldens (SC4). deps: E-207
- T-702 — Mutation tests (no dead checks) · area:testing · M · each verifier check load‑bearing. deps: PL-604
- T-703 — Freivalds soundness/fuzz · area:security/testing · M · wrong‑z fuzz;
N/pbound documented; transcript determinism. deps: V-402 - T-704 —
no_std+ float‑free verifier gate · area:ci · S · CI builds verifierno_std, lints out float. deps: V-401 - T-705 — Dependency‑DAG + deny + SPDX gates · area:ci · S · enforce layering (INV‑ARCH‑01/02). deps: P-006
- T-706 — Reproducibility gate · area:ci · S · same inputs → same artifact bytes. deps: PR-303
- T-707 — Spec/threat‑model docs finalize · area:docs/security · M · binding checklist, honesty boundary, the "no attention hole" argument. deps: PL-604
- D-801 — Audit subsampling (sub‑linear verify) · area:verifier · L · sample a subset of instances/steps; statistical coverage flagged (V1). deps: PL-604
- D-802 — Interactive verifier‑secret
rmode · area:security · M · unconditional Freivalds soundness option (V1). deps: V-402 - D-803 — CEM planner proof (P3) · area:planner · L · seeded sampling, clipping, top‑k, distribution updates (V2). deps: PL-604
- D-804 — Pixel encoder proof (P4) · area:export/verifier · XL · ViT‑Tiny/14 encode; Freivalds on patch/linear, exact (or subsampled) attention at
S=256(V3). deps: PL-604 - D-805 — Lean formalization (optional) · area:security · L · formalize Freivalds + argmin checks (mirrors CommitLLM
lean/). deps: V-402, PL-603 - D-806 — Batched/efficient P2 · area:prover · L · batch candidate rollouts at scale (V1). deps: PL-604
P-005 ─► C-101 ─► V-402 ─┐
P-004 ─► E-201 ─► E-206 ─► PR-301 ─► PR-302 ─► V-401 ─► V-405 ─► R-501 ─► PL-601 ─► PL-604 (V0)
E-205 ──┘ C-104 ┘
M0 unblocks everything (stable toolchain + native field). The export reference (E-206) and the Freivalds core (C-101) are the two long poles into the first P0 proof (V-405); the rest composes upward to the V0 headline (PL-604).