Skip to content

Implement 1.0.0 export outcomes, artifact coverage and release gates (T3-T8) - #85

Merged
rogerdigital merged 5 commits into
mainfrom
fix/1.0-export-integrity
Sep 16, 2026
Merged

rogerdigital merged 5 commits into
mainfrom
fix/1.0-export-integrity

Conversation

@rogerdigital

Copy link
Copy Markdown
Owner

Summary

Execute tasks T3-T8 of the 1.0.0 release readiness plan. Four code/test tasks are complete and verified; the native acceptance tasks (T6) and their dependents (T7 docs evidence, T9 version bump) are recorded as BLOCKED in docs/releases/1.0.0/readiness.md with the exact missing capabilities — no acceptance bar was lowered.

T3 — Structured outcomes (e2c9dd3)

  • New ExportOutcome contract: completed / partial / cancelled / failed with completed and possibly-incomplete paths, warnings and errors.
  • ExportRunner finalizes through a single path per the plan's transition rules: cancellation preserves prior diagnostics instead of replacing them, a failed required copy keeps the primary in incompletePaths, missing requested inputs stay counted in the total and are named as errors, onFileComplete reports the completed count so progress cannot imply success after a failure, and the report includes status, counts, completed/incomplete paths, warnings and errors.

T4 — Accurate user feedback (23e670a)

  • New pure exportResultMessage helper replaces the boolean branch in main.ts; completion, partial, cancelled and failure are stated distinctly with counts, output root, first diagnostic, report path and a retry hint.

T5 — Reproducible artifacts (3098745)

  • scripts/create-release-fixtures.mjs per the acceptance protocol: 520 synthetic files with SHA-256 manifest, refuses non-empty destinations, valid PNGs.
  • ReleaseArtifacts.test.ts runs the real pipeline over Markdown, fallback HTML, DOCX and EPUB: markers, tables, code, XML validity, relationships, spine resolution, image byte equality, no app://, folder batch nesting/links/shared assets, collision A→B, report-name protection, and T3-conformant failure/cancellation injections. No PDF success claim.
  • Optional RELEASE_ARTIFACT_DIR persistence with an exclusive-create SHA-256 index; ordinary CI writes nothing.
  • renderHtmlDocument now guards style extraction on activeDocument so the headless fallback renders with the default stylesheet.

T8 — Release gates (064f518)

  • check-version.mjs also validates package-lock.json root versions and the versions.json → minAppVersion mapping.
  • New scripts/check-version.test.mjs (Node test runner, 8 cases including wrong-tag negative).
  • CI runs the script tests before check:version; the release workflow runs script tests, version gate, lint, build and full tests before attestation/publication, and prefers docs/releases/<tag>/release-notes.md when present.

Validation

  • npm test — 24 files, 411/411 (baseline 360 + 51 new)
  • node --test scripts/check-version.test.mjs — 8/8; npm run check:version — consistent 0.7.4
  • npm run lint:obsidian-warnings, npm run build — exit 0; workflow YAML parsed
  • Fixture generator: 520 files, hashes verified, second run refused, PNGs decoded by sips; generated DOCX/EPUB pass independent unzip -t

Not included (tracked as BLOCKED)

Native artifact/platform acceptance (T6) needs an interactive session against a fixed candidate plus Java/EPUBCheck, a real DOCX/EPUB reader and non-macOS devices; T7's evidence-bound documentation and the T9 version bump follow after it. Details and next actions are in docs/releases/1.0.0/readiness.md.

@rogerdigital
rogerdigital merged commit f0552fa into main Sep 16, 2026
1 check passed
@rogerdigital
rogerdigital deleted the fix/1.0-export-integrity branch September 16, 2026 16:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant