51 lines
1.8 KiB
Markdown
51 lines
1.8 KiB
Markdown
# undo-spec-conformance
|
|
|
|
- **Change ID**: undo-spec-conformance
|
|
- **Package**: `@suaveplan/undo`
|
|
- **Status**: PROPOSED
|
|
- **Type**: spec-conformance
|
|
- **Date**: 2026-04-26
|
|
|
|
## Why
|
|
|
|
The folded `openspec/specs/undo/spec.md` documented requirements as a flat
|
|
`R01`-`R20` bullet list under `### ADDED Requirements`. The conformance
|
|
parser only recognises `### Requirement: <name>` or `### CAP-NN —` headings,
|
|
so `bun scripts/openspec-conformance.ts @suaveplan/undo` reported "0
|
|
requirements parsed". This is purely a parsing gap; the implementation
|
|
already satisfies every clause and is pinned by an extensive test suite.
|
|
|
|
## What changes
|
|
|
|
- Rewrite `openspec/specs/undo/spec.md` from `R01`-`R20` bullets to nine
|
|
`### Requirement: <name>` blocks (sync UndoStack, BranchingHistory,
|
|
AsyncUndoStack, HistoryCompressor, SelectiveUndoStack, CommandMerger,
|
|
command primitives, error codes / UndoError, option schemas).
|
|
- Add `**Verified by:**` lines under every requirement naming concrete
|
|
`it(...)` titles in:
|
|
- `src/stack/stack.test.ts`
|
|
- `src/branch/branch.test.ts`
|
|
- `src/async/async-stack.test.ts`
|
|
- `src/async/async-command.test.ts`
|
|
- `src/compression/history-compressor.test.ts`
|
|
- `src/selective/selective-undo.test.ts`
|
|
- `src/merge/command-merger.test.ts`
|
|
- `src/command/command.test.ts`
|
|
- `src/errors/undo-error.test.ts`
|
|
- `src/schemas/undo.schemas.test.ts`
|
|
- No source changes; no public-surface changes; no new tests required.
|
|
|
|
## Out of scope
|
|
|
|
- New behaviour. Heading rewrite + verification annotation only.
|
|
- Source mapping table — `@suaveplan/undo` is genesis-original.
|
|
|
|
## Verification approach
|
|
|
|
Every requirement is pinned to existing `it(...)` titles across the ten
|
|
test files listed above (combined: 130+ cases pre-dating this change).
|
|
|
|
## Migration impact
|
|
|
|
None — additive metadata only. Public surface unchanged.
|