Working notes for in-flight work in core. The ## Deviations section is read by
scripts/hooks/deviation-log.mjs (Stop hook) — see adr:harness-loop-instrumentation.
Log the gap between plan and reality, not routine choices the plan already covered. The count is a discovery rate, never a defect rate: more entries is better.
- Plan specified registering the harnesses in
decisions/loops/loops.mdwithtrigger: harness-routine, on the basis that the value already existed. Territory:loops-lint.mjsdefinesTRIGGERS = ['launchd','gh-actions','hook','watchpath','manual']—harness-routineappears only in the aspirational deliverable prose ofrm:rm-l2-ojfbot#S29and was never implemented, so authoring against it would have ERRORed. Took the conservative option:trigger: hook, which is both valid and more accurate since these are literally hooks. No schema change needed. - Plan hypothesised that
acted ≈ 0was caused bylog-skill.shbeing registered only at project scope, and pre-authorised registering it at user scope. Territory:suggest-skill.sh:228already injects the completeskill-acted-emit.mjscommand with the livesuggestion_idinto every single suggestion — the agent is told every time and does not comply. The gap is agent compliance, not wiring. Took the conservative option: did not register the hook, recorded the finding in the ADR instead, since registering it would have implied a fix that wasn't one. - Plan offered "relax Step 5 so grill-with-docs may write CONTEXT.md under confirmation" as a candidate resolution. Territory: in every sibling repo
domain-knowledge/CONTEXT.mdis a symlink into core, so any repo-local session writing it mutates fleet-shared state. Took the conservative option: gave the skill a new repo-local artifact it owns (decisions/open-unknowns.md) rather than loosening a constraint that exists for a good reason. - Plan specified H8 Stage A as a
PreToolUsehook onBash. Territory: user-scopePreToolUse(Bash)fires synchronously on every Bash call in every session, so installing the.mjsdirectly would spawn node fleet-wide for a signal needed only on merges. Took the conservative option: addedmerge-quiz.sh, a bash prefilter that rejects non-merge commands in ~4ms, and installed that as the hook entry instead. - Plan's S0 assumed the
EXPECTED_ARTIFACTaudit would mostly confirm entries. Territory:investigatenames an exact artifact path in its own SKILL.md but had nopathPattern, so any file written in-session satisfied it;validatedeclaresscheme: 'path'while its SKILL.md says "No auto-fixes — findings and verdict only", i.e. the same unreachability as grill-with-docs. Fixed the evidenced one (investigate), and surfacedvalidate/plan-featureas annotated ambiguities rather than guessing — the file's own docblock requires surfacing over guessing, and resolving them changes what those skills are.
- Landing prompt placed the fairway itinerary row in "Leg 4"; disk itinerary has Leg 3 as the golf-only leg (2026-07-02 decision) and Leg 4 as GameWorld — rows landed in Leg 3, discrepancy noted in-row and in core#298.
- Plan assumed the reference sweep could ride PR-1; gcgcca references live in four other repos, so the sweep distributed across core#297, mirrorworld#11, daily-logger#259, morning-cockpit#41.
- daily-logger's sweep list turned out to live in src/collect-context.ts (code, not the README prose) — the rename would have silently dropped the repo from the nightly sweep; fixed in daily-logger#259.
- Sitting's gcgcca git-state snapshot (push-u needed, 7 dirty) was stale by landing time — PRs #3/#4 already merged, main clean; the push-u step was dropped as obsolete.
- RFI §6.2 "code-side Notion unauthenticated" is stale — read access works; found no mirrorworld itinerary row and stale property-subset framing on the Notion golf pages (flagged for chat-side refresh in core#298).