Releases: UseJunior/safe-docx
Releases · UseJunior/safe-docx
Release list
v0.16.0
v0.15.0
What's Changed
Features
- feat(docx-core): guard openspec tag-density with coverage-rationale annotation by @stevenobiajulu in #518
- feat(docx-core): deterministic THEN-keyword spec-coverage check by @stevenobiajulu in #519
- feat(docx-core)!: remove agreement-domain recipes (coverTermsTable, signatureBlock) — 0.15.0 by @stevenobiajulu in #520
CI / Infrastructure
- ci(llm-gate): add .openspec tag↔assertion-drift checklist item by @stevenobiajulu in #517
Other Changes
- test(docx-core): raise docx-comparison spec coverage to 68/69 and split coverage scripts by @stevenobiajulu in #513
Full Changelog: v0.14.0...v0.15.0
v0.14.0
What's Changed
Features
- feat(docx-core): OA recipe border + header styling hooks (SDX-GEN-112/113) by @stevenobiajulu in #511
Documentation
- docs(safe-docx): add competitor comparison section to README by @stevenobiajulu in #510
Other Changes
- test(odf-core): skip LibreOffice-gated tests when soffice is present but unusable by @stevenobiajulu in #438
- chore(release): bump workspace versions to 0.14.0 by @stevenobiajulu in #512
Full Changelog: v0.13.0...v0.14.0
v0.13.0
What's Changed
Features
- feat(docx-core): OA recipe styling hooks — cover-terms run styling + signature oa-stacked-ruled by @stevenobiajulu in #507
Other Changes
- chore(release): bump workspace versions to 0.13.0 by @stevenobiajulu in #508
Full Changelog: v0.12.1...v0.13.0
v0.12.1
v0.12.0
docs(openspec): propose deterministic locator primitive (#506) * docs(openspec): propose deterministic locator primitive Add OpenSpec change add-deterministic-locator-primitive (proposal only, no code): a deterministic resolveLocator(view, locator) over DocumentView, a tested clean_text->raw offset map (generalizing visible_offset_correction), and a shared-core fix so the free buildDocumentView returns populated nodes. Extends the docx-primitives capability; ships as @usejunior/docx-core 0.12.0. Reviewed dynamically by Codex + agy. * feat(docx-core): implement deterministic locator primitive + offset map (0.12.0) Implements the add-deterministic-locator-primitive proposal: - locator.ts: resolveLocator(view, locator) — deterministic single-span resolution with scope (section, exactly-one-heading), primary (regex/contextual/fingerprint, exactly-one-span; 0/>1 and zero-length → unresolved), and corroborating assertions (span-equality for regex/contextual, node-identity for fingerprint). No fuzzy/scoring. - document_view.ts: clean_text→raw offset map (buildCleanToRawOffsetMap / cleanToRawOffset) covering CR/LF strip, leading/trailing trim, and manual-list-label prefix; raw_text added to DocumentViewNode as its basis. - document_view.ts: free buildDocumentView() now returns populated nodes via a shared collectViewParagraphs core (table helpers extracted to table_context.ts to avoid a circular import); parity with DocxDocument.buildDocumentView(). - Exports resolveLocator + offset-map helpers from the primitives barrel. - Lockstep version bump of the suite to 0.12.0 (the hard prerequisite the open-agreements selector-contract change pins). Tests: locator.test.ts + document_view_free.test.ts (allure BDD), all 18 spec delta scenarios covered (check:spec-coverage --feature passes); full build and docx-core suite green.
v0.11.2
What's Changed
Features
- feat(docx-core): two-column signatureBlock layout + keepLines on ParagraphSpec by @stevenobiajulu in #501
- feat(docx-core): add lvlJc level justification to NumberingSpec (closes #502) by @stevenobiajulu in #503
Other Changes
- chore(release): bump workspace versions to 0.11.2 by @stevenobiajulu in #504
Full Changelog: v0.11.1...v0.11.2
v0.11.1
What's Changed
Features
- feat(docx-core): emit theme/fontTable/webSettings on generated packages by @stevenobiajulu in #485
- feat(docx-core): support w:highlight on RunProps (closes #491) by @stevenobiajulu in #495
- feat(docx-core): cover-terms table house style (horizontal rules, groups, vertical rhythm) by @stevenobiajulu in #497
- feat(docx-mcp): replace init_plan/merge_plans/apply_plan with batch_edit (closes #494) by @stevenobiajulu in #496
- feat(docx-core): custom theme palette + theme-relative color authoring (closes #492) by @stevenobiajulu in #499
Bug Fixes
- fix(docx-mcp): clear CodeQL alerts for biased RNG and no-op replace by @stevenobiajulu in #486
- fix(security): complete sanitization to clear CodeQL false-positive alerts by @stevenobiajulu in #490
Other Changes
- chore(deps): bump uuid and esbuild to clear Dependabot alerts by @stevenobiajulu in #489
- chore(release): bump workspace versions to 0.11.1 by @stevenobiajulu in #498
Full Changelog: v0.11.0...v0.11.1
v0.11.0
What's Changed
Features
- feat(docx-core): from-scratch generation phase 1 — DocumentSpec skeleton, structural checks, OpenSpec change by @stevenobiajulu in #397
- feat(docx-core): from-scratch generation phase 2 — styles.xml + run/paragraph formatting by @stevenobiajulu in #402
- feat(docx-core): conformance adapter bin + docx-platform-tests self-check (M2 of #283) by @stevenobiajulu in #394
- feat: native DOCX → ODT conversion (convertDocxToOdt + convert_to_odt tool) by @stevenobiajulu in #401
- feat(docx-core): from-scratch generation phase 3 — sections, headers/footers, PAGE/NUMPAGES fields by @stevenobiajulu in #407
- feat(gate): stamp-or-rerun on synchronize (closes #410) by @stevenobiajulu in #412
- feat(docx-core): from-scratch generation phase 4 — tables by @stevenobiajulu in #414
- feat(odf-core): DOCX → ODT phase 3 — richer style fidelity by @stevenobiajulu in #415
- feat(docx-core): from-scratch generation phase 5 — numbering and legal recipes by @stevenobiajulu in #417
- feat(docx-core): from-scratch generation phase 6 — drafting notes as anchored comments by @stevenobiajulu in #422
- feat(docx-core): from-scratch generation phase 7 — compatibility sign-off and repositioning by @stevenobiajulu in #428
- feat(docx-mcp): expose comment range metadata in get_comments by @stevenobiajulu in #442
- feat(docx-mcp): inline footnote bodies in read_file via include_footnotes by @stevenobiajulu in #445
- feat(docx-core): add AI revision validator with MCP transactional enforcement by @stevenobiajulu in #454
Bug Fixes
- fix(safe-docx): keep server.json description within the MCP registry's 100-char cap by @stevenobiajulu in #400
- fix(docx-core): run docx-comparison bin when invoked via node_modules/.bin symlink by @stevenobiajulu in #404
- fix: minimal edit saves — preserve untouched paragraphs, DEFLATE re-pack (#408) by @stevenobiajulu in #420
- fix(docx-core): write hyperlinkKey NUL separator as an escape; guard source against raw control bytes by @stevenobiajulu in #429
- fix(docx-core): stabilize empty paragraph atom hashes by @stevenobiajulu in #432
- fix(docx-mcp): restore untouched redline blocks by @stevenobiajulu in #433
- fix(docx-mcp): surface tracked restore post-pass errors by @stevenobiajulu in #437
- fix(docx-core): rewrite serialized deletion text via DOM traversal by @stevenobiajulu in #439
- fix(docx-core): keep matched multi-paragraph comment ranges on rebuild by @stevenobiajulu in #441
- fix(docx-core): screen rebuild output through round-trip safety checks by @stevenobiajulu in #443
- fix(docx-core): renumber colliding auxiliary part IDs before comparison by @stevenobiajulu in #447
- fix(docx-core): reconstruct explicit moveFromRange*/moveToRange* markers on rebuild by @stevenobiajulu in #449
- fix(docx-core): atomize proofErr-only paragraphs as empty-paragraph atoms by @stevenobiajulu in #457
- fix(docx-core): reconstruct permStart/permEnd paragraph-level markers on rebuild by @stevenobiajulu in #440
- fix(docx-core): keep paragraph sectPr inside diffmatch paragraphs by @stevenobiajulu in #458
- fix(docx-core): replace duplicate rPrChange snapshots by @stevenobiajulu in #459
- fix(docx-core): reuse ordered paragraph mark revisions by @stevenobiajulu in #460
- fix(docx-core): restamp colliding comment paraIds before comparison by @stevenobiajulu in #465
- fix(docx-core): cover cross-implementation spec scenarios by @stevenobiajulu in #468
- fix(docx-core): interleave logical start/end cell margins in CT_TcMar order by @stevenobiajulu in #478
- fix(docx-core): restore untouched hyperlink paragraphs by @stevenobiajulu in #479
- fix(docx-core): merge paragraph-mark revisions into the following paragraph by @stevenobiajulu in #464
Documentation
- docs(openspec): propose cross-implementation conformance suite (M0 of #283) by @stevenobiajulu in #392
- docs(openspec): archive add-cross-implementation-conformance-suite by @stevenobiajulu in #419
- docs(openspec): archive add-docx-generation by @stevenobiajulu in #430
- docs: translated README generation parity + ODT generation boundary proposal by @stevenobiajulu in #435
- docs(github): add issue and pull request templates by @stevenobiajulu in #466
- docs(docx-core): record commentsIds OPC string provenance by @stevenobiajulu in #474
- docs(docx-core): correct root comment revision support by @stevenobiajulu in #475
- docs(readme): add Report Bug / Request Feature quick links under badges by @stevenobiajulu in #476
CI / Infrastructure
- ci(release): pack all publishable packages into the preflight runtime smoke by @stevenobiajulu in #396
- ci(llm-gate): add checklist item catching re-derived facts vs canonical sources by @stevenobiajulu in #405
- ci(docx-core): validate emitted document.xml against the ECMA-376 schema by @stevenobiajulu in #455
Refactoring
- refactor: expose footnote refs as document-view node metadata — one derivation, not five fldChar walks by @stevenobiajulu in #413
Other Changes
- chore(release): bump workspace versions to 0.11.0 by @stevenobiajulu in #423
- chore: relicense MIT → Apache-2.0 by @stevenobiajulu in #424
- [codex] fix compare stats range counts by @stevenobiajulu in #434
- test(docx-core): add required tblGrid to synthetic tables by @stevenobiajulu in #461
- test(docx-core): lock the author->compare round-trip guarantee (#483) by @stevenobiajulu in #484
Full Changelog: v0.10.0...v0.11.0
v0.10.0
What's Changed
Features
- feat(docx-core): publish DOM-aware tracked-change emitter helpers (#135) by @stevenobiajulu in #147
- feat(docx-core): emit w:ins/w:del at write time in text.ts (#136) by @stevenobiajulu in #149
- feat(docx-core): expose comment range metadata in getComments() by @stevenobiajulu in #134
- feat(docx-mcp): render comments inline at paragraph level in read_file by @stevenobiajulu in #132
- feat(docx-mcp): render comment ranges inline in read_file with milestone markers by @stevenobiajulu in #150
- feat(docx-core): emit tracked-change markup from insertParagraph (#137) by @stevenobiajulu in #162
- feat(docx-core): emit tracked-change markup for comment body anchors (#138) by @stevenobiajulu in #163
- feat(docx-core): emit tracked-change markup for footnote body + note text (#139) by @stevenobiajulu in #166
- feat(docx-core): emit pPrChange/trPrChange/tcPrChange from layout setters (#140) by @stevenobiajulu in #167
- feat(docx-mcp): emit rPrChange from clear_formatting MCP tool (#141) by @stevenobiajulu in #170
- feat(docx-mcp): wire configurable AI author through MCP layer (#142) by @stevenobiajulu in #172
- feat(docx-core): add derived heading object to DocumentViewNode (closes #179) by @stevenobiajulu in #190
- feat(verification): close inv_field_001 with Tier 2 OoxmlDoc subset by @stevenobiajulu in #208
- feat(docx-core): sweep side-part revisions on accept/reject by @stevenobiajulu in #218
- feat(docx-core): emit rPrChange for formatted paragraph replacements by @stevenobiajulu in #215
- feat(spec-compliance): structured ECMA-376 traceability framework by @stevenobiajulu in #230
- feat(test-narrative): add narrative-tag Zod schema package by @stevenobiajulu in #243
- feat(allure-test-factory): add visibility metadata + corpusVisibility label by @stevenobiajulu in #245
- feat(test-narrative): add AST extractor + check_test_narratives CI gate by @stevenobiajulu in #247
- feat(scripts): add draft-narrative-jsdoc.mjs local Codex authoring helper by @stevenobiajulu in #249
- feat(scripts): emit tests-corpus.json + schema artifact at tag time by @stevenobiajulu in #251
- feat(scripts): batch narrative-generation driver for unattended Codex runs by @stevenobiajulu in #258
- feat(ci): add LLM-Based Quality Gate (Phase 1, advisory) by @stevenobiajulu in #253
- feat(verification): close inv_rt_001 round-trip text proof (zero-sorry spike) by @stevenobiajulu in #293
- feat(verification): reproducible Lean↔TS LCS differential harness (Tier 2.5) by @stevenobiajulu in #308
- feat(verification): extend Lean↔TS differential to Tier 2 accept/reject/validate helpers (Tier 2.5) by @stevenobiajulu in #309
- feat(docx-mcp): DOCX → Markdown export via shared serializer core by @stevenobiajulu in #310
- feat(verification): broaden the Lean Atom projection past the overfit LCS-soundness lemma (Tier 2.5) by @stevenobiajulu in #316
- feat(docx-mcp): DOCX → HTML export (first wave) (#304) by @stevenobiajulu in #322
- feat(docx-core): add DOCX → plain text export (#305) by @stevenobiajulu in #327
- feat(odf-core): add ODF .odt core library (archive, view, replace) by @stevenobiajulu in #328
- feat(verification): close the LCS DP-equivalence proof (Tier 2.5) by @stevenobiajulu in #330
- feat(verification): model the DeletedFieldCode locality constraint in Lean (closes G1/G2) by @stevenobiajulu in #334
- feat(docx-mcp): provider-aware ODF (.odt) backend (Phase 1 wiring) by @stevenobiajulu in #335
- feat(docx-mcp): ODF grep + insert_paragraph (Phase 2a) by @stevenobiajulu in #336
- feat(verification): broaden lean accept to keep empty-collapsing paragraphs (closes g3) by @stevenobiajulu in #340
- feat(docx-mcp): ODF comments — add_comment + get_comments for .odt (Phase 2b-1) by @stevenobiajulu in #341
- feat(docx-mcp): ODF compare_documents — paragraph-granularity redline for .odt (Slice 1) by @stevenobiajulu in #348
- feat(docx-core): formatting-fidelity comparison check (#363) by @stevenobiajulu in #365
- feat(docx-mcp): ODF compare_documents session mode — redline a .odt session against its original by @stevenobiajulu in #366
- feat(odf-core,docx-mcp): ODF compare_documents — intra-paragraph (run-level) tracked changes (#356) by @stevenobiajulu in #370
Bug Fixes
- fix(docx-core): split runs in insertCommentMarkers for sub-paragraph anchor ranges by @stevenobiajulu in #153
- fix(docx-core): handle collapsed ranges and validate offsets in addComment by @stevenobiajulu in #155
- fix(docx-mcp): document bk* paragraph ID stability and add opt-in content_fingerprint by @stevenobiajulu in #161
- fix(docx-mcp): honor SAFE_DOCX_AI_AUTHOR in CLI entry points (#181) by @stevenobiajulu in #182
- fix(docx-core): harden heading detection (#157 Phase 1) by @stevenobiajulu in #178
- fix(docx-mcp): warn when read_file budget is exceeded by a single node (closes #184) by @stevenobiajulu in #186
- fix(docx-core): declare xmlns:w14/w15 on comments root before writing prefixed attributes (#154) by @stevenobiajulu in #180
- fix(docx-mcp): surface comment_load_error on the default budgeted read path (closes #189) by @stevenobiajulu in #191
- fix(docx-core): suppress non-sectional false-positive headings (closes #187) by @stevenobiajulu in #188
- fix(docx-mcp): allow system temp roots in path policy by @stevenobiajulu in #210
- fix(docx-core): validate w:delInstrText placement and reject w:fldChar inside <w:del> by @stevenobiajulu in #211
- fix(docx-core): partition field-closure validation by ECMA-376 story (#212) by @stevenobiajulu in #225
- fix(docx-mcp): seed revision ids from side parts by @stevenobiajulu in #216
- fix(docx-core): fragment w:fldChar outside w:del per ECMA-376 Part 4 by @stevenobiajulu in #228
- fix(spec-compliance): make conformance-doc generator deterministic (closes #231) by @stevenobiajulu in #232
- fix(scripts): allure-labels validator false positives on factory self-test and fixture sources by @stevenobiajulu in #267
- fix(ci): npm 11 rejects double-loaded user/global config — split paths by @stevenobiajulu in #270
- fix(ci): harden LLM-gate against npm config-load failures (closes #273) by @stevenobiajulu in #274
- fix(ci): pass --repo to gh pr view in workflow_dispatch path (closes #275) by @stevenobiajulu in #276
- fix(docx-core): strip sectPr from cloned paragraph shell in insert_paragraph by @stevenobiajulu in #289
- fix(docx-core): preserve rsid identity in replace_text post-mutation merge by @stevenobiajulu in #290
- fix(allure-test-factory): restore Allure tree grouping under allure-vitest ≥3.6 project-scoped labels by @stevenobiajulu in #314
- fix(docx-mcp): resolve final write-path component to block symlink escape (#313) by @stevenobiajulu in #320
- fix(llm-gate): stagger LLM calls + retry backoff to avoid API bursts by @stevenobiajulu in #338
- fix(docx-core): make Reject All paragraph removal mark-based, not content-based (closes G4) by @stevenobiajulu in #337
- fix(docx-core): make accept all paragraph removal mark-based, not content-based (closes g5) by @stevenobiajulu in https://github.com/UseJunior/safe-docx...