Skip to content

test(docx-markdoc): bound real ILPA annotation projections independently - #995

Merged
stevenobiajulu merged 1 commit into
mainfrom
tweak-bound-ilpa-annotation-cases-20260917
Sep 17, 2026
Merged

stevenobiajulu merged 1 commit into
mainfrom
tweak-bound-ilpa-annotation-cases-20260917

Conversation

@stevenobiajulu

@stevenobiajulu stevenobiajulu commented Sep 17, 2026

Copy link
Copy Markdown
Member

Summary

Split the real ILPA hyperlink annotation regression into four named cases: whole-of-fund/deal-by-deal × comment/footnote. Each case retains the existing 30-second timeout, public input, import assertions, compiler entry point, hyperlink formatting checks and destination-part external relationship checks.

The prior single callback aggregated all four full-document projections and timed out in required Node22 CI twice on PR993 and once on PR994. This change explicitly increases the aggregate time available across independently bounded cases; it does not claim unchanged total budget or a product performance improvement. No runtime, fixture, CI configuration, skip, coverage exclusion or assertion is changed.

Ref: #982. Unblocks final integration checks for #979 and #985 as well. Does not close those runtime issues.

Verification

  • All six mandatory local gates pass: build, workspace lint, full test suite (3429 passed / 47 platform or opt-in skips), spec coverage, conformance citations, conformance document.
  • Focused real public ILPA annotation suite: 21 tests passed, including all four individually named hyperlink projections.
  • Independent dynamic Claude Opus 5 review: APPROVE at exact head65896c4f. Two real 21-test runs passed; execution counted all 22 old assertions and 24 new evaluations, and proved four distinct registered source/destination callbacks. Complete local report: .peer-review/ilpa-ci-blocker-opus5-20260917.review.txt.
  • Local macOS Node26 is not Linux Node22: required CI must pass before merge. No blind retries or protection bypass.

Actual Node22 CI now passed all113Markdoc tests; the four cases measured10575/7687/7443/7644ms. A second dynamic Opus clarification retained APPROVE and corrected an initial review premise: Node20's coverage path tests core/compare/MCP plus the two runtime packages, not Markdoc. No Node20 execution of these four cases is claimed. The actual required Node20 shared-library coverage job must still pass; its inherited package omission is a separate follow-up, not a reason to bypass a check or silently change CI scope here.

Visual evidence is skipped: this is test registration only, with unchanged document/compiler behavior. Word remains unverified. Hosted API build/deploy is out of scope.

Non-blocking review observations: total work grows by two imports (~6% locally); Node22 timing predictions are extrapolations, not measurements; the untouched SDX-MDOC-103 real-input test has tighter CI timing headroom and should be monitored separately. No historical compiler performance bisect was performed. Actual required CI remains decisive.

Two consecutive Node22 CI runs time out while one test aggregates two real ILPA sources and two destination projections under a single thirty-second limit. Register the same four source/destination combinations as individual cases so a slow runner can complete and report each one. Keep every hyperlink, named-style, size and destination-relationship assertion and the thirty-second per-case bound; do not skip inputs, raise timeouts, weaken assertions or change compiler/runtime behavior. The full annotation file now reports twenty-one passing tests instead of eighteen, with each public projection independently accountable. Keep this shipping-blocker repair separate from the focused native cleanup PR.

Ref: #982, #993
@vercel

vercel Bot commented Sep 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
site Ready Ready Preview Sep 17, 2026 8:37pm UTC

Request Review

@usejunior-llm-gate

Copy link
Copy Markdown

LLM gate (advisory)

All evaluated rules passed - 5 pass, 0 warn, 0 error, 11 skipped, 16 total

Findings

None.

All 16 rules (5 evaluated, 11 skipped)
Rule Verdict Detail
read_file response metadata parity SKIPPED paths not touched by this PR
Live DOM namespace-safe OOXML writes SKIPPED paths not touched by this PR
Complex-field revisions preserve complete accept/reject state machines PASS The PR only modifies test structure and timeouts in packages/docx-markdoc/src/annotation-roundtrip.test.ts and does not touch field atomization, validateFieldStructure, w:fldChar, w:instrText, w:delInstrText, or collapsed-field comparison logic.
Field validation per story, not global SKIPPED paths not touched by this PR
Revision IDs seeded from all revision-bearing side parts SKIPPED paths not touched by this PR
Accept/reject sweep side parts and caches PASS The PR only modifies a test file in packages/docx-markdoc/src/annotation-roundtrip.test.ts to split slow tests and does not touch accept/reject changes logic or side-part revision markup.
DocumentViewNode.heading stays canonical SKIPPED paths not touched by this PR
AI-author parity across entry points SKIPPED paths not touched by this PR
Property-change wrapper discipline SKIPPED paths not touched by this PR
SUPPORT.md Table A drift vs. implementation SKIPPED paths not touched by this PR
Table A / Table B boundary on side-part revisions SKIPPED paths not touched by this PR
Canonical-emission surface completeness SKIPPED paths not touched by this PR
Unit-test quality (avoid tautological / change-detector tests) PASS The modifications in review/packages/docx-markdoc/src/annotation-roundtrip.test.ts:361-395 split a single aggregate test into independent runs to avoid CI timeouts. The assertions verify concrete semantic properties of hyperlinks and projected XML tags from first principles and do not use mocks.
Re-derived facts vs canonical sources PASS The PR only restructures tests in packages/docx-markdoc/src/annotation-roundtrip.test.ts to prevent timeouts and does not add or modify any logic that re-computes facts.
.openspec tag ↔ test-assertion drift PASS The PR only splits test execution in packages/docx-markdoc/src/annotation-roundtrip.test.ts to prevent timeouts and does not add, move, or change any .openspec('[ID] …') tags.
Library stays general (no downstream-domain leakage) SKIPPED paths not touched by this PR

@stevenobiajulu

Copy link
Copy Markdown
Member Author

Independent dynamic Claude Opus 5 review APPROVE at exact 65896c4f71e0b3ce09750ccd10e14ee5d5f77885 (actual model verified; reviewer exited; complete report collected; working tree unchanged).

The reviewer executed both old and new test bodies, counted all 22 original assertion evaluations and 24 new evaluations, proved four distinct callbacks, and ran the complete 21-test annotation file twice. The split preserves the per-case 30-second limit, while explicitly expanding the aggregate group budget. It adds two imports rather than skipping product work. Historical compiler performance has not been bisected; local timing extrapolations are not CI measurements.

Actual required Linux Node22 job passed, with all 113 package tests passing. The four public ILPA compiler projections measured:

Input Destination Actual CI time
whole-of-fund comment 10,575 ms
whole-of-fund footnote 7,687 ms
deal-by-deal comment 7,443 ms
deal-by-deal footnote 7,644 ms

Proof: https://github.com/UseJunior/safe-docx/actions/runs/35271960534/job/105373751003 . These are actual logged completion times, not the review's extrapolations.

Node20 coverage and the required CI corpus are still running. Automerge remains unarmed until CI completes. No check or protection bypass. Advisory complete verdict: 5 pass / 0 warn / 0 error / 11 skipped. Separate combined runtime verification passed all six local gates (3513 passed / 57 platform or opt-in skips) and required21corpus / 23-row manifest; that supplements but does not replace this PR's checks or future exact-head receipts.

Non-blocking review observation: untouched SDX-MDOC-103 has tighter default-timeout headroom (actual Node22 3626ms); monitor separately rather than silently changing its timeout in this focused PR. Word and full-package XSD validity are not newly claimed.

@codecov

codecov Bot commented Sep 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@stevenobiajulu

Copy link
Copy Markdown
Member Author

Review precision correction, with independent dynamic Opus re-adjudication at unchanged 65896c4f: APPROVE holds.

The initial local review mistakenly required four passing Markdoc cases on Node20. Reading the actual complete .github/workflows/ci.yml job proves that Node20's coverage path tests docx-core/docx-compare/docx-mcp plus safe-docx/safedocx-mcpb; it does not invoke Markdoc. Node22's non-coverage npm run test does. The reviewer explicitly withdrew the false premise, preserved the original report, reran the real21-test file successfully, and verified the full actual Node22 CI log.

The measured four-case proof is Node22 only:10575/7687/7443/7644ms; all113Markdoc tests passed. No Node20 Markdoc coverage is claimed. Node20's actual required shared-library coverage job still must finish green before merge, with no bypass. Its inherited package-matrix omission is a separate characterization/CI follow-up rather than an implicit configuration expansion in this focused test-only PR.

Complete corrected local report: .peer-review/995-ci-matrix-correction-opus5-20260917.review.txt. All code and CI configuration remain unchanged since the original approved head.

@stevenobiajulu
stevenobiajulu merged commit 24b7495 into main Sep 17, 2026
29 checks passed
@stevenobiajulu
stevenobiajulu deleted the tweak-bound-ilpa-annotation-cases-20260917 branch September 17, 2026 21:10
@stevenobiajulu

Copy link
Copy Markdown
Member Author

Post-merge smoke passed

Merged and built exact detached main: 24b749524c62f8bf1c9852736482801a129c4b5c.
Own locked dependencies via npm ci; fresh clean library build. Reserved primary checkout untouched.

All six mandatory gates passed: build, workspace lint, full suite (3429 passed / 47 platform or opt-in skips), spec coverage, conformance citations and conformance document. Focused public ILPA annotation suite 21/21 passed. Built-code smoke independently imported and compiled BOTH bundled public ILPA forms × comment/footnote (4/4), checking preserved link text, Hyperlink style, 18-half-point size and valid External relationships in the actual destination parts. Inputs matched the Git blobs from the exact merge; all runtime imports came from this smoke worktree's newly built dist.

Production docs: READY dpl_FmuJQjEsK6PKNf7x4EpYeenCfkF2, metadata confirms exact merge SHA and main; checked read-only. No hosted API build/deploy.
CI before merge: both required workspace jobs and public corpus passed, Codecov passed, legacy Vercel success. Full advisory verdict collected: 5 pass / 0 warn / 0 error / 11 skipped. Dynamic Opus APPROVE and corrected CI-matrix clarification collected. Node20's shared-library coverage passed; the four Markdoc cases are exercised by Node22, not Node20's inherited limited package list.

Visual evidence: skipped—test registration only, no document/compiler behavior change. Word and full-package XSD validity are not newly claimed.
Logs/artifacts retained locally: /private/tmp/automerge-smoke-995-20260917.log, /private/tmp/automerge-smoke-995-20260917/.peer-review/, production-receipt.json. Battery power detected; only our temporary keep-awake helpers were stopped, verification continued normally and completed. No cleanup/close-out while runtime/structural follow-ups remain open.

First 50 smoke-log lines
24b749524c62f8bf1c9852736482801a129c4b5c
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 617 packages, and audited 630 packages in 3s

155 packages are looking for funding
  run `npm fund` for details

7 vulnerabilities (6 moderate, 1 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
npm warn install-scripts 2 packages have install scripts not yet covered by allowScripts:
npm warn install-scripts   esbuild@0.28.1 (postinstall: node install.js)
npm warn install-scripts   fsevents@2.3.3 (install: (install scripts present))
npm warn install-scripts
npm warn install-scripts Run `npm install-scripts ls` to review, or `npm install-scripts approve <pkg>` to allow.

> safe-docx-suite@0.20.1 build
> npm run build --workspaces --if-present


> @usejunior/docx-compare@0.20.1 build
> npm run build -w @usejunior/docx-core && npm run clean:dist && tsc -p tsconfig.build.json


> @usejunior/docx-core@0.20.1 build
> npm run clean:dist && tsc -p tsconfig.build.json


> @usejunior/docx-core@0.20.1 clean:dist
> node -e "const { rmSync } = require('node:fs'); rmSync('dist', { recursive: true, force: true });"


> @usejunior/docx-compare@0.20.1 clean:dist
> node -e "const { rmSync } = require('node:fs'); rmSync('dist', { recursive: true, force: true });"


> @usejunior/docx-core@0.20.1 build
> npm run clean:dist && tsc -p tsconfig.build.json


> @usejunior/docx-core@0.20.1 clean:dist
> node -e "const { rmSync } = require('node:fs'); rmSync('dist', { recursive: true, force: true });"
Last 50 smoke-log lines

> safe-docx-suite@0.20.1 check:conformance-citations
> node scripts/check_conformance_citations.mjs

check_conformance_citations: OK (121 registry entries, 51 XSDs)

> safe-docx-suite@0.20.1 check:conformance-doc
> node scripts/check_conformance_doc.mjs

generate_conformance_doc: wrote spec-compliance/CONFORMANCE.md
check_conformance_doc: OK

> @usejunior/docx-markdoc@0.20.1 test:run
> node ../../node_modules/vitest/vitest.mjs run src/annotation-roundtrip.test.ts --reporter=verbose


 RUN  v4.1.8 /private/tmp/automerge-smoke-995-20260917/packages/docx-markdoc

 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-82] imports and re-emits exact ranged comments with editable structured bodies 53ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-83] preserves point comments without guessing a selected range 22ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-84] imports footnotes as substantive exact points and requires explicit conversion choices 25ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-101] preserves inherited named run styles and direct sizes across annotation projections 36ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-102] rejects missing and cyclic named annotation styles 20ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-103] admits real ILPA style runs and external hyperlinks before the next bookmark boundary 782ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-104] preserves external links and formatting across all annotation projections 144ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > keeps reserved Markdoc characters in destinations and authors exact across the round trip 46ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-105] allocates repeated annotation destinations deterministically across relationship collisions 59ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-106] rejects malformed and invalid external annotation hyperlink relationships 60ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-107] keeps internal annotation anchors and bookmark markers fail-closed 17ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > projects bookmark-stripped whole-of-fund ILPA hyperlinks as comment with valid destination-part relationships 3868ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > projects bookmark-stripped whole-of-fund ILPA hyperlinks as footnote with valid destination-part relationships 3068ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > projects bookmark-stripped deal-by-deal ILPA hyperlinks as comment with valid destination-part relationships 3331ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > projects bookmark-stripped deal-by-deal ILPA hyperlinks as footnote with valid destination-part relationships 3123ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-85] switches profiles and style-only recompiles from one immutable annotation 26ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-91] records omission as an intentional lossy projection 13ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-86] retains reply topology and fails closed when the parent projection is incompatible 25ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-87] fails closed for unrouted unspecified annotations and ambiguous edited anchors 39ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-88] remaps an anchor after an unambiguous operative-text edit 28ms
 ✓ src/annotation-roundtrip.test.ts > canonical annotation round trips > [SDX-MDOC-90] rejects unsupported bodies and orphan reply topology atomically 9ms

 Test Files  1 passed (1)
      Tests  21 passed (21)
   Start at  16:20:04
   Duration  15.53s (transform 518ms, setup 0ms, import 668ms, tests 14.79s, environment 0ms)

PASS built exact-merge public ILPA whole-of-fund/comment: import, compile, hyperlink style/size, external OPC relationship
PASS built exact-merge public ILPA whole-of-fund/footnote: import, compile, hyperlink style/size, external OPC relationship
PASS built exact-merge public ILPA deal-by-deal/comment: import, compile, hyperlink style/size, external OPC relationship
PASS built exact-merge public ILPA deal-by-deal/footnote: import, compile, hyperlink style/size, external OPC relationship
PASS all four public ILPA compiler projections; Word and full-package XSD not claimed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant