doc-iplan
Purpose
Create an Implementation Plan (IPLAN) — Layer 8 of the SDD flow. An IPLAN
bridges SPEC + TDD to source code: declares test-first file order (inherited
from TDD), executable bash commands, session progress for stateless executors,
and an audit trail from spec to delivered files.
Layer: 8 (final doc layer; downstream is Code).
Upstream: SPEC, TDD (per the necessary-upstream contract; the rest of
the chain is reachable transitively via SPEC/TDD's own @-tag references).
One IPLAN per SPEC component (matching its TDD). Bugfixes with no new
functionality use a temporary plan in docs/08_IPLAN/tmp/ instead.
When to Use
Use doc-iplan when:
- Layers 1–7 exist and the source TDD has reached IPLAN-Ready ≥ 90/100.
- You are ready to bridge a SPEC/TDD component into source code.
- You need an executable, session-resumable plan for stateless coding agents.
For end-to-end generation from a SPEC/TDD, a prompt, or an existing IPLAN, use
../doc-iplan-autopilot/SKILL.md.
Prerequisites
Before writing, read:
- Template (source of truth):
${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-TEMPLATE.yaml
- Index template:
${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-00_index.TEMPLATE.yaml
- Layer README:
${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/README.md
- ID & tag standards:
${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md
- Authoring style:
${CLAUDE_PLUGIN_ROOT}/framework/governance/AUTHORING_STYLE.md
Read the upstream TDD (primary source for the file manifest and test-first
order) and the SPEC it derives from. Reference only documents that exist;
never invent placeholders like IPLAN-XXX or TBD. Confirm no ID collision:
ls docs/08_IPLAN/ 2>/dev/null.
Layer Guidance
Permanent vs Temporary plans (decide first)
|
Permanent IPLAN (IPLAN-NN_{slug}.yaml) |
Temporary IPLAN (tmp/TMP-IPLAN-*.yaml) |
| Purpose |
Implement a SPEC component via TDD test cases |
Bugfix, correction, investigation — no new functionality |
| Requires TDD |
Yes — one IPLAN per SPEC/TDD |
No — standalone |
| Registered in index? |
Yes — IPLAN-00_index.yaml |
No |
| Triggers audit trail? |
Yes — code inventory, session log |
No — disposable |
| Deleted when? |
Never — historical record (use ABANDONED) |
Within 7 days of DONE/ABANDONED |
| Naming |
IPLAN-NN_{slug}.yaml (NN sequential, never reused) |
TMP-IPLAN-YYYY-MM-DD_{slug}.yaml |
Rule of thumb: implements a TDD test contract → permanent; restores intended
behavior or fixes a bug → temporary.
Required structure (11 sections — subtype-dependent subset)
The IPLAN is a YAML document with metadata (document_type: iplan-document,
layer: 8) followed by the sections matching IPLAN-TEMPLATE.yaml. The
required-section set depends on document_control.subtype (CLEANUP-PR-E
item 17):
code_build: sections 1-6 below (document_control, file_manifest,
execution_commands, implementation_contracts, session_handoff,
traceability).
deploy: sections 1, 7-11 (document_control,
rollback_procedure, smoke_tests, canary_metrics,
observability_hooks, runbook_reference) + traceability.
combined (default): all 11 sections.
Sections 1-6 (code_build set):
- Document Control —
iplan_id (IPLAN-NN), source_spec
(@spec: SPEC-NN), status (Draft | In Progress | Completed), version,
dates, author, complexity (1=1 file, 5=architectural), estimated_files,
session_count.
- File Manifest — declared creation order, tests before implementation
(TDD principle); each file carries
order, status, session, verified.
- Execution Commands — runnable bash for
setup, implementation, and
validation (the actual bridge to code).
- Implementation Contracts — Protocol interfaces, exception hierarchies,
state machines, data models, DI interfaces live inside the IPLAN. Required
only when 3+ files share interfaces; otherwise state "No implementation
contracts".
- Session Handoff — the stateless-executor bridge.
sessions[] is a
retrospective trail, appended by each session as it ends, so a Draft carries
sessions: []. Per appended session: partial_work, blockers,
next_session_directive, validation_results.
- Traceability — required upstream tags (
@spec, @tdd), downstream
code_paths / test_paths, and code_inventory (audit trail of every
file planned/created/modified with session attribution and verified
status).
Sections 7-11 (deploy set; required when subtype is deploy or combined):
- Rollback Procedure — step-by-step rollback with documented
reversal per cutover step + verification + reversible flag.
- Smoke Tests — post-cutover smoke checks with named pass criteria
per cutover step.
- Canary Metrics — explicit thresholds (latency, error rate,
saturation) per metric + canary window + action on breach.
- Observability Hooks — named signals emitted at deploy events
- Runbook Reference — pointer to on-call runbook + new
failure-mode entries this deploy adds.
Session handoff protocol
Each stateless session: 1) read session_handoff.sessions for the last
state → 2) find the next NOT_STARTED/PARTIAL file in file_manifest →
3) read partial_work if resuming → 4) continue, do not regenerate
completed work → 5) update file status → 6) append a session with a
next_session_directive. At Draft the trail is sessions: [], so step 1 falls
straight through to step 2. Markers: NOT_STARTED | IN_PROGRESS | DONE | PARTIAL.
Document ID and tags
- IPLAN is a DOCUMENT-level artifact — referenced in dash form
IPLAN-NN
(e.g. @iplan: IPLAN-01). There is no hierarchical dotted element ID for
an IPLAN; never write IPLAN.NN.SS.xxxx.
- IPLAN is Layer 8, so it carries the required upstream tags (per the
necessary-upstream contract):
@spec @tdd. Hierarchical upstreams use the
dotted form (@tdd: TDD.01.04.a3c1); document-level upstreams use dash
form (@spec: SPEC-01). Upstream BRD/PRD/EARS/BDD/ADR lineage is reachable
transitively via SPEC/TDD's own @-tag references — do not emit
@brd:/@prd:/@ears:/@bdd:/@adr: on IPLAN elements.
- Removed patterns (do not use):
TASK-XXX, TODO-XXX, TI-XXX,
ITEM-XXX, and any IPLAN.NN.SS.xxxx hierarchical ID.
Creation Process
- Determine type — permanent vs temporary (table above).
- Reserve ID — next free
IPLAN-NN (two digits, sequential, never reused);
the ID typically matches its SPEC/TDD component.
Per-layer independence (CLEANUP-PR-F item 18): pick the next-free
number in YOUR layer's index — the upstream's number is NOT your number
(doc numbers are per-layer sequential and independent; see
framework/governance/ID_NAMING_STANDARDS.md §Cross-layer cardinality).
- Create the file — permanent:
docs/08_IPLAN/IPLAN-NN_{slug}.yaml;
temporary: docs/08_IPLAN/tmp/TMP-IPLAN-YYYY-MM-DD_{slug}.yaml.
- Select subtype (CLEANUP-PR-E item 17) — decide which subtype
this IPLAN is and write it to
document_control.subtype:
code_build: file-manifest + Red/Green/Refactor + execution
commands. NO rollback/smoke/canary/observability sections. Use
when the IPLAN translates SPEC/TDD to source code only;
deployment is a separate plan.
deploy: rollback + smoke + canary + observability + runbook
sections. NO file-manifest / execution-commands. Use when the
IPLAN executes a cutover of code that's already authored.
combined (default): both sets required. Use when one IPLAN
covers code authoring AND deploy.
The auditor reads subtype and dispatches different required-section
sets. Missing field defaults to combined.
- Document Control first, then complete all sections required for
the chosen subtype (template marks each section with
_required_when_subtype:).
- Declare the file manifest (code_build / combined only)
test-first, every file
status: NOT_STARTED.
- Write execution commands (code_build / combined only) —
setup / implementation / validation.
- Define implementation contracts (code_build / combined only)
if 3+ files share interfaces; else state "No implementation contracts".
- Leave the session handoff empty (code_build / combined only) —
session_handoff.sessions: []. A Draft has had no session, so there is
nothing to record, and the first executor starts from file_manifest
order 1. A session entry written while authoring asserts work that has
not happened. Then seed code_inventory with one status: planned entry
per file_manifest path (session: null, verified: false). Never leave
that inventory empty and never write created into a Draft IPLAN.
- For deploy subtype only: complete rollback_procedure,
smoke_tests, canary_metrics, observability_hooks,
runbook_reference (sections 7-11).
- Register in the index (permanent only) — add to
docs/08_IPLAN/IPLAN-00_index.yaml and update metadata.total_plans.
- Validate (below) and commit the IPLAN and index together.
Validation
This skill is the validator (no runtime code). Apply against ${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/README.md and ${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md.
Error codes (all severity error): XDOC-006 tag format invalid · XDOC-008 broken internal link · XDOC-009 missing traceability section.
Quality gate (blocking): CODE-Ready score ≥ 90/100 with 0 Tier-1 errors
before implementation begins. If issues are found, fix and re-check; if
unfixable, log for manual review.
Next Skill
IPLAN is the last documentation layer. Proceed to Code: execute the file
manifest test-first, updating status/verified, session_handoff, and
code_inventory so any later stateless session can resume.
Adaptation
Read .aidoc/profile.yaml; honor only this skill's knobs
(section_toggles, glossary). Ignore unknown keys; absent a profile, use
framework defaults. Authority:
${CLAUDE_PLUGIN_ROOT}/framework/governance/ADAPTATION.md.
Related Resources
- Template / authoring rules:
${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-TEMPLATE.yaml
- Index template:
${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-00_index.TEMPLATE.yaml
- Layer README:
${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/README.md
- ID & tag standards:
${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md
- Quality gate:
../doc-iplan-audit/SKILL.md · Fixes: ../doc-iplan-fixer/SKILL.md
- Generation pipeline:
../doc-iplan-autopilot/SKILL.md
Quick Reference
|
|
| Purpose |
Bridge a SPEC/TDD component into source code |
| Layer |
8 (final doc layer; downstream = Code) |
| Upstream tags |
@spec @tdd (per necessary-upstream contract) |
| Key decision |
Permanent vs Temporary |
| Document ID |
IPLAN-NN (dash form; no dotted element ID) |
| Six sections |
doc_control · file_manifest · execution_commands · implementation_contracts · session_handoff · traceability |
| Handoff markers |
NOT_STARTED · IN_PROGRESS · DONE · PARTIAL |
| Next |
Code (implementation) |
1---2name: doc-iplan3description: Create an Implementation Plan (IPLAN) - Layer 8 of the SDD flow, the mandatory execution bridge from SPEC/TDD to source code via an executable, session-resumable file manifest. Use when ready to implement a SPEC component. Single-document authoring primitive; for end-to-end or batch generation the autopilot (`doc-iplan-autopilot`) drives this skill.4---5
6# doc-iplan
7
8## Purpose
9
10Create an **Implementation Plan (IPLAN)** — Layer 8 of the SDD flow. An IPLAN
11bridges SPEC + TDD to source code: declares test-first file order (inherited
12from TDD), executable bash commands, session progress for stateless executors,
13and an audit trail from spec to delivered files.
14
15**Layer**: 8 (final doc layer; downstream is Code).
16**Upstream**: SPEC, TDD (per the necessary-upstream contract; the rest of
17the chain is reachable transitively via SPEC/TDD's own @-tag references).
18
19One IPLAN per SPEC component (matching its TDD). Bugfixes with no new
20functionality use a temporary plan in `docs/08_IPLAN/tmp/` instead.
21
22## When to Use
23
24Use `doc-iplan` when:
25
26- Layers 1–7 exist and the source TDD has reached IPLAN-Ready ≥ 90/100.
27- You are ready to bridge a SPEC/TDD component into source code.
28- You need an executable, session-resumable plan for stateless coding agents.
29
30For end-to-end generation from a SPEC/TDD, a prompt, or an existing IPLAN, use
31`../doc-iplan-autopilot/SKILL.md`.
32
33## Prerequisites
34
35Before writing, read:
36
371. **Template (source of truth):** `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-TEMPLATE.yaml`
382. **Index template:** `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-00_index.TEMPLATE.yaml`
393. **Layer README:** `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/README.md`
404. **ID & tag standards:** `${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md`
415. **Authoring style:** `${CLAUDE_PLUGIN_ROOT}/framework/governance/AUTHORING_STYLE.md`
42
43Read the upstream **TDD** (primary source for the file manifest and test-first
44order) and the **SPEC** it derives from. Reference only documents that exist;
45never invent placeholders like `IPLAN-XXX` or `TBD`. Confirm no ID collision:
46`ls docs/08_IPLAN/ 2>/dev/null`.
47
48## Layer Guidance
49
50### Permanent vs Temporary plans (decide first)
51
52| | Permanent IPLAN (`IPLAN-NN_{slug}.yaml`) | Temporary IPLAN (`tmp/TMP-IPLAN-*.yaml`) |
53|---|---|---|
54| **Purpose** | Implement a SPEC component via TDD test cases | Bugfix, correction, investigation — no new functionality |
55| **Requires TDD** | Yes — one IPLAN per SPEC/TDD | No — standalone |
56| **Registered in index?** | Yes — `IPLAN-00_index.yaml` | No |
57| **Triggers audit trail?** | Yes — code inventory, session log | No — disposable |
58| **Deleted when?** | Never — historical record (use ABANDONED) | Within 7 days of DONE/ABANDONED |
59| **Naming** | `IPLAN-NN_{slug}.yaml` (NN sequential, never reused) | `TMP-IPLAN-YYYY-MM-DD_{slug}.yaml` |
60
61**Rule of thumb:** implements a TDD test contract → permanent; restores intended
62behavior or fixes a bug → temporary.
63
64### Required structure (11 sections — subtype-dependent subset)
65
66The IPLAN is a YAML document with `metadata` (`document_type: iplan-document`,
67`layer: 8`) followed by the sections matching `IPLAN-TEMPLATE.yaml`. The
68required-section set depends on `document_control.subtype` (CLEANUP-PR-E
69item 17):
70
71- **`code_build`**: sections 1-6 below (document_control, file_manifest,
72 execution_commands, implementation_contracts, session_handoff,
73 traceability).
74- **`deploy`**: sections 1, 7-11 (document_control,
75 rollback_procedure, smoke_tests, canary_metrics,
76 observability_hooks, runbook_reference) + traceability.
77- **`combined`** (default): all 11 sections.
78
79Sections 1-6 (code_build set):
80
811. **Document Control** — `iplan_id` (`IPLAN-NN`), `source_spec`
82 (`@spec: SPEC-NN`), status (`Draft | In Progress | Completed`), version,
83 dates, author, `complexity` (1=1 file, 5=architectural), `estimated_files`,
84 `session_count`.
852. **File Manifest** — declared creation order, **tests before implementation**
86 (TDD principle); each file carries `order`, `status`, `session`, `verified`.
873. **Execution Commands** — runnable bash for `setup`, `implementation`, and
88 `validation` (the actual bridge to code).
894. **Implementation Contracts** — Protocol interfaces, exception hierarchies,
90 state machines, data models, DI interfaces live *inside* the IPLAN. Required
91 only when 3+ files share interfaces; otherwise state "No implementation
92 contracts".
935. **Session Handoff** — the stateless-executor bridge. `sessions[]` is a
94 retrospective trail, appended by each session as it ends, so a Draft carries
95 `sessions: []`. Per appended session: `partial_work`, `blockers`,
96 `next_session_directive`, `validation_results`.
976. **Traceability** — required upstream tags (`@spec`, `@tdd`), downstream
98 `code_paths` / `test_paths`, and `code_inventory` (audit trail of every
99 file planned/created/modified with session attribution and `verified`
100 status).
101
102Sections 7-11 (deploy set; required when subtype is `deploy` or `combined`):
103
1047. **Rollback Procedure** — step-by-step rollback with documented
105 reversal per cutover step + verification + reversible flag.
1068. **Smoke Tests** — post-cutover smoke checks with named pass criteria
107 per cutover step.
1089. **Canary Metrics** — explicit thresholds (latency, error rate,
109 saturation) per metric + canary window + action on breach.
11010. **Observability Hooks** — named signals emitted at deploy events
111 - dashboard URLs.
11211. **Runbook Reference** — pointer to on-call runbook + new
113 failure-mode entries this deploy adds.
114
115### Session handoff protocol
116
117Each stateless session: 1) read `session_handoff.sessions` for the last
118state → 2) find the next `NOT_STARTED`/`PARTIAL` file in `file_manifest` →
1193) read `partial_work` if resuming → 4) continue, do **not** regenerate
120completed work → 5) update file status → 6) append a session with a
121`next_session_directive`. At Draft the trail is `sessions: []`, so step 1 falls
122straight through to step 2. Markers: `NOT_STARTED | IN_PROGRESS | DONE | PARTIAL`.
123
124### Document ID and tags
125
126- **IPLAN is a DOCUMENT-level artifact** — referenced in dash form `IPLAN-NN`
127 (e.g. `@iplan: IPLAN-01`). There is **no** hierarchical dotted element ID for
128 an IPLAN; never write `IPLAN.NN.SS.xxxx`.
129- IPLAN is Layer 8, so it carries the **required upstream tags** (per the
130 necessary-upstream contract): `@spec @tdd`. Hierarchical upstreams use the
131 dotted form (`@tdd: TDD.01.04.a3c1`); document-level upstreams use dash
132 form (`@spec: SPEC-01`). Upstream BRD/PRD/EARS/BDD/ADR lineage is reachable
133 transitively via SPEC/TDD's own @-tag references — do not emit
134 `@brd:`/`@prd:`/`@ears:`/`@bdd:`/`@adr:` on IPLAN elements.
135- **Removed patterns** (do not use): `TASK-XXX`, `TODO-XXX`, `TI-XXX`,
136 `ITEM-XXX`, and any `IPLAN.NN.SS.xxxx` hierarchical ID.
137
138## Creation Process
139
1401. **Determine type** — permanent vs temporary (table above).
1412. **Reserve ID** — next free `IPLAN-NN` (two digits, sequential, never reused);
142 the ID typically matches its SPEC/TDD component.
143 *Per-layer independence (CLEANUP-PR-F item 18):* pick the next-free
144 number in YOUR layer's index — the upstream's number is NOT your number
145 (doc numbers are per-layer sequential and independent; see
146 `framework/governance/ID_NAMING_STANDARDS.md` §Cross-layer cardinality).
1473. **Create the file** — permanent: `docs/08_IPLAN/IPLAN-NN_{slug}.yaml`;
148 temporary: `docs/08_IPLAN/tmp/TMP-IPLAN-YYYY-MM-DD_{slug}.yaml`.
1494. **Select subtype** (CLEANUP-PR-E item 17) — decide which subtype
150 this IPLAN is and write it to `document_control.subtype`:
151 - `code_build`: file-manifest + Red/Green/Refactor + execution
152 commands. NO rollback/smoke/canary/observability sections. Use
153 when the IPLAN translates SPEC/TDD to source code only;
154 deployment is a separate plan.
155 - `deploy`: rollback + smoke + canary + observability + runbook
156 sections. NO file-manifest / execution-commands. Use when the
157 IPLAN executes a cutover of code that's already authored.
158 - `combined` (default): both sets required. Use when one IPLAN
159 covers code authoring AND deploy.
160 The auditor reads `subtype` and dispatches different required-section
161 sets. Missing field defaults to `combined`.
1625. **Document Control first**, then complete all sections required for
163 the chosen subtype (template marks each section with
164 `_required_when_subtype:`).
1656. **Declare the file manifest** (code_build / combined only)
166 test-first, every file `status: NOT_STARTED`.
1677. **Write execution commands** (code_build / combined only) —
168 `setup` / `implementation` / `validation`.
1698. **Define implementation contracts** (code_build / combined only)
170 if 3+ files share interfaces; else state "No implementation contracts".
1719. **Leave the session handoff empty** (code_build / combined only) —
172 `session_handoff.sessions: []`. A Draft has had no session, so there is
173 nothing to record, and the first executor starts from `file_manifest`
174 order 1. A session entry written while authoring asserts work that has
175 not happened. Then seed `code_inventory` with one `status: planned` entry
176 per `file_manifest` path (`session: null`, `verified: false`). Never leave
177 that inventory empty and never write `created` into a Draft IPLAN.
17810. **For deploy subtype only**: complete rollback_procedure,
179 smoke_tests, canary_metrics, observability_hooks,
180 runbook_reference (sections 7-11).
18111. **Register in the index** (permanent only) — add to
182 `docs/08_IPLAN/IPLAN-00_index.yaml` and update `metadata.total_plans`.
18312. **Validate** (below) and commit the IPLAN and index together.
184
185## Validation
186
187**This skill is the validator** (no runtime code). Apply against `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/README.md` and `${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md`.
188
189- [ ] `metadata.layer: 8`, `document_type: iplan-document`.
190- [ ] Document Control complete (`iplan_id`, `source_spec`, status, dates).
191- [ ] All 6 sections present and non-empty; a Draft's `session_handoff`
192 carrying `sessions: []` satisfies this.
193- [ ] File Manifest lists tests before implementation; each file has a status
194 marker and `verified` flag.
195- [ ] Execution commands cover setup / implementation / validation.
196- [ ] Implementation Contracts declared (or "No implementation contracts").
197- [ ] Session Handoff present — `sessions: []` at Draft, and every appended
198 session carries a `next_session_directive`.
199- [ ] Required upstream tags (`@spec @tdd`, per necessary-upstream contract)
200 reference existing docs; document ID is `IPLAN-NN` (no dotted IPLAN
201 element ID).
202- [ ] `code_inventory` seeded `planned` — one entry per `file_manifest`
203 path, `session: null`, ready to record created/modified files.
204- [ ] Permanent plan registered in `IPLAN-00_index.yaml`; temporary under `tmp/`.
205
206**Error codes** (all severity `error`): `XDOC-006` tag format invalid · `XDOC-008` broken internal link · `XDOC-009` missing traceability section.
207
208**Quality gate (blocking):** CODE-Ready score ≥ 90/100 with 0 Tier-1 errors
209before implementation begins. If issues are found, fix and re-check; if
210unfixable, log for manual review.
211
212## Next Skill
213
214IPLAN is the last documentation layer. Proceed to **Code**: execute the file
215manifest test-first, updating `status`/`verified`, `session_handoff`, and
216`code_inventory` so any later stateless session can resume.
217
218## Adaptation
219
220Read `.aidoc/profile.yaml`; honor only this skill's knobs
221(`section_toggles`, `glossary`). Ignore unknown keys; absent a profile, use
222framework defaults. Authority:
223`${CLAUDE_PLUGIN_ROOT}/framework/governance/ADAPTATION.md`.
224
225## Related Resources
226
227- Template / authoring rules: `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-TEMPLATE.yaml`
228- Index template: `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/IPLAN-00_index.TEMPLATE.yaml`
229- Layer README: `${CLAUDE_PLUGIN_ROOT}/framework/layers/08_IPLAN/README.md`
230- ID & tag standards: `${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md`
231- Quality gate: `../doc-iplan-audit/SKILL.md` · Fixes: `../doc-iplan-fixer/SKILL.md`
232- Generation pipeline: `../doc-iplan-autopilot/SKILL.md`
233
234## Quick Reference
235
236| | |
237|---|---|
238| **Purpose** | Bridge a SPEC/TDD component into source code |
239| **Layer** | 8 (final doc layer; downstream = Code) |
240| **Upstream tags** | `@spec @tdd` (per necessary-upstream contract) |
241| **Key decision** | Permanent vs Temporary |
242| **Document ID** | `IPLAN-NN` (dash form; no dotted element ID) |
243| **Six sections** | doc_control · file_manifest · execution_commands · implementation_contracts · session_handoff · traceability |
244| **Handoff markers** | NOT_STARTED · IN_PROGRESS · DONE · PARTIAL |
245| **Next** | Code (implementation) |