@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,320 +0,0 @@
|
|
|
1
|
-
# XLSX OOXML Compliance
|
|
2
|
-
|
|
3
|
-
This research paper is source material.
|
|
4
|
-
|
|
5
|
-
Canonical repo-aligned planned doc:
|
|
6
|
-
|
|
7
|
-
- `docs/reference/xlsx/xlsx-ooxml-compliance.md`
|
|
8
|
-
|
|
9
|
-
## Interpretation of the problem
|
|
10
|
-
|
|
11
|
-
This document defines the **compatibility + validation stance** for a React-based, Excel-compatible spreadsheet editor that imports `.xlsx`, edits a **bounded v1 surface**, and exports `.xlsx` files that **reopen in recent Excel environments without repair prompts or silent loss of content that should have remained supported**.
|
|
12
|
-
|
|
13
|
-
The framing assumes `.xlsx` is not “one XML file,” but an **OOXML/Open Packaging Conventions (OPC) package**: a ZIP-based container of **parts** (byte streams) with **content types** and an explicit **relationship graph**.
|
|
14
|
-
|
|
15
|
-
The editor’s product contract is explicitly “runtime-first”: React is a **projection** of a runtime-owned canonical workbook state, and all edits flow via **commands → transactions → commit**, never by direct UI mutation (this is treated as a necessary architectural constraint for achieving reliable preservation and roundtrip behavior).
|
|
16
|
-
|
|
17
|
-
## Research plan
|
|
18
|
-
|
|
19
|
-
Primary and near-primary sources were used to extract normative rules and to separate them from application behavior:
|
|
20
|
-
|
|
21
|
-
Normative packaging rules for OPC (part naming, content types stream, relationship rules, encoding constraints) were taken from ECMA/OOXML OPC material and the published conformance rules (as rendered on c-rex).
|
|
22
|
-
|
|
23
|
-
Normative markup compatibility (MCE) rules—including `mc:Ignorable`, `mc:MustUnderstand`, and `mc:AlternateContent` selection/processing requirements—were taken from the Markup Compatibility and Extensibility specification text.
|
|
24
|
-
|
|
25
|
-
SpreadsheetML package structure and key parts/relationships (workbook, worksheets, shared strings, styles, calc chain, comments, tables, drawings/charts, pivots, external links) were taken from SpreadsheetML package structure and part definitions.
|
|
26
|
-
|
|
27
|
-
To ground “Excel behavior is the final standard,” Excel’s documented repair workflow (“File Recovery mode” / “Open and Repair”) was used as an anchor for what constitutes P0 corruption in practice.
|
|
28
|
-
|
|
29
|
-
For format-ecosystem reality (Strict vs Transitional), Library of Congress format descriptions were used to distinguish the intent of Strict vs the observed dominance of Transitional in real-world authoring.
|
|
30
|
-
|
|
31
|
-
For CI/service validation tooling constraints, official Microsoft Learn documentation for the Open XML SDK’s `SpreadsheetDocument` and `OpenXmlValidator` APIs was used (permitted in CI/service, not suitable as the browser runtime transformation engine).
|
|
32
|
-
|
|
33
|
-
## Findings
|
|
34
|
-
|
|
35
|
-
`.xlsx` is an OPC package with strict package-level rules that can’t be hand-waved. Parts have constrained **part name syntax** (leading `/`, no empty segments, no trailing `/`, etc.). The ZIP mapping stores part content type data in a special **Content Types stream at `"/[Content_Types].xml"`**, which is explicitly *not* a part name; bracket characters are chosen to violate part naming grammar.
|
|
36
|
-
|
|
37
|
-
Relationships are first-class and have required properties: relationship IDs must be unique within a relationships part, relationship types are URIs, and targets are URI references resolved relative to the source part/package per OPC rules. OPC relationship parts also have special structure/naming conventions (package relationships live in `/_rels/.rels`; part relationships for `/a/b/c.xml` live in `/a/b/_rels/c.xml.rels`).
|
|
38
|
-
|
|
39
|
-
Markup Compatibility & Extensibility matters in real Excel files. By default, non-understood namespaces are errors unless declared ignorable; ignorable namespaces must be ignored without error in that case. Alternate-content constructs require deterministic selection rules (`Choice` requires understood namespaces; optional `Fallback`; unselected branches are treated as if they do not exist). This becomes a preservation and validation problem because an editor must not “helpfully normalize” away MCE structures unless it has a proof-backed reason.
|
|
40
|
-
|
|
41
|
-
SpreadsheetML is a multi-part graph. A SpreadsheetML package must contain a **package-relationship item** and **content-type item**, and its package relationship item must target exactly one **Workbook part**. The workbook references sheets, and each worksheet is a separate part referenced by relationship ID. Common “core” workbook adjunct parts are separate nodes: shared strings (exactly one, implicit from workbook), styles (at most one, implicit from workbook), and calc chain (optional, implicit from workbook).
|
|
42
|
-
|
|
43
|
-
Many “features” are not inline decorations but their own part families: comments exist as worksheet-scoped comments parts; a comments part exists per worksheet that has comments, with defined content type and relationship type. Tables have their own table definition parts, implicitly related from the worksheet that contains the table. Images and charts are relationship-backed part graphs: drawings parts are related from a worksheet and contain layout for drawing elements; charts are separate chart parts related from drawings (and chartsheets involve their own sheet parts). Pivot tables include pivot table parts and pivot cache definition/records parts, with explicit and implicit links into workbook and pivot definitions—making them high-risk for “accidental breakage.” External references are represented with external link parts explicitly related from the workbook, and can include external targets.
|
|
44
|
-
|
|
45
|
-
“Excel behavior is the final standard” is not rhetorical: Excel explicitly documents that when it detects a corrupted workbook it enters **File Recovery** and attempts repair; users can also invoke “Open and Repair,” and failure can cause loss of changes or extraction-only recovery. Therefore any compliance stance that does not gate on “no repair prompt” is not credible.
|
|
46
|
-
|
|
47
|
-
Strict vs Transitional is a format reality you must choose consciously. The Strict variant is a subset with different namespaces and disallows some constructs (e.g., VML). The spec intent was that new documents would be Strict, but in practice most new files are produced as Transitional even if they don’t require Transitional-only features. That implies export defaults should be Transitional-first unless you can prove Strict output across modern Excel ecosystems.
|
|
48
|
-
|
|
49
|
-
Open XML SDK (`SpreadsheetDocument`) models Excel documents as packages and provides `OpenXmlValidator` to validate packages against target file format versions. This is appropriate for CI/service validation, but it is not a browser-native transformation engine for a React editor.
|
|
50
|
-
|
|
51
|
-
## Recommended design / decisions
|
|
52
|
-
|
|
53
|
-
Adopt a two-layer compliance model: **spec-level correctness** (OPC + SpreadsheetML + MCE rules) is required, but **application-level correctness in Excel** is the shipping standard. This document therefore defines “supported” as “supported-roundtrip in real Excel reopen,” not “we can emit XML that parses.”
|
|
54
|
-
|
|
55
|
-
Declare `.xlsx` v1 export stance as **Transitional-first**, with `.xlsx Strict` treated as import-only or lock/preserve until proven; this matches observed ecosystem behavior where Transitional dominates.
|
|
56
|
-
|
|
57
|
-
Treat the package as the unit of truth in the runtime, not “sheet XML documents.” The runtime must maintain: (a) a **content types manifest** compatible with OPC rules, (b) a **relationship graph** that can be validated independently, and (c) a **part inventory** that preserves unknown parts byte-for-byte whenever possible. This is non-negotiable if “unsupported but preservable content must never be silently dropped” is a real commitment.
|
|
58
|
-
|
|
59
|
-
Make preservation explicit via a response model: for every import/export or edit transaction, unsupported surfaces must be categorized as **preserve**, **lock**, **warn**, **block**, or **fail**, and reported through a typed compatibility report. MCE provides a normative basis for when “unknown namespace” is ignorable vs fatal; your editor must use this rather than guesswork.
|
|
60
|
-
|
|
61
|
-
Require proof-backed promotion: a feature cannot be labeled `supported-roundtrip` based on unit XML tests alone. Promotion requires: **package-backed import → runtime edit → export → reload**, plus **real Excel reopen evidence** (no repair prompt, no silent loss of content within the supported contract). Excel’s own documented repair workflow is the operational definition of “corruption.”
|
|
62
|
-
|
|
63
|
-
Use Open XML SDK validation in CI/service only: `OpenXmlValidator.Validate(OpenXmlPackage)` is a strong “spec-level” tripwire and should be required for release gates, but the browser runtime should not depend on .NET package models to transform workbooks.
|
|
64
|
-
|
|
65
|
-
## Risks and open questions
|
|
66
|
-
|
|
67
|
-
Preservation vs normalization is the main fault line. OPC package rules include MCE preprocessing and schema validity expectations (e.g., XML encoding limits, DTD prohibition, and additional constraints in the package model conformance rules). Any “pretty printer” or eager DOM rewrite strategy risks introducing invalid structures or losing ignorable-but-preservable content.
|
|
68
|
-
|
|
69
|
-
Excel repair triggers are often “small” (a bad relationship target, illegal XML characters, a mismatched content type, a broken view structure), but the consequence is always the same: Excel enters repair/recovery mode and may discard pieces of the workbook. This is why “repair prompt = P0” must be a release gate.
|
|
70
|
-
|
|
71
|
-
Formula and calc-related structures are deceptively risky. Cells can contain both `<f>` (formula) and `<v>` (cached result), and the workbook may contain `calcChain.xml` as an ordering of calculated cells; it is legal for `calcChain` to exist or not. Mishandling formulas (especially shared formulas, array formulas, dynamic arrays, and recalculation flags) can yield Excel behavior drift or repair.
|
|
72
|
-
|
|
73
|
-
Protection has two layers and can easily produce “false edits.” Sheet protection is expressed at the sheet level, and cell-level protection is expressed via style protection attributes that only take effect when the sheet is protected. A v1 editor that ignores this will either let users edit “locked” surfaces (breaking host expectations) or accidentally strip protection (breaking preservation guarantees).
|
|
74
|
-
|
|
75
|
-
Pivot tables, charts, drawings, and external links are part graphs, not inline features. The biggest risk is that benign-looking edits (sheet rename, row/column structural edits, moving ranges) can invalidate references across these graphs. Until there is proof-backed support, they must remain preserve-only with appropriate locks or blocks.
|
|
76
|
-
|
|
77
|
-
Strict vs Transitional is a scope trap. Strict has different namespaces and constraints, and Transitional’s dominance means “Strict export” is not a v1 promise unless you can prove it in Excel reopen.
|
|
78
|
-
|
|
79
|
-
## Concrete deliverable in the requested format
|
|
80
|
-
|
|
81
|
-
This section is the **repo-ready canonical policy** for `.xlsx` compatibility and validation. It is written as a normative contract (MUST/SHALL language). All terms below are for v1 unless explicitly marked otherwise.
|
|
82
|
-
|
|
83
|
-
**Document identity**
|
|
84
|
-
|
|
85
|
-
- Title: `XLSX OOXML Compliance`
|
|
86
|
-
- Status: Canonical policy for `.xlsx` compatibility + validation stance.
|
|
87
|
-
- Objective: Exported `.xlsx` MUST reopen in recent Excel environments **without repair prompts** and without silent loss of content within the supported contract.
|
|
88
|
-
|
|
89
|
-
### Compliance model
|
|
90
|
-
|
|
91
|
-
**Normative baseline**
|
|
92
|
-
|
|
93
|
-
- The editor is an OOXML producer/consumer at the package level. A SpreadsheetML package SHALL contain a package-relationship item and a content-type item and SHALL target exactly one Workbook part from its package relationships.
|
|
94
|
-
- OPC rules govern part naming, content types, relationship construction, and ZIP mapping. Part names SHALL satisfy OPC part-name constraints.
|
|
95
|
-
- The Content Types stream SHALL be stored at `"/[Content_Types].xml"` and SHALL NOT be treated as a part name.
|
|
96
|
-
- Markup Compatibility & Extensibility (MCE) rules SHALL be respected during validation and when deciding whether unknown markup is ignorable vs fatal.
|
|
97
|
-
|
|
98
|
-
**Two-layer correctness requirement**
|
|
99
|
-
|
|
100
|
-
- Spec-level correctness is necessary but not sufficient: the exported package MUST satisfy OPC + SpreadsheetML structural requirements and pass automated validation gates.
|
|
101
|
-
- Application-level correctness is the release standard: the exported file MUST reopen in real Excel environments without “Open and Repair” / File Recovery behavior for supported flows.
|
|
102
|
-
|
|
103
|
-
**Format stance (Strict vs Transitional)**
|
|
104
|
-
|
|
105
|
-
- v1 export stance: **Transitional-first** `.xlsx`.
|
|
106
|
-
- `.xlsx Strict` handling: import MAY be accepted in v1, but MUST be treated as `preserve-only` + `lock` unless/until strict roundtrip is proven. This stance is based on the observed real-world dominance of Transitional authoring even when Strict would suffice.
|
|
107
|
-
|
|
108
|
-
### Feature class taxonomy
|
|
109
|
-
|
|
110
|
-
Each feature is classified into one of the following **support classes**:
|
|
111
|
-
|
|
112
|
-
- `supported-roundtrip`: import → runtime edit → export → reopen proof exists; semantics remain correct within the defined v1 contract.
|
|
113
|
-
- `supported-import-only`: imported and preserved; UI edits are not allowed (or edits do not affect this feature); export preserves it.
|
|
114
|
-
- `supported-export-only`: can be generated correctly, but import semantics are not relied upon.
|
|
115
|
-
- `preserve-only`: editor does not claim semantic understanding; feature MUST survive unrelated edits by pass-through preservation rules.
|
|
116
|
-
- `unsupported-fatal`: presence or mutation makes safe roundtrip impossible; editor MUST fail or block before producing a likely-corrupt workbook.
|
|
117
|
-
|
|
118
|
-
This taxonomy is separate from the response model below; support class answers “what we claim,” response answers “what we do at runtime.”
|
|
119
|
-
|
|
120
|
-
### Package-first rules
|
|
121
|
-
|
|
122
|
-
These rules apply to all builds and are required for any compatibility claim:
|
|
123
|
-
|
|
124
|
-
**Package graph is the canonical import/export substrate**
|
|
125
|
-
|
|
126
|
-
- The runtime MUST import the package as:
|
|
127
|
-
- a part inventory (all ZIP items mapped to parts or “non-part items” like content types stream),
|
|
128
|
-
- a content types manifest (driven by `"/[Content_Types].xml"`),
|
|
129
|
-
- and a relationship graph (package relationships + part relationships).
|
|
130
|
-
- UI-level models (grid, selection, formatting panels) MUST be projections of runtime state; UI MUST NOT own canonical workbook truth.
|
|
131
|
-
|
|
132
|
-
**Preservation is package-scoped, not “we’ll keep some XML fields”**
|
|
133
|
-
|
|
134
|
-
- Unknown parts MUST be preserved byte-for-byte when:
|
|
135
|
-
- the part is not in the editor-owned v1 contract, and
|
|
136
|
-
- the edit transaction does not require rewriting the part.
|
|
137
|
-
This requirement exists because many Excel features are represented as separate parts (e.g., pivot caches, drawings, external links) and because Excel will repair/remove parts that become inconsistent.
|
|
138
|
-
|
|
139
|
-
**Relationship integrity is non-negotiable**
|
|
140
|
-
|
|
141
|
-
- Relationship IDs MUST remain unique per relationships part, relationship types SHALL remain valid URIs, and targets SHALL remain resolvable.
|
|
142
|
-
- The product MUST NOT emit dangling relationships, broken targets, or mismatched content types; these are treated as P0 corruption risks due to Excel’s repair workflow.
|
|
143
|
-
|
|
144
|
-
**MCE handling**
|
|
145
|
-
|
|
146
|
-
- Unknown markup SHALL be treated as:
|
|
147
|
-
- **ignorable** only when it is in a namespace listed in `mc:Ignorable` in scope; otherwise, unknown elements/attributes are errors by default.
|
|
148
|
-
- **fatal** when `mc:MustUnderstand` requires a namespace the runtime does not understand.
|
|
149
|
-
- `mc:AlternateContent` SHALL NOT be normalized away unless:
|
|
150
|
-
- the runtime can reproduce correct selection semantics, and
|
|
151
|
-
- preservation of unselected branches is guaranteed, and
|
|
152
|
-
- Excel reopen tests show no regressions.
|
|
153
|
-
|
|
154
|
-
### Preserve / lock / warn / block / fail policy
|
|
155
|
-
|
|
156
|
-
This policy is the required response model for all compatibility decisions. It applies both at import time and at mutation/commit time.
|
|
157
|
-
|
|
158
|
-
**Preserve**
|
|
159
|
-
|
|
160
|
-
- Meaning: Keep content exactly; do not expose editing UI; allow unrelated edits.
|
|
161
|
-
- Requirements:
|
|
162
|
-
- Preserve unknown parts and unknown markup in known parts where feasible without rewriting required structures.
|
|
163
|
-
- Preserve required relationships and content types needed to keep the preserved content reachable.
|
|
164
|
-
|
|
165
|
-
**Lock**
|
|
166
|
-
|
|
167
|
-
- Meaning: Preserve content and enforce edit restrictions so mutations cannot invalidate preserved surfaces.
|
|
168
|
-
- Use cases:
|
|
169
|
-
- Protected sheets/cells: if sheet protection exists, the runtime MUST NOT allow mutations that violate the protection model it cannot fully enforce.
|
|
170
|
-
- Pivot/Chart/Drawing graphs: lock structural edits (sheet rename, row/column structural operations) when those operations cannot be proven safe across the dependent relationship graphs.
|
|
171
|
-
|
|
172
|
-
**Warn**
|
|
173
|
-
|
|
174
|
-
- Meaning: Allow the operation but emit a structured warning describing risk and what might degrade.
|
|
175
|
-
- Constraints:
|
|
176
|
-
- Warn MUST be explicit to the host via a typed compatibility report.
|
|
177
|
-
- Warn MUST NOT be used for any case likely to cause Excel repair prompt or silent supported-content loss.
|
|
178
|
-
|
|
179
|
-
**Block**
|
|
180
|
-
|
|
181
|
-
- Meaning: Operation is disallowed because it would invalidate preserved or supported content.
|
|
182
|
-
- Examples:
|
|
183
|
-
- Attempting to delete a sheet that is a dependency of external references or pivot caches without a safe rewrite plan.
|
|
184
|
-
- Attempting to rewrite a part containing unknown-but-non-ignorable namespaces without MCE-correct processing.
|
|
185
|
-
|
|
186
|
-
**Fail**
|
|
187
|
-
|
|
188
|
-
- Meaning: Abort import/export or abort commit because safe output cannot be guaranteed.
|
|
189
|
-
- Always fail when:
|
|
190
|
-
- `mc:MustUnderstand` demands unknown namespaces.
|
|
191
|
-
- The package violates OPC invariants (invalid part names, invalid content types stream, relationship rules violations) and cannot be repaired deterministically.
|
|
192
|
-
- Export would likely trigger Excel repair workflow (P0 corruption risk).
|
|
193
|
-
|
|
194
|
-
### SDK/tooling policy
|
|
195
|
-
|
|
196
|
-
**CI/service (allowed and required)**
|
|
197
|
-
|
|
198
|
-
- CI MUST include Open XML SDK validation using `OpenXmlValidator.Validate(OpenXmlPackage)` on exported packages (targeting declared file format versions).
|
|
199
|
-
- CI MAY open documents via Open XML SDK `SpreadsheetDocument` for structural assertions (part counts, relationship presence, etc.).
|
|
200
|
-
- CI MUST run package-level checks independent of Open XML SDK (ZIP integrity, part inventory, content types consistency, relationship graph integrity). OPC defines these as first-class concerns.
|
|
201
|
-
- Release certification MUST include real Excel reopen checks because Excel’s File Recovery / Open and Repair behavior is the real-world pass/fail line.
|
|
202
|
-
|
|
203
|
-
**Browser runtime (explicitly not acceptable as transformation engine)**
|
|
204
|
-
|
|
205
|
-
- Browser runtime MUST NOT depend on Open XML SDK as the transformation engine (it is a .NET package model and validator, not a browser-native engine). This is a policy constraint to keep the runtime deterministic, portable, and auditable in JS/TS while still leveraging SDK validation in CI/service.
|
|
206
|
-
- Browser runtime MUST maintain its own package graph model to satisfy the preservation and transaction constraints in this policy.
|
|
207
|
-
|
|
208
|
-
### Release gates
|
|
209
|
-
|
|
210
|
-
No feature may be claimed `supported-roundtrip` unless it passes all gates below:
|
|
211
|
-
|
|
212
|
-
**Gate A: Package integrity**
|
|
213
|
-
|
|
214
|
-
- Valid ZIP package.
|
|
215
|
-
- Part inventory + content types stream consistent (`"/[Content_Types].xml"` present and correct).
|
|
216
|
-
- Relationship graph integrity (no broken targets; IDs unique; types URIs).
|
|
217
|
-
|
|
218
|
-
**Gate B: Spec validation**
|
|
219
|
-
|
|
220
|
-
- Open XML SDK `OpenXmlValidator` reports zero errors for declared file format version targets (or explicit, reviewed allowlist for known validator limitations with preserved extension content).
|
|
221
|
-
- MCE rules are respected (no non-ignorable unknown markup; no `MustUnderstand` failures).
|
|
222
|
-
|
|
223
|
-
**Gate C: Package-backed roundtrip proof**
|
|
224
|
-
|
|
225
|
-
- Import fixture → apply v1 edits → export → re-import exported package; semantic assertions pass for the feature.
|
|
226
|
-
- Helper-level XML unit tests alone are explicitly insufficient for promotion.
|
|
227
|
-
|
|
228
|
-
**Gate D: Real Excel reopen proof**
|
|
229
|
-
|
|
230
|
-
- Export MUST reopen in recent Excel environments without invoking File Recovery / Open and Repair prompts for the supported flow.
|
|
231
|
-
- A “re-save in Excel” stability check MUST show no catastrophic structural drift for supported-roundtrip features.
|
|
232
|
-
|
|
233
|
-
**Gate E: Preservation proof**
|
|
234
|
-
|
|
235
|
-
- Preserve-only fixtures MUST survive unrelated edits (no deletion of unknown parts, extension lists, external link parts, pivot cache parts, etc.).
|
|
236
|
-
|
|
237
|
-
### Fixture program
|
|
238
|
-
|
|
239
|
-
The project SHALL maintain a permanent fixture corpus with metadata and automated runners.
|
|
240
|
-
|
|
241
|
-
**Fixture sources**
|
|
242
|
-
|
|
243
|
-
- Excel-authored `.xlsx` fixtures are primary (the “host standard”).
|
|
244
|
-
- Additional fixtures should include non-Excel producers (to catch interoperability variance), but Excel reopen remains the pass/fail standard.
|
|
245
|
-
|
|
246
|
-
**Fixture metadata (MUST exist per fixture)**
|
|
247
|
-
|
|
248
|
-
- Fixture ID, origin, Excel version notes (if known), and feature tags mapped to the feature taxonomy.
|
|
249
|
-
- Expected support class and expected response policy outcomes for risky operations (lock/block/warn/fail).
|
|
250
|
-
|
|
251
|
-
**Minimum fixture categories (v1)**
|
|
252
|
-
|
|
253
|
-
- Minimal workbook structure (workbook + at least one worksheet).
|
|
254
|
-
- Cells with numbers/strings/formulas; includes shared strings and inline strings.
|
|
255
|
-
- Styles-heavy workbook including number formats and protections.
|
|
256
|
-
- Merge cells edge cases.
|
|
257
|
-
- Comments/notes fixtures (worksheet comments part).
|
|
258
|
-
- AutoFilter + table definition fixtures.
|
|
259
|
-
- Conditional formatting + data validation fixtures.
|
|
260
|
-
- Drawings + images + charts fixtures.
|
|
261
|
-
- Pivot table + pivot cache fixtures.
|
|
262
|
-
- External links fixtures.
|
|
263
|
-
- MCE fixtures containing `mc:AlternateContent`, ignorable namespaces, and at least one `MustUnderstand` negative fixture.
|
|
264
|
-
|
|
265
|
-
### v1 feature classification
|
|
266
|
-
|
|
267
|
-
This table defines the **explicit v1 contract** for common SpreadsheetML surfaces. “Supported-roundtrip” requires the release gates above; absent proof, default is conservative.
|
|
268
|
-
|
|
269
|
-
| Feature surface | v1 support class | Default response policy | Notes (v1) |
|
|
270
|
-
|---|---:|---:|---|
|
|
271
|
-
| Sheets (workbook + worksheets) | supported-roundtrip | preserve | Workbook/worksheet relationships are foundational; required for any meaningful `.xlsx` support. |
|
|
272
|
-
| Cells (values/types) | supported-roundtrip | preserve | Core cell structure (`<c>`, `<v>`, optional `<f>`, inline strings) is required. |
|
|
273
|
-
| Styles (basic cellXfs, fonts/fills/borders/numFmts) | supported-roundtrip (subset) | warn | Styles are centralized in a styles part; v1 supports a declared subset only, remainder preserve-only. |
|
|
274
|
-
| Formulas | supported-roundtrip (no eval) | warn | Store formula strings; Excel recalculates. Advanced formula constructs remain preserve-only until proven. |
|
|
275
|
-
| Calc chain | preserve-only | preserve | `calcChain.xml` is optional; safest v1 stance is preserve unchanged (or drop only with explicit proof + Excel reopen notes). |
|
|
276
|
-
| Merges | supported-roundtrip | preserve | Merge ranges are declared via `<mergeCells>/<mergeCell ref=...>`. |
|
|
277
|
-
| Comments / Notes (legacy comments part) | preserve-only | lock | Comments are worksheet-scoped parts; v1 does not claim edit UI or anchor correctness yet. |
|
|
278
|
-
| Filters (AutoFilter) | preserve-only | warn | AutoFilter is declarative and interacts with tables and defined names; preserve. |
|
|
279
|
-
| Tables (table definition parts) | preserve-only | lock | Table definition is a distinct part related from the worksheet; structural edits around tables are risky. |
|
|
280
|
-
| Named ranges (definedNames) | preserve-only | warn | Defined names participate in formulas, filters, and external references; preserve unless proven. |
|
|
281
|
-
| Data validation | preserve-only | warn | Validation is defined as worksheet-level `<dataValidations>` structures; preserve without rewriting. |
|
|
282
|
-
| Conditional formatting | preserve-only | warn | Rules often reference dxf styles and ranges; preserve without rewriting. |
|
|
283
|
-
| Images (pictures/media) | preserve-only | lock | Images exist as relationship targets (image parts) and often flow through drawings graphs; preserve. |
|
|
284
|
-
| Charts | preserve-only | lock | Charts are separate chart parts related from drawings; safe editing requires graph-aware constraints. |
|
|
285
|
-
| Pivot tables | preserve-only | block | Pivot caches and definitions involve multiple dependent parts; v1 blocks structural mutations that can invalidate them. |
|
|
286
|
-
| Macros | unsupported-fatal (for `.xlsx`) | fail | Macro-enabled structures belong to macro-enabled formats; `.xlsx` editor does not promise safe behavior here. |
|
|
287
|
-
| Protection (sheet protection, cell lock/hidden) | preserve-only | lock | Protection is expressed at sheet and cell/style levels; v1 preserves and locks rather than pretending to enforce partially. |
|
|
288
|
-
| External links | preserve-only | warn/block | External link parts are explicit workbook relationships; edits that change reference topology may be blocked. |
|
|
289
|
-
| Unknown OOXML within known parts (unknown elements/attrs) | preserve-only or unsupported-fatal | preserve or fail | Determined by MCE: ignorable namespaces may be preserved/ignored; `MustUnderstand` is fatal if unknown. |
|
|
290
|
-
| Unknown package parts (unknown content types / relationships) | preserve-only | preserve | Preserve byte streams + relationship graph + content types unless mutation requires rewrite; never silently drop. |
|
|
291
|
-
|
|
292
|
-
### Explicitly outside the active editor-owned v1 contract
|
|
293
|
-
|
|
294
|
-
The following are outside the v1 “editor-owned” surface; they may exist in imported packages but are not claimed as editable in v1:
|
|
295
|
-
|
|
296
|
-
- Editing of chart definitions, chart drawing shapes, and drawing anchors (preserve-only).
|
|
297
|
-
- Editing of pivot tables or pivot cache structures (preserve-only; structural edits blocked).
|
|
298
|
-
- Editing of table definitions, autoFilter definitions, conditional formatting rule logic, and data validation semantics (preserve-only).
|
|
299
|
-
- Threaded comments / modern comment systems beyond the legacy comments part (not covered here; preserve-only at best).
|
|
300
|
-
- Macro-enabled behaviors (unsupported-fatal for `.xlsx` contract).
|
|
301
|
-
- Any MCE `MustUnderstand` namespace that the runtime does not explicitly implement (import must fail).
|
|
302
|
-
- Any “Strict export” promise (until strict reopen proof exists).
|
|
303
|
-
|
|
304
|
-
## Sources
|
|
305
|
-
|
|
306
|
-
ECMA-376 standard overview and part breakdown (OPC, MCE, etc.).
|
|
307
|
-
|
|
308
|
-
OPC part naming and package model conformance requirements, including relationship constraints and XML processing constraints.
|
|
309
|
-
|
|
310
|
-
OPC ZIP mapping and the normative location/meaning of `"/[Content_Types].xml"`.
|
|
311
|
-
|
|
312
|
-
Markup Compatibility & Extensibility rules: ignorable namespaces, `MustUnderstand`, and `AlternateContent` selection.
|
|
313
|
-
|
|
314
|
-
SpreadsheetML package structure and part definitions (workbook, worksheets, shared strings, styles, calc chain, comments, tables, drawings/charts, pivots, external links).
|
|
315
|
-
|
|
316
|
-
Open XML SDK documentation for `SpreadsheetDocument` and `OpenXmlValidator` (CI/service validation stance).
|
|
317
|
-
|
|
318
|
-
Excel “Open and Repair” / File Recovery documentation (host-level corruption semantics and reopen requirements).
|
|
319
|
-
|
|
320
|
-
Format descriptions for XLSX Transitional and XLSX Strict (Strict vs Transitional reality).
|
package/examples/README.md
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Examples
|
|
2
|
-
|
|
3
|
-
Host-app examples and integration demos for the eventual `<WordReviewEditor />` component belong here.
|
|
4
|
-
|
|
5
|
-
Planned example surfaces:
|
|
6
|
-
|
|
7
|
-
- simple host app using `initialDocx`
|
|
8
|
-
- host app restoring from canonical snapshot
|
|
9
|
-
- datastore-backed autosave integration
|
|
10
|
-
- review-oriented host shell wiring comment and revision events
|
|
11
|
-
|
|
12
|
-
Examples should demonstrate the public component contract without bypassing the runtime or treating the DOM as the source of truth.
|
|
13
|
-
|
|
14
|
-
Wave 1 contract note:
|
|
15
|
-
|
|
16
|
-
- Example apps should consume the public contracts frozen in `docs/reference/public-api.md` and the runtime/UI boundaries frozen in `docs/plans/waves/specs/wave-1-runtime-contracts.md`.
|
package/memory/MEMORY.md
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Shared Fleet Memory
|
|
2
|
-
|
|
3
|
-
## Fleet Nodes
|
|
4
|
-
- anarchy: workstation, RTX 5090, Arch Linux
|
|
5
|
-
- ceobox: dev box, EPYC 7502P, Ubuntu 24.04
|
|
6
|
-
- leapclaw-prod-01: gateway, Temporal, Qdrant, Hetzner
|
|
7
|
-
- leapclaw-provider-01: Ollama, RTX 6000 Ada, Hetzner
|
|
8
|
-
- Mac Studio: M1 Ultra, macOS
|
|
9
|
-
- Blue Air: M4, macOS
|
|
10
|
-
|
|
11
|
-
## Active Projects
|
|
12
|
-
- react-ooxml-office: docx/xlsx editor (365+ tests)
|
|
13
|
-
- war-is-eternal: Warhammer 40K app (348 tests)
|
|
14
|
-
- fabric: BW revenue platform
|
|
15
|
-
- leapclaw-client: Rust TUI client
|
|
16
|
-
- leapclaw-memory: this service
|
|
17
|
-
- leapclaw-voice: Rust voice agent
|
|
18
|
-
- leapclaw-wave: Rust wave orchestrator
|
|
19
|
-
|
|
20
|
-
## Key Credentials
|
|
21
|
-
- SSH keys in ~/.ssh/ (never store actual keys here)
|
|
22
|
-
- ceobox LUKS: passphrase at ~/.ssh/ceobox_luks_passphrase.txt
|
|
23
|
-
- prod-01 LUKS: passphrase at ~/.ssh/hetzner_luks_passphrase.txt
|
|
24
|
-
|
package/pnpm-workspace.yaml
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
mapfile -t authored_js < <(find src -type f -name '*.js' | sort)
|
|
5
|
-
|
|
6
|
-
if ((${#authored_js[@]} == 0)); then
|
|
7
|
-
exit 0
|
|
8
|
-
fi
|
|
9
|
-
|
|
10
|
-
printf 'Unexpected committed JavaScript files under src/:\n' >&2
|
|
11
|
-
printf ' %s\n' "${authored_js[@]}" >&2
|
|
12
|
-
printf 'Authored source in src/ must stay TypeScript-only.\n' >&2
|
|
13
|
-
exit 1
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
if [[ -z "${CONTEXT7_API_KEY:-}" ]]; then
|
|
5
|
-
echo "context7-api-check: CONTEXT7_API_KEY is not set" >&2
|
|
6
|
-
exit 1
|
|
7
|
-
fi
|
|
8
|
-
|
|
9
|
-
node <<'NODE'
|
|
10
|
-
const fs = require('fs');
|
|
11
|
-
const path = require('path');
|
|
12
|
-
|
|
13
|
-
const apiKey = process.env.CONTEXT7_API_KEY || '';
|
|
14
|
-
const repoRoot = process.cwd();
|
|
15
|
-
const bundlePath = path.join(repoRoot, 'docs/context7/bundles.json');
|
|
16
|
-
const payload = JSON.parse(fs.readFileSync(bundlePath, 'utf8'));
|
|
17
|
-
|
|
18
|
-
const entries = [];
|
|
19
|
-
for (const [bundleId, bundle] of Object.entries(payload.bundles || {})) {
|
|
20
|
-
for (const library of bundle.libraries || []) {
|
|
21
|
-
if (!library.libraryId) {
|
|
22
|
-
throw new Error(
|
|
23
|
-
`Bundle "${bundleId}" must pin exact Context7 libraryId values. Found libraryName=${JSON.stringify(library.libraryName || '')}.`,
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
entries.push({
|
|
27
|
-
bundleId,
|
|
28
|
-
libraryId: String(library.libraryId),
|
|
29
|
-
queryHint: String(library.queryHint || 'overview'),
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const uniqueEntries = [...new Map(entries.map((entry) => [entry.libraryId, entry])).values()];
|
|
35
|
-
|
|
36
|
-
async function validate(entry) {
|
|
37
|
-
const url = new URL('https://context7.com/api/v2/context');
|
|
38
|
-
url.searchParams.set('libraryId', entry.libraryId);
|
|
39
|
-
url.searchParams.set('query', entry.queryHint);
|
|
40
|
-
url.searchParams.set('type', 'txt');
|
|
41
|
-
const response = await fetch(url, {
|
|
42
|
-
headers: {
|
|
43
|
-
Authorization: 'Bearer ' + apiKey,
|
|
44
|
-
Accept: 'text/plain, application/json',
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
const text = await response.text();
|
|
48
|
-
if (!response.ok) {
|
|
49
|
-
throw new Error(`Context7 ${entry.libraryId} failed (${response.status}): ${text.slice(0, 200)}`);
|
|
50
|
-
}
|
|
51
|
-
if (text.trim().length === 0) {
|
|
52
|
-
throw new Error(`Context7 ${entry.libraryId} returned empty context.`);
|
|
53
|
-
}
|
|
54
|
-
console.log(`ok -- ${entry.libraryId} (${entry.bundleId})`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
(async () => {
|
|
58
|
-
for (const entry of uniqueEntries) {
|
|
59
|
-
await validate(entry);
|
|
60
|
-
}
|
|
61
|
-
})().catch((error) => {
|
|
62
|
-
console.error(error instanceof Error ? error.message : String(error));
|
|
63
|
-
process.exit(1);
|
|
64
|
-
});
|
|
65
|
-
NODE
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Load CONTEXT7_API_KEY from repo-root .env.local, then export it for child processes.
|
|
3
|
-
#
|
|
4
|
-
# Usage:
|
|
5
|
-
# source scripts/context7-export-env.sh
|
|
6
|
-
# bash scripts/context7-export-env.sh run <command> [args...]
|
|
7
|
-
|
|
8
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
|
9
|
-
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
10
|
-
ENV_FILE="$REPO_ROOT/.env.local"
|
|
11
|
-
|
|
12
|
-
if [[ -f "$ENV_FILE" ]]; then
|
|
13
|
-
set -a
|
|
14
|
-
# shellcheck disable=SC1090
|
|
15
|
-
source "$ENV_FILE"
|
|
16
|
-
set +a
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
if [[ "${1:-}" == "run" ]]; then
|
|
20
|
-
set -euo pipefail
|
|
21
|
-
shift
|
|
22
|
-
if [[ $# -lt 1 ]]; then
|
|
23
|
-
echo "context7-export-env: run requires a command" >&2
|
|
24
|
-
exit 1
|
|
25
|
-
fi
|
|
26
|
-
if [[ -z "${CONTEXT7_API_KEY:-}" ]]; then
|
|
27
|
-
echo "context7-export-env: CONTEXT7_API_KEY is not set. Add it to ${ENV_FILE}." >&2
|
|
28
|
-
exit 1
|
|
29
|
-
fi
|
|
30
|
-
export CONTEXT7_API_KEY
|
|
31
|
-
exec "$@"
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
if [[ "${BASH_SOURCE[0]:-}" == "${0:-}" ]]; then
|
|
35
|
-
echo "Usage: source scripts/context7-export-env.sh" >&2
|
|
36
|
-
echo " or: bash scripts/context7-export-env.sh run <command> [args...]" >&2
|
|
37
|
-
exit 2
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
if [[ -n "${CONTEXT7_API_KEY:-}" ]]; then
|
|
41
|
-
export CONTEXT7_API_KEY
|
|
42
|
-
fi
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
-
cd "$repo_root"
|
|
6
|
-
|
|
7
|
-
bash scripts/check-no-authored-js.sh
|
|
8
|
-
|
|
9
|
-
mapfile -t repo_tests < <(find test -type f \( -name '*.test.ts' -o -name '*.test.tsx' \) | sort)
|
|
10
|
-
|
|
11
|
-
if ((${#repo_tests[@]} > 0)); then
|
|
12
|
-
pnpm exec tsx --test "${repo_tests[@]}"
|
|
13
|
-
fi
|
|
14
|
-
|
|
15
|
-
pnpm --filter @docx-react-component/react-word-editor-harness test
|