@beyondwork/docx-react-component 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -104
- package/package.json +66 -15
- package/src/api/public-types.ts +1 -1
- package/src/compare/diff-engine.ts +530 -0
- package/src/compare/export-redlines.ts +162 -0
- package/src/compare/snapshot.ts +37 -0
- package/src/core/commands/index.ts +1 -1
- package/src/core/state/editor-state.ts +2 -2
- package/src/index.ts +45 -0
- package/src/legal/bookmarks.ts +196 -0
- package/src/legal/cross-references.ts +356 -0
- package/src/legal/defined-terms.ts +203 -0
- package/src/runtime/document-runtime.ts +3 -5
- package/src/runtime/table-commands.ts +4 -1
- package/src/runtime/table-schema.ts +17 -2
- package/src/runtime/virtualized-rendering.ts +258 -0
- package/src/ui/WordReviewEditor.tsx +256 -35
- package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +2 -2
- package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +16 -2
- package/.codex/config.toml +0 -5
- package/.corepack/v1/pnpm/10.30.3/.corepack +0 -1
- package/.corepack/v1/pnpm/10.30.3/LICENSE +0 -22
- package/.corepack/v1/pnpm/10.30.3/README.md +0 -240
- package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +0 -6
- package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +0 -5
- package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +0 -195400
- package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +0 -2
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +0 -31
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +0 -22
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +0 -193
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +0 -27
- package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/worker.js +0 -10119
- package/.corepack/v1/pnpm/10.30.3/package.json +0 -192
- package/.cursor/mcp.json +0 -7
- package/.github/workflows/ci.yml +0 -35
- package/.mcp.json +0 -7
- package/.openclaw/workspace-state.json +0 -4
- package/.pnpmrc.json +0 -1
- package/.wave-launch.sh +0 -7
- package/.workspace-marker +0 -1
- package/AGENTS.md +0 -78
- package/CHANGELOG.md +0 -177
- package/DESIGN.md +0 -929
- package/HEARTBEAT.md +0 -7
- package/IDENTITY.md +0 -23
- package/SOUL.md +0 -36
- package/TOOLS.md +0 -40
- package/USER.md +0 -17
- package/docs/README.md +0 -107
- package/docs/agents/wave-cont-eval-role.md +0 -36
- package/docs/agents/wave-cont-qa-role.md +0 -52
- package/docs/agents/wave-deploy-verifier-role.md +0 -34
- package/docs/agents/wave-design-role.md +0 -47
- package/docs/agents/wave-documentation-role.md +0 -34
- package/docs/agents/wave-infra-role.md +0 -34
- package/docs/agents/wave-integration-role.md +0 -37
- package/docs/agents/wave-launcher-role.md +0 -41
- package/docs/agents/wave-orchestrator-role.md +0 -52
- package/docs/agents/wave-planner-role.md +0 -39
- package/docs/agents/wave-security-role.md +0 -40
- package/docs/architecture/docx/README.md +0 -10
- package/docs/architecture/future/README.md +0 -8
- package/docs/architecture/ooxml-upgrade-analysis.md +0 -134
- package/docs/architecture/platform/shared-openxml-editor-platform.md +0 -153
- package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +0 -187
- package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +0 -150
- package/docs/comment-redline-overview.md +0 -350
- package/docs/concepts/context7-vs-skills.md +0 -118
- package/docs/concepts/operating-modes.md +0 -91
- package/docs/concepts/runtime-agnostic-orchestration.md +0 -111
- package/docs/concepts/what-is-a-wave.md +0 -217
- package/docs/context7/bundles.json +0 -222
- package/docs/context7/planner-agent/README.md +0 -28
- package/docs/context7/planner-agent/manifest.json +0 -83
- package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +0 -3283
- package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +0 -1699
- package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +0 -2251
- package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +0 -1729
- package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +0 -3747
- package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +0 -1675
- package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +0 -1173
- package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +0 -5211
- package/docs/context7/planner-agent/topics/planning-and-orchestration.md +0 -24
- package/docs/evals/arm-templates/README.md +0 -13
- package/docs/evals/arm-templates/full-wave.json +0 -15
- package/docs/evals/arm-templates/single-agent.json +0 -15
- package/docs/evals/benchmark-catalog.json +0 -670
- package/docs/evals/cases/README.md +0 -47
- package/docs/evals/cases/wave-blackboard-inbox-targeting.json +0 -73
- package/docs/evals/cases/wave-contradiction-conflict.json +0 -104
- package/docs/evals/cases/wave-expert-routing-preservation.json +0 -69
- package/docs/evals/cases/wave-hidden-profile-private-evidence.json +0 -81
- package/docs/evals/cases/wave-premature-closure-guard.json +0 -71
- package/docs/evals/cases/wave-silo-cross-agent-state.json +0 -77
- package/docs/evals/cases/wave-simultaneous-lockstep.json +0 -92
- package/docs/evals/external-benchmarks.json +0 -85
- package/docs/evals/external-command-config.sample.json +0 -9
- package/docs/evals/external-command-config.swe-bench-pro.json +0 -8
- package/docs/evals/pilots/README.md +0 -47
- package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +0 -64
- package/docs/evals/pilots/swe-bench-pro-public-pilot.json +0 -111
- package/docs/evals/wave-benchmark-program.md +0 -302
- package/docs/guides/planner.md +0 -220
- package/docs/guides/recommendations-0.8.9.md +0 -133
- package/docs/guides/signal-wrappers.md +0 -165
- package/docs/guides/terminal-surfaces.md +0 -96
- package/docs/image copy.png +0 -0
- package/docs/image.png +0 -0
- package/docs/images/image.png +0 -0
- package/docs/legal-feedback-architecture.md +0 -498
- package/docs/plans/component-cutover-matrix.json +0 -1072
- package/docs/plans/component-cutover-matrix.md +0 -307
- package/docs/plans/context7-wave-orchestrator.md +0 -155
- package/docs/plans/current-state.md +0 -198
- package/docs/plans/docx/README.md +0 -9
- package/docs/plans/examples/wave-benchmark-improvement.md +0 -108
- package/docs/plans/examples/wave-example-live-proof.md +0 -435
- package/docs/plans/master-plan.md +0 -224
- package/docs/plans/migration.md +0 -538
- package/docs/plans/operations/README.md +0 -7
- package/docs/plans/operations/wave-10-word-certification.md +0 -87
- package/docs/plans/operations/wave-8-railway-staging.md +0 -153
- package/docs/plans/operations/wave-9-manual-certification.md +0 -73
- package/docs/plans/platform/README.md +0 -9
- package/docs/plans/reference/legal-checklist-coverage.md +0 -258
- package/docs/plans/wave-orchestrator.md +0 -423
- package/docs/plans/waves/README.md +0 -75
- package/docs/plans/waves/completed/wave-0.md +0 -195
- package/docs/plans/waves/completed/wave-1.md +0 -379
- package/docs/plans/waves/completed/wave-10.md +0 -670
- package/docs/plans/waves/completed/wave-11.md +0 -335
- package/docs/plans/waves/completed/wave-12.md +0 -417
- package/docs/plans/waves/completed/wave-13.md +0 -316
- package/docs/plans/waves/completed/wave-14.md +0 -319
- package/docs/plans/waves/completed/wave-15.md +0 -321
- package/docs/plans/waves/completed/wave-16.md +0 -316
- package/docs/plans/waves/completed/wave-17.md +0 -331
- package/docs/plans/waves/completed/wave-18.md +0 -328
- package/docs/plans/waves/completed/wave-2.md +0 -438
- package/docs/plans/waves/completed/wave-3.md +0 -435
- package/docs/plans/waves/completed/wave-4.md +0 -430
- package/docs/plans/waves/completed/wave-5.md +0 -430
- package/docs/plans/waves/completed/wave-6.md +0 -430
- package/docs/plans/waves/completed/wave-7.md +0 -526
- package/docs/plans/waves/completed/wave-8.md +0 -596
- package/docs/plans/waves/completed/wave-9.md +0 -552
- package/docs/plans/waves/deferred/README.md +0 -14
- package/docs/plans/waves/deferred/encrypted-intake-contracts.md +0 -282
- package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +0 -308
- package/docs/plans/waves/deferred/wave-encrypted-intake.md +0 -451
- package/docs/plans/waves/design/README.md +0 -5
- package/docs/plans/waves/design/wave-1-a1.md +0 -309
- package/docs/plans/waves/reviews/README.md +0 -5
- package/docs/plans/waves/reviews/wave-0-cont-qa.md +0 -151
- package/docs/plans/waves/reviews/wave-1-cont-qa.md +0 -46
- package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +0 -51
- package/docs/plans/waves/reviews/wave-10-cont-qa.md +0 -24
- package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +0 -46
- package/docs/plans/waves/reviews/wave-10-performance-signoff.md +0 -55
- package/docs/plans/waves/reviews/wave-10-regression-proof.md +0 -23
- package/docs/plans/waves/reviews/wave-10-release-audit.md +0 -31
- package/docs/plans/waves/reviews/wave-10-service-proof.md +0 -83
- package/docs/plans/waves/reviews/wave-10-word-certification.md +0 -31
- package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +0 -277
- package/docs/plans/waves/reviews/wave-18-cont-qa.md +0 -255
- package/docs/plans/waves/reviews/wave-18-parity-proof.md +0 -271
- package/docs/plans/waves/reviews/wave-19-cont-qa.md +0 -59
- package/docs/plans/waves/reviews/wave-2-cont-qa.md +0 -72
- package/docs/plans/waves/reviews/wave-20-cont-qa.md +0 -60
- package/docs/plans/waves/reviews/wave-25-cont-qa.md +0 -48
- package/docs/plans/waves/reviews/wave-28-cont-qa.md +0 -46
- package/docs/plans/waves/reviews/wave-29-cont-qa.md +0 -53
- package/docs/plans/waves/reviews/wave-3-cont-qa.md +0 -53
- package/docs/plans/waves/reviews/wave-3-core-proof.md +0 -77
- package/docs/plans/waves/reviews/wave-3-validator-proof.md +0 -73
- package/docs/plans/waves/reviews/wave-32-cont-qa.md +0 -43
- package/docs/plans/waves/reviews/wave-33-cont-qa.md +0 -526
- package/docs/plans/waves/reviews/wave-34-cont-qa.md +0 -100
- package/docs/plans/waves/reviews/wave-35-cont-qa.md +0 -145
- package/docs/plans/waves/reviews/wave-4-cont-qa.md +0 -47
- package/docs/plans/waves/reviews/wave-4-structure-proof.md +0 -69
- package/docs/plans/waves/reviews/wave-5-comment-proof.md +0 -158
- package/docs/plans/waves/reviews/wave-5-cont-qa.md +0 -68
- package/docs/plans/waves/reviews/wave-6-cont-qa.md +0 -416
- package/docs/plans/waves/reviews/wave-6-redline-proof.md +0 -130
- package/docs/plans/waves/reviews/wave-7-cont-qa.md +0 -82
- package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +0 -85
- package/docs/plans/waves/reviews/wave-7-preservation-proof.md +0 -119
- package/docs/plans/waves/reviews/wave-7-trust-ux.md +0 -87
- package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +0 -128
- package/docs/plans/waves/reviews/wave-8-cont-qa.md +0 -92
- package/docs/plans/waves/reviews/wave-8-live-proof.md +0 -140
- package/docs/plans/waves/reviews/wave-8-security.md +0 -47
- package/docs/plans/waves/reviews/wave-9-editor-embedding.md +0 -39
- package/docs/plans/waves/reviews/wave-9-fixture-runner.md +0 -56
- package/docs/plans/waves/reviews/wave-9-live-proof.md +0 -105
- package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +0 -152
- package/docs/plans/waves/specs/README.md +0 -5
- package/docs/plans/waves/specs/wave-1-component-boundaries.md +0 -322
- package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +0 -323
- package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +0 -339
- package/docs/plans/waves/specs/wave-1-runtime-contracts.md +0 -509
- package/docs/plans/waves/wave-19.md +0 -341
- package/docs/plans/waves/wave-20.md +0 -308
- package/docs/plans/waves/wave-21.md +0 -289
- package/docs/plans/waves/wave-22.md +0 -221
- package/docs/plans/waves/wave-23.md +0 -295
- package/docs/plans/waves/wave-24.md +0 -286
- package/docs/plans/waves/wave-25.md +0 -313
- package/docs/plans/waves/wave-26.md +0 -300
- package/docs/plans/waves/wave-27.md +0 -299
- package/docs/plans/waves/wave-28.md +0 -368
- package/docs/plans/waves/wave-29.md +0 -303
- package/docs/plans/waves/wave-30.md +0 -307
- package/docs/plans/waves/wave-31.md +0 -231
- package/docs/plans/waves/wave-32.md +0 -152
- package/docs/plans/waves/wave-33.md +0 -147
- package/docs/plans/waves/wave-34.md +0 -148
- package/docs/plans/waves/wave-35.md +0 -141
- package/docs/plans/waves/wave-36.md +0 -146
- package/docs/plans/xlsx/README.md +0 -14
- package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +0 -126
- package/docs/reference/cli-reference.md +0 -600
- package/docs/reference/coordination-and-closure.md +0 -487
- package/docs/reference/deep-research-report (15).md +0 -25
- package/docs/reference/docx/README.md +0 -10
- package/docs/reference/legal-checklist.md +0 -445
- package/docs/reference/live-proof-waves.md +0 -199
- package/docs/reference/ooxml-compliance.md +0 -129
- package/docs/reference/ooxml-feature-parity-matrix.md +0 -172
- package/docs/reference/platform/shared-ooxml-platform-guidance.md +0 -77
- package/docs/reference/prototype-agent-prompt-legal-fidelity.md +0 -155
- package/docs/reference/public-api.md +0 -456
- package/docs/reference/repository-guidance.md +0 -58
- package/docs/reference/runtime-config/README.md +0 -182
- package/docs/reference/runtime-config/claude.md +0 -110
- package/docs/reference/runtime-config/codex.md +0 -82
- package/docs/reference/runtime-config/opencode.md +0 -93
- package/docs/reference/sample-waves.md +0 -105
- package/docs/reference/skills.md +0 -237
- package/docs/reference/templates/AGENTS.md +0 -78
- package/docs/reference/templates/HEARTBEAT.md +0 -7
- package/docs/reference/templates/IDENTITY.md +0 -23
- package/docs/reference/templates/SOUL.md +0 -36
- package/docs/reference/templates/TOOLS.md +0 -40
- package/docs/reference/templates/USER.md +0 -17
- package/docs/reference/wave-control.md +0 -184
- package/docs/reference/wave-planning-lessons.md +0 -167
- package/docs/reference/word-review-editor-frontend-architecture.md +0 -479
- package/docs/reference/word-review-editor-ux-guide.md +0 -253
- package/docs/reference/xlsx/xlsx-ooxml-compliance.md +0 -137
- package/docs/research/agent-context-sources.md +0 -178
- package/docs/research/coordination-failure-review.md +0 -290
- package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +0 -2317
- package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +0 -219
- package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +0 -1112
- package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +0 -751
- package/docs/research/xlsx/raw/README.md +0 -13
- package/docs/roadmap.md +0 -174
- package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +0 -677
- package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +0 -274
- package/docs/xlsx-react/README.md +0 -38
- package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +0 -621
- package/docs/xlsx-react/canonical-workbook-model-and-commands.md +0 -948
- package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +0 -228
- package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +0 -809
- package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +0 -537
- package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +0 -520
- package/docs/xlsx-react/xlsx-editor-research-pack.md +0 -871
- package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +0 -436
- package/docs/xlsx-react/xlsx-ooxml-compliance.md +0 -320
- package/examples/README.md +0 -16
- package/memory/MEMORY.md +0 -24
- package/pnpm-workspace.yaml +0 -4
- package/scripts/check-no-authored-js.sh +0 -13
- package/scripts/context7-api-check.sh +0 -65
- package/scripts/context7-export-env.sh +0 -42
- package/scripts/run-context7-mcp.sh +0 -8
- package/scripts/run-workspace-tests.sh +0 -15
- package/scripts/start-wave-10-local.sh +0 -189
- package/scripts/wave-agent-attach.sh +0 -47
- package/scripts/wave-auto-answer.sh +0 -118
- package/scripts/wave-dashboard-attach.sh +0 -13
- package/scripts/wave-launch.sh +0 -273
- package/scripts/wave-overnight-supervisor.sh +0 -145
- package/scripts/wave-status.sh +0 -379
- package/scripts/wave-watch.sh +0 -231
- package/services/README.md +0 -17
- package/services/openxml-validator/Dockerfile +0 -29
- package/services/openxml-validator/OpenXmlValidator.Api.csproj +0 -12
- package/services/openxml-validator/Program.cs +0 -436
- package/services/openxml-validator/README.md +0 -152
- package/services/openxml-validator/railway.json +0 -16
- package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +0 -318
- package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +0 -1302
- package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +0 -546
- package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +0 -146
- package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +0 -2
- package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +0 -818
- package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +0 -229
- package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +0 -121
- package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +0 -21
- package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +0 -1
- package/services/react-word-editor/Dockerfile +0 -26
- package/services/react-word-editor/README.md +0 -254
- package/services/react-word-editor/app/api/certification/route.ts +0 -79
- package/services/react-word-editor/app/api/demo-sessions/route.ts +0 -109
- package/services/react-word-editor/app/api/deploy-health/route.ts +0 -23
- package/services/react-word-editor/app/api/exports/[exportId]/route.ts +0 -34
- package/services/react-word-editor/app/api/exports/route.ts +0 -81
- package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +0 -100
- package/services/react-word-editor/app/api/health/route.ts +0 -70
- package/services/react-word-editor/app/api/runs/[runId]/route.ts +0 -36
- package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +0 -85
- package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +0 -199
- package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +0 -45
- package/services/react-word-editor/app/api/uploads/route.ts +0 -70
- package/services/react-word-editor/app/api/validate/route.ts +0 -310
- package/services/react-word-editor/app/certification/[runId]/page.tsx +0 -14
- package/services/react-word-editor/app/certification/page.tsx +0 -32
- package/services/react-word-editor/app/dashboard/page.tsx +0 -7
- package/services/react-word-editor/app/demo/page.tsx +0 -30
- package/services/react-word-editor/app/demo/prototype-client.tsx +0 -1080
- package/services/react-word-editor/app/editor/[sessionId]/page.tsx +0 -33
- package/services/react-word-editor/app/fixtures/page.tsx +0 -7
- package/services/react-word-editor/app/globals.css +0 -121
- package/services/react-word-editor/app/layout.tsx +0 -32
- package/services/react-word-editor/app/page.tsx +0 -30
- package/services/react-word-editor/app/runs/[runId]/page.tsx +0 -34
- package/services/react-word-editor/app/wave-10-word-review/page.tsx +0 -7
- package/services/react-word-editor/components/harness-control-bar.tsx +0 -289
- package/services/react-word-editor/components/harness-editor-session-client.tsx +0 -1214
- package/services/react-word-editor/components/harness-workspace-page.tsx +0 -715
- package/services/react-word-editor/components/reduced-motion-toggle.tsx +0 -79
- package/services/react-word-editor/components/workspace-certification-panel.tsx +0 -307
- package/services/react-word-editor/lib/certification-bundle.ts +0 -796
- package/services/react-word-editor/lib/certification-store.ts +0 -661
- package/services/react-word-editor/lib/demo-fixtures.test.mjs +0 -195
- package/services/react-word-editor/lib/demo-fixtures.ts +0 -1519
- package/services/react-word-editor/lib/editor-session-summary.test.mjs +0 -68
- package/services/react-word-editor/lib/editor-session-summary.ts +0 -14
- package/services/react-word-editor/lib/editor-session.ts +0 -228
- package/services/react-word-editor/lib/exports-route.test.mjs +0 -32
- package/services/react-word-editor/lib/harness-client.ts +0 -347
- package/services/react-word-editor/lib/harness-config.json +0 -30
- package/services/react-word-editor/lib/harness-config.test.mjs +0 -31
- package/services/react-word-editor/lib/harness-config.ts +0 -21
- package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +0 -220
- package/services/react-word-editor/lib/harness-editor-datastore.ts +0 -161
- package/services/react-word-editor/lib/private-mode.test.mjs +0 -42
- package/services/react-word-editor/lib/private-mode.ts +0 -61
- package/services/react-word-editor/lib/regression-report.test.mjs +0 -352
- package/services/react-word-editor/lib/regression-report.ts +0 -896
- package/services/react-word-editor/lib/run-artifacts.ts +0 -934
- package/services/react-word-editor/lib/run-history.ts +0 -755
- package/services/react-word-editor/lib/scenario-artifacts.test.mjs +0 -41
- package/services/react-word-editor/lib/scenario-artifacts.ts +0 -44
- package/services/react-word-editor/lib/storage.ts +0 -953
- package/services/react-word-editor/lib/validator-client.test.mjs +0 -54
- package/services/react-word-editor/lib/validator-client.ts +0 -95
- package/services/react-word-editor/lib/workspace-navigation.ts +0 -79
- package/services/react-word-editor/middleware.ts +0 -35
- package/services/react-word-editor/next-env.d.ts +0 -6
- package/services/react-word-editor/next.config.mjs +0 -15
- package/services/react-word-editor/package.json +0 -38
- package/services/react-word-editor/postcss.config.mjs +0 -8
- package/services/react-word-editor/railway.json +0 -21
- package/services/react-word-editor/scripts/wave-10-certification.mjs +0 -101
- package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +0 -911
- package/services/react-word-editor/tsconfig.json +0 -39
- package/services/react-word-editor/tsconfig.tsbuildinfo +0 -1
- package/skills/README.md +0 -48
- package/skills/domain-docx-compatibility/SKILL.md +0 -44
- package/skills/domain-docx-compatibility/skill.json +0 -19
- package/skills/domain-editor-architecture/SKILL.md +0 -49
- package/skills/domain-editor-architecture/skill.json +0 -19
- package/skills/domain-legal-review/SKILL.md +0 -39
- package/skills/domain-legal-review/skill.json +0 -19
- package/skills/provider-aws/SKILL.md +0 -117
- package/skills/provider-aws/adapters/claude.md +0 -1
- package/skills/provider-aws/adapters/codex.md +0 -1
- package/skills/provider-aws/references/service-verification.md +0 -39
- package/skills/provider-aws/skill.json +0 -54
- package/skills/provider-custom-deploy/SKILL.md +0 -64
- package/skills/provider-custom-deploy/skill.json +0 -50
- package/skills/provider-docker-compose/SKILL.md +0 -96
- package/skills/provider-docker-compose/adapters/local.md +0 -1
- package/skills/provider-docker-compose/skill.json +0 -53
- package/skills/provider-github-release/SKILL.md +0 -121
- package/skills/provider-github-release/adapters/claude.md +0 -1
- package/skills/provider-github-release/adapters/codex.md +0 -1
- package/skills/provider-github-release/skill.json +0 -55
- package/skills/provider-kubernetes/SKILL.md +0 -143
- package/skills/provider-kubernetes/adapters/claude.md +0 -1
- package/skills/provider-kubernetes/adapters/codex.md +0 -1
- package/skills/provider-kubernetes/references/kubectl-patterns.md +0 -58
- package/skills/provider-kubernetes/skill.json +0 -52
- package/skills/provider-railway/SKILL.md +0 -123
- package/skills/provider-railway/adapters/claude.md +0 -1
- package/skills/provider-railway/adapters/codex.md +0 -1
- package/skills/provider-railway/adapters/local.md +0 -1
- package/skills/provider-railway/adapters/opencode.md +0 -1
- package/skills/provider-railway/references/verification-commands.md +0 -39
- package/skills/provider-railway/skill.json +0 -71
- package/skills/provider-ssh-manual/SKILL.md +0 -97
- package/skills/provider-ssh-manual/skill.json +0 -54
- package/skills/repo-coding-rules/SKILL.md +0 -55
- package/skills/repo-coding-rules/skill.json +0 -34
- package/skills/role-cont-eval/SKILL.md +0 -91
- package/skills/role-cont-eval/adapters/codex.md +0 -1
- package/skills/role-cont-eval/skill.json +0 -36
- package/skills/role-cont-qa/SKILL.md +0 -100
- package/skills/role-cont-qa/adapters/claude.md +0 -1
- package/skills/role-cont-qa/skill.json +0 -36
- package/skills/role-deploy/SKILL.md +0 -97
- package/skills/role-deploy/skill.json +0 -36
- package/skills/role-design/SKILL.md +0 -50
- package/skills/role-design/skill.json +0 -36
- package/skills/role-documentation/SKILL.md +0 -76
- package/skills/role-documentation/skill.json +0 -36
- package/skills/role-implementation/SKILL.md +0 -45
- package/skills/role-implementation/skill.json +0 -36
- package/skills/role-infra/SKILL.md +0 -81
- package/skills/role-infra/skill.json +0 -36
- package/skills/role-integration/SKILL.md +0 -91
- package/skills/role-integration/skill.json +0 -36
- package/skills/role-planner/SKILL.md +0 -39
- package/skills/role-planner/skill.json +0 -21
- package/skills/role-research/SKILL.md +0 -65
- package/skills/role-research/skill.json +0 -36
- package/skills/role-security/SKILL.md +0 -60
- package/skills/role-security/skill.json +0 -36
- package/skills/runtime-claude/SKILL.md +0 -66
- package/skills/runtime-claude/skill.json +0 -36
- package/skills/runtime-codex/SKILL.md +0 -58
- package/skills/runtime-codex/skill.json +0 -36
- package/skills/runtime-local/SKILL.md +0 -46
- package/skills/runtime-local/skill.json +0 -36
- package/skills/runtime-opencode/SKILL.md +0 -58
- package/skills/runtime-opencode/skill.json +0 -36
- package/skills/signal-hygiene/SKILL.md +0 -51
- package/skills/signal-hygiene/skill.json +0 -20
- package/skills/tui-design/SKILL.md +0 -77
- package/skills/tui-design/references/tui-design.md +0 -259
- package/skills/tui-design/skill.json +0 -36
- package/skills/wave-core/SKILL.md +0 -141
- package/skills/wave-core/references/marker-syntax.md +0 -70
- package/skills/wave-core/skill.json +0 -35
- package/test/README.md +0 -16
- package/test/core/formatting-commands.test.ts +0 -285
- package/test/core/image-commands.test.ts +0 -298
- package/test/core/mapping.test.ts +0 -186
- package/test/core/text-commands.test.ts +0 -176
- package/test/fixtures/docx/F01-basic-contract.docx +0 -0
- package/test/fixtures/docx/F01-basic-contract.md +0 -33
- package/test/fixtures/docx/F02-headings-styles.docx +0 -0
- package/test/fixtures/docx/F02-headings-styles.md +0 -33
- package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
- package/test/fixtures/docx/F03-legal-outline-numbering.md +0 -34
- package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
- package/test/fixtures/docx/F04-restart-numbering-schedules.md +0 -33
- package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
- package/test/fixtures/docx/F05-table-heavy-agreement.md +0 -34
- package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
- package/test/fixtures/docx/F06-merged-cells-signature-table.md +0 -34
- package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
- package/test/fixtures/docx/F07-inline-images-exhibit.md +0 -34
- package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
- package/test/fixtures/docx/F08-hyperlinks.md +0 -33
- package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
- package/test/fixtures/docx/F09-comments-single-paragraph.md +0 -33
- package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
- package/test/fixtures/docx/F10-threaded-comments-resolve.md +0 -33
- package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
- package/test/fixtures/docx/F11-redlines-basic.md +0 -33
- package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
- package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +0 -33
- package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
- package/test/fixtures/docx/F13-comments-on-deleted-text.md +0 -33
- package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
- package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +0 -33
- package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
- package/test/fixtures/docx/F15-sections-headers-footers.md +0 -33
- package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
- package/test/fixtures/docx/F16-footnotes-endnotes.md +0 -33
- package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
- package/test/fixtures/docx/F17-fields-and-toc.md +0 -33
- package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
- package/test/fixtures/docx/F18-content-controls-template.md +0 -33
- package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
- package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +0 -35
- package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
- package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +0 -33
- package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
- package/test/fixtures/docx/F21-malformed-broken-docx.md +0 -33
- package/test/fixtures/docx/README.md +0 -74
- package/test/fixtures/docx/certification-manifest.json +0 -104
- package/test/fixtures/docx/fixtures.manifest.json +0 -196
- package/test/fixtures/encrypted-docx/README.md +0 -27
- package/test/fixtures/encrypted-docx/certification-manifest.json +0 -9
- package/test/fixtures/encrypted-docx/fixtures.manifest.json +0 -47
- package/test/fixtures/scenarios/docx/README.md +0 -25
- package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
- package/test/fixtures/scenarios/docx/S01-sow-template.md +0 -30
- package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
- package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +0 -32
- package/test/fixtures/scenarios/docx/scenario-manifest.json +0 -53
- package/test/formats/xlsx/io/xlsx-import.test.ts +0 -766
- package/test/formats/xlsx/model/workbook.test.ts +0 -669
- package/test/helpers/dom-setup.ts +0 -124
- package/test/io/comment-roundtrip.test.ts +0 -272
- package/test/io/complex-content-roundtrip.test.ts +0 -632
- package/test/io/docx-compatibility-regression.test.ts +0 -199
- package/test/io/docx-session.test.ts +0 -1495
- package/test/io/footnotes-roundtrip.test.ts +0 -318
- package/test/io/headers-footers-roundtrip.test.ts +0 -547
- package/test/io/numbering-roundtrip.test.ts +0 -234
- package/test/io/package-reader.test.ts +0 -199
- package/test/io/paragraph-properties-roundtrip.test.ts +0 -129
- package/test/io/preserved-package-roundtrip.test.ts +0 -365
- package/test/io/property-completeness.test.ts +0 -292
- package/test/io/revision-roundtrip.test.ts +0 -347
- package/test/io/structural-blocks.test.ts +0 -202
- package/test/io/table-media-roundtrip.test.ts +0 -448
- package/test/io/table-properties-roundtrip.test.ts +0 -569
- package/test/io/table-roundtrip.test.ts +0 -302
- package/test/io/text-roundtrip.test.ts +0 -344
- package/test/model/canonical-document.test.ts +0 -285
- package/test/preservation/opaque-fragment-store.test.ts +0 -121
- package/test/preservation/package-preservation.test.ts +0 -395
- package/test/preservation/store.test.ts +0 -84
- package/test/review/comment-remapping.test.ts +0 -220
- package/test/review/comment-store.test.ts +0 -180
- package/test/review/move-revisions.test.ts +0 -143
- package/test/review/property-change-revisions.test.ts +0 -225
- package/test/review/revision-actions.test.ts +0 -330
- package/test/review/revision-store.test.ts +0 -193
- package/test/runtime/session-capabilities.test.ts +0 -260
- package/test/runtime/table-commands.test.ts +0 -356
- package/test/runtime/table-schema.test.ts +0 -221
- package/test/runtime/tracked-changes-toggle.test.ts +0 -107
- package/test/ui/comment-review-surface.test.tsx +0 -114
- package/test/ui/reduced-motion-toggle.test.tsx +0 -137
- package/test/ui/word-review-editor.imported-scenarios.test.tsx +0 -169
- package/test/ui/word-review-editor.interaction.test.tsx +0 -1198
- package/test/ui/word-review-editor.test.js +0 -188
- package/test/ui/word-review-editor.test.tsx +0 -280
- package/test/ui-tailwind/search-plugin.test.ts +0 -286
- package/test/validation/compatibility-engine.test.ts +0 -336
- package/test/validation/compatibility-report.test.ts +0 -189
- package/test/validation/low-priority-word-surfaces.test.ts +0 -282
- package/test/validation/malformed-doc.test.ts +0 -113
- package/test-results/.last-run.json +0 -4
- package/wave.config.json +0 -406
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
# Shared OpenXML Editor Platform for DOCX and XLSX
|
|
2
|
-
|
|
3
|
-
This research paper is source material.
|
|
4
|
-
|
|
5
|
-
Canonical repo-aligned platform doc:
|
|
6
|
-
|
|
7
|
-
- `docs/architecture/platform/shared-openxml-editor-platform.md`
|
|
8
|
-
|
|
9
|
-
## Interpretation of the problem
|
|
10
|
-
|
|
11
|
-
You already have a React-based Word-compatible DOCX editor whose core posture is “package-first, runtime-owned truth, command→transaction→commit, and never silently drop preservable content.” That posture is explicitly documented in your repo’s OOXML compliance model and public API contracts.
|
|
12
|
-
|
|
13
|
-
The ask is to design an XLSX sibling with the same architectural rigor, without pretending spreadsheets are “rich text + cells,” and to define a shared platform layer that both vertical editors can build on without forcing fake abstraction. The platform must treat `.docx`/`.xlsx` as OOXML packages under Open Packaging Conventions (OPC), preserve unsupported-but-preservable content, and keep host application behavior (Word/Excel reopen-without-repair-prompts) as the ultimate acceptance gate.
|
|
14
|
-
|
|
15
|
-
This memo therefore focuses on: extracting genuinely shared OPC/package/preservation/validation/session scaffolding; aligning the public API philosophy and trust/health model; and drawing hard boundaries around what must remain DOCX-specific vs XLSX-specific (canonical schema, editing primitives, selection model, review semantics, and surface rendering).
|
|
16
|
-
|
|
17
|
-
## Research plan
|
|
18
|
-
|
|
19
|
-
The research work followed three lanes, with connector-first priority:
|
|
20
|
-
|
|
21
|
-
First, I inspected the existing architecture and contracts in `bwllaming/docx-react-component`, concentrating on the pieces that already look “platform-like”: OPC package IO (`src/io/opc/*`), part/relationship modeling (`src/io/ooxml/part-manifest.ts`), export sessions and preserved-part reattachment (`src/io/export/*`), preservation stores and markup compatibility handling (`src/preservation/*`), the diagnostics taxonomy (`src/validation/*` + `docs/reference/ooxml-compliance.md`), the runtime command/transaction spine (`src/core/commands/*` + `src/runtime/*`), the published public API (`docs/reference/public-api.md`), and the React shell contract (“UI is a projection of runtime state”).
|
|
22
|
-
|
|
23
|
-
Second, I anchored the platform requirements in primary standards references for OOXML packaging and markup compatibility: the OOXML family as published by (ECMA-376) and the ISO/IEC 29500 series published under and. Because the platform is about packaging/preservation invariants, the key normative anchors are “OPC exists and is the packaging model” and “MCE defines forward-compatible markup handling.”
|
|
24
|
-
|
|
25
|
-
Third, I separated “spec-level correctness” from “host-level correctness” by incorporating’s own guidance on Open XML formats and Excel repair behavior, plus the Open XML SDK validation surface used in your repo (and documented as “necessary but not sufficient”).
|
|
26
|
-
|
|
27
|
-
## Findings
|
|
28
|
-
|
|
29
|
-
Your Word editor already contains a surprisingly complete “shared platform” nucleus, even though it lives inside a DOCX vertical today.
|
|
30
|
-
|
|
31
|
-
At the UI contract level, the repo is explicit that React does not own canonical document truth: UI components render from a runtime-provided snapshot (`RuntimeRenderSnapshot`) via `useSyncExternalStore`, and mutation never happens by “editing the DOM and hoping state follows.” Instead, mutation flows through runtime callbacks that dispatch commands.
|
|
32
|
-
|
|
33
|
-
At the runtime level, commands are a discriminated union (`EditorCommand`) executed into an `EditorTransaction` that carries `nextState`, mapping info, effects, and explicit history boundaries (“push” vs “skip”). That is the exact “commands → transactions → commit” spine you want to preserve across both DOCX and XLSX; the mechanics are shareable even if the domain command set is not.
|
|
34
|
-
|
|
35
|
-
The trust/health posture is also already formalized. Your repo’s `SessionCapabilities` are derived purely from runtime state (not component-local copies), and include explicit “exportBlocked”, “preserveOnlyCount”, and “unsupportedFatalCount” surfaces that drive UI behavior (e.g., rail visibility and export enablement). This is a cross-vertical platform concern, not a DOCX-only one.
|
|
36
|
-
|
|
37
|
-
On the file-format side, the repo treats `.docx` as an OPC package and implements its own package reader/writer, export-session rewriting, and preserved-part reattachment. The export design is structurally platform-grade: an `ExportSession` declares “owned output paths,” forbids owning reserved manifest paths, rewrites only what is owned, then reattaches all non-owned “content” parts from the source package (including package-level relationships).
|
|
38
|
-
|
|
39
|
-
The DOCX vertical session (`loadDocxEditorSession`) demonstrates the target platform shape for any OOXML editor: read bytes → parse OPC → fail closed on malformed package or broken relationships → import owned parts into canonical runtime state → register non-owned parts into preservation → produce a snapshot and a compatibility report → export by rewriting owned parts into an export session.
|
|
40
|
-
|
|
41
|
-
Most importantly for “never drop preservable content,” your compliance model is explicit: every feature must be classified as `supported-roundtrip`, `preserve-only`, or `unsupported-fatal`, and “supported-import-only / supported-export-only” are explicitly rejected as dishonest categories. That taxonomy is already enforced in the diagnostics layer and surfaced in runtime health.
|
|
42
|
-
|
|
43
|
-
The response model is also already named and operational: preserve, lock, warn, block, fail. This gives a shared vocabulary for user experience and for export gating decisions across DOCX and XLSX.
|
|
44
|
-
|
|
45
|
-
For forward-compatibility markup handling, the repo has dedicated markup-compatibility handling that extracts and preserves root-level markup compatibility attributes (e.g., `xmlns:mc`, `mc:Ignorable`, and related namespace declarations) rather than letting serialization accidentally strip them. That’s directly portable as a platform concern, even if the exact root element differs between Word and Spreadsheet parts.
|
|
46
|
-
|
|
47
|
-
Your tests demonstrate that preservation isn’t aspirational; it’s asserted. The fixture-style tests explicitly prove that unknown/preserved parts survive export byte-for-byte, that `mc:Ignorable` survives, and that broken relationship targets fail closed with export blocked. This fixture program is exactly the pattern an XLSX sibling will need, with Excel reopen behavior as the gate.
|
|
48
|
-
|
|
49
|
-
Finally, the repo already integrates Open XML SDK validation as a separate service/CI tool rather than a browser runtime dependency. The OOXML compliance doc explicitly says SDK validation is necessary but not sufficient, and your validator service uses `OpenXmlValidator` to validate a package and emits schema findings. That architecture is inherently shareable and should become a platform capability for both DOCX and XLSX.
|
|
50
|
-
|
|
51
|
-
From standards and host behavior sources: OOXML’s packaging model and markup compatibility model are standardized under ECMA-376 / ISO/IEC 29500, so “treat `.xlsx` as a package with parts + relationships + content types” is the normative stance, not a design preference. Meanwhile, Excel explicitly has corruption detection and repair flows (automatic recovery and “Open and Repair”), so the platform has to assume that export correctness is judged by whether the host detects corruption and repairs (which can be destructive), not by whether your code “successfully wrote a ZIP.” And Microsoft’s Open XML format guidance distinguishes `.xlsx` (no macros) from macro-enabled formats (e.g., `.xlsm`), which directly impacts what a “spreadsheet editor” can safely claim as in-scope for import/edit/export without silent loss.
|
|
52
|
-
|
|
53
|
-
## Recommended design / decisions
|
|
54
|
-
|
|
55
|
-
The core decision is to elevate the pieces that are truly format-agnostic (OPC mechanics, preservation plumbing, diagnostics taxonomy, session lifecycle scaffolding, validation harnessing, and host-facing API philosophy) into a shared “OpenXML Editor Platform,” while explicitly refusing to unify DOCX and XLSX at the canonical-schema and editing-primitive layers.
|
|
56
|
-
|
|
57
|
-
The platform should be defined as a set of *capabilities* with narrow, typed contracts, not a single “OpenXmlEditorBase” class that both verticals subclass. Your repo already demonstrates the right posture: shared invariants are encoded in stand-alone modules (e.g., diagnostics taxonomy, export sessions, preserved-part reattachment), and vertical code composes them.
|
|
58
|
-
|
|
59
|
-
Platform modules that should be shared between DOCX and XLSX:
|
|
60
|
-
|
|
61
|
-
Package/OPC core: everything needed to parse and emit a correct OPC package and to reason about parts and relationships should be shared. In your repo, that includes the package reader/writer (ZIP + content types + rels), the part-manifest modeling, relationship target resolution, and the “reserved-path” discipline in export sessions. Even if XLSX ultimately needs additional ZIP features (compression choices, streaming), the invariants and APIs should stay common.
|
|
62
|
-
|
|
63
|
-
Preservation plumbing: “reattach all non-owned content parts and package relationships” is not DOCX-specific. It is the platform mechanism that makes “unsupported but preservable content must never be silently dropped” implementable. The DOCX code already does this at the package boundary, and tests lock it in. XLSX will need the same mechanism because spreadsheets have even more peripheral parts (drawings, charts, pivot caches, external connections) that you will likely classify preserve-only early on.
|
|
64
|
-
|
|
65
|
-
Diagnostics + compatibility taxonomy: the tri-class model (`supported-roundtrip`, `preserve-only`, `unsupported-fatal`) and the export-blocking logic based on “unsupported-fatal or fatal errors” is already implemented and already used by runtime health surfaces. This belongs in the shared platform as the common language for both editors. DOCX and XLSX can (and will) define different feature keys and different classifiers, but the taxonomy and export-block semantics should be shared so hosts see a consistent trust posture across document types.
|
|
66
|
-
|
|
67
|
-
Session lifecycle scaffolding (import → runtime → export): your DOCX session loader has a clear structure: package read, structural safety checks (broken relationships), owned-part import, preservation registration, compatibility report, and export function that rewrites owned parts only if export is not blocked. This skeleton should be extracted as a platform “session kernel” that DOCX and XLSX implement by providing (a) their owned-part set, (b) their import parser/normalizer, and (c) their export serializer.
|
|
68
|
-
|
|
69
|
-
Markup compatibility preservation: preserving markup compatibility attributes is a format-agnostic need, but the *filtering rules* are not. The platform should provide generic utilities (“extract root attributes”, “preserve MCE attributes”), while each vertical supplies (a) its root element name(s) and (b) the namespace prefixes it must preserve for safe round-tripping. Your current `filterMarkupCompatibilityAttributes` is Word-root oriented; XLSX must similarly preserve workbook/sheet-level `mc:*` and any ignorable namespaces it encounters.
|
|
70
|
-
|
|
71
|
-
Read-only diagnostics mode: “fail closed into diagnostics/read-only mode with export blocked” is explicitly part of your compliance contract. This should be a platform capability with a shared runtime interface contract so both editors can surface “this package cannot be safely rewritten” in a consistent, host-friendly way.
|
|
72
|
-
|
|
73
|
-
Autosave and snapshot contract philosophy: the host-facing persistence model (persist snapshots as JSON checkpoints; manual export checkpoints must save snapshot first; autosave must be debounced and scoped to revision tokens) is not DOCX-only. It’s a platform-level host contract that should remain aligned between editors to avoid “one editor loses work differently than the other.”
|
|
74
|
-
|
|
75
|
-
Validation harnessing (not runtime): the Open XML SDK validator service should be generalized to validate both Wordprocessing and Spreadsheet packages (and ideally accept `.docx`, `.xlsx`, `.pptx` with explicit gates). The platform should standardize the CI/API integration shape: “package inspection + SDK validation findings + stable tokens for diagnostics,” while keeping it out of the browser bundle.
|
|
76
|
-
|
|
77
|
-
What must remain document-type-specific (do not share, by design):
|
|
78
|
-
|
|
79
|
-
Canonical schema: your DOCX `CanonicalDocument` is a linearized story model with review + preservation fields. XLSX needs a workbook model (sheets, cells, shared strings, styles, formula graph, defined names, calc settings). Sharing a canonical schema here will produce “fake abstraction” and break spreadsheet-first correctness.
|
|
80
|
-
|
|
81
|
-
Editing primitives: DOCX operations are text/paragraph-centric (insert text, split paragraph, etc.). XLSX primitives are grid-centric (edit cell value, fill, cut/paste ranges, insert rows/cols, adjust formulas, recalc dependencies). Forcing shared primitives would either cripple XLSX or contaminate DOCX with irrelevant complexity.
|
|
82
|
-
|
|
83
|
-
Selection model: DOCX currently uses a flat range/node/detached anchor projection model. XLSX needs 2D selections (cell, range, multi-range, entire row/column, sheet selection), plus active cell vs selection range semantics. This must be vertical-specific, though the *pattern* “selection is runtime-owned and projected to UI” remains shared.
|
|
84
|
-
|
|
85
|
-
Review semantics and provenance: Word tracked changes and comment anchoring are structurally different from spreadsheet change tracking/comment models and will diverge even more once formulas and structural operations exist. Treat review as a vertical capability with a shared trust/taxonomy surface.
|
|
86
|
-
|
|
87
|
-
Surface rendering: Word’s “button-per-character” rendering stack is intentionally specialized. A spreadsheet must use virtualization, grid rendering, editing overlays, and significantly different interaction mechanics. Share only the outer shell concepts (runtime snapshot projection, eventing), not the renderer.
|
|
88
|
-
|
|
89
|
-
Public API philosophy should stay aligned without forcing fake abstraction:
|
|
90
|
-
|
|
91
|
-
Your current public API has strong, repeatable principles: uncontrolled-by-default; narrow controlled reload via `externalDocumentRevision` + `externalDocSource`; ref is a thin wrapper over runtime (no DOM exposing, no mutable canonical state); and trust/health is explicit via compatibility reports, warnings, and errors. That philosophy should become a platform “API doctrine,” with separate `WordReviewEditor` and `SpreadsheetEditor` components that expose symmetric (not identical) surfaces: `exportDocx` vs `exportXlsx`, DOCX-specific ref methods vs XLSX-specific ones.
|
|
92
|
-
|
|
93
|
-
The platform should standardize shared host-facing types where they are genuinely common: `PersistedEditorSnapshot` pattern, `CompatibilityReport`, `EditorWarning`, `EditorError`, event stream patterns, autosave config and datastore adapter interface. Then each vertical adds its own specialized snapshot payload and ref commands. This prevents API drift while still being honest about domain differences.
|
|
94
|
-
|
|
95
|
-
## Risks and open questions
|
|
96
|
-
|
|
97
|
-
Over-sharing risks: The biggest risk is building a “shared” canonical model or selection abstraction that encodes Word’s linear text assumptions and then trying to retrofit spreadsheets into it. This will either (a) force spreadsheets into a degenerate “text grid” model that can’t correctly handle formulas, range operations, and recalculation, or (b) pollute the shared layer with conditionals until the platform becomes unmaintainable. Your own repo already warns against silent scope widening (e.g., tables require explicit contract revisions). The XLSX sibling needs the same discipline.
|
|
98
|
-
|
|
99
|
-
Under-sharing risks: Duplicating OPC/package/preservation logic across DOCX and XLSX will almost certainly diverge over time and create inconsistent trust outcomes: one editor preserves unknown parts, the other silently drops; one blocks export on broken relationships, the other “best-efforts” and causes host repair prompts. Given Excel’s repair mechanisms, divergence here will show up as user-visible corruption/repair flows.
|
|
100
|
-
|
|
101
|
-
Standards-access and exact normative deltas: ECMA-376 / ISO/IEC 29500 define the packaging and MCE rules, but host behavior includes undocumented heuristics and extension points. The open question for the XLSX vertical is: which OOXML extension namespaces and parts must be preserved *exactly* for safe reopen, and which can be normalized without triggering Excel repair flows? The platform should assume “preserve by default; rewrite only owned parts,” but XLSX has more parts that Excel treats as coupled (e.g., calc artifacts, shared strings, styles). This implies an early conservative scope: preserve-only for many features until proven safe with Excel reopen tests.
|
|
102
|
-
|
|
103
|
-
Macro-enabled and encrypted containers: Microsoft’s own guidance distinguishes macro-free `.xlsx` from macro-enabled formats (e.g., `.xlsm`). If XLSX editing is in-scope, macro preservation and VBA project parts are out-of-scope unless you explicitly support `.xlsm` and can preserve those parts without rewriting hazards. Your DOCX API already excludes encrypted/password-to-open intake as a host responsibility; XLSX should follow the same posture unless you explicitly expand it.
|
|
104
|
-
|
|
105
|
-
Validation sufficiency: Open XML SDK validation is a schema-level check. It is necessary but does not guarantee Excel/Word won’t repair or reinterpret content. The platform must keep a two-tier gate: schema validation (SDK) plus host reopen certification (Excel/Word).
|
|
106
|
-
|
|
107
|
-
## Concrete deliverable in the requested format
|
|
108
|
-
|
|
109
|
-
Decision-ready architecture memo with recommended extraction order:
|
|
110
|
-
|
|
111
|
-
Proposed repo/module boundaries (target end state)
|
|
112
|
-
|
|
113
|
-
A two-vertical layout with an explicit platform layer:
|
|
114
|
-
|
|
115
|
-
```text
|
|
116
|
-
packages/
|
|
117
|
-
openxml-platform/
|
|
118
|
-
opc/
|
|
119
|
-
package-reader.ts
|
|
120
|
-
package-writer.ts
|
|
121
|
-
part-manifest.ts
|
|
122
|
-
corrupt-package.ts # generalized, not "docx"-named
|
|
123
|
-
preservation/
|
|
124
|
-
preservation-store.ts # generic structures + vertical classifiers
|
|
125
|
-
markup-compatibility.ts # generic root-attr extraction + MCE helpers
|
|
126
|
-
preserved-parts.ts # capture + reattach mechanisms
|
|
127
|
-
session/
|
|
128
|
-
session-kernel.ts # lifecycle scaffolding + safety checks
|
|
129
|
-
export-session.ts # owned-part rewrite discipline
|
|
130
|
-
import-diagnostics.ts # fail-closed diagnostics mode contract
|
|
131
|
-
read-only-diagnostics-runtime.ts
|
|
132
|
-
diagnostics/
|
|
133
|
-
diagnostics.ts # feature classes, warn/error taxonomy, export block rules
|
|
134
|
-
compatibility-report.ts # generic report builder scaffolding
|
|
135
|
-
validation/
|
|
136
|
-
openxml-validator-client.ts # calls validator service
|
|
137
|
-
validation-fixture-runner.ts # CI harness hooks
|
|
138
|
-
host/
|
|
139
|
-
datastore-adapter.ts # shared persistence contract
|
|
140
|
-
autosave.ts # shared debounce + revision-token scoping logic
|
|
141
|
-
events.ts # shared event envelope patterns
|
|
142
|
-
|
|
143
|
-
docx-editor/
|
|
144
|
-
docx-session.ts # DOCX-owned parts import/export
|
|
145
|
-
docx-canonical-schema/ # Word canonical model
|
|
146
|
-
docx-runtime/ # Word commands, mapping, review semantics
|
|
147
|
-
docx-ui/ # Word renderer + review workspace
|
|
148
|
-
|
|
149
|
-
xlsx-editor/
|
|
150
|
-
xlsx-session.ts # XLSX-owned parts import/export
|
|
151
|
-
xlsx-canonical-schema/ # Workbook canonical model
|
|
152
|
-
xlsx-runtime/ # Grid commands, selection, recalculation strategy
|
|
153
|
-
xlsx-ui/ # Virtualized grid renderer
|
|
154
|
-
services/
|
|
155
|
-
openxml-validator/
|
|
156
|
-
Program.cs # extended to accept .xlsx and run OpenXmlValidator
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
Why these boundaries are honest:
|
|
160
|
-
|
|
161
|
-
The platform layer contains only what is truly package/session/trust infrastructure: OPC mechanics, preserved part survival, diagnostics taxonomy, session lifecycle, autosave/snapshot scaffolding, and validation harnessing. This directly aligns with the repo’s existing “package-first rules” and “preserve/lock/warn/block/fail” posture and keeps the “host behavior is final standard” gate enforceable.
|
|
162
|
-
|
|
163
|
-
The vertical layers own canonical schema and editing semantics, because attempting to share those would violate the explicit requirement that spreadsheets not be treated as rich text, and because your current architecture already treats schema expansion as requiring explicit contract revision.
|
|
164
|
-
|
|
165
|
-
Platform extraction order (recommended sequence)
|
|
166
|
-
|
|
167
|
-
First extraction: OPC + export-session + preserved-part reattachment
|
|
168
|
-
Move `ExportSession` and `reattachPreservedParts` (and their supporting part/relationship utilities) into `openxml-platform/session` and `openxml-platform/opc`. These modules are already format-agnostic and have strong invariant checks (“cannot own reserved manifest paths,” “cannot rewrite non-owned paths”). This extraction is low-risk and unlocks XLSX immediately because XLSX must be package-first from day one.
|
|
169
|
-
|
|
170
|
-
Second extraction: diagnostics taxonomy + import diagnostics + read-only diagnostics runtime
|
|
171
|
-
Move `diagnostics.ts` and `import-diagnostics.ts` into `openxml-platform/diagnostics` and `openxml-platform/session`. These are already generic and underpin the cross-vertical response model (preserve/lock/warn/block/fail) and export blocking rules. This allows the XLSX editor to share a consistent trust model from its first non-trivial fixture import.
|
|
172
|
-
|
|
173
|
-
Third extraction: markup-compatibility utilities as configurable platform primitives
|
|
174
|
-
Move `extractDocumentRootAttributes` and the generic filtering helpers into a platform module, but refactor the filter to accept a vertical-provided allowlist/predicate rather than hardcoding Word namespace prefixes. This prevents Word-specific “xmlns:w14” concerns from bleeding into spreadsheets while preserving the shared MCE intent.
|
|
175
|
-
|
|
176
|
-
Fourth extraction: host persistence + autosave scaffolding (shell logic)
|
|
177
|
-
Extract datastore adapter types and autosave logic into the platform host module so both components share the same persistence semantics (save snapshot before export checkpoint; autosave keyed by revision token; failures surfaced via events). Then keep DOCX- or XLSX-specific UI surfaces out of that module.
|
|
178
|
-
|
|
179
|
-
Fifth extraction: validator service generalization
|
|
180
|
-
Extend the Open XML SDK validator service to accept `.xlsx` and validate with `OpenXmlValidator` over `SpreadsheetDocument` (parallel to current WordprocessingDocument validation). Keep it off the browser runtime path. The platform should define a stable response schema that both editors can consume for CI gating and diagnostics enrichment.
|
|
181
|
-
|
|
182
|
-
Sixth step: build XLSX as a first-class vertical using only platform primitives
|
|
183
|
-
Only after the platform primitives above exist should you start the XLSX work as a true sibling: implement `xlsx-session.ts` by declaring owned parts conservatively, and launch with a fixture corpus that proves (a) package integrity, (b) preserved-part survival, (c) Excel reopen-no-repair on “no-op export,” and (d) “minimal supported-roundtrip edit” (e.g., edit a cell value) without losing preservable content. Excel’s own repair behavior is the acceptance bar, not “we can parse and write XML.”
|
|
184
|
-
|
|
185
|
-
Shared platform API doctrine (what stays aligned)
|
|
186
|
-
|
|
187
|
-
Uncontrolled-by-default, narrow controlled reload: keep the pattern “host provides initial source once; host can replace document only via explicit revision token + external source.” This is already codified for DOCX and should be repeated for XLSX without inventing a shared “OpenXmlEditor” prop surface that hides important differences (`exportDocx` vs `exportXlsx`).
|
|
188
|
-
|
|
189
|
-
Runtime-owned truth, UI as projection: keep the runtime snapshot pattern and session capabilities derivation pattern across both editors. Your repo already encodes and documents these rules clearly; they belong in the platform doctrine and lint/test gates.
|
|
190
|
-
|
|
191
|
-
Trust/health surfaces: keep `CompatibilityReport` + warning/error model consistent across verticals, so hosts don’t need two different “what does blocked export mean” implementations. The feature keys will differ, but the classes and gating semantics should not.
|
|
192
|
-
|
|
193
|
-
Release gates (platform + vertical)
|
|
194
|
-
|
|
195
|
-
Platform gates (must pass before XLSX ships a “v1 edit”): preserved-part survival tests analogous to current DOCX fixtures; fail-closed behavior on broken internal relationships; manifest/content-type correctness; and validator service clean runs.
|
|
196
|
-
|
|
197
|
-
XLSX vertical gates (minimum honest scope): Excel reopen without repair prompts is the primary gate; schema validation is secondary/necessary. Microsoft explicitly documents repair mechanics when corruption is detected, so triggering repair is treated as a failure unless explicitly accepted as a preserve-only/unsupported-fatal outcome.
|
|
198
|
-
|
|
199
|
-
## Sources
|
|
200
|
-
|
|
201
|
-
Internal (GitHub connector: `bwllaming/docx-react-component`)
|
|
202
|
-
|
|
203
|
-
Public API doctrine and host contract:
|
|
204
|
-
Frontend architecture rules (“UI is projection of runtime snapshot”):
|
|
205
|
-
OOXML compliance model and taxonomy:
|
|
206
|
-
Command → transaction execution spine:
|
|
207
|
-
Session capabilities / trust surfaces:
|
|
208
|
-
DOCX session import/export structure:
|
|
209
|
-
Export session + owned-part rewrite discipline:
|
|
210
|
-
Preserved-part reattachment mechanics:
|
|
211
|
-
Import diagnostics fail-closed mode:
|
|
212
|
-
Diagnostics taxonomy + export blocking semantics:
|
|
213
|
-
Markup-compatibility attribute preservation:
|
|
214
|
-
Preservation roundtrip tests (unknown parts, AlternateContent, broken rels):
|
|
215
|
-
Open XML SDK validator service implementation:
|
|
216
|
-
|
|
217
|
-
External standards and official documentation
|
|
218
|
-
|
|
219
|
-
OOXML standard family and parts listing (ECMA-376):
|
|
220
|
-
ISO/IEC 29500-2 (OPC) listing:
|
|
221
|
-
ISO/IEC 29500-3 (Markup Compatibility and Extensibility) listing:
|
|
222
|
-
Library overview and links for MCE/OOXML (helpful cross-reference):
|
|
223
|
-
|
|
224
|
-
Excel repair behavior (host-level correctness implications):
|
|
225
|
-
Microsoft Open XML format extensions (.docx/.xlsx/.pptx and macro-enabled suffixes):
|
|
226
|
-
|
|
227
|
-
Open XML SDK validation surface (`OpenXmlValidator`):
|
|
228
|
-
Open XML SDK `SpreadsheetDocument.Open` API surface (used for XLSX validation patterns):
|