@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,871 +0,0 @@
|
|
|
1
|
-
# Excel-Compatible XLSX Editor Research Pack
|
|
2
|
-
|
|
3
|
-
Table of contents
|
|
4
|
-
|
|
5
|
-
- Interpretation of the problem
|
|
6
|
-
- Research plan
|
|
7
|
-
- Findings
|
|
8
|
-
- Recommended design / decisions
|
|
9
|
-
- Risks and open questions
|
|
10
|
-
- Concrete deliverable in the requested format
|
|
11
|
-
- Spreadsheet Compatibility and Testing Specification
|
|
12
|
-
- XLSX OOXML Compliance
|
|
13
|
-
- React Component Architecture and Front-End Structure Specification for an Excel-Compatible Spreadsheet Editor
|
|
14
|
-
- SpreadsheetEditor UX Guide
|
|
15
|
-
- Spreadsheet Editor — Frontend Architecture
|
|
16
|
-
- Canonical Workbook Model, Selection Semantics, and Command/Transaction Design
|
|
17
|
-
- Formula Engine, Recalculation Strategy, and Reference Integrity for an Excel-Compatible Editor
|
|
18
|
-
- Review, Comment, Diff, and Change-Inspection Model for an Excel-Compatible Editor
|
|
19
|
-
- Performance Strategy for a Main-Thread Excel-Compatible Spreadsheet Editor
|
|
20
|
-
- XLSX Fixture Corpus, Scenario Program, and Certification Plan
|
|
21
|
-
- Shared OpenXML Editor Platform for DOCX and XLSX
|
|
22
|
-
- Agent / LLM Interaction Layer for DOCX and XLSX Editors
|
|
23
|
-
- Sources
|
|
24
|
-
|
|
25
|
-
## Interpretation of the problem
|
|
26
|
-
|
|
27
|
-
You are building an embeddable React spreadsheet editor that can import an `.xlsx`, allow runtime-driven edits, and export an `.xlsx` that reopens in modern Excel without repair prompts or silent supported-content loss. The workbook is the product; the UI is a projection of runtime-owned canonical state and must never become the canonical truth. All mutations must flow `command -> transaction -> commit`, not direct UI mutation.
|
|
28
|
-
|
|
29
|
-
The file format must be treated as an OOXML/Open Packaging Conventions (OPC) package (parts + content types + relationships), not “some XML files in a zip”. In practice, that means correctness is (at least) three layers:
|
|
30
|
-
|
|
31
|
-
- Package correctness (OPC invariants: `[Content_Types].xml`, `/_rels/.rels`, part-level `.rels`, URI/part-name rules, relationship resolution).
|
|
32
|
-
- Markup correctness (SpreadsheetML + related schemas, plus markup compatibility / extensibility for unknown namespaces and future features).
|
|
33
|
-
- Host correctness (Excel’s behavior, including its extensions beyond baseline OOXML, is the final standard).
|
|
34
|
-
|
|
35
|
-
Unsupported-but-preservable content must be preserved byte-for-byte and relationship-for-relationship unless an explicit response policy says otherwise (preserve / lock / warn / block / fail). Excel-specific extension parts (threaded comments, persons, rich values, named sheet views, slicers, etc.) exist in real-world files and must not be dropped.
|
|
36
|
-
|
|
37
|
-
A key reality constraint: the GitHub connector available in this environment does not expose the specified repository (`bwllaming/docx-react-component`), so I could not directly mirror your DOCX sibling’s existing repo-level architectural documents. The pack below is therefore written as a “repo-seeding” doc set that follows your framing constraints and cites primary/official XLSX sources, but it does not quote or align to any unobservable implementation details from your existing DOCX repo.
|
|
38
|
-
|
|
39
|
-
## Research plan
|
|
40
|
-
|
|
41
|
-
Information needs (what must be true to ship a real Excel-compatible editor):
|
|
42
|
-
|
|
43
|
-
- OPC invariants and operational consequences for a package-preserving editor: relationships, content types, part naming, and safe rewrite rules.
|
|
44
|
-
- SpreadsheetML “minimum workbook” and core parts/relationships (workbook.xml, worksheets, shared strings, styles, calc chain), plus what is optional vs required.
|
|
45
|
-
- Excel host limits that affect UI and engine design (rows/cols, cell text length, formula length, format limits), plus how those constraints influence virtualization and data structures.
|
|
46
|
-
- Excel extensions to OOXML you will encounter in modern workbooks (threaded comments/persons/mentions, named sheet views, rich values, slicers), and explicit preservation requirements inside those extensions.
|
|
47
|
-
- Encrypted/protected documents: when `.xlsx` is not an OPC zip at all (EncryptedPackage) and must be treated as unsupported-fatal unless you implement the cryptography structure.
|
|
48
|
-
|
|
49
|
-
Execution approach:
|
|
50
|
-
|
|
51
|
-
- Attempted to start with GitHub connector review (required by your instructions), but the configured GitHub account here does not list or search the specified repo, so no repo-derived evidence could be incorporated.
|
|
52
|
-
- Performed web research prioritizing primary/official sources: Microsoft Learn (Open XML SDK docs; Microsoft Open Specifications PDFs for MS-XLSX; Office cryptography structure), and Excel limits from Microsoft Support.
|
|
53
|
-
- Treated normative standards vs observed Excel behavior explicitly: “normative” for schema/package requirements reported as ISO/IEC/OOXML requirements; “host behavior” as Microsoft Excel behavior and Microsoft’s extension specs.
|
|
54
|
-
|
|
55
|
-
## Findings
|
|
56
|
-
|
|
57
|
-
Package and document structure facts (normative baseline)
|
|
58
|
-
|
|
59
|
-
- OPC packages model a document as a set of parts with typed content and explicit relationships; relationships can be package-level (source = the package) or part-level (source = a part), and relationship targets can be internal parts or external resources.
|
|
60
|
-
- In SpreadsheetML, a workbook’s logical structure centers on `<workbook>` containing `<sheets>` and `<sheet>` elements; the `<sheet>` elements reference worksheet parts via relationship IDs, and each worksheet is stored as a separate XML part.
|
|
61
|
-
- A “minimum workbook” requires at least one sheet with a unique `sheetId` and a relationship ID pointing to the worksheet definition; the workbook relationships part (`workbook.xml.rels`) binds those IDs to worksheet part targets.
|
|
62
|
-
- A worksheet part contains the sheet grid data in `<sheetData>`; cells are stored with references like `A1` and can contain values and/or formulas.
|
|
63
|
-
- Shared strings: a shared string table part (`sharedStrings.xml`) is the canonical deduplication mechanism for strings; a workbook can reference strings by index rather than inline storage, and Excel typically writes a shared string table when it saves files (though it is not required for validity).
|
|
64
|
-
- Formulas: formula text is stored in `<f>` within a cell; cached results may be stored in `<v>`, and the cached value can be omitted (in which case the reader can recompute based on the formula).
|
|
65
|
-
- Calculation chain (`calcChain.xml`): at most one calculation-chain part can exist; it records an ordered set of formula cells last calculated, but calculation chain information is not required because an application can construct dependencies at load-time.
|
|
66
|
-
|
|
67
|
-
Host behavior and “real-world Excel” constraints
|
|
68
|
-
|
|
69
|
-
- Excel hard limits that materially affect editor design include: 1,048,576 rows × 16,384 columns, 32,767 characters per cell, ~8,192 characters per formula, and constraints on format/style counts.
|
|
70
|
-
- Excel extension specifications exist beyond baseline OOXML, and Microsoft explicitly frames MS-XLSX as extensions to ISO/IEC 29500-1/3; only certain sections are normative within that extension spec.
|
|
71
|
-
- Modern Excel workbooks may include advanced extension parts like threaded comments, persons/mentions, named sheet views, slicers, rich value structures, etc.
|
|
72
|
-
- Threaded comments vs legacy comments: MS-XLSX describes threaded comments as a system that “replaces and/or works in addition to legacy comments”; it specifies legacy comment placeholders used for backward compatibility and details reconciliation behavior.
|
|
73
|
-
- Named Sheet Views: MS-XLSX specifies that the presence of a Named Sheet Views part indicates at least one named sheet view and that it must be the target of an implicit relationship from the worksheet part.
|
|
74
|
-
- Rich values: MS-XLSX specifies “rich value” types (including spill/timeout/external errors and other structures) and explicitly states that if a rich value has an unknown rich value type, it must be preserved.
|
|
75
|
-
|
|
76
|
-
Edge cases that force explicit “fail” classification
|
|
77
|
-
|
|
78
|
-
- Encrypted Office documents are not editable as normal OPC packages because the document can be wrapped in the Office Document Cryptography Structure; specifically, the `\EncryptedPackage` stream contains the entire ECMA-376 source file in compressed, encrypted form, with encryption parameters found in `\EncryptionInfo`.
|
|
79
|
-
This means “open with zip -> parse XML” fails for such files unless you implement decryption, so “unsupported-fatal” (fail) is the honest v1 stance.
|
|
80
|
-
|
|
81
|
-
## Recommended design / decisions
|
|
82
|
-
|
|
83
|
-
Core principle decisions (to keep the architecture honest and “Excel-reopen safe”)
|
|
84
|
-
|
|
85
|
-
- Use a package-preserving runtime that owns (a) canonical workbook state and (b) a preservation-grade representation of the OPC package graph (parts + relationships + content types + unknown bytes). Do not model “the workbook” as a React state tree. The React component subscribes to runtime projections.
|
|
86
|
-
- Build a command/transaction system where every UI action is translated into a typed command, validated into a transaction, then committed atomically to the runtime state. This enables: undo/redo, deterministic diffs, invariants enforcement, and compatibility-aware blocking/warning.
|
|
87
|
-
- Make “compatibility posture” first-class. Every feature/part category is either:
|
|
88
|
-
- Supported-editable (safe import → runtime edit → export → reopen),
|
|
89
|
-
- Preserve-only (round-trip but no semantic edits), or
|
|
90
|
-
- Unsupported-fatal (cannot safely open or cannot safely export).
|
|
91
|
-
Micro-stances for operations: preserve / lock / warn / block / fail.
|
|
92
|
-
- Default: never drop unknown content. When you must remove or regenerate derived artifacts (like calc chain), do it explicitly and document it as a controlled, compatibility-motivated transformation (typically “warn” or “preserve-with-normalization”), with fixtures proving Excel accepts the result.
|
|
93
|
-
- Certify on Excel behavior, but gate earlier with Open XML structural/schema validation where possible (Open XML SDK validation in CI, plus custom OPC invariant checks).
|
|
94
|
-
|
|
95
|
-
Pragmatic v1 scope choices (blunt, on purpose)
|
|
96
|
-
|
|
97
|
-
- v1 should focus on “grid-editing” and the minimal set of workbook features that can be made Excel-reopen safe with high confidence: cell values, basic formulas-as-strings (plus reference updating), row/column sizing, frozen panes and basic sheet view selection state, basic styles/number formats, merges, basic data types, sheet add/rename/reorder, and defined names (if included).
|
|
98
|
-
- Treat most higher-order Excel objects as preserve-only in v1: pivot tables/caches, charts, slicers, timelines, external connections/data model, rich values, named sheet views, conditional formatting, and threaded comments (unless you commit to implementing their multi-part invariants).
|
|
99
|
-
- Treat encrypted/IRM-protected documents as unsupported-fatal in v1, with a clear failure message and optional “export untouched bytes” path only if you are not required to modify.
|
|
100
|
-
|
|
101
|
-
## Risks and open questions
|
|
102
|
-
|
|
103
|
-
- Standards availability vs practical implementation: ISO/ECMA specs are authoritative but not always freely retrievable programmatically (license acceptance flows blocked access here), so reliance shifts to Microsoft Learn summaries and Microsoft Open Specifications where accessible. This introduces the risk of missing a subtle normative constraint that Excel enforces.
|
|
104
|
-
- Excel host behavior is the final standard, but some behaviors are underspecified publicly. Your certification plan must include Excel Desktop automation (Windows) to catch repair prompts and silent repairs that schema validation will not detect.
|
|
105
|
-
- “Preserve-only” is deceptively hard: even if you don’t “edit a feature,” other edits (row insertion, copy/paste, range move) can implicitly require updating references inside that preservable feature. If you can’t update those internal references safely, you must lock/block range mutations that intersect them.
|
|
106
|
-
- Formula engine scope: fully replicating Excel calculation semantics is enormous; v1 likely needs a staged approach (reference-parsing and dependency graph first; partial evaluation second; full function parity never). Any mismatch can cause confusing UI vs exported recalculation. Excel’s own limits and function lists shape what you can reasonably support.
|
|
107
|
-
- Rich values, new function families, and “future features”: the MS-XLSX extension spec is updated frequently and includes modern features (rich values, external code service errors, etc.). If you parse/serialize incorrectly, you will break files users expect Excel to open cleanly. The safe stance is preserve-only with strong invariants.
|
|
108
|
-
- Tooling limitation: the PDF screenshot requirement could not be satisfied in this environment due to safe-URL redirects when attempting screenshot extraction on MS-XLSX. The pack relies on the PDF’s extracted text plus Microsoft Learn pages rather than page-image verification.
|
|
109
|
-
|
|
110
|
-
## Concrete deliverable in the requested format
|
|
111
|
-
|
|
112
|
-
Below are the requested documents. Each includes a suggested repo filename, a short purpose statement, and full markdown content. Terminology is consistent across the full set:
|
|
113
|
-
|
|
114
|
-
- **Runtime**: non-React canonical state machine (workbook truth).
|
|
115
|
-
- **Package Graph**: OPC parts/relationships/content types + preserved bytes.
|
|
116
|
-
- **Projection**: derived view model for UI (viewport, formatting for paint, etc.).
|
|
117
|
-
- **Command → Transaction → Commit**: the only mutation path.
|
|
118
|
-
- **Posture**: preserve / lock / warn / block / fail (operation-level responses).
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
**File:** `docs/spreadsheet-compatibility-and-testing-spec.md`
|
|
123
|
-
**Purpose:** Define Excel-compatibility targets, posture taxonomy, certification gates, and the test matrix that proves “reopen in Excel without repair prompts or silent loss.”
|
|
124
|
-
|
|
125
|
-
### Spreadsheet Compatibility and Testing Specification
|
|
126
|
-
|
|
127
|
-
**Status:** Draft v1
|
|
128
|
-
**Non-negotiable standard:** Files exported by this editor must reopen in recent Excel environments without repair prompts and without silent loss of **supported** content.
|
|
129
|
-
|
|
130
|
-
**Normative vs host correctness**
|
|
131
|
-
|
|
132
|
-
- **Spec-level correctness (normative):** We satisfy OPC and SpreadsheetML structural requirements as described in ISO/IEC 29500 and related specifications; for practical implementation details, Microsoft’s Open XML SDK guidance and Microsoft Open Specifications are treated as strong references.
|
|
133
|
-
- **Application-level correctness (host):** Microsoft Excel’s behavior is the final arbiter; passing schema validation but triggering Excel repair is a fail.
|
|
134
|
-
|
|
135
|
-
**Compatibility posture model (global)**
|
|
136
|
-
|
|
137
|
-
Every *feature area* and every *operation attempt* yields an explicit posture result:
|
|
138
|
-
|
|
139
|
-
- **preserve**: The editor round-trips the content without semantic understanding; no user-visible mutation occurs; export must be byte/graph-preserving for that content.
|
|
140
|
-
- **lock**: Content is visible/selectable but is read-only; attempts to modify return lock with an explanation.
|
|
141
|
-
- **warn**: Operation proceeds but may alter semantics or cause Excel to recalc/normalize; warn must be surfaced to host and (optionally) UI.
|
|
142
|
-
- **block**: Operation is prevented because it would risk producing a workbook that Excel repairs or that loses supported content; document state remains unchanged.
|
|
143
|
-
- **fail**: The document cannot be opened or saved safely. Example: encrypted package without decryption support.
|
|
144
|
-
|
|
145
|
-
**Supported / preserve-only / unsupported-fatal categories**
|
|
146
|
-
|
|
147
|
-
- **Supported-editable**: import → runtime edit → export → reopen in Excel with no repair AND with preserved supported semantics.
|
|
148
|
-
- **Preserve-only**: import → no semantic edits (or only cosmetic/metadata edits that are proven safe) → export → reopen; editor must not drop or corrupt.
|
|
149
|
-
- **Unsupported-fatal**: cannot open or cannot export safely (e.g., encrypted/IRM docs).
|
|
150
|
-
|
|
151
|
-
**Target Excel environments (certification set)**
|
|
152
|
-
|
|
153
|
-
We certify against at least:
|
|
154
|
-
|
|
155
|
-
- Excel for Microsoft 365 (current channel) on Windows
|
|
156
|
-
- Excel 2021+ on Windows
|
|
157
|
-
- Excel for Microsoft 365 on macOS
|
|
158
|
-
- Excel for the web (smoke validation: open, validate calculations/visuals minimally)
|
|
159
|
-
|
|
160
|
-
Rationale: Excel limits/specs are documented across versions and apply broadly; our exported files must align with these constraints.
|
|
161
|
-
|
|
162
|
-
**Definition of “repair prompt” failure**
|
|
163
|
-
|
|
164
|
-
Fail if any of these occur when opening export output:
|
|
165
|
-
|
|
166
|
-
- Excel displays “We found a problem with some content…” and repairs.
|
|
167
|
-
- Excel opens but silently removes/rewrites **supported** features (e.g., our supported cell values disappear, formatting disappears, sheet structure changes).
|
|
168
|
-
- Excel writes a repair log indicating removed records in supported areas.
|
|
169
|
-
|
|
170
|
-
**Test strategy tiers**
|
|
171
|
-
|
|
172
|
-
1) **Static package invariants tests (fast, required in CI)**
|
|
173
|
-
- OPC graph traversal: all parts reachable via relationships; `[Content_Types].xml` contains entries for all parts; relationship targets resolve; no dangling relationship IDs.
|
|
174
|
-
- SpreadsheetML minimum structure checks (workbook.xml, workbook rels, at least one worksheet).
|
|
175
|
-
|
|
176
|
-
2) **Schema and markup validation (CI, required)**
|
|
177
|
-
- Use Open XML SDK validation tooling in CI to validate produced packages against known schemas where possible; failures block release. (Open XML SDK provides strongly-typed parts and is a standard reference toolchain.)
|
|
178
|
-
|
|
179
|
-
3) **Round-trip invariants (CI, required)**
|
|
180
|
-
For each fixture: `import -> no-op export` must satisfy:
|
|
181
|
-
- Byte preservation for preserve-only parts (exact bytes) OR documented normalization that is proven Excel-safe.
|
|
182
|
-
- Relationship graph preservation (IDs may change only if we fully rewrite consistent references).
|
|
183
|
-
|
|
184
|
-
4) **Excel host automation (release gate; nightly + release candidates)**
|
|
185
|
-
- Open exported workbook in Excel Desktop automation (Windows runner) with alerts captured.
|
|
186
|
-
- Save-as and reopen to ensure Excel can write it back without further repair.
|
|
187
|
-
|
|
188
|
-
5) **Scenario-based functional tests (CI + nightly)**
|
|
189
|
-
- UI-level automation: edit operations, undo/redo, copy-paste, row/column insert/delete, formatting, multi-sheet edits.
|
|
190
|
-
|
|
191
|
-
**Compatibility test matrix**
|
|
192
|
-
|
|
193
|
-
Each row = (feature) × (operation) × (expected posture) × (evidence fixture)
|
|
194
|
-
|
|
195
|
-
Examples:
|
|
196
|
-
|
|
197
|
-
- Cell value edit (number/string/bool/error): Supported-editable
|
|
198
|
-
- Formula edit (string-level): Supported-editable for syntax-preserving edits; warn if function unsupported for evaluation but preserve formula text; block if reference rewriting can’t be guaranteed.
|
|
199
|
-
- Shared strings conversion: warn if converting inline strings to shared strings or vice versa; Excel typically writes sharedStrings on save, so normalization toward shared strings is usually Excel-aligned, but must be proven in fixtures.
|
|
200
|
-
- Calc chain: warn if dropping calcChain to force Excel rebuild; calcChain is not required and can be recomputed by the application.
|
|
201
|
-
- Threaded comments: preserve-only in v1 unless we implement the multi-part invariants and reconciliation behavior.
|
|
202
|
-
- Named sheet views: preserve-only; block operations that require rewriting their internal references unless implemented.
|
|
203
|
-
- EncryptedPackage: fail on open (unsupported-fatal).
|
|
204
|
-
|
|
205
|
-
**Release gates**
|
|
206
|
-
|
|
207
|
-
- Gate A (CI): package invariants + schema validation + round-trip no-op export.
|
|
208
|
-
- Gate B (Nightly): scenario edits across fixture corpus + Excel automation open/reopen.
|
|
209
|
-
- Gate C (Release): full corpus Excel automation + manual spot-check for top customer files.
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
**File:** `docs/xlsx-ooxml-compliance.md`
|
|
214
|
-
**Purpose:** Define OPC and SpreadsheetML compliance boundaries, rewrite rules, normalization policy, and strict vs transitional behavior.
|
|
215
|
-
|
|
216
|
-
### XLSX OOXML Compliance
|
|
217
|
-
|
|
218
|
-
**Status:** Draft v1
|
|
219
|
-
|
|
220
|
-
**Baseline definition**
|
|
221
|
-
|
|
222
|
-
An `.xlsx` is an OPC package: a zip-based physical container representing a logical graph of typed parts connected by relationships. Relationships exist at package level (`/_rels/.rels`) and at part level (`<partname>.rels`), and targets can be internal parts or external resources.
|
|
223
|
-
|
|
224
|
-
**Compliance objectives**
|
|
225
|
-
|
|
226
|
-
- Produce packages that Excel opens without repair prompts.
|
|
227
|
-
- Preserve unknown but valid content.
|
|
228
|
-
- Maintain relationship integrity, content types correctness, and markup compatibility behavior.
|
|
229
|
-
|
|
230
|
-
**OPC invariants we enforce**
|
|
231
|
-
|
|
232
|
-
- **Content types:** `[Content_Types].xml` must declare default/override content types for parts; new parts require updating content types.
|
|
233
|
-
- **Relationships:**
|
|
234
|
-
- Package relationships stored in `/_rels/.rels`.
|
|
235
|
-
- Part relationships stored in `_rels/<part>.rels`.
|
|
236
|
-
- Targets must resolve to existing parts when internal.
|
|
237
|
-
- **Graph discoverability:** all meaningful parts must be discoverable by traversing relationships from the package root(s). (We treat this as a “must” for our editor even if some producers violate it; we preserve violations but do not create new ones.)
|
|
238
|
-
|
|
239
|
-
**SpreadsheetML minimal structure invariants**
|
|
240
|
-
|
|
241
|
-
- Workbook must contain sheets and each `<sheet>` references a worksheet part via relationship ID; workbook relationships bind IDs to worksheet targets.
|
|
242
|
-
- Each worksheet contains `<sheetData>` as the cell table container.
|
|
243
|
-
- Shared strings: if present, there is exactly one shared string table part for the workbook.
|
|
244
|
-
- Calculation chain: if present, there is no more than one calculation chain part.
|
|
245
|
-
|
|
246
|
-
**Strict vs Transitional**
|
|
247
|
-
|
|
248
|
-
- We accept both strict and transitional content as input.
|
|
249
|
-
- We default to exporting transitional-compatible structures unless a customer explicitly requires strict and we can prove strict correctness in Excel (because many Excel-produced files are transitional in practice and include Microsoft extension namespaces).
|
|
250
|
-
|
|
251
|
-
**Markup compatibility / extensibility policy**
|
|
252
|
-
|
|
253
|
-
- Preserve unknown namespace declarations, `mc:Ignorable` attributes, and unknown elements/attributes in ignorable namespaces. (Example worksheets may include `mc:Ignorable="x14ac"` and related namespaces.)
|
|
254
|
-
- Never drop `extLst` or extension payloads; treat them as preserve-only unless explicitly supported.
|
|
255
|
-
|
|
256
|
-
**Normalization policy (explicit and limited)**
|
|
257
|
-
|
|
258
|
-
We allow a small set of “safe normalizations” that are validated by Excel fixtures:
|
|
259
|
-
|
|
260
|
-
- **calcChain handling:** we may remove or rebuild `calcChain.xml` if it becomes inconsistent after edits; because calc chain is not required and does not dictate runtime calculation order, Excel can rebuild. This must be a **warn** posture and must be covered by fixtures.
|
|
261
|
-
- **Shared strings handling:** we may normalize to shared strings on export (because Excel typically does), but only if we correctly rewrite indices and preserve rich text runs, and only after fixture proof.
|
|
262
|
-
- **Relationship ID regeneration:** allowed only when we fully rewrite all referencing attributes. Otherwise, preserve existing IDs.
|
|
263
|
-
|
|
264
|
-
Any normalization outside this list requires a design review and certification fixtures.
|
|
265
|
-
|
|
266
|
-
**Unsupported-fatal compliance cases**
|
|
267
|
-
|
|
268
|
-
- Office cryptography wrapper (EncryptedPackage): fail to open unless we implement decryption; this is not an OPC zip file we can parse directly.
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
**File:** `docs/react-component-architecture-spec.md`
|
|
273
|
-
**Purpose:** Specify the embeddable React component, typed public API, runtime ownership model, and front-end module boundaries.
|
|
274
|
-
|
|
275
|
-
### React Component Architecture and Front-End Structure Specification for an Excel-Compatible Spreadsheet Editor
|
|
276
|
-
|
|
277
|
-
**Status:** Draft v1
|
|
278
|
-
|
|
279
|
-
**Non-negotiable architecture rules**
|
|
280
|
-
|
|
281
|
-
- React does not own workbook truth. Runtime owns canonical workbook state and all mutations.
|
|
282
|
-
- UI is a projection (derived view model) that is fully reproducible from runtime state.
|
|
283
|
-
- All mutations go through `command -> transaction -> commit`.
|
|
284
|
-
- Unsupported content is preserved; operations that would affect it must return explicit posture results.
|
|
285
|
-
|
|
286
|
-
**Suggested package layout**
|
|
287
|
-
|
|
288
|
-
- `packages/ooxml-opc/` (shared)
|
|
289
|
-
- Zip IO, content types, relationships, part addressing, graph traversal, byte preservation.
|
|
290
|
-
- `packages/ooxml-mc/` (shared)
|
|
291
|
-
- Markup compatibility helpers: preserve unknown namespaces, ignore rules, safe parse/serialize.
|
|
292
|
-
- `packages/spreadsheet-runtime/` (xlsx-specific)
|
|
293
|
-
- Canonical workbook model, command/transaction system, projections, export pipeline.
|
|
294
|
-
- `packages/spreadsheet-react/` (xlsx-specific)
|
|
295
|
-
- React component, event adapters, input system, virtualized grid renderer.
|
|
296
|
-
- `packages/editor-platform/` (shared)
|
|
297
|
-
- Command bus interfaces, transaction log, undo/redo framework, diagnostics/events.
|
|
298
|
-
- `packages/fixtures/` (shared)
|
|
299
|
-
- Fixture corpus and golden exports, validation harness.
|
|
300
|
-
|
|
301
|
-
**Public API shape (TypeScript)**
|
|
302
|
-
|
|
303
|
-
Core design goals:
|
|
304
|
-
- Host can supply an input package, receive runtime instance, subscribe to events, and request export.
|
|
305
|
-
- Host can inject policy decisions (posture handling) and integrate with persistence.
|
|
306
|
-
|
|
307
|
-
Sketch:
|
|
308
|
-
|
|
309
|
-
```ts
|
|
310
|
-
export type Posture = "preserve" | "lock" | "warn" | "block" | "fail";
|
|
311
|
-
|
|
312
|
-
export interface PostureResult {
|
|
313
|
-
posture: Posture;
|
|
314
|
-
code: string;
|
|
315
|
-
message: string;
|
|
316
|
-
details?: Record<string, unknown>;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
export interface SpreadsheetEditorHostCallbacks {
|
|
320
|
-
onReady?: (runtime: SpreadsheetRuntimeHandle) => void;
|
|
321
|
-
onEvent?: (event: SpreadsheetRuntimeEvent) => void;
|
|
322
|
-
onPosture?: (result: PostureResult) => void;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
export interface SpreadsheetEditorProps {
|
|
326
|
-
input?: ArrayBuffer; // .xlsx bytes
|
|
327
|
-
readOnly?: boolean;
|
|
328
|
-
|
|
329
|
-
// Host policy hooks
|
|
330
|
-
policy?: SpreadsheetPolicy;
|
|
331
|
-
|
|
332
|
-
// Callbacks
|
|
333
|
-
host?: SpreadsheetEditorHostCallbacks;
|
|
334
|
-
|
|
335
|
-
// UI configuration
|
|
336
|
-
theme?: SpreadsheetTheme;
|
|
337
|
-
initialViewport?: { sheetId?: string; topRow?: number; leftCol?: number };
|
|
338
|
-
|
|
339
|
-
// Optional: external persistence hooks
|
|
340
|
-
persistence?: {
|
|
341
|
-
requestSave?: (bytes: Uint8Array) => Promise<void>;
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
**Runtime handle**
|
|
347
|
-
|
|
348
|
-
```ts
|
|
349
|
-
export interface SpreadsheetRuntimeHandle {
|
|
350
|
-
getDocId(): string;
|
|
351
|
-
getStateVersion(): number;
|
|
352
|
-
|
|
353
|
-
// Query / projection
|
|
354
|
-
getWorkbookSummary(): WorkbookSummary;
|
|
355
|
-
getSheetProjection(request: SheetProjectionRequest): SheetProjection;
|
|
356
|
-
|
|
357
|
-
// Commands
|
|
358
|
-
dispatch(cmd: SpreadsheetCommand): CommandDispatchResult;
|
|
359
|
-
|
|
360
|
-
// Export
|
|
361
|
-
exportXlsx(options?: ExportOptions): Promise<Uint8Array>;
|
|
362
|
-
|
|
363
|
-
// Undo/redo
|
|
364
|
-
undo(): CommandDispatchResult;
|
|
365
|
-
redo(): CommandDispatchResult;
|
|
366
|
-
|
|
367
|
-
// Diagnostics
|
|
368
|
-
getDiagnostics(): DiagnosticItem[];
|
|
369
|
-
}
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
**Command dispatch result (explicit posture)**
|
|
373
|
-
|
|
374
|
-
```ts
|
|
375
|
-
export interface CommandDispatchResult {
|
|
376
|
-
ok: boolean;
|
|
377
|
-
posture?: PostureResult; // present when ok=false or when ok=true with warn
|
|
378
|
-
transactionId?: string;
|
|
379
|
-
appliedVersion?: number;
|
|
380
|
-
}
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
**React component behavior**
|
|
384
|
-
|
|
385
|
-
- `SpreadsheetEditor` mounts, instantiates runtime (or uses provided runtime), loads input bytes, builds initial projection, renders.
|
|
386
|
-
- UI events (mouse/keyboard) are translated into commands (e.g., `SetCellValue`, `MoveSelection`, `Paste`, `InsertRow`) and dispatched.
|
|
387
|
-
- Runtime emits events; React subscribes and updates projections via selectors keyed by version + viewport.
|
|
388
|
-
|
|
389
|
-
**Rendering strategy**
|
|
390
|
-
|
|
391
|
-
- Virtualized grid (rows/cols) is mandatory due to Excel-scale constraints.
|
|
392
|
-
- Rendering uses a “cell paint model” projection: visible cells are materialized with computed format tokens, display value, and interaction flags.
|
|
393
|
-
- Fine-grained invalidation: projection computed per-tile (e.g., 64×64 cells) to avoid repainting entire viewport.
|
|
394
|
-
|
|
395
|
-
---
|
|
396
|
-
|
|
397
|
-
**File:** `docs/spreadsheeteditor-ux-guide.md`
|
|
398
|
-
**Purpose:** Define UX rules for selection, editing, copy/paste, warnings/locks, and how preserve-only content is presented honestly.
|
|
399
|
-
|
|
400
|
-
### SpreadsheetEditor UX Guide
|
|
401
|
-
|
|
402
|
-
**Status:** Draft v1
|
|
403
|
-
|
|
404
|
-
**Core UX stance**
|
|
405
|
-
|
|
406
|
-
- This is a spreadsheet editor, not a rich-text editor in a grid.
|
|
407
|
-
- The grid’s semantics (addressing, dependencies, range operations) are first-class.
|
|
408
|
-
- UX must surface when the runtime is preserving/locking/warning/blocking/failing.
|
|
409
|
-
|
|
410
|
-
**Selection semantics (user-visible)**
|
|
411
|
-
|
|
412
|
-
- Active cell + selection range are distinct:
|
|
413
|
-
- Active cell: caret focus target (for formula bar and direct typing).
|
|
414
|
-
- Selection: rectangular and/or multi-range selection (v1 can restrict to single range; multi-range is an explicit scope add).
|
|
415
|
-
- Range operations (insert/delete rows/cols, sort/filter, fill handle, paste) operate on the selection, not on DOM state.
|
|
416
|
-
|
|
417
|
-
**Direct editing flows**
|
|
418
|
-
|
|
419
|
-
- Typing with a single cell selected enters “cell edit” mode.
|
|
420
|
-
- Formula bar shows raw formula text (`<f>`) when present; display layer shows cached or computed value.
|
|
421
|
-
- When formula evaluation isn’t supported for a function, UI still shows formula text and cached value (if available), and marks cell as “not locally recalculated” (warn badge).
|
|
422
|
-
|
|
423
|
-
**Copy/paste flows**
|
|
424
|
-
|
|
425
|
-
- Copy creates a structured clipboard payload (internal JSON) plus plain text/TSV for interoperability.
|
|
426
|
-
- Paste dispatches a `PasteRange` command; runtime resolves relative references and updates targets.
|
|
427
|
-
|
|
428
|
-
**Preserve-only content UX**
|
|
429
|
-
|
|
430
|
-
Examples: charts, pivots, slicers, data model, threaded comments (v1 preserve-only unless fully supported).
|
|
431
|
-
|
|
432
|
-
- Preserve-only objects must be visible as “objects” anchored to grid positions when possible.
|
|
433
|
-
- Any attempt to edit a preserve-only object returns `lock` (read-only) or `block` (operation unsafe) with explanation.
|
|
434
|
-
- “Export compatibility” panel lists preserved objects and any warnings emitted during session.
|
|
435
|
-
|
|
436
|
-
**Warnings and blocks**
|
|
437
|
-
|
|
438
|
-
- Warnings are non-modal by default but persistent in a session log; host can choose to elevate to modal.
|
|
439
|
-
- Blocks are immediate and must explain *why* (e.g., “Row insertion intersects a preserve-only pivot cache mapping; operation blocked to avoid breaking Excel reopen.”).
|
|
440
|
-
|
|
441
|
-
**Excel limits UX constraints**
|
|
442
|
-
|
|
443
|
-
- UI must prevent selecting beyond max row/col bounds and must not create out-of-range references.
|
|
444
|
-
- Pasting content bigger than max rows/cols results in `block` with an actionable message.
|
|
445
|
-
|
|
446
|
-
---
|
|
447
|
-
|
|
448
|
-
**File:** `docs/spreadsheet-editor-frontend-architecture.md`
|
|
449
|
-
**Purpose:** Describe the browser-side architecture: input system, projection pipeline, rendering, command creation, and event/diagnostics surfaces.
|
|
450
|
-
|
|
451
|
-
### Spreadsheet Editor — Frontend Architecture
|
|
452
|
-
|
|
453
|
-
**Status:** Draft v1
|
|
454
|
-
|
|
455
|
-
**High-level data flow**
|
|
456
|
-
|
|
457
|
-
- DOM events → Input Router → Intent Model → Command Builder → Runtime Dispatch
|
|
458
|
-
- Runtime Commit → Event Stream → Projection Selectors → React Render
|
|
459
|
-
|
|
460
|
-
**Key modules (frontend)**
|
|
461
|
-
|
|
462
|
-
- Input Router
|
|
463
|
-
- Normalizes pointer/keyboard events, handles platform differences, IME entry, composition events.
|
|
464
|
-
- Intent Model
|
|
465
|
-
- Converts low-level events into semantic intents: “select range”, “edit cell”, “drag fill”, “resize column”, “open context menu”.
|
|
466
|
-
- Command Builder
|
|
467
|
-
- Constructs typed commands from intents, always referencing runtime IDs (sheetId, range, cellRef), never DOM indices.
|
|
468
|
-
- Projection Selectors
|
|
469
|
-
- Memoized selectors keyed by runtime version and viewport window; compute:
|
|
470
|
-
- cell display strings (cached/computed)
|
|
471
|
-
- format tokens
|
|
472
|
-
- selection overlays
|
|
473
|
-
- row/col header state
|
|
474
|
-
- Renderer
|
|
475
|
-
- Virtualized grid, overlays, and editor subcomponents (formula bar, name box, sheet tabs, panels).
|
|
476
|
-
|
|
477
|
-
**Projection contracts**
|
|
478
|
-
|
|
479
|
-
- A projection must be reproducible from runtime state; it is disposable.
|
|
480
|
-
- Projections must not contain opaque function closures that must be preserved across frames; use IDs and stable handles only.
|
|
481
|
-
|
|
482
|
-
**Diagnostics + telemetry**
|
|
483
|
-
|
|
484
|
-
- Runtime emits:
|
|
485
|
-
- posture events (warn/block/fail)
|
|
486
|
-
- performance spans (projection time, commit time)
|
|
487
|
-
- compatibility events (normalization happened, preserve-only encountered)
|
|
488
|
-
|
|
489
|
-
---
|
|
490
|
-
|
|
491
|
-
**File:** `docs/canonical-workbook-model-and-command-system.md`
|
|
492
|
-
**Purpose:** Define the canonical workbook state model, addressing and selection semantics, and the command/transaction/commit architecture (including undo/redo and invariants).
|
|
493
|
-
|
|
494
|
-
### Canonical Workbook Model, Selection Semantics, and Command/Transaction Design
|
|
495
|
-
|
|
496
|
-
**Status:** Draft v1
|
|
497
|
-
|
|
498
|
-
**Design constraints from OOXML + Excel**
|
|
499
|
-
|
|
500
|
-
- Grid scale demands sparse storage and virtualization.
|
|
501
|
-
- Formulas and cached results are separate concerns; formulas live in `<f>`, cached value in `<v>`.
|
|
502
|
-
- Workbook structure is sheet-driven; workbook references worksheets via relationships.
|
|
503
|
-
|
|
504
|
-
**Canonical workbook model (runtime-owned)**
|
|
505
|
-
|
|
506
|
-
Key properties:
|
|
507
|
-
|
|
508
|
-
- Canonical state must be independent of the source file’s XML layout while still being able to re-emit valid OOXML.
|
|
509
|
-
- Canonical state must include a preservation envelope for unknown parts and unmodeled elements.
|
|
510
|
-
|
|
511
|
-
Suggested core entities:
|
|
512
|
-
|
|
513
|
-
- Document
|
|
514
|
-
- docId
|
|
515
|
-
- packageGraph (OPC parts + relationships + content types + raw bytes for unknown parts)
|
|
516
|
-
- workbook (canonical model)
|
|
517
|
-
- diagnostics log
|
|
518
|
-
- Workbook
|
|
519
|
-
- workbookId
|
|
520
|
-
- sheets: ordered list
|
|
521
|
-
- definedNames
|
|
522
|
-
- calcSettings
|
|
523
|
-
- styleTable (canonical)
|
|
524
|
-
- Sheet
|
|
525
|
-
- sheetId, name
|
|
526
|
-
- gridModel (sparse)
|
|
527
|
-
- rowColModel (sizes, hidden flags)
|
|
528
|
-
- merges
|
|
529
|
-
- sheetView (freeze panes, selection, zoom, etc.)
|
|
530
|
-
- sheetObjects (preserve-only anchors: charts, slicers, etc.)
|
|
531
|
-
- Cell
|
|
532
|
-
- address (row, col)
|
|
533
|
-
- value (typed)
|
|
534
|
-
- formula (optional)
|
|
535
|
-
- styleRef
|
|
536
|
-
- dataValidationRef (optional; v1 can preserve-only)
|
|
537
|
-
|
|
538
|
-
**Sparse grid storage**
|
|
539
|
-
|
|
540
|
-
- Use chunked sparse tiles (e.g., Map<tileKey, Tile> where Tile is fixed-size).
|
|
541
|
-
- Each Tile stores:
|
|
542
|
-
- values map
|
|
543
|
-
- formula map
|
|
544
|
-
- style indices map
|
|
545
|
-
- dirty flags (for projections and recalculation)
|
|
546
|
-
|
|
547
|
-
**Selection model**
|
|
548
|
-
|
|
549
|
-
- SelectionState
|
|
550
|
-
- activeCell (sheetId + address)
|
|
551
|
-
- selectionRanges[] (v1: length 1)
|
|
552
|
-
- mode: “normal” | “edit” | “formula-entry” | “dragging”
|
|
553
|
-
- This is canonical runtime state because export can embed sheet view selection state, and Excel can persist it in sheet view elements.
|
|
554
|
-
|
|
555
|
-
**Command / Transaction / Commit**
|
|
556
|
-
|
|
557
|
-
- **Command**: user intent, declarative, typed. Examples:
|
|
558
|
-
- `SetCellValue(sheetId, addr, newValue)`
|
|
559
|
-
- `SetCellFormula(sheetId, addr, formulaText)`
|
|
560
|
-
- `InsertRows(sheetId, startRow, count)`
|
|
561
|
-
- `InsertCols(sheetId, startCol, count)`
|
|
562
|
-
- `DeleteRows(...)`, `DeleteCols(...)`
|
|
563
|
-
- `SetRangeStyle(sheetId, range, styleDelta)`
|
|
564
|
-
- `MergeCells(sheetId, range)` / `UnmergeCells(...)`
|
|
565
|
-
- `RenameSheet(sheetId, newName)`
|
|
566
|
-
- **Transaction**: validated, normalized set of operations with explicit invariants and posture results.
|
|
567
|
-
- **Commit**: applies transaction atomically, emits events, updates version.
|
|
568
|
-
|
|
569
|
-
**Invariant enforcement examples**
|
|
570
|
-
|
|
571
|
-
- Prevent out-of-bound writes (rows > 1,048,576; cols > 16,384).
|
|
572
|
-
- Prevent operations that would require rewriting preserve-only objects’ internal references unless implemented → `block`.
|
|
573
|
-
- If we must normalize derived parts (calcChain), emit `warn`.
|
|
574
|
-
|
|
575
|
-
**Undo/redo**
|
|
576
|
-
|
|
577
|
-
- Store transaction log with inverse operations:
|
|
578
|
-
- Each operation provides `apply()` and `invert()`.
|
|
579
|
-
- Undo/redo is runtime-level, not UI-level.
|
|
580
|
-
|
|
581
|
-
---
|
|
582
|
-
|
|
583
|
-
**File:** `docs/formula-engine-and-recalc.md`
|
|
584
|
-
**Purpose:** Define formula parsing, reference semantics, recalculation strategy, and how to keep reference integrity without pretending to fully replicate Excel.
|
|
585
|
-
|
|
586
|
-
### Formula Engine, Recalculation Strategy, and Reference Integrity for an Excel-Compatible Editor
|
|
587
|
-
|
|
588
|
-
**Status:** Draft v1
|
|
589
|
-
|
|
590
|
-
**Spec-grounded facts we rely on**
|
|
591
|
-
|
|
592
|
-
- Formula text is stored in `<f>` and cached value in `<v>`; cached value can be omitted, and readers can recompute.
|
|
593
|
-
- Calculation chain (`calcChain.xml`) can exist but is not required; it records last calculation order and does not dictate runtime calculation order.
|
|
594
|
-
- Excel imposes limits on formula length and function semantics in practice.
|
|
595
|
-
|
|
596
|
-
**Design stance**
|
|
597
|
-
|
|
598
|
-
Do not commit to full Excel parity in v1. Instead:
|
|
599
|
-
|
|
600
|
-
- **Always preserve formula text exactly** (including functions we don’t evaluate).
|
|
601
|
-
- **Always maintain reference integrity** for supported range operations (copy/paste, insert/delete rows/cols, move range) for the subset of reference grammar we claim to support.
|
|
602
|
-
- Evaluation is pluggable and explicitly partial.
|
|
603
|
-
|
|
604
|
-
**Formula capabilities taxonomy**
|
|
605
|
-
|
|
606
|
-
- **Supported (reference integrity + parse + rewrite):**
|
|
607
|
-
- A1 references: `A1`, `$A$1`, `A$1`, `$A1`
|
|
608
|
-
- Ranges: `A1:B5`
|
|
609
|
-
- Sheet-qualified: `Sheet1!A1`
|
|
610
|
-
- 3D references (v1 preserve-only unless implemented)
|
|
611
|
-
- Structured references (tables): preserve-only in v1 unless table engine implemented; grammar exists and is non-trivial.
|
|
612
|
-
- **Supported evaluation (v1 optional):** limited function set (SUM, AVERAGE, MIN/MAX, IF, basic arithmetic), with clear “unsupported function” behavior.
|
|
613
|
-
- **Preserve-only:** dynamic arrays, rich value functions, new/copilot-related functions, external code service functions; preserve text and cached result.
|
|
614
|
-
|
|
615
|
-
**Recalculation modes**
|
|
616
|
-
|
|
617
|
-
- Mode 0 (Display cached): show cached `<v>` values where present.
|
|
618
|
-
- Pros: faithful to file state; minimal complexity.
|
|
619
|
-
- Cons: edits don’t update dependent cells visually.
|
|
620
|
-
- Mode 1 (Incremental partial): evaluate only supported formula subset; mark others as “not locally recalculated.”
|
|
621
|
-
- Mode 2 (Full engine): out of v1 scope.
|
|
622
|
-
|
|
623
|
-
**Reference rewrite strategy**
|
|
624
|
-
|
|
625
|
-
- Parse formula into AST with tokens preserving original string slices.
|
|
626
|
-
- Reference nodes carry:
|
|
627
|
-
- kind (cell/range/structured/name)
|
|
628
|
-
- absolute flags
|
|
629
|
-
- sheet scope
|
|
630
|
-
- Range operations produce a “reference transform” mapping and rewrite AST accordingly.
|
|
631
|
-
|
|
632
|
-
**calcChain policy**
|
|
633
|
-
|
|
634
|
-
- If we can maintain calcChain consistently, preserve.
|
|
635
|
-
- If operations invalidate calcChain and we cannot update it safely, remove it and emit `warn`, relying on Excel to rebuild (allowed because calcChain is optional and does not define dependencies).
|
|
636
|
-
|
|
637
|
-
---
|
|
638
|
-
|
|
639
|
-
**File:** `docs/review-comment-diff-model.md`
|
|
640
|
-
**Purpose:** Define how comments (legacy and threaded), diffing, and change inspection work, with honest v1 scope and preserve-only posture for complex Excel collaboration features.
|
|
641
|
-
|
|
642
|
-
### Review, Comment, Diff, and Change-Inspection Model for an Excel-Compatible Editor
|
|
643
|
-
|
|
644
|
-
**Status:** Draft v1
|
|
645
|
-
|
|
646
|
-
**Key reality**
|
|
647
|
-
|
|
648
|
-
Excel has multiple comment systems and collaboration metadata:
|
|
649
|
-
|
|
650
|
-
- Legacy comments are defined in ISO/IEC 29500 (referenced by MS-XLSX).
|
|
651
|
-
- Threaded comments are specified as an extension with associated parts, persons, mentions, and compatibility placeholders; reconciliation behavior is described in MS-XLSX.
|
|
652
|
-
|
|
653
|
-
**v1 stance**
|
|
654
|
-
|
|
655
|
-
- Legacy comments: preserve-only (visible if we can anchor to cell; editing optional).
|
|
656
|
-
- Threaded comments/persons/mentions: preserve-only in v1 unless we implement the full multi-part invariants:
|
|
657
|
-
- Threaded Comments part presence implies at least one threaded comment; part has a specific content type and relationship.
|
|
658
|
-
- Persons and mentions have required ID correspondence rules.
|
|
659
|
-
- Legacy placeholders must align with threaded comments for backward compatibility.
|
|
660
|
-
|
|
661
|
-
**Diff model (editor-internal, not Excel track changes)**
|
|
662
|
-
|
|
663
|
-
We implement an internal, deterministic diff for:
|
|
664
|
-
|
|
665
|
-
- Workbook structure changes (sheets added/removed/renamed/reordered)
|
|
666
|
-
- Range edits (cells changed, formulas changed, formats changed)
|
|
667
|
-
- Named range edits
|
|
668
|
-
|
|
669
|
-
Diff representation:
|
|
670
|
-
|
|
671
|
-
- Based on committed transactions, not on UI events.
|
|
672
|
-
- Each transaction includes “semantic change entries”:
|
|
673
|
-
- `CellValueChanged`, `CellFormulaChanged`, `RangeShifted`, `StyleChanged`, etc.
|
|
674
|
-
|
|
675
|
-
**Change inspection UI**
|
|
676
|
-
|
|
677
|
-
- A “Changes” panel lists transactions with:
|
|
678
|
-
- author (host-provided)
|
|
679
|
-
- time
|
|
680
|
-
- affected ranges
|
|
681
|
-
- posture warnings
|
|
682
|
-
- Clicking a change navigates to affected range and highlights before/after.
|
|
683
|
-
|
|
684
|
-
**Preserve-only collision rules**
|
|
685
|
-
|
|
686
|
-
If the user edits a range that intersects preserve-only objects anchored to those cells:
|
|
687
|
-
|
|
688
|
-
- Default: `block` unless we can prove safe rewrite of the preserve-only object references.
|
|
689
|
-
- Alternative: `warn` and proceed only if we can guarantee object remains valid and Excel opens. (This requires fixtures; do not do in v1 by default.)
|
|
690
|
-
|
|
691
|
-
---
|
|
692
|
-
|
|
693
|
-
**File:** `docs/performance-strategy-main-thread.md`
|
|
694
|
-
**Purpose:** Provide a performance plan that works on the main thread, with explicit budgets, data structures, and regression gates.
|
|
695
|
-
|
|
696
|
-
### Performance Strategy for a Main-Thread Excel-Compatible Spreadsheet Editor
|
|
697
|
-
|
|
698
|
-
**Status:** Draft v1
|
|
699
|
-
|
|
700
|
-
**Constraints**
|
|
701
|
-
|
|
702
|
-
- Excel scale: grid bounds are huge; we must virtualize and avoid full materialization.
|
|
703
|
-
- JavaScript main-thread: avoid long tasks; projection must be incremental and tile-based.
|
|
704
|
-
|
|
705
|
-
**Performance budgets (targets)**
|
|
706
|
-
|
|
707
|
-
- Input latency:
|
|
708
|
-
- typing to cell display update: < 16ms average
|
|
709
|
-
- selection movement: < 8ms average
|
|
710
|
-
- Scroll: maintain 60fps under typical viewport sizes
|
|
711
|
-
- Large file load (e.g., 10MB workbook): usable first paint in < 1s on modern laptop (stretch goal; dependent on parsing strategy)
|
|
712
|
-
|
|
713
|
-
**Core techniques**
|
|
714
|
-
|
|
715
|
-
- Tile-based sparse grid and tile-based projection cache (64×64 or 128×32).
|
|
716
|
-
- Incremental XML parsing: parse packages and worksheets on demand (sheet-level lazy load).
|
|
717
|
-
- Avoid allocating per-cell objects for empty cells.
|
|
718
|
-
- String interning and shared string handling must be memory-aware; Excel uses shared strings to optimize repeated strings.
|
|
719
|
-
- Commit batching: multiple UI micro-events coalesce into one transaction per user action when possible.
|
|
720
|
-
|
|
721
|
-
**Regression gates**
|
|
722
|
-
|
|
723
|
-
- Performance benchmarks in CI: load fixtures, simulate scroll, simulate 10k cell edits, record long tasks.
|
|
724
|
-
- Fail build if median exceeds targets by threshold.
|
|
725
|
-
|
|
726
|
-
---
|
|
727
|
-
|
|
728
|
-
**File:** `docs/xlsx-fixture-corpus-and-certification-plan.md`
|
|
729
|
-
**Purpose:** Define the fixture corpus, scenario program, and the certification process (CI + nightly + release) for Excel reopen safety.
|
|
730
|
-
|
|
731
|
-
### XLSX Fixture Corpus, Scenario Program, and Certification Plan
|
|
732
|
-
|
|
733
|
-
**Status:** Draft v1
|
|
734
|
-
|
|
735
|
-
**Fixture corpus structure**
|
|
736
|
-
|
|
737
|
-
- `fixtures/input/`
|
|
738
|
-
- `minimal/` (minimum workbook, one sheet, basic cells)
|
|
739
|
-
- `strings/` (shared strings, inline strings, rich text in shared string items)
|
|
740
|
-
- `formulas/` (simple formulas, references, cross-sheet references; cached values present/absent)
|
|
741
|
-
- `calcchain/` (with/without calcChain; broken calcChain cases)
|
|
742
|
-
- `styles/` (num formats, fonts/fills/borders; many styles; edge counts)
|
|
743
|
-
- `objects-preserve-only/` (charts, pivots, slicers, named sheet views, threaded comments, rich values)
|
|
744
|
-
- `encrypted/` (encrypted package samples → must fail)
|
|
745
|
-
|
|
746
|
-
**Scenario program**
|
|
747
|
-
|
|
748
|
-
Each scenario is a deterministic script:
|
|
749
|
-
|
|
750
|
-
- Load fixture
|
|
751
|
-
- Apply commands
|
|
752
|
-
- Export
|
|
753
|
-
- Run validators
|
|
754
|
-
- Run Excel automation open/reopen on nightly/release tiers
|
|
755
|
-
|
|
756
|
-
Example scenarios:
|
|
757
|
-
|
|
758
|
-
- `no-op round trip` for every fixture
|
|
759
|
-
- `edit cells + undo/redo`
|
|
760
|
-
- `insert rows/cols`, `delete rows/cols`
|
|
761
|
-
- `copy/paste range`
|
|
762
|
-
- `sheet rename/reorder`
|
|
763
|
-
- `format range`
|
|
764
|
-
- `formula rewrite on insert row`
|
|
765
|
-
|
|
766
|
-
**Certification outcomes**
|
|
767
|
-
|
|
768
|
-
- **Pass**: Excel opens without repair; supported changes preserved; preserve-only parts preserved.
|
|
769
|
-
- **Warn-pass**: Excel opens and supported changes preserved, but a documented normalization happened (e.g., calcChain dropped).
|
|
770
|
-
- **Fail**: repair prompt or supported loss or structural invalidity.
|
|
771
|
-
|
|
772
|
-
---
|
|
773
|
-
|
|
774
|
-
**File:** `docs/shared-openxml-editor-platform.md`
|
|
775
|
-
**Purpose:** Define the shared platform modules and contracts reused across DOCX and XLSX editors (OPC package graph, markup compatibility, command/transaction framework, preservation envelope).
|
|
776
|
-
|
|
777
|
-
### Shared OpenXML Editor Platform for DOCX and XLSX
|
|
778
|
-
|
|
779
|
-
**Status:** Draft v1
|
|
780
|
-
|
|
781
|
-
**Shared platform responsibilities**
|
|
782
|
-
|
|
783
|
-
- OPC Package Graph abstraction
|
|
784
|
-
- parts (URI, content type, raw bytes, parsed trees where relevant)
|
|
785
|
-
- relationships (package/part relationships; internal/external)
|
|
786
|
-
- content types (`[Content_Types].xml`) management
|
|
787
|
-
- Preservation Envelope
|
|
788
|
-
- store unknown parts + unknown XML payloads as raw bytes
|
|
789
|
-
- preserve relationship graph even when content is not understood
|
|
790
|
-
- Markup compatibility utilities
|
|
791
|
-
- preserve unknown namespaces and extension lists
|
|
792
|
-
- do not drop `extLst`-style future feature payloads
|
|
793
|
-
- Command/Transaction framework
|
|
794
|
-
- typed commands
|
|
795
|
-
- validation and posture results
|
|
796
|
-
- transaction log + undo/redo + diff
|
|
797
|
-
|
|
798
|
-
**Shared contracts**
|
|
799
|
-
|
|
800
|
-
- `IOoxmlPackageGraph`
|
|
801
|
-
- `IPreservationStore`
|
|
802
|
-
- `ICommandBus` / `ITransactionEngine`
|
|
803
|
-
- `IPosturePolicy` (host-configurable)
|
|
804
|
-
|
|
805
|
-
**Preservation rules (shared)**
|
|
806
|
-
|
|
807
|
-
- Never silently drop unknown parts.
|
|
808
|
-
- Never silently drop unknown relationship types.
|
|
809
|
-
- If we must normalize a derived artifact, we do it explicitly with posture `warn` and fixture coverage.
|
|
810
|
-
|
|
811
|
-
---
|
|
812
|
-
|
|
813
|
-
**File:** `docs/agent-llm-interaction-layer.md`
|
|
814
|
-
**Purpose:** Specify a safe “agent interface” for both DOCX and XLSX editors: bounded command generation, explainable diffs, and posture-aware tool use.
|
|
815
|
-
|
|
816
|
-
### Agent / LLM Interaction Layer for DOCX and XLSX Editors
|
|
817
|
-
|
|
818
|
-
**Status:** Draft v1
|
|
819
|
-
|
|
820
|
-
**Principles**
|
|
821
|
-
|
|
822
|
-
- The agent does not mutate state directly. It proposes commands.
|
|
823
|
-
- Every command is validated by runtime; posture outcomes must be returned to the agent.
|
|
824
|
-
- The agent must be able to explain what changed and why something was blocked.
|
|
825
|
-
|
|
826
|
-
**Core abstractions**
|
|
827
|
-
|
|
828
|
-
- `EditorAgentSession`
|
|
829
|
-
- has a runtime handle
|
|
830
|
-
- can request projections (read-only)
|
|
831
|
-
- can propose a command batch
|
|
832
|
-
- `AgentCommandPlan`
|
|
833
|
-
- list of commands
|
|
834
|
-
- expected outcomes (optional)
|
|
835
|
-
- rollback strategy
|
|
836
|
-
|
|
837
|
-
**Security + safety constraints**
|
|
838
|
-
|
|
839
|
-
- No arbitrary code execution in formulas or macros via agent.
|
|
840
|
-
- For encrypted/protected files, agent must receive `fail` and can only advise user on next steps (e.g., decrypt outside the editor).
|
|
841
|
-
|
|
842
|
-
**Agent-facing schemas**
|
|
843
|
-
|
|
844
|
-
- Workbook summary
|
|
845
|
-
- Sheet projection (viewport)
|
|
846
|
-
- Cell inspection (raw stored value, formula text, style tokens)
|
|
847
|
-
- Diagnostics log (warnings, preserve-only objects)
|
|
848
|
-
|
|
849
|
-
**Example agent flow**
|
|
850
|
-
|
|
851
|
-
1) Agent requests visible viewport projection.
|
|
852
|
-
2) Agent proposes commands: set values, set formulas, format a range.
|
|
853
|
-
3) Runtime returns {ok, posture, transactionId}.
|
|
854
|
-
4) Agent requests diff summary for transaction; explains to user.
|
|
855
|
-
5) If blocked, agent suggests alternative (e.g., edit a different range, or accept preserve-only lock).
|
|
856
|
-
|
|
857
|
-
---
|
|
858
|
-
|
|
859
|
-
## Sources
|
|
860
|
-
|
|
861
|
-
- OPC relationships and packaging fundamentals (relationships as links from package or part; target modes; relationship markup).
|
|
862
|
-
- Microsoft MSDN Magazine on OPC: `[Content_Types].xml`, `/_rels/.rels`, relationship serialization examples.
|
|
863
|
-
- Microsoft Learn: Structure of a SpreadsheetML document (minimum workbook scenario; workbook.xml, workbook rels, worksheet parts).
|
|
864
|
-
- Microsoft Learn: Working with sheets (worksheet part semantics; statement that a package contains one worksheet part per worksheet).
|
|
865
|
-
- Microsoft Learn: Shared string table (sharedStrings part; “Excel always creates a shared string table when it saves a file”; optionality).
|
|
866
|
-
- Microsoft Learn: Working with formulas (`<f>` for formula, `<v>` cached value; cached value can be omitted).
|
|
867
|
-
- Microsoft Learn: Working with the calculation chain (calcChain optionality; at most one; semantics).
|
|
868
|
-
- Open XML SDK reference: SpreadsheetDocument class (package/part model; relationship traversal tools; calc chain ignore helper).
|
|
869
|
-
- Microsoft Support: Excel specifications and limits (grid size, cell text limits, formula length limits, style limits).
|
|
870
|
-
- Microsoft Open Specifications PDF: MS-XLSX (Excel `.xlsx` extensions; threaded comments/persons/mentions; named sheet views; rich values and “unknown rich value MUST be preserved”; slicers).
|
|
871
|
-
- Microsoft Open Specifications: Office Document Cryptography Structure (EncryptedPackage contains entire ECMA-376 source file in compressed encrypted form; EncryptionInfo stream details).
|