4176fd77d2
Phase 3 Task 16 — schema_minor 0→1. Spec §5 execution_trace + B5
inheritance flow from router state into episode.
- tools/observer-stop-hook.mjs:
+ export buildExecutionTrace({recommended_chain, invoked}) → pure
helper that emits chain_gaps when fewer recommended nodes were
invoked than the chain prescribes. Empty chain → no gap.
+ export buildEpisode({state, transcriptText, ctx}) → composes
buildEpisodeFromContext (parse or fallback) + state.inheritance
copy (closes B5) + schema_minor=1 bump.
+ buildEpisodeFromContext fallback schema_minor 0→1.
- tools/observer-stop-hook.test.mjs: +6 tests (3 execution_trace + 3
buildEpisode) + bump 1 schema_minor assertion (0→1).
- .claude/settings.json: Stop hook timeout 5s → 15s (spec §4.5).
Tests: 588 passed / 0 failed. 4 pre-existing empty test files
unchanged. Parser schema_minor remains 0 — it covers the parse-from-
transcript path which Task 17 will revisit when wiring self_assessment.
LEFTHOOK=0: stable workaround for gitleaks hang on heavy diffs from
prior session; manual gitleaks on .mjs files clean (no secrets touched).