* test(#1700): add failing-first regression test for spike MANIFEST.md idea scoping
Pins the deployed-text contract for spike.md's create_manifest step and
spike-wrap-up.md's gather/synthesize/write_skill steps before the fix lands,
so the fix commit demonstrates RED to GREEN.
* test(#1700): add issue ref to allow-test-rule exemption
lint-allow-test-rule-refs.cjs (ADR-456) requires a tracking-issue
reference on the same line as any new allow-test-rule: exemption.
* fix(#1700): scope spike MANIFEST.md Idea/Requirements per idea key
.planning/spikes/MANIFEST.md held one un-keyed ## Idea paragraph and one
flat ## Requirements list, while spike.md's own read path (load_prior_context
step d, frontier mode) assumed the tree holds several unrelated ideas across
campaigns. spike-wrap-up.md then copied that flat Requirements list verbatim
into every generated feature-area reference and the generated spike-findings
skill, so one idea's requirements leaked into another idea's build as
non-negotiable constraints.
Scopes both sides by an explicit idea key:
- spike.md's create_manifest step now writes MANIFEST.md as ## Ideas >
### {idea-key} subsections (idea paragraph + its own Requirements list),
appends a new idea section instead of overwriting an existing one, and
migrates a pre-fix flat-shape MANIFEST.md in place instead of discarding
it. The ## Spikes table gains an Idea column. Spike README frontmatter
carries the idea key.
- spike-wrap-up.md's gather/synthesize/write_skill steps resolve each
spike's idea key and pull Requirements only from the idea key(s) actually
represented among the spikes being wrapped.
- sketch.md's MANIFEST.md read (collateral of the same seam) is updated to
match the new per-idea section shape.
- references/artifact-types.md no longer describes the project-level,
durable-index MANIFEST.md as "(per-spike)".
Not a docs-vs-workflow conflict: docs/how-to/spike-and-sketch.md already
matches this contract ("all spikes are indexed in MANIFEST.md") and needed
no change; the defect was internal to spike.md (per-idea read assumption,
single-idea write template).
* test(#1700): make idea-frontmatter regex CRLF-safe
CONTRIBUTING.md's cross-platform portability rules (docs/contributing/
cross-platform-portability-rules.md) ban a bare \n literal matched against
fs.readFileSync'd content — Windows checkouts normalize to CRLF and would
silently break the assertion. Use \r?\n instead.
Found during self-review (code-review skill, Standards axis) before this
branch was handed off for verification.
* test(#1700): acknowledge emitted-size growth in spike.md, spike-wrap-up.md, sketch.md
The differential attribution check (tests/emitted-attribution.test.cjs,
ADR-2719) flagged unattributed byte growth in three emitted workflow files.
All three grew as a direct, necessary consequence of the #1700 fix (idea-key
scoping in spike.md's create_manifest, spike-wrap-up.md's gather/synthesize/
write_skill, and the matching one-line update to sketch.md's MANIFEST.md
read) — none of it is incidental prose. Growth stays well under the DEFAULT
tier byte cap (40960) for all three files; PRE_PHASE6 does not apply to
them (only plan-phase.md/execute-phase.md).
* chore(#1700): backfill changeset PR number to 3014
---------
Co-authored-by: sim <sim@local>