What to build
Add the two secondary reporting surfaces that reuse the explain engine from the keystone (#10):
- A verbosity/explain flag on
hammerkit run that, when a task executes due to a cache miss, prints the miss cause and the changed input inline alongside the task's start — so cache-trust questions are answered during an ordinary run, not only via a separate command.
hammerkit explain [task] --json emitting valid JSON with one entry per task carrying its predicted status and, for misses, the cause category and changed identifier — for CI gating/annotation.
Both consume the engine and persisted last-resolved record from the keystone; neither alters the cache hit/miss decision. Output routes through the Environment (no console.*).
References: specs/cache-explain/spec.md (US2 FR-005, US3 FR-006).
Acceptance criteria
Blocked by
What to build
Add the two secondary reporting surfaces that reuse the explain engine from the keystone (#10):
hammerkit runthat, when a task executes due to a cache miss, prints the miss cause and the changed input inline alongside the task's start — so cache-trust questions are answered during an ordinary run, not only via a separate command.hammerkit explain [task] --jsonemitting valid JSON with one entry per task carrying its predicted status and, for misses, the cause category and changed identifier — for CI gating/annotation.Both consume the engine and persisted last-resolved record from the keystone; neither alters the cache hit/miss decision. Output routes through the
Environment(noconsole.*).References:
specs/cache-explain/spec.md(US2 FR-005, US3 FR-006).Acceptance criteria
hammerkit explain <task> --jsonemits valid JSON listing each task's predicted status and, for misses, cause category + changed identifier.Environment.Blocked by
hammerkit explaincommand (keystone) #10 (cache-explain engine +explaincommand)