Roadmap context: vault plan `plan-20260812-142100-problemspecs-issimo-roadmap` (W4). Extends #64 (run-dir content-addressable identity).
The problem
The ledger's learning keys are `structure_hash × (N-bucket, T-bucket) × goal` (recommendation priors) and `problem_hash` (verdict joins). But `emitSolveStanza` reads those hashes from `result.toml [params]`, which only the Piccolo.Specs `solve_spec` runner stamps — for every script-authored run (vetted/composed/free tiers) the stanza silently no-ops, so the ledger learns nothing from the tier that produces most runs today.
Tasks
Acceptance
- A spec-authored run and a script-authored run of the same problem produce the same `structure_hash` in the ledger; recommendation priors join across tiers.
- Catalog entries carry `pulse_hash`; a warm-start spec referencing a mutated pulse fails validation loudly.
Roadmap context: vault plan `plan-20260812-142100-problemspecs-issimo-roadmap` (W4). Extends #64 (run-dir content-addressable identity).
The problem
The ledger's learning keys are `structure_hash × (N-bucket, T-bucket) × goal` (recommendation priors) and `problem_hash` (verdict joins). But `emitSolveStanza` reads those hashes from `result.toml [params]`, which only the Piccolo.Specs `solve_spec` runner stamps — for every script-authored run (vetted/composed/free tiers) the stanza silently no-ops, so the ledger learns nothing from the tier that produces most runs today.
Tasks
Acceptance