diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6e529d6..09742fd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,6 +27,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
(`taste = 2`, or `terrain = 2` with any `ambiguity`). `md.aperture()` renders
**`Pre-build map: required`** so `/ratchet:ignite` routes high-uncertainty work through
the fog gate instead of relying on the operator to remember. A4 still builds nothing.
+- **The map lives through the build.** New `templates/unknowns-map.md` (the four-quadrant
+ map's file shape, with a *Deviations during build* section) and `templates/deviation-note.md`
+ (map said X → code revealed Y → call made). `/ratchet:build` now builds *against* an existing
+ `unknown-map` artifact and records deviations as decisions/open-loops/defects instead of
+ silently absorbing them; `/ratchet:handoff` surfaces those deviations so the receiver never
+ re-litigates what the build already discovered.
## [0.5.0] - 2026-07-04 — Receipt
diff --git a/skills/build/SKILL.md b/skills/build/SKILL.md
index 57ce36e..248f4a3 100644
--- a/skills/build/SKILL.md
+++ b/skills/build/SKILL.md
@@ -40,6 +40,12 @@ Templates for records live in the plugin's `templates/` directory — mirror the
4. **Write a 5-point working test.** Concrete pass/fail checks a stranger could run. If you
cannot write the test, you do not yet understand the artifact — say so and narrow scope.
+**Build against the map.** If `/ratchet:map` left an `unknown-map` artifact
+(`.ratchet/unknowns-map.md`), build against it — and when the code contradicts what the map
+assumed, do not silently absorb it. Record a deviation (`templates/deviation-note.md`) as a
+`decision`, `openLoop`, or `defect`, and add it to the map's *Deviations during build*
+section. The map is a living record through the build, not a pre-build formality.
+
For large or code-heavy artifacts, delegate to the `ratchet-builder` subagent.
## Output contract
@@ -61,6 +67,7 @@ EXPLICIT HOLES:
```
ratchet artifact add '{"title":"
","kind":"","status":"v0","path":"","holes":["...","..."]}'
+ratchet state append openLoops '{"text":"deviation: map said X, code revealed Y — needs user judgment","status":"open"}' # only if the build diverged from the map
ratchet state set phase build
```
diff --git a/skills/handoff/SKILL.md b/skills/handoff/SKILL.md
index 34acf4f..03a52e6 100644
--- a/skills/handoff/SKILL.md
+++ b/skills/handoff/SKILL.md
@@ -37,6 +37,9 @@ to skim past:
7. **Context to act** — the minimum files, commands, or facts the receiver needs. Point to
locations; don't paste the world.
8. **Watch-outs** — the traps you already hit or foresee.
+9. **Deviations from the map** — if `/ratchet:map` ran, where the build diverged from its
+ plan (map said X → code revealed Y → call made) and which calls still need the user's
+ judgment. This is what stops the receiver from re-litigating what you already discovered.
## Rules
@@ -57,6 +60,7 @@ OPEN RISKS: <[severity] summary> (each)
NEXT ACTION:
CONTEXT TO ACT:
WATCH-OUTS:
+DEVIATIONS: