@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,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Wave Security Role"
|
|
3
|
-
summary: "Standing prompt for the security reviewer that performs a threat-model-first review before integration closure."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Wave Security Role
|
|
7
|
-
|
|
8
|
-
Use this prompt when an agent should act as the security reviewer for a wave.
|
|
9
|
-
|
|
10
|
-
## Standing prompt
|
|
11
|
-
|
|
12
|
-
```text
|
|
13
|
-
You are the wave security reviewer for the current wave.
|
|
14
|
-
|
|
15
|
-
Your job is to review the landed change set before integration closure, identify security-sensitive risks, and route exact fixes or approvals while the wave is still active. You are report-only by default. Do not replace implementation ownership.
|
|
16
|
-
|
|
17
|
-
Operating rules:
|
|
18
|
-
- Re-read the compiled shared summary, your inbox, the generated wave board projection, and the owned reports before major decisions.
|
|
19
|
-
- Do a threat-model pass before finalizing conclusions. Identify trust boundaries, attacker-controlled inputs, sensitive assets, approval-sensitive operations, and any external execution or data access paths touched by the wave.
|
|
20
|
-
- Prefer exact findings and exact requested fixes over vague warnings.
|
|
21
|
-
- Route fixes to the owning agent when the required change is outside your report path.
|
|
22
|
-
- Keep the final output short enough to drive relaunch decisions and closure gates.
|
|
23
|
-
|
|
24
|
-
What you must do:
|
|
25
|
-
- leave a security review report with these sections in order:
|
|
26
|
-
`Threat Model`
|
|
27
|
-
`Risky Surfaces`
|
|
28
|
-
`Findings`
|
|
29
|
-
`Required Approvals`
|
|
30
|
-
`Requested Fixes`
|
|
31
|
-
`Final Disposition`
|
|
32
|
-
- record each finding with severity, concrete file or surface, exploit or failure mode, and the owner expected to fix it
|
|
33
|
-
- record each approval-sensitive action explicitly, even if the wave can proceed without blocking
|
|
34
|
-
- emit one final structured marker:
|
|
35
|
-
`[wave-security] state=<clear|concerns|blocked> findings=<n> approvals=<n> detail=<short-note>`
|
|
36
|
-
|
|
37
|
-
Use `clear` only when no unresolved findings or approvals remain.
|
|
38
|
-
Use `concerns` when findings remain advisory for this wave and do not automatically block progression.
|
|
39
|
-
Use `blocked` only when the wave must stop before integration until a finding or approval is resolved.
|
|
40
|
-
```
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Docx Architecture
|
|
2
|
-
|
|
3
|
-
This directory is reserved for docx-specific architecture material as the broader `react-ooxml-office` docs hierarchy fills out.
|
|
4
|
-
|
|
5
|
-
Current docx architecture contracts still live in the legacy reference paths:
|
|
6
|
-
|
|
7
|
-
- `docs/reference/word-review-editor-frontend-architecture.md`
|
|
8
|
-
- `docs/reference/word-review-editor-ux-guide.md`
|
|
9
|
-
|
|
10
|
-
Those remain the canonical shipped docx architecture docs today.
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# Future Architecture
|
|
2
|
-
|
|
3
|
-
This directory is reserved for future architecture work that sits outside the current shipped docx runtime and outside the first shared OOXML sibling set.
|
|
4
|
-
|
|
5
|
-
For now, that mainly means:
|
|
6
|
-
|
|
7
|
-
- future pdf exploration
|
|
8
|
-
- later cross-vertical capabilities that should not be implied by current shipped contracts
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# Architectural Analysis: Preserve-Only → Supported Upgrade Path
|
|
2
|
-
|
|
3
|
-
## Architecture Summary
|
|
4
|
-
|
|
5
|
-
Our codebase has 4 layers for handling OOXML features:
|
|
6
|
-
|
|
7
|
-
1. **OPC Layer** (src/io/opc/) — ZIP package read/write, part discovery, relationship tracking
|
|
8
|
-
2. **Preservation Layer** (src/preservation/) — opaque fragment store, package part retention, MC handling
|
|
9
|
-
3. **Canonical Model** (src/model/) — typed document nodes, style catalog, media catalog
|
|
10
|
-
4. **Surface Projection** (src/runtime/) → **PM Schema** (src/ui-tailwind/) → rendered editor
|
|
11
|
-
|
|
12
|
-
### How features graduate from preserve-only to supported:
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
PRESERVE-ONLY: SUPPORTED:
|
|
16
|
-
OPC part bytes → opaque fragment → OPC part bytes → parser → canonical node
|
|
17
|
-
opaque block in surface → typed block in surface
|
|
18
|
-
locked in PM (no editing) → editable in PM schema
|
|
19
|
-
reattach original bytes on export → serialize from canonical on export
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
The key insight: our preservation system already handles ALL unknown content safely.
|
|
23
|
-
Graduating a feature means: add a parser, add a canonical type, add surface projection,
|
|
24
|
-
add PM rendering, and add a serializer. The preservation system handles the fallback.
|
|
25
|
-
|
|
26
|
-
### Validation strategy per tier:
|
|
27
|
-
|
|
28
|
-
- **Tier 1 (parse + pass-through)**: Unit test parse/serialize. Fixture round-trip.
|
|
29
|
-
- **Tier 2 (read-only projected)**: Above + surface projection test. No editing.
|
|
30
|
-
- **Tier 3 (fully editable)**: Above + PM schema + command tests + edit round-trip.
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Feature Groups by Architectural Pattern
|
|
35
|
-
|
|
36
|
-
### Group A: Simple Property Parsing (13 features, ~14h)
|
|
37
|
-
Pattern: Add field to existing canonical node type, parse from XML attr, serialize back.
|
|
38
|
-
No new PM nodes, no new surface blocks. Properties affect rendering CSS only.
|
|
39
|
-
|
|
40
|
-
Features: widowControl, pBdr, pShd, bidi, charSpacing, kerning, emboss/shadow,
|
|
41
|
-
columnBreaks, symbols, suppressLineNumbers, cnfStyle, tblLook, latentStyles.
|
|
42
|
-
|
|
43
|
-
Architecture:
|
|
44
|
-
- Extend ParagraphNode/TextMark interfaces in canonical-document.ts
|
|
45
|
-
- Parse in parse-main-document.ts (add cases to existing paragraph/run property loops)
|
|
46
|
-
- Serialize in serialize-main-document.ts (add cases to existing property serializers)
|
|
47
|
-
- Surface projection: carry properties through for CSS rendering
|
|
48
|
-
- PM schema: add attrs to paragraph/text nodes for styling
|
|
49
|
-
- Tests: parse + serialize round-trip per property
|
|
50
|
-
|
|
51
|
-
### Group B: Document Sub-Parts (9 features, ~42h)
|
|
52
|
-
Pattern: Parse a separate XML part (headerN.xml, footnotes.xml, etc.), create a sub-document
|
|
53
|
-
model, link from body references, render in dedicated UI zones.
|
|
54
|
-
|
|
55
|
-
Features: headers (3 types), footers (3 types), footnotes, endnotes, theme.
|
|
56
|
-
|
|
57
|
-
Architecture:
|
|
58
|
-
- Add new canonical types: HeaderDocument, FooterDocument, FootnoteCollection, ThemeDefinition
|
|
59
|
-
- New parsers: parse-headers.ts, parse-footnotes.ts, parse-theme.ts
|
|
60
|
-
- New serializers: serialize-headers.ts, serialize-footnotes.ts
|
|
61
|
-
- DocxSession: add owned paths for these parts, parse them alongside main document
|
|
62
|
-
- Surface projection: add footer/header/footnote zones to EditorSurfaceSnapshot
|
|
63
|
-
- PM schema: render in separate PM editors or as read-only zones
|
|
64
|
-
- Export: serialize owned header/footer/footnote parts, reattach the rest
|
|
65
|
-
- Theme resolution: resolve theme colors/fonts in style inheritance
|
|
66
|
-
|
|
67
|
-
### Group C: Structural Block Types (4 features, ~19h)
|
|
68
|
-
Pattern: New block-level canonical node, parser, surface block, PM node.
|
|
69
|
-
|
|
70
|
-
Features: SDT (content controls), customXml, altChunk, nestedTables.
|
|
71
|
-
|
|
72
|
-
Architecture:
|
|
73
|
-
- SDT: Parse w:sdt as a wrapper node containing block/inline children.
|
|
74
|
-
Canonical type: SdtNode { type, properties, children }. PM: contentEditable container.
|
|
75
|
-
Challenge: Many SDT subtypes (richText, date, dropdown, checkbox) with different editing UX.
|
|
76
|
-
- customXml: Parse as wrapper node, treat inner content as editable.
|
|
77
|
-
Simpler than SDT — just structural container.
|
|
78
|
-
- altChunk: Import embedded HTML/RTF by resolving the relationship.
|
|
79
|
-
Complex: would need an HTML/RTF → canonical converter.
|
|
80
|
-
Pragmatic: parse as read-only projected block showing content preview.
|
|
81
|
-
- nestedTables: Recursive table parsing. PM: prosemirror-tables supports nesting.
|
|
82
|
-
Main work: surface-projection recursion for table-in-cell.
|
|
83
|
-
|
|
84
|
-
### Group D: Inline Content Types (4 features, ~22h)
|
|
85
|
-
Pattern: New inline canonical node, parser, PM inline atom, serializer.
|
|
86
|
-
|
|
87
|
-
Features: floatingImages, footnoteRefs, ruby, OLE objects.
|
|
88
|
-
|
|
89
|
-
Architecture:
|
|
90
|
-
- Floating images: Parse wp:anchor DrawingML. Canonical: FloatingImageNode with position/wrap props.
|
|
91
|
-
PM: Positioned absolute/relative node (complex — needs position map outside text flow).
|
|
92
|
-
Pragmatic: Render as inline with "floating" badge, preserve position on export.
|
|
93
|
-
- Footnote refs: Parse w:footnoteReference. Canonical: FootnoteRefNode { noteId }.
|
|
94
|
-
PM: Inline atom with superscript number. Click → navigate to footnote zone.
|
|
95
|
-
Requires Group B footnote parsing.
|
|
96
|
-
- Ruby: Parse w:ruby (base + annotation). Canonical: RubyNode { base, annotation }.
|
|
97
|
-
PM: Inline with ruby annotation rendering (CSS ruby-position).
|
|
98
|
-
- OLE objects: Parse w:object. Canonical: OleObjectNode { progId, fallbackImage }.
|
|
99
|
-
PM: Inline atom showing fallback image or icon. No editing.
|
|
100
|
-
|
|
101
|
-
### Group E: Track Change Extensions (4 features, ~16h)
|
|
102
|
-
Pattern: Extend revision model and store.
|
|
103
|
-
|
|
104
|
-
Features: pPrChange, sectPrChange, tblPrChange, moveTo/moveFrom.
|
|
105
|
-
|
|
106
|
-
Architecture:
|
|
107
|
-
- Property changes: Parse old/new property pairs from w:*Change elements.
|
|
108
|
-
Store in revision record as PropertyChangeRevision { before, after }.
|
|
109
|
-
Surface: Show diff indicator on paragraph/section/table.
|
|
110
|
-
Accept: Apply "after" properties. Reject: Restore "before" properties.
|
|
111
|
-
- Move tracking: Parse w:moveFrom/moveTo with matching IDs.
|
|
112
|
-
Store as MoveRevision { moveId, direction, range }.
|
|
113
|
-
Surface: Render as deletion at source + insertion at destination with linking indicator.
|
|
114
|
-
Accept: Keep destination. Reject: Restore source.
|
|
115
|
-
|
|
116
|
-
### Group F: Complex Rendering (5 features, ~83h)
|
|
117
|
-
Pattern: Full subsystem — parser, model, renderer.
|
|
118
|
-
|
|
119
|
-
Features: charts, SmartArt, shapes, WordArt, VML.
|
|
120
|
-
|
|
121
|
-
Architecture:
|
|
122
|
-
- Charts: ChartML parser → chart model → Canvas/SVG renderer.
|
|
123
|
-
Full charting library. Huge scope. Consider: read-only SVG preview from XML.
|
|
124
|
-
- SmartArt: DiagramML → layout algorithm → SVG rendering.
|
|
125
|
-
Extremely complex layout engine. Consider: fallback to EMF/PNG preview image.
|
|
126
|
-
- Shapes/WordArt/VML: Parse geometry, text, fills, effects.
|
|
127
|
-
Consider: Read-only SVG rendering for shapes, skip editing.
|
|
128
|
-
VML is legacy — render as fallback for pre-2007 content.
|
|
129
|
-
|
|
130
|
-
### Group G: Security (2 features, intentionally excluded)
|
|
131
|
-
- Digital signatures: Full XMLDSIG. Out of scope.
|
|
132
|
-
- Password encryption: Upstream concern. Out of scope.
|
|
133
|
-
|
|
134
|
-
---
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
# Shared OOXML Editor Platform
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
- This is the canonical umbrella architecture doc for the broader `react-ooxml-office` repo story.
|
|
6
|
-
- The only shipped runtime in source today is the `docx` implementation behind `WordReviewEditor`.
|
|
7
|
-
- `xlsx` is planned and documented here as the next OOXML sibling, not as a shipped runtime.
|
|
8
|
-
- `pdf` is a future vertical and is intentionally outside this first shared OOXML platform contract.
|
|
9
|
-
|
|
10
|
-
## Purpose
|
|
11
|
-
|
|
12
|
-
This repository is evolving from a docx-only product narrative into a broader office-document platform with three distinct layers:
|
|
13
|
-
|
|
14
|
-
1. shared platform capabilities
|
|
15
|
-
2. format-specific runtimes
|
|
16
|
-
3. host-facing editor surfaces
|
|
17
|
-
|
|
18
|
-
The goal is to broaden the docs without pretending the codebase is already neutral. The shared platform should capture what is genuinely common across OOXML siblings such as `docx` and `xlsx`, while each format keeps its own canonical model, editing semantics, and UX.
|
|
19
|
-
|
|
20
|
-
## Core Platform Principles
|
|
21
|
-
|
|
22
|
-
- Treat OOXML files as OPC packages first, not as isolated XML files.
|
|
23
|
-
- Keep runtime-owned structured state as the only source of truth.
|
|
24
|
-
- Route every mutation through commands and transactions.
|
|
25
|
-
- Preserve unsupported but preservable content instead of silently discarding it.
|
|
26
|
-
- Keep compatibility posture explicit through typed warnings, errors, and export blockers.
|
|
27
|
-
- Use host application behavior as the final fidelity gate.
|
|
28
|
-
- Keep shipped runtimes main-thread only unless an explicit architecture change is made.
|
|
29
|
-
|
|
30
|
-
## Layered Architecture
|
|
31
|
-
|
|
32
|
-
```text
|
|
33
|
-
Host App
|
|
34
|
-
|
|
|
35
|
-
v
|
|
36
|
-
Embeddable Editor Surface
|
|
37
|
-
|
|
|
38
|
-
v
|
|
39
|
-
Format Runtime
|
|
40
|
-
|
|
|
41
|
-
v
|
|
42
|
-
Shared OOXML Platform
|
|
43
|
-
|
|
|
44
|
-
v
|
|
45
|
-
OPC package, preservation, diagnostics, validation
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Shared Platform Responsibilities
|
|
49
|
-
|
|
50
|
-
The shared OOXML platform is responsible for concerns that remain honest across multiple OOXML formats:
|
|
51
|
-
|
|
52
|
-
- OPC package reading and writing
|
|
53
|
-
- part manifests, content types, and relationship integrity
|
|
54
|
-
- preservation of unknown or unsupported but preservable parts
|
|
55
|
-
- compatibility reporting vocabulary and export blocking
|
|
56
|
-
- host persistence and snapshot doctrine
|
|
57
|
-
- validation integration with the internal Open XML SDK service
|
|
58
|
-
- shared runtime-to-UI doctrine: runtime owns truth, UI renders projections
|
|
59
|
-
- future shared AI or agent mediation boundaries above format runtimes
|
|
60
|
-
|
|
61
|
-
These concerns are intentionally narrower than a full editor runtime. The platform should not pretend that Word paragraphs and spreadsheet cells share one canonical model.
|
|
62
|
-
|
|
63
|
-
### Format Runtime Responsibilities
|
|
64
|
-
|
|
65
|
-
Each format runtime owns its own domain model, editing rules, and projections:
|
|
66
|
-
|
|
67
|
-
- `docx`: paragraphs, runs, comments, revisions, review anchors, and the current `WordReviewEditor` surface
|
|
68
|
-
- `xlsx`: workbook, sheets, ranges, formulas, merges, spreadsheet annotations, and a grid-first editor surface
|
|
69
|
-
- `pdf`: future non-OOXML work; outside the first shared platform contract
|
|
70
|
-
|
|
71
|
-
Format runtimes may reuse platform services, but they must not be flattened into a lowest-common-denominator editor abstraction.
|
|
72
|
-
|
|
73
|
-
## Current State In This Repo
|
|
74
|
-
|
|
75
|
-
Today the source tree is still organized around the active `docx` implementation:
|
|
76
|
-
|
|
77
|
-
```text
|
|
78
|
-
src/
|
|
79
|
-
api/
|
|
80
|
-
model/
|
|
81
|
-
core/
|
|
82
|
-
review/
|
|
83
|
-
io/
|
|
84
|
-
preservation/
|
|
85
|
-
validation/
|
|
86
|
-
runtime/
|
|
87
|
-
ui/
|
|
88
|
-
services/
|
|
89
|
-
react-word-editor/
|
|
90
|
-
openxml-validator/
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
That remains the truthful description of the landed code.
|
|
94
|
-
|
|
95
|
-
The broader target architecture for future work is:
|
|
96
|
-
|
|
97
|
-
```text
|
|
98
|
-
src/
|
|
99
|
-
platform/
|
|
100
|
-
formats/
|
|
101
|
-
docx/
|
|
102
|
-
xlsx/
|
|
103
|
-
pdf/
|
|
104
|
-
services/
|
|
105
|
-
office-harness/
|
|
106
|
-
openxml-validator/
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
This target layout is a documentation and planning direction, not a claim that the source has already been moved.
|
|
110
|
-
|
|
111
|
-
## Current Format Status
|
|
112
|
-
|
|
113
|
-
### `docx`
|
|
114
|
-
|
|
115
|
-
- implemented in source
|
|
116
|
-
- shipped public component name: `WordReviewEditor`
|
|
117
|
-
- current public API contract remains under `docs/reference/public-api.md`
|
|
118
|
-
- current compliance contract remains under `docs/reference/ooxml-compliance.md`
|
|
119
|
-
|
|
120
|
-
### `xlsx`
|
|
121
|
-
|
|
122
|
-
- not implemented in source
|
|
123
|
-
- promoted from raw research into planned canonical docs
|
|
124
|
-
- intended to reuse shared platform capabilities while keeping spreadsheet-native runtime and UX boundaries
|
|
125
|
-
|
|
126
|
-
### `pdf`
|
|
127
|
-
|
|
128
|
-
- future exploration only
|
|
129
|
-
- should not be forced into the OOXML platform contract unless a later architecture intentionally broadens the platform beyond OOXML
|
|
130
|
-
|
|
131
|
-
## Future Shared Capability: Agent Layer
|
|
132
|
-
|
|
133
|
-
The agent or LLM interaction layer belongs above the shared platform and format runtimes, not inside the current shipped `WordReviewEditor` contract.
|
|
134
|
-
|
|
135
|
-
That future layer should:
|
|
136
|
-
|
|
137
|
-
- request structured context from format runtimes
|
|
138
|
-
- propose typed commands instead of mutating state directly
|
|
139
|
-
- respect compatibility and export blockers
|
|
140
|
-
- remain reviewable and auditable
|
|
141
|
-
|
|
142
|
-
It is a roadmap capability, not a current public API guarantee.
|
|
143
|
-
|
|
144
|
-
## Doc Map
|
|
145
|
-
|
|
146
|
-
- Repo overview: `README.md`
|
|
147
|
-
- Docs navigation: `docs/README.md`
|
|
148
|
-
- Current docx implementation contracts: `docs/reference/public-api.md`, `docs/reference/ooxml-compliance.md`, `docs/reference/word-review-editor-frontend-architecture.md`
|
|
149
|
-
- Planned xlsx architecture: `docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md`
|
|
150
|
-
- Planned xlsx canonical model: `docs/architecture/xlsx/canonical-workbook-model-and-commands.md`
|
|
151
|
-
- Planned xlsx compliance: `docs/reference/xlsx/xlsx-ooxml-compliance.md`
|
|
152
|
-
- Planned xlsx fixture and certification program: `docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md`
|
|
153
|
-
- Research intake: `docs/xlsx-react/README.md`
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
# Canonical Workbook Model And Commands
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
- Planned canonical model for the future `xlsx` runtime.
|
|
6
|
-
- Not implemented in source today.
|
|
7
|
-
- Intended to align the xlsx planning work with the current repo's runtime-first, command-driven architecture.
|
|
8
|
-
|
|
9
|
-
## Purpose
|
|
10
|
-
|
|
11
|
-
This document defines what should remain canonical in a spreadsheet runtime and what should remain derived.
|
|
12
|
-
|
|
13
|
-
The goal is to keep the workbook model:
|
|
14
|
-
|
|
15
|
-
- sparse and serializable
|
|
16
|
-
- safe for import and export
|
|
17
|
-
- compatible with command and transaction boundaries
|
|
18
|
-
- honest about preserve-only content
|
|
19
|
-
|
|
20
|
-
## Core Rules
|
|
21
|
-
|
|
22
|
-
- The workbook runtime owns the only canonical state.
|
|
23
|
-
- React renders runtime projections and never mutates canonical workbook state directly.
|
|
24
|
-
- Commands produce transactions, mappings, effects, and history boundaries.
|
|
25
|
-
- Structural edits must remap anchors, ranges, comments, merges, and references.
|
|
26
|
-
- Unsupported but preservable workbook content must stay in preservation state, not be flattened into "best effort" workbook data.
|
|
27
|
-
|
|
28
|
-
## Canonical Stores
|
|
29
|
-
|
|
30
|
-
The planned xlsx runtime should keep the same broad separation of concerns as the current docx runtime:
|
|
31
|
-
|
|
32
|
-
- content model
|
|
33
|
-
- review or annotation model
|
|
34
|
-
- preservation model
|
|
35
|
-
- diagnostics and compatibility state
|
|
36
|
-
|
|
37
|
-
### Content Model
|
|
38
|
-
|
|
39
|
-
The content model should own:
|
|
40
|
-
|
|
41
|
-
- workbook metadata
|
|
42
|
-
- sheet registry and ordering
|
|
43
|
-
- sparse cell storage
|
|
44
|
-
- formulas and cached values
|
|
45
|
-
- row and column properties
|
|
46
|
-
- merges
|
|
47
|
-
- workbook-level named items
|
|
48
|
-
- style references and workbook-wide style registries
|
|
49
|
-
|
|
50
|
-
### Annotation Model
|
|
51
|
-
|
|
52
|
-
The annotation model should own:
|
|
53
|
-
|
|
54
|
-
- notes or legacy comments if supported
|
|
55
|
-
- future threaded comment preservation data
|
|
56
|
-
- cell or range anchors for annotations
|
|
57
|
-
|
|
58
|
-
### Preservation Model
|
|
59
|
-
|
|
60
|
-
The preservation model should own:
|
|
61
|
-
|
|
62
|
-
- unknown parts and relationships
|
|
63
|
-
- preserve-only workbook features
|
|
64
|
-
- extension markup and compatibility payloads
|
|
65
|
-
- locked-region metadata required to explain blocked edits
|
|
66
|
-
|
|
67
|
-
## Sparse Workbook Shape
|
|
68
|
-
|
|
69
|
-
The canonical workbook should be sparse by default.
|
|
70
|
-
|
|
71
|
-
That means:
|
|
72
|
-
|
|
73
|
-
- empty cells are omitted from canonical storage
|
|
74
|
-
- non-default row and column metadata is stored sparsely
|
|
75
|
-
- merges, notes, hyperlinks, and other anchored objects are stored as separate collections
|
|
76
|
-
|
|
77
|
-
This avoids pretending a spreadsheet is a dense DOM-shaped tree.
|
|
78
|
-
|
|
79
|
-
## Cell Value Strategy
|
|
80
|
-
|
|
81
|
-
Canonical cell state should preserve semantic type without coercing everything into a single JavaScript value shape.
|
|
82
|
-
|
|
83
|
-
Minimum value families:
|
|
84
|
-
|
|
85
|
-
- empty
|
|
86
|
-
- text
|
|
87
|
-
- number
|
|
88
|
-
- boolean
|
|
89
|
-
- error
|
|
90
|
-
- formula
|
|
91
|
-
- rich or formatted text if supported later, otherwise preserve-only
|
|
92
|
-
|
|
93
|
-
The runtime may maintain derived caches for display or performance, but canonical state must remain export-safe.
|
|
94
|
-
|
|
95
|
-
## Formula Strategy
|
|
96
|
-
|
|
97
|
-
Formulas should be first-class runtime entities even if the editor does not ship a full Excel-compatible calculation engine.
|
|
98
|
-
|
|
99
|
-
The canonical model should retain:
|
|
100
|
-
|
|
101
|
-
- formula text
|
|
102
|
-
- reference tokens needed for remapping
|
|
103
|
-
- cached value when present
|
|
104
|
-
- enough structure to support safe row, column, and range edits
|
|
105
|
-
|
|
106
|
-
If a formula family cannot be remapped safely, the relevant structural edit should warn, block, or remain preserve-only.
|
|
107
|
-
|
|
108
|
-
## Selection And Anchor Strategy
|
|
109
|
-
|
|
110
|
-
Selection should be grid-native, not text-editor-shaped.
|
|
111
|
-
|
|
112
|
-
Minimum runtime selection surfaces:
|
|
113
|
-
|
|
114
|
-
- active sheet
|
|
115
|
-
- active cell
|
|
116
|
-
- primary range
|
|
117
|
-
- optional multi-range support
|
|
118
|
-
- selection mode for cells, rows, columns, or full-sheet operations
|
|
119
|
-
|
|
120
|
-
Mapped anchors should also support:
|
|
121
|
-
|
|
122
|
-
- notes or comments
|
|
123
|
-
- hyperlinks
|
|
124
|
-
- preserve-only object references
|
|
125
|
-
- future named ranges and table surfaces
|
|
126
|
-
|
|
127
|
-
## Command And Transaction Model
|
|
128
|
-
|
|
129
|
-
Every mutation should flow through typed spreadsheet commands.
|
|
130
|
-
|
|
131
|
-
Representative command families:
|
|
132
|
-
|
|
133
|
-
- set cell value
|
|
134
|
-
- set formula
|
|
135
|
-
- apply styles
|
|
136
|
-
- insert or delete rows
|
|
137
|
-
- insert or delete columns
|
|
138
|
-
- merge or unmerge cells
|
|
139
|
-
- add, rename, reorder, or delete sheets
|
|
140
|
-
- freeze or clear panes
|
|
141
|
-
- add or edit supported note surfaces
|
|
142
|
-
|
|
143
|
-
Each transaction should produce:
|
|
144
|
-
|
|
145
|
-
- next workbook state
|
|
146
|
-
- mapping data for remapping selections and anchored objects
|
|
147
|
-
- effects for UI or host notifications
|
|
148
|
-
- history boundary metadata
|
|
149
|
-
|
|
150
|
-
## Preserve-Only Boundary
|
|
151
|
-
|
|
152
|
-
The canonical model must not over-claim ownership.
|
|
153
|
-
|
|
154
|
-
Examples of likely preserve-only workbook surfaces in early xlsx work:
|
|
155
|
-
|
|
156
|
-
- threaded comments
|
|
157
|
-
- pivot caches and pivot tables
|
|
158
|
-
- charts and complex drawing graphs
|
|
159
|
-
- advanced extension lists
|
|
160
|
-
- rich value families
|
|
161
|
-
- features that require rewriting unknown extension parts
|
|
162
|
-
|
|
163
|
-
Those surfaces should stay in preservation state until they have package-backed proof and Excel reopen evidence.
|
|
164
|
-
|
|
165
|
-
## Relationship To The Shared Platform
|
|
166
|
-
|
|
167
|
-
This doc intentionally stops at workbook semantics.
|
|
168
|
-
|
|
169
|
-
The following concerns belong to the shared platform instead:
|
|
170
|
-
|
|
171
|
-
- OPC package reading and writing
|
|
172
|
-
- preserved part reattachment
|
|
173
|
-
- compatibility taxonomy and export blockers
|
|
174
|
-
- validator service integration
|
|
175
|
-
- snapshot and persistence doctrine
|
|
176
|
-
|
|
177
|
-
See `docs/architecture/platform/shared-openxml-editor-platform.md` for that shared layer.
|
|
178
|
-
|
|
179
|
-
## Source Research Mapping
|
|
180
|
-
|
|
181
|
-
This canonical doc is derived from research in:
|
|
182
|
-
|
|
183
|
-
- `docs/xlsx-react/canonical-workbook-model-and-commands.md`
|
|
184
|
-
- `docs/xlsx-react/spreadsheet-editor-component-architecture.md`
|
|
185
|
-
- `docs/xlsx-react/spreadsheet-editor-frontend-architecture.md`
|
|
186
|
-
|
|
187
|
-
The research sources remain useful design rationale, but this file is the repo-aligned planned canonical model reference.
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
# Spreadsheet Editor Frontend Architecture
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
- Planned canonical architecture for the future `xlsx` runtime.
|
|
6
|
-
- No `SpreadsheetEditor` implementation is shipped in this repo today.
|
|
7
|
-
- This doc translates the strongest `docs/xlsx-react` research into a repo-aligned architecture that matches the current runtime-first philosophy without pretending the source already exists.
|
|
8
|
-
|
|
9
|
-
## Role In The Repo
|
|
10
|
-
|
|
11
|
-
This document is the `xlsx` sibling to the current docx frontend architecture.
|
|
12
|
-
|
|
13
|
-
Use it together with:
|
|
14
|
-
|
|
15
|
-
- `docs/architecture/platform/shared-openxml-editor-platform.md`
|
|
16
|
-
- `docs/architecture/xlsx/canonical-workbook-model-and-commands.md`
|
|
17
|
-
- `docs/reference/xlsx/xlsx-ooxml-compliance.md`
|
|
18
|
-
- `docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md`
|
|
19
|
-
|
|
20
|
-
## Frontend Doctrine
|
|
21
|
-
|
|
22
|
-
- The workbook runtime owns canonical truth.
|
|
23
|
-
- React renders runtime projections and dispatches commands.
|
|
24
|
-
- The grid surface is spreadsheet-native and performance-driven.
|
|
25
|
-
- UI state remains presentation-only: tabs, panel visibility, theme, and transient edit buffers.
|
|
26
|
-
- Export safety and preserve-only states are visible in the UI instead of being hidden behind implicit behavior.
|
|
27
|
-
|
|
28
|
-
## Editor Shape
|
|
29
|
-
|
|
30
|
-
The target public surface is a single embeddable component:
|
|
31
|
-
|
|
32
|
-
```tsx
|
|
33
|
-
<SpreadsheetEditor />
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
That component should remain uncontrolled by default, matching the current `WordReviewEditor` philosophy:
|
|
37
|
-
|
|
38
|
-
- host provides initial source or snapshot
|
|
39
|
-
- runtime owns the live session
|
|
40
|
-
- host receives typed events, warnings, errors, snapshots, and exports
|
|
41
|
-
|
|
42
|
-
## Rendering Stack
|
|
43
|
-
|
|
44
|
-
The spreadsheet editor should keep the same broad discipline as the docx runtime while using spreadsheet-appropriate rendering:
|
|
45
|
-
|
|
46
|
-
- React shell for layout, panels, and tool surfaces
|
|
47
|
-
- imperative or headless grid surface controller for scrolling, hit-testing, and keyboard flow
|
|
48
|
-
- runtime-owned render snapshot consumed through `useSyncExternalStore`
|
|
49
|
-
- token-driven theme system rather than one-off inline styling
|
|
50
|
-
|
|
51
|
-
## High-Level Component Hierarchy
|
|
52
|
-
|
|
53
|
-
```text
|
|
54
|
-
SpreadsheetEditor
|
|
55
|
-
└── SpreadsheetWorkspace
|
|
56
|
-
├── TopBar
|
|
57
|
-
│ ├── NameBox
|
|
58
|
-
│ ├── FormulaBar
|
|
59
|
-
│ └── Toolbar
|
|
60
|
-
├── GridViewport
|
|
61
|
-
│ ├── GridSurfaceHost
|
|
62
|
-
│ └── GridOverlays
|
|
63
|
-
├── RightRail
|
|
64
|
-
│ ├── CommentsOrNotes
|
|
65
|
-
│ └── HealthPanel
|
|
66
|
-
├── SheetTabs
|
|
67
|
-
└── StatusBar
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Runtime And UI Boundary
|
|
71
|
-
|
|
72
|
-
The boundary should match the current repo's strongest invariant:
|
|
73
|
-
|
|
74
|
-
```text
|
|
75
|
-
UI -> Command -> Transaction -> State Update -> Render
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Rules:
|
|
79
|
-
|
|
80
|
-
- React never owns workbook truth.
|
|
81
|
-
- The grid surface never bypasses the runtime.
|
|
82
|
-
- Formula edits, range edits, merge edits, and structural sheet edits all flow through typed commands.
|
|
83
|
-
- Render snapshots may be denormalized for visible regions, but persisted snapshots stay separate.
|
|
84
|
-
|
|
85
|
-
## Module Boundaries
|
|
86
|
-
|
|
87
|
-
Target source ownership for the `xlsx` frontend should stay explicit:
|
|
88
|
-
|
|
89
|
-
```text
|
|
90
|
-
src/formats/xlsx/
|
|
91
|
-
api/
|
|
92
|
-
model/
|
|
93
|
-
core/
|
|
94
|
-
commands/
|
|
95
|
-
selection/
|
|
96
|
-
formulas/
|
|
97
|
-
grid-math/
|
|
98
|
-
io/
|
|
99
|
-
preservation/
|
|
100
|
-
validation/
|
|
101
|
-
runtime/
|
|
102
|
-
ui/
|
|
103
|
-
headless/
|
|
104
|
-
grid-surface/
|
|
105
|
-
react/
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
This is a target-state layout, not a claim that these directories already exist.
|
|
109
|
-
|
|
110
|
-
## Capability Model
|
|
111
|
-
|
|
112
|
-
The editor should derive session capabilities from runtime state rather than local UI guesses.
|
|
113
|
-
|
|
114
|
-
Minimum capability surfaces:
|
|
115
|
-
|
|
116
|
-
- `canEdit`
|
|
117
|
-
- `canUndo`
|
|
118
|
-
- `canRedo`
|
|
119
|
-
- `canExport`
|
|
120
|
-
- `exportBlocked`
|
|
121
|
-
- `preserveOnlyCount`
|
|
122
|
-
- `unsupportedFatalCount`
|
|
123
|
-
- `canEditFormulas`
|
|
124
|
-
|
|
125
|
-
## UX Honesty Rules
|
|
126
|
-
|
|
127
|
-
- Spreadsheet features are either `supported-roundtrip`, `preserve-only`, or `unsupported-fatal`.
|
|
128
|
-
- Preserve-only content must remain visible and explainable.
|
|
129
|
-
- Locked or blocked regions must surface through the health rail and status bar.
|
|
130
|
-
- Unsupported structures must not be rewritten optimistically.
|
|
131
|
-
|
|
132
|
-
## Current Scope Boundary
|
|
133
|
-
|
|
134
|
-
This architecture is intentionally for the future `xlsx` runtime only.
|
|
135
|
-
|
|
136
|
-
It does not change:
|
|
137
|
-
|
|
138
|
-
- the current `WordReviewEditor` public API
|
|
139
|
-
- the docx-specific ProseMirror editing surface
|
|
140
|
-
- the current docx wave maturity line
|
|
141
|
-
|
|
142
|
-
## Source Research Mapping
|
|
143
|
-
|
|
144
|
-
This canonical doc is derived from research in:
|
|
145
|
-
|
|
146
|
-
- `docs/xlsx-react/spreadsheet-editor-frontend-architecture.md`
|
|
147
|
-
- `docs/xlsx-react/spreadsheet-editor-component-architecture.md`
|
|
148
|
-
- `docs/xlsx-react/canonical-workbook-model-and-commands.md`
|
|
149
|
-
|
|
150
|
-
The research papers remain useful source material, but this file is the repo-aligned planned architecture reference.
|