openpencil/packages
Fini 1cfe0bbf2d test(pen-core): normalizePenDocument preservation + idempotency (84 cases)
42 builders × 2 assertions:

1. Semantic preservation: role / type / content / layout are
   identical at every tree position before and after
   normalizePenDocument. Also asserts node count unchanged — a pass
   must not create or drop nodes.
2. Idempotency: normalize(normalize(x)) === normalize(x).

Why it matters: normalizePenDocument runs at document open + after
AI generation rounds (see load-op-file.ts / import-pen-document.ts).
Builders produce canonical format output, so normalize SHOULD be a
no-op on the semantic fields. A regression that silently rewrites
a role or swaps a type would be invisible without this guard.

Complements element-builders-post-process-idempotent.test.ts (which
gates the OTHER four post-processing passes); this one specifically
covers the format-layer pass.
2026-04-22 01:58:40 +08:00
..
agent-native@e1f90cab96 chore(agent): bump agent-native to v0.4.0 release 2026-04-17 19:04:15 +08:00
pen-acp chore(release): bump to v0.7.4 2026-04-17 19:20:19 +08:00
pen-ai-skills fix(ai-skills): add tab-underline to elements.md roles list 2026-04-22 00:37:38 +08:00
pen-core test(pen-core): normalizePenDocument preservation + idempotency (84 cases) 2026-04-22 01:58:40 +08:00
pen-engine chore(release): bump to v0.7.4 2026-04-17 19:20:19 +08:00
pen-figma chore(release): bump to v0.7.4 2026-04-17 19:20:19 +08:00
pen-mcp test: insertElementTree direct + builder edge-case coverage 2026-04-22 01:03:40 +08:00
pen-react chore(release): bump to v0.7.4 2026-04-17 19:20:19 +08:00
pen-renderer chore(release): bump to v0.7.4 2026-04-17 19:20:19 +08:00
pen-sdk chore(release): bump to v0.7.4 2026-04-17 19:20:19 +08:00
pen-types fix(core): design.md lives on PenDocument — kill cross-document leak 2026-04-20 00:37:31 +08:00
CLAUDE.md V0.7.0 (#95) 2026-04-11 23:25:13 +08:00