Skip to content

Commit a217f82

Browse files
committed
spectra(word-aligned-state-sync): 7.x verify working report — 7.1 panel findings fixed (ooxml-swift v1.0.1)
Refs #127
1 parent 37f5912 commit a217f82

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# 7.x Release verifies — working report(2026-07-06)
2+
3+
Panel per tag: 2 Claude reviewers (sonnet; correctness + spec-conformance) + 1 Codex (gpt-5.5 xhigh).
4+
**Degradation record**: all 6 Codex runs hit OpenAI usage limit (resets 20:48); 9 of 12 Claude
5+
reviewers hit the account session limit (resets 21:00 Asia/Taipei). Completed before the wall:
6+
v30-spec, v32-spec (full reports), v30-correctness (report requested). Remaining 9 + codex
7+
re-run after reset.
8+
9+
## Status
10+
11+
| Round | Tag | correctness | spec-conformance | codex |
12+
|-------|-----|-------------|------------------|-------|
13+
| 7.1 | v0.30.0 | ✅ CONCERNS(3 real defects — **fixed in v1.0.1**| ✅ CONCERNS | ⏳ limit, re-run |
14+
| 7.2 | v0.31.5 | ⏳ limit | ⏳ limit | ⏳ limit |
15+
| 7.3 | v0.32.0 | ⏳ limit | ✅ CONCERNS | ⏳ limit |
16+
| 7.4 | v0.33.1 | ⏳ limit | ⏳ limit | ⏳ limit |
17+
| 7.5 | v0.34.1 | ⏳ limit | ⏳ limit | ⏳ limit |
18+
| 7.6 | v1.0.0 | ⏳ limit | ⏳ limit | ⏳ limit |
19+
20+
## Findings so far
21+
22+
### v0.30.0 correctness — CONCERNS → 3 real defects, FIXED in v1.0.1(same day)
23+
24+
1. **[P1] Unbounded parse recursion** — 60k-level nesting empirically SIGSEGVed (uncatchable);
25+
primary parse path, DoS surface for consumers opening third-party docx.
26+
→ Fixed: depth guard (limit 1024) throwing catchable `nestingTooDeep`.
27+
2. **[P2] UTF-8 BOM unfhandled** — BOM-prefixed parts (LibreOffice et al.) failed the whole parse.
28+
→ Fixed: BOM skip in skipProlog.
29+
3. **[P2] Attribute control chars unescaped** — literal \n/\r/\t pass through; conformant
30+
readers (libxml2 — which the v1.0 read projection feeds) normalize to spaces, corrupting
31+
values on dirty re-serialize. → Fixed: character-reference escaping (
/
/	).
32+
4. [P3] Test file hardcoded a personal path to a third party's thesis (privacy + CI).
33+
→ Fixed: env-gated (OOXML_LOCAL_THESIS_FIXTURE) + XCTSkip.
34+
5. [Info] CDATA collapses to text-kind on dirty re-emit (contract not violated; noted).
35+
6. [Info] deepClone marks all nodes dirty → clone→serialize canonicalizes empty-tag forms
36+
(design consequence, noted for reducer awareness).
37+
38+
Verified sound by the same panel: entity round-trip, attribute order, namespace scoping,
39+
comment/PI, mixed content, empty-tag forms on clean nodes, subtree-dirty propagation,
40+
fingerprint canonicalization, DTD byte-skip (no XXE).
41+
42+
All fixes shipped as **ooxml-swift v1.0.1** (4 new pinning tests; 1178 green).
43+
44+
### (doc/test-coverage class findings)
45+
46+
### v0.30.0 spec-conformance — CONCERNS
47+
48+
1. **[P1] Golden-corpus acceptance criteria never met as written** — ooxml-tree-io spec names
49+
committed fixtures (multi-section-thesis 3×sectPr, vml-rich with mc:AlternateContent, …) and
50+
byte-equal assertions on header*/footer*/[Content_Types].xml. Reality: programmatic builders
51+
(CorpusFixtureBuilder), 2×sectPr, zero AlternateContent, header/footer/Content_Types never
52+
byte-equal-asserted. Persisted unchanged v0.30.0→v1.0.0. (Consistent with the task-1.8
53+
overmark disclosed during the apply phase.)
54+
2. **[P1] Task 2.4 overmarked** — "SectionProperties tree-backed view verified against
55+
multi-section-thesis" — no test connects SectionPropertiesTreeProjectionTests (synthetic
56+
nodes only) to that fixture; the matching-named test file at v0.31.0 was an XCTSkip stub
57+
from an unrelated change.
58+
3. [P2] Tree reader/writer never exercised against header*/footer* parts in any fixture test
59+
(customXml covered since v0.31.5).
60+
4. [P2] Fingerprint attribute identity keyed by (localName, prefix), not resolved URI —
61+
contradicts spec's literal "prefix variations on same URI" scope for attributes
62+
(self-documented in code comment).
63+
5. [P3] API naming drift (spec prose: read/write/id; shipped: parse/serialize/stableID).
64+
6. [P3] "Pure-Swift" requirement has no automated pin (manual dependency check only).
65+
66+
Clean/well-pinned: lossless tree (mixed content/comments/PIs/entities), untouched-subtree
67+
identity, stableID, text-as-child; byte-faithful design wording already correctly hedged.
68+
69+
### v0.32.0 spec-conformance — CONCERNS
70+
71+
1. **[P1] Taxonomy count drift in archived spec**`openspec/specs/ooxml-operation-log/spec.md`
72+
still says "21 cases"; reality: 24 at v0.32.0 (Phase 2c +3), 32 at v1.0.0 (§4b +8). Spec
73+
never updated as additive extensions landed.
74+
2. **[P2] Change delta spec's JSONL prose stale** — describes `timestamp`/nested `payload`/
75+
snake_case op_types; shipped wire (and archived spec) is flat `ts`/`op_id`/`source`/`op_type`
76+
with camelCase. Never reconciled.
77+
3. [P3] Delta/tasks ElementID chain prose omits `w:bookmarkId` step (code + archived spec have it).
78+
4. [P3] Reducer spec Purpose wording implies later shipping; actually shipped in v0.32.0.
79+
80+
Clean: sidecar stem naming exact per spec; tasks.md section 3 spot-check — no overmarking;
81+
reducer + JSONL codec match archived normative spec.
82+
83+
## Disposition queue(fix after panel completes)
84+
85+
- Fix archived op-log spec case-count (scope as baseline + pointer to additive extensions).
86+
- Reconcile change delta JSONL/ElementID prose with shipped wire.
87+
- Golden-corpus spec: reword to programmatic-builder reality OR expand corpus
88+
(AlternateContent + header/footer round-trip + Content_Types assertion — small test adds).
89+
- tasks.md 2.4 annotation (overmark correction).

0 commit comments

Comments
 (0)