@beyondwork/docx-react-component 1.0.0 → 1.0.1
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/dist/chunk-32W6IVQE.js +7725 -0
- package/dist/chunk-32W6IVQE.js.map +1 -0
- package/dist/index.cjs +23722 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +16011 -0
- package/dist/index.js.map +1 -0
- package/dist/public-types-DqCURAz8.d.cts +1152 -0
- package/dist/public-types-DqCURAz8.d.ts +1152 -0
- package/dist/tailwind.cjs +8295 -0
- package/dist/tailwind.cjs.map +1 -0
- package/dist/tailwind.d.cts +323 -0
- package/dist/tailwind.d.ts +323 -0
- package/dist/tailwind.js +553 -0
- package/dist/tailwind.js.map +1 -0
- package/package.json +52 -31
- 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/src/README.md +0 -85
- package/src/api/README.md +0 -22
- package/src/api/public-types.ts +0 -525
- package/src/component-inventory.md +0 -99
- package/src/core/README.md +0 -10
- package/src/core/commands/README.md +0 -3
- package/src/core/commands/formatting-commands.ts +0 -161
- package/src/core/commands/image-commands.ts +0 -144
- package/src/core/commands/index.ts +0 -1013
- package/src/core/commands/list-commands.ts +0 -370
- package/src/core/commands/review-commands.ts +0 -108
- package/src/core/commands/text-commands.ts +0 -119
- package/src/core/schema/README.md +0 -3
- package/src/core/schema/text-schema.ts +0 -512
- package/src/core/selection/README.md +0 -3
- package/src/core/selection/mapping.ts +0 -238
- package/src/core/selection/review-anchors.ts +0 -94
- package/src/core/state/README.md +0 -3
- package/src/core/state/editor-state.ts +0 -580
- package/src/core/state/text-transaction.ts +0 -276
- package/src/formats/xlsx/io/parse-shared-strings.ts +0 -41
- package/src/formats/xlsx/io/parse-sheet.ts +0 -289
- package/src/formats/xlsx/io/parse-styles.ts +0 -57
- package/src/formats/xlsx/io/parse-workbook.ts +0 -75
- package/src/formats/xlsx/io/xlsx-session.ts +0 -306
- package/src/formats/xlsx/model/cell.ts +0 -189
- package/src/formats/xlsx/model/sheet.ts +0 -244
- package/src/formats/xlsx/model/styles.ts +0 -118
- package/src/formats/xlsx/model/workbook.ts +0 -449
- package/src/io/README.md +0 -10
- package/src/io/docx-session.ts +0 -1763
- package/src/io/export/README.md +0 -3
- package/src/io/export/export-session.ts +0 -165
- package/src/io/export/minimal-docx.ts +0 -115
- package/src/io/export/reattach-preserved-parts.ts +0 -54
- package/src/io/export/serialize-comments.ts +0 -876
- package/src/io/export/serialize-footnotes.ts +0 -217
- package/src/io/export/serialize-headers-footers.ts +0 -200
- package/src/io/export/serialize-main-document.ts +0 -982
- package/src/io/export/serialize-numbering.ts +0 -97
- package/src/io/export/serialize-revisions.ts +0 -389
- package/src/io/export/serialize-runtime-revisions.ts +0 -265
- package/src/io/export/serialize-tables.ts +0 -147
- package/src/io/export/split-review-boundaries.ts +0 -194
- package/src/io/normalize/README.md +0 -3
- package/src/io/normalize/normalize-text.ts +0 -437
- package/src/io/ooxml/README.md +0 -3
- package/src/io/ooxml/parse-comments.ts +0 -779
- package/src/io/ooxml/parse-complex-content.ts +0 -287
- package/src/io/ooxml/parse-fields.ts +0 -438
- package/src/io/ooxml/parse-footnotes.ts +0 -403
- package/src/io/ooxml/parse-headers-footers.ts +0 -483
- package/src/io/ooxml/parse-inline-media.ts +0 -431
- package/src/io/ooxml/parse-main-document.ts +0 -1846
- package/src/io/ooxml/parse-numbering.ts +0 -425
- package/src/io/ooxml/parse-revisions.ts +0 -658
- package/src/io/ooxml/parse-shapes.ts +0 -271
- package/src/io/ooxml/parse-tables.ts +0 -568
- package/src/io/ooxml/parse-theme.ts +0 -314
- package/src/io/ooxml/part-manifest.ts +0 -136
- package/src/io/ooxml/revision-boundaries.ts +0 -351
- package/src/io/opc/README.md +0 -3
- package/src/io/opc/corrupt-package.ts +0 -166
- package/src/io/opc/docx-package.ts +0 -74
- package/src/io/opc/package-reader.ts +0 -320
- package/src/io/opc/package-writer.ts +0 -273
- package/src/model/README.md +0 -3
- package/src/model/canonical-document.ts +0 -1911
- package/src/model/cds-1.0.0.ts +0 -196
- package/src/model/snapshot.ts +0 -393
- package/src/preservation/README.md +0 -3
- package/src/preservation/markup-compatibility.ts +0 -48
- package/src/preservation/opaque-fragment-store.ts +0 -89
- package/src/preservation/opaque-region.ts +0 -233
- package/src/preservation/package-preservation.ts +0 -120
- package/src/preservation/preserved-part-manifest.ts +0 -56
- package/src/preservation/relationship-retention.ts +0 -57
- package/src/preservation/store.ts +0 -185
- package/src/review/README.md +0 -16
- package/src/review/store/README.md +0 -3
- package/src/review/store/comment-anchors.ts +0 -70
- package/src/review/store/comment-remapping.ts +0 -154
- package/src/review/store/comment-store.ts +0 -331
- package/src/review/store/comment-thread.ts +0 -109
- package/src/review/store/revision-actions.ts +0 -394
- package/src/review/store/revision-store.ts +0 -303
- package/src/review/store/revision-types.ts +0 -168
- package/src/review/store/runtime-comment-store.ts +0 -43
- package/src/runtime/README.md +0 -3
- package/src/runtime/ai-action-policy.ts +0 -764
- package/src/runtime/document-runtime.ts +0 -969
- package/src/runtime/read-only-diagnostics-runtime.ts +0 -232
- package/src/runtime/review-runtime.ts +0 -44
- package/src/runtime/revision-runtime.ts +0 -107
- package/src/runtime/session-capabilities.ts +0 -138
- package/src/runtime/surface-projection.ts +0 -570
- package/src/runtime/table-commands.ts +0 -84
- package/src/runtime/table-schema.ts +0 -125
- package/src/ui/README.md +0 -30
- package/src/ui/WordReviewEditor.tsx +0 -1283
- package/src/ui/comments/README.md +0 -3
- package/src/ui/compatibility/README.md +0 -3
- package/src/ui/editor-surface/README.md +0 -3
- package/src/ui/headless/comment-decoration-model.ts +0 -124
- package/src/ui/headless/revision-decoration-model.ts +0 -128
- package/src/ui/headless/selection-helpers.ts +0 -34
- package/src/ui/headless/use-editor-keyboard.ts +0 -98
- package/src/ui/review/README.md +0 -3
- package/src/ui/shared/revision-filters.ts +0 -31
- package/src/ui/status/README.md +0 -3
- package/src/ui/theme/README.md +0 -3
- package/src/ui/toolbar/README.md +0 -3
- package/src/ui-tailwind/chrome/tw-alert-banner.tsx +0 -48
- package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +0 -44
- package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +0 -58
- package/src/ui-tailwind/chrome/use-before-unload.ts +0 -20
- package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +0 -139
- package/src/ui-tailwind/editor-surface/pm-decorations.ts +0 -98
- package/src/ui-tailwind/editor-surface/pm-position-map.ts +0 -123
- package/src/ui-tailwind/editor-surface/pm-schema.ts +0 -452
- package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +0 -327
- package/src/ui-tailwind/editor-surface/search-plugin.ts +0 -157
- package/src/ui-tailwind/editor-surface/tw-caret.tsx +0 -12
- package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +0 -150
- package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +0 -118
- package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +0 -52
- package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +0 -151
- package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +0 -215
- package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +0 -111
- package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +0 -108
- package/src/ui-tailwind/index.ts +0 -61
- package/src/ui-tailwind/review/tw-comment-sidebar.tsx +0 -276
- package/src/ui-tailwind/review/tw-health-panel.tsx +0 -120
- package/src/ui-tailwind/review/tw-review-rail.tsx +0 -120
- package/src/ui-tailwind/review/tw-revision-sidebar.tsx +0 -164
- package/src/ui-tailwind/status/tw-status-bar.tsx +0 -58
- package/src/ui-tailwind/theme/editor-theme.css +0 -190
- package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +0 -48
- package/src/ui-tailwind/toolbar/tw-toolbar.tsx +0 -231
- package/src/ui-tailwind/tw-review-workspace.tsx +0 -140
- package/src/validation/README.md +0 -3
- package/src/validation/compatibility-engine.ts +0 -317
- package/src/validation/compatibility-report.ts +0 -160
- package/src/validation/diagnostics.ts +0 -203
- package/src/validation/import-diagnostics.ts +0 -128
- package/src/validation/low-priority-word-surfaces.ts +0 -373
- 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,436 +0,0 @@
|
|
|
1
|
-
using System.IO.Compression;
|
|
2
|
-
using System.Security.Cryptography;
|
|
3
|
-
using System.Text;
|
|
4
|
-
using DocumentFormat.OpenXml.Packaging;
|
|
5
|
-
using DocumentFormat.OpenXml.Validation;
|
|
6
|
-
|
|
7
|
-
const string ServiceName = "openxml-validator";
|
|
8
|
-
const string SdkVersion = "DocumentFormat.OpenXml 3.5.1";
|
|
9
|
-
const string PrivateModeEnvironmentVariable = "VALIDATOR_PRIVATE_MODE";
|
|
10
|
-
const string AuthTokenEnvironmentVariable = "VALIDATOR_AUTH_TOKEN";
|
|
11
|
-
const long MaxRequestBytes = 20L * 1024L * 1024L;
|
|
12
|
-
const string DocxContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
13
|
-
|
|
14
|
-
var builder = WebApplication.CreateBuilder(args);
|
|
15
|
-
|
|
16
|
-
builder.Services.ConfigureHttpJsonOptions(options =>
|
|
17
|
-
{
|
|
18
|
-
options.SerializerOptions.WriteIndented = true;
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
var app = builder.Build();
|
|
22
|
-
var privateModeEnabled = string.Equals(
|
|
23
|
-
Environment.GetEnvironmentVariable(PrivateModeEnvironmentVariable),
|
|
24
|
-
"enabled",
|
|
25
|
-
StringComparison.OrdinalIgnoreCase
|
|
26
|
-
);
|
|
27
|
-
var authToken = Environment.GetEnvironmentVariable(AuthTokenEnvironmentVariable)?.Trim();
|
|
28
|
-
var endpointCatalog = new[]
|
|
29
|
-
{
|
|
30
|
-
new ServiceEndpointDescriptor("GET", "/deploy-health"),
|
|
31
|
-
new ServiceEndpointDescriptor("GET", "/health"),
|
|
32
|
-
new ServiceEndpointDescriptor("POST", "/validate")
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
app.MapGet("/deploy-health", () =>
|
|
36
|
-
{
|
|
37
|
-
return Results.Json(CreateDeployHealthResponse(privateModeEnabled, !string.IsNullOrWhiteSpace(authToken)));
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
app.MapGet("/health", (HttpRequest request) =>
|
|
41
|
-
{
|
|
42
|
-
var health = CreateHealthResponse(
|
|
43
|
-
privateModeEnabled,
|
|
44
|
-
!string.IsNullOrWhiteSpace(authToken),
|
|
45
|
-
endpointCatalog
|
|
46
|
-
);
|
|
47
|
-
var statusCode = privateModeEnabled
|
|
48
|
-
? StatusCodes.Status200OK
|
|
49
|
-
: StatusCodes.Status503ServiceUnavailable;
|
|
50
|
-
|
|
51
|
-
if (!privateModeEnabled)
|
|
52
|
-
{
|
|
53
|
-
return Results.Json(health, statusCode: statusCode);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!IsRequestAuthorized(authToken, request))
|
|
57
|
-
{
|
|
58
|
-
return CreateErrorResult(
|
|
59
|
-
StatusCodes.Status401Unauthorized,
|
|
60
|
-
"unauthorized",
|
|
61
|
-
$"Validator requests must include a valid bearer token when {AuthTokenEnvironmentVariable} is configured."
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return Results.Json(health, statusCode: statusCode);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
app.MapPost("/validate", async (HttpRequest request, CancellationToken cancellationToken) =>
|
|
69
|
-
{
|
|
70
|
-
if (!privateModeEnabled)
|
|
71
|
-
{
|
|
72
|
-
return CreateErrorResult(
|
|
73
|
-
StatusCodes.Status503ServiceUnavailable,
|
|
74
|
-
"service-unavailable",
|
|
75
|
-
"Validation is disabled until VALIDATOR_PRIVATE_MODE=enabled is set."
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (!IsRequestAuthorized(authToken, request))
|
|
80
|
-
{
|
|
81
|
-
return CreateErrorResult(
|
|
82
|
-
StatusCodes.Status401Unauthorized,
|
|
83
|
-
"unauthorized",
|
|
84
|
-
$"Validator requests must include a valid bearer token when {AuthTokenEnvironmentVariable} is configured."
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (request.ContentLength is long contentLength && contentLength > MaxRequestBytes)
|
|
89
|
-
{
|
|
90
|
-
return CreateErrorResult(
|
|
91
|
-
StatusCodes.Status413PayloadTooLarge,
|
|
92
|
-
"payload-too-large",
|
|
93
|
-
$"Request body exceeds the {MaxRequestBytes} byte limit."
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (!request.HasFormContentType)
|
|
98
|
-
{
|
|
99
|
-
return CreateErrorResult(
|
|
100
|
-
StatusCodes.Status400BadRequest,
|
|
101
|
-
"invalid-request",
|
|
102
|
-
"Expected multipart form data with a file field named 'file'."
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
var form = await request.ReadFormAsync(cancellationToken);
|
|
107
|
-
var file = form.Files["file"] ?? form.Files.FirstOrDefault();
|
|
108
|
-
|
|
109
|
-
if (file is null || file.Length == 0)
|
|
110
|
-
{
|
|
111
|
-
return CreateErrorResult(
|
|
112
|
-
StatusCodes.Status400BadRequest,
|
|
113
|
-
"missing-file",
|
|
114
|
-
"A non-empty .docx file is required."
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (file.Length > MaxRequestBytes)
|
|
119
|
-
{
|
|
120
|
-
return CreateErrorResult(
|
|
121
|
-
StatusCodes.Status413PayloadTooLarge,
|
|
122
|
-
"payload-too-large",
|
|
123
|
-
$"Uploaded file exceeds the {MaxRequestBytes} byte limit."
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (!string.Equals(Path.GetExtension(file.FileName), ".docx", StringComparison.OrdinalIgnoreCase))
|
|
128
|
-
{
|
|
129
|
-
return CreateErrorResult(
|
|
130
|
-
StatusCodes.Status400BadRequest,
|
|
131
|
-
"invalid-file-type",
|
|
132
|
-
"Only .docx payloads are supported."
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
await using var input = file.OpenReadStream();
|
|
137
|
-
await using var buffer = new MemoryStream();
|
|
138
|
-
await input.CopyToAsync(buffer, cancellationToken);
|
|
139
|
-
|
|
140
|
-
var bytes = buffer.ToArray();
|
|
141
|
-
var packageResult = InspectPackage(bytes);
|
|
142
|
-
var sdkResult = ValidateWithSdk(bytes);
|
|
143
|
-
var isValid = packageResult.Findings.Count == 0 && sdkResult.Findings.Count == 0;
|
|
144
|
-
|
|
145
|
-
return Results.Ok(new ValidateDocumentResponse(
|
|
146
|
-
Service: ServiceName,
|
|
147
|
-
ValidatedAtUtc: DateTimeOffset.UtcNow,
|
|
148
|
-
Document: new ValidatedDocument(
|
|
149
|
-
FileName: Path.GetFileName(file.FileName),
|
|
150
|
-
FileSizeBytes: file.Length,
|
|
151
|
-
ContentType: file.ContentType
|
|
152
|
-
),
|
|
153
|
-
Summary: new ValidationSummary(
|
|
154
|
-
IsValid: isValid,
|
|
155
|
-
PackageFindingCount: packageResult.Findings.Count,
|
|
156
|
-
SdkFindingCount: sdkResult.Findings.Count
|
|
157
|
-
),
|
|
158
|
-
Package: packageResult,
|
|
159
|
-
Sdk: sdkResult
|
|
160
|
-
));
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
app.Run();
|
|
164
|
-
|
|
165
|
-
static DeployHealthResponse CreateDeployHealthResponse(bool privateModeEnabled, bool authTokenConfigured)
|
|
166
|
-
{
|
|
167
|
-
return new DeployHealthResponse(
|
|
168
|
-
Service: ServiceName,
|
|
169
|
-
Status: "ok",
|
|
170
|
-
ValidatorAccess: privateModeEnabled ? "enabled" : "disabled",
|
|
171
|
-
Auth: new AuthStatus(
|
|
172
|
-
Required: authTokenConfigured,
|
|
173
|
-
EnvironmentVariable: AuthTokenEnvironmentVariable,
|
|
174
|
-
Scheme: "Bearer"
|
|
175
|
-
)
|
|
176
|
-
);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
static HealthResponse CreateHealthResponse(
|
|
180
|
-
bool privateModeEnabled,
|
|
181
|
-
bool authTokenConfigured,
|
|
182
|
-
IReadOnlyList<ServiceEndpointDescriptor> endpoints
|
|
183
|
-
)
|
|
184
|
-
{
|
|
185
|
-
return new HealthResponse(
|
|
186
|
-
Service: ServiceName,
|
|
187
|
-
Status: privateModeEnabled ? "ok" : "degraded",
|
|
188
|
-
Sdk: SdkVersion,
|
|
189
|
-
PrivateMode: new PrivateModeStatus(
|
|
190
|
-
Enabled: privateModeEnabled,
|
|
191
|
-
EnvironmentVariable: PrivateModeEnvironmentVariable,
|
|
192
|
-
RequiredValue: "enabled"
|
|
193
|
-
),
|
|
194
|
-
Auth: new AuthStatus(
|
|
195
|
-
Required: authTokenConfigured,
|
|
196
|
-
EnvironmentVariable: AuthTokenEnvironmentVariable,
|
|
197
|
-
Scheme: "Bearer"
|
|
198
|
-
),
|
|
199
|
-
Limits: new ValidationLimits(
|
|
200
|
-
MaxRequestBytes: MaxRequestBytes,
|
|
201
|
-
AcceptedExtension: ".docx",
|
|
202
|
-
AcceptedContentType: DocxContentType
|
|
203
|
-
),
|
|
204
|
-
Endpoints: endpoints
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
static bool IsRequestAuthorized(string? configuredToken, HttpRequest request)
|
|
209
|
-
{
|
|
210
|
-
if (string.IsNullOrWhiteSpace(configuredToken))
|
|
211
|
-
{
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (!request.Headers.TryGetValue("Authorization", out var authorizationHeader))
|
|
216
|
-
{
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
var rawHeader = authorizationHeader.ToString();
|
|
221
|
-
const string bearerPrefix = "Bearer ";
|
|
222
|
-
if (!rawHeader.StartsWith(bearerPrefix, StringComparison.OrdinalIgnoreCase))
|
|
223
|
-
{
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
var providedToken = rawHeader[bearerPrefix.Length..].Trim();
|
|
228
|
-
return AreTokensEqual(configuredToken, providedToken);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
static bool AreTokensEqual(string expectedToken, string providedToken)
|
|
232
|
-
{
|
|
233
|
-
var expectedBytes = Encoding.UTF8.GetBytes(expectedToken);
|
|
234
|
-
var providedBytes = Encoding.UTF8.GetBytes(providedToken);
|
|
235
|
-
return CryptographicOperations.FixedTimeEquals(expectedBytes, providedBytes);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
static IResult CreateErrorResult(int statusCode, string error, string detail)
|
|
239
|
-
{
|
|
240
|
-
return Results.Json(
|
|
241
|
-
new ValidationErrorResponse(
|
|
242
|
-
Service: ServiceName,
|
|
243
|
-
Error: error,
|
|
244
|
-
Detail: detail,
|
|
245
|
-
Status: statusCode,
|
|
246
|
-
Limits: new ValidationLimits(
|
|
247
|
-
MaxRequestBytes: MaxRequestBytes,
|
|
248
|
-
AcceptedExtension: ".docx",
|
|
249
|
-
AcceptedContentType: DocxContentType
|
|
250
|
-
)
|
|
251
|
-
),
|
|
252
|
-
statusCode: statusCode
|
|
253
|
-
);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
static PackageValidationResult InspectPackage(byte[] bytes)
|
|
257
|
-
{
|
|
258
|
-
var findings = new List<PackageValidationFinding>();
|
|
259
|
-
var requiredEntries = new[]
|
|
260
|
-
{
|
|
261
|
-
"[Content_Types].xml",
|
|
262
|
-
"_rels/.rels",
|
|
263
|
-
"word/document.xml"
|
|
264
|
-
};
|
|
265
|
-
|
|
266
|
-
try
|
|
267
|
-
{
|
|
268
|
-
using var stream = new MemoryStream(bytes);
|
|
269
|
-
using var archive = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen: false);
|
|
270
|
-
|
|
271
|
-
var names = archive.Entries.Select(entry => entry.FullName).ToHashSet(StringComparer.Ordinal);
|
|
272
|
-
|
|
273
|
-
foreach (var entry in requiredEntries)
|
|
274
|
-
{
|
|
275
|
-
if (!names.Contains(entry))
|
|
276
|
-
{
|
|
277
|
-
findings.Add(new PackageValidationFinding(
|
|
278
|
-
Code: "missing-required-entry",
|
|
279
|
-
Message: $"Missing required package entry: {entry}",
|
|
280
|
-
Entry: entry
|
|
281
|
-
));
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
return new PackageValidationResult(
|
|
286
|
-
EntryCount: archive.Entries.Count,
|
|
287
|
-
RequiredEntries: requiredEntries,
|
|
288
|
-
Findings: findings
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
catch (Exception ex)
|
|
292
|
-
{
|
|
293
|
-
findings.Add(new PackageValidationFinding(
|
|
294
|
-
Code: "package-open-failed",
|
|
295
|
-
Message: $"ZIP/package inspection failed: {ex.Message}",
|
|
296
|
-
Entry: null
|
|
297
|
-
));
|
|
298
|
-
|
|
299
|
-
return new PackageValidationResult(
|
|
300
|
-
EntryCount: null,
|
|
301
|
-
RequiredEntries: requiredEntries,
|
|
302
|
-
Findings: findings
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
static SdkValidationResult ValidateWithSdk(byte[] bytes)
|
|
308
|
-
{
|
|
309
|
-
var findings = new List<SdkValidationFinding>();
|
|
310
|
-
|
|
311
|
-
try
|
|
312
|
-
{
|
|
313
|
-
using var stream = new MemoryStream(bytes);
|
|
314
|
-
using var document = WordprocessingDocument.Open(stream, false);
|
|
315
|
-
var validator = new OpenXmlValidator();
|
|
316
|
-
|
|
317
|
-
foreach (var error in validator.Validate(document))
|
|
318
|
-
{
|
|
319
|
-
findings.Add(new SdkValidationFinding(
|
|
320
|
-
Code: "schema-validation-error",
|
|
321
|
-
Message: error.Description,
|
|
322
|
-
PartUri: error.Part?.Uri?.ToString(),
|
|
323
|
-
Path: error.Path?.XPath
|
|
324
|
-
));
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return new SdkValidationResult(
|
|
328
|
-
Findings: findings
|
|
329
|
-
);
|
|
330
|
-
}
|
|
331
|
-
catch (Exception ex)
|
|
332
|
-
{
|
|
333
|
-
findings.Add(new SdkValidationFinding(
|
|
334
|
-
Code: "sdk-open-failed",
|
|
335
|
-
Message: $"Open XML SDK validation failed: {ex.Message}",
|
|
336
|
-
PartUri: null,
|
|
337
|
-
Path: null
|
|
338
|
-
));
|
|
339
|
-
|
|
340
|
-
return new SdkValidationResult(
|
|
341
|
-
Findings: findings
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
internal sealed record ValidationErrorResponse(
|
|
347
|
-
string Service,
|
|
348
|
-
string Error,
|
|
349
|
-
string Detail,
|
|
350
|
-
int Status,
|
|
351
|
-
ValidationLimits Limits
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
internal sealed record ValidateDocumentResponse(
|
|
355
|
-
string Service,
|
|
356
|
-
DateTimeOffset ValidatedAtUtc,
|
|
357
|
-
ValidatedDocument Document,
|
|
358
|
-
ValidationSummary Summary,
|
|
359
|
-
PackageValidationResult Package,
|
|
360
|
-
SdkValidationResult Sdk
|
|
361
|
-
);
|
|
362
|
-
|
|
363
|
-
internal sealed record ValidatedDocument(
|
|
364
|
-
string FileName,
|
|
365
|
-
long FileSizeBytes,
|
|
366
|
-
string ContentType
|
|
367
|
-
);
|
|
368
|
-
|
|
369
|
-
internal sealed record DeployHealthResponse(
|
|
370
|
-
string Service,
|
|
371
|
-
string Status,
|
|
372
|
-
string ValidatorAccess,
|
|
373
|
-
AuthStatus Auth
|
|
374
|
-
);
|
|
375
|
-
|
|
376
|
-
internal sealed record HealthResponse(
|
|
377
|
-
string Service,
|
|
378
|
-
string Status,
|
|
379
|
-
string Sdk,
|
|
380
|
-
PrivateModeStatus PrivateMode,
|
|
381
|
-
AuthStatus Auth,
|
|
382
|
-
ValidationLimits Limits,
|
|
383
|
-
IReadOnlyList<ServiceEndpointDescriptor> Endpoints
|
|
384
|
-
);
|
|
385
|
-
|
|
386
|
-
internal sealed record PrivateModeStatus(
|
|
387
|
-
bool Enabled,
|
|
388
|
-
string EnvironmentVariable,
|
|
389
|
-
string RequiredValue
|
|
390
|
-
);
|
|
391
|
-
|
|
392
|
-
internal sealed record AuthStatus(
|
|
393
|
-
bool Required,
|
|
394
|
-
string EnvironmentVariable,
|
|
395
|
-
string Scheme
|
|
396
|
-
);
|
|
397
|
-
|
|
398
|
-
internal sealed record ValidationLimits(
|
|
399
|
-
long MaxRequestBytes,
|
|
400
|
-
string AcceptedExtension,
|
|
401
|
-
string AcceptedContentType
|
|
402
|
-
);
|
|
403
|
-
|
|
404
|
-
internal sealed record ServiceEndpointDescriptor(
|
|
405
|
-
string Method,
|
|
406
|
-
string Path
|
|
407
|
-
);
|
|
408
|
-
|
|
409
|
-
internal sealed record ValidationSummary(
|
|
410
|
-
bool IsValid,
|
|
411
|
-
int PackageFindingCount,
|
|
412
|
-
int SdkFindingCount
|
|
413
|
-
);
|
|
414
|
-
|
|
415
|
-
internal sealed record PackageValidationResult(
|
|
416
|
-
int? EntryCount,
|
|
417
|
-
IReadOnlyList<string> RequiredEntries,
|
|
418
|
-
IReadOnlyList<PackageValidationFinding> Findings
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
internal sealed record PackageValidationFinding(
|
|
422
|
-
string Code,
|
|
423
|
-
string Message,
|
|
424
|
-
string? Entry
|
|
425
|
-
);
|
|
426
|
-
|
|
427
|
-
internal sealed record SdkValidationResult(
|
|
428
|
-
IReadOnlyList<SdkValidationFinding> Findings
|
|
429
|
-
);
|
|
430
|
-
|
|
431
|
-
internal sealed record SdkValidationFinding(
|
|
432
|
-
string Code,
|
|
433
|
-
string Message,
|
|
434
|
-
string? PartUri,
|
|
435
|
-
string? Path
|
|
436
|
-
);
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
# Open XML Validator Service
|
|
2
|
-
|
|
3
|
-
This service is the internal validator used by CI and the Railway harness.
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
The service should accept exported `.docx` artifacts and return structured diagnostics from:
|
|
8
|
-
|
|
9
|
-
- package integrity checks
|
|
10
|
-
- required-part checks
|
|
11
|
-
- Microsoft Open XML SDK validation
|
|
12
|
-
|
|
13
|
-
It is not part of the shipped browser component.
|
|
14
|
-
It remains validation-only and must not repair, mutate, or normalize uploaded packages.
|
|
15
|
-
|
|
16
|
-
## Endpoints
|
|
17
|
-
|
|
18
|
-
- `GET /deploy-health`
|
|
19
|
-
- `GET /health`
|
|
20
|
-
- `POST /validate`
|
|
21
|
-
|
|
22
|
-
`POST /validate` expects multipart form data with a `file` field containing a `.docx` payload.
|
|
23
|
-
|
|
24
|
-
## Response Contract
|
|
25
|
-
|
|
26
|
-
`GET /deploy-health` returns a minimal deploy-readiness payload for Railway:
|
|
27
|
-
|
|
28
|
-
- `service`
|
|
29
|
-
- `status`
|
|
30
|
-
- `validatorAccess`
|
|
31
|
-
- `auth.required`
|
|
32
|
-
- `auth.environmentVariable`
|
|
33
|
-
- `auth.scheme`
|
|
34
|
-
|
|
35
|
-
`GET /health` returns a readiness payload with:
|
|
36
|
-
|
|
37
|
-
- `service`
|
|
38
|
-
- `status`
|
|
39
|
-
- `sdk`
|
|
40
|
-
- `privateMode.enabled`
|
|
41
|
-
- `privateMode.environmentVariable`
|
|
42
|
-
- `privateMode.requiredValue`
|
|
43
|
-
- `auth.required`
|
|
44
|
-
- `auth.environmentVariable`
|
|
45
|
-
- `auth.scheme`
|
|
46
|
-
- `limits.maxRequestBytes`
|
|
47
|
-
- `limits.acceptedExtension`
|
|
48
|
-
- `limits.acceptedContentType`
|
|
49
|
-
- `endpoints[]`
|
|
50
|
-
|
|
51
|
-
When `VALIDATOR_PRIVATE_MODE` is not set to `enabled`, the endpoint returns `503` with the same
|
|
52
|
-
structured payload and `status: degraded`. This makes readiness failures explicit without exposing
|
|
53
|
-
any repair or transformation surface.
|
|
54
|
-
|
|
55
|
-
When `VALIDATOR_AUTH_TOKEN` is set, both `GET /health` and `POST /validate` require
|
|
56
|
-
`Authorization: Bearer <token>`. This is the supported fallback when Railway private networking is
|
|
57
|
-
unavailable and the harness must call the validator over a public domain.
|
|
58
|
-
|
|
59
|
-
`POST /validate` returns:
|
|
60
|
-
|
|
61
|
-
- `service`
|
|
62
|
-
- `validatedAtUtc`
|
|
63
|
-
- `document`
|
|
64
|
-
- `summary`
|
|
65
|
-
- `package`
|
|
66
|
-
- `sdk`
|
|
67
|
-
|
|
68
|
-
The `package.findings` and `sdk.findings` collections are distinct machine-readable arrays. Callers should use `summary.isValid`, `summary.packageFindingCount`, and `summary.sdkFindingCount` for gating, then inspect the per-surface findings for details.
|
|
69
|
-
|
|
70
|
-
Bad requests return:
|
|
71
|
-
|
|
72
|
-
- `service`
|
|
73
|
-
- `error`
|
|
74
|
-
- `detail`
|
|
75
|
-
- `status`
|
|
76
|
-
- `limits`
|
|
77
|
-
|
|
78
|
-
The service uses structured JSON for both `400` and `413` validation failures, and for the
|
|
79
|
-
private-mode `503` response on `POST /validate`.
|
|
80
|
-
|
|
81
|
-
Authentication failures return `401` with the same structured error envelope.
|
|
82
|
-
|
|
83
|
-
## Implementation Notes
|
|
84
|
-
|
|
85
|
-
- target runtime: `.NET 8`
|
|
86
|
-
- Open XML SDK package: `DocumentFormat.OpenXml` `3.5.1`
|
|
87
|
-
- deploy target: Railway private service
|
|
88
|
-
- intended caller: `services/react-word-editor`
|
|
89
|
-
- private-mode gate: `VALIDATOR_PRIVATE_MODE=enabled`
|
|
90
|
-
- optional public-domain auth gate: `VALIDATOR_AUTH_TOKEN`
|
|
91
|
-
- request cap: `20 MiB`
|
|
92
|
-
- accepted upload type: `.docx` multipart file payloads only
|
|
93
|
-
|
|
94
|
-
## Local Note
|
|
95
|
-
|
|
96
|
-
The service now builds and runs locally in this repo with `.NET 8`. Use:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
dotnet build services/openxml-validator/OpenXmlValidator.Api.csproj
|
|
100
|
-
dotnet run --project services/openxml-validator/OpenXmlValidator.Api.csproj --urls http://127.0.0.1:5080
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Smoke check:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
curl -s http://127.0.0.1:5080/deploy-health
|
|
107
|
-
curl -s http://127.0.0.1:5080/health
|
|
108
|
-
curl -s -F "file=@/absolute/path/to/document.docx" http://127.0.0.1:5080/validate
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Public-domain smoke check with bearer auth:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
curl -s -H "Authorization: Bearer $VALIDATOR_AUTH_TOKEN" https://<validator-domain>/health
|
|
115
|
-
curl -s -H "Authorization: Bearer $VALIDATOR_AUTH_TOKEN" \
|
|
116
|
-
-F "file=@/absolute/path/to/document.docx" \
|
|
117
|
-
https://<validator-domain>/validate
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Wave 0 Landed Scaffold
|
|
121
|
-
|
|
122
|
-
The repo now contains:
|
|
123
|
-
|
|
124
|
-
- a .NET 8 web service project
|
|
125
|
-
- `GET /health` for readiness checks
|
|
126
|
-
- `POST /validate` multipart intake for `.docx` payloads
|
|
127
|
-
- distinct package and SDK finding collections in the validation response
|
|
128
|
-
- package integrity checks for required DOCX entries
|
|
129
|
-
- Open XML SDK validation wiring
|
|
130
|
-
- Docker packaging for service deployment
|
|
131
|
-
|
|
132
|
-
Wave 3 raises the service to a `baseline-proved` internal contract with local smoke artifacts under `.tmp/wave-3-validator/`. It is not yet a proof of Railway deployment or CI wiring.
|
|
133
|
-
|
|
134
|
-
Wave 8 private-service pilot proof is currently blocked pending a fresh private-mode Railway redeploy. Do not treat the older public early-access ingress as the current validator closure line.
|
|
135
|
-
|
|
136
|
-
The validator remains an internal proof surface for later compatibility waves. It is not the editor's primary transformation engine and must stay outside the shipped React runtime.
|
|
137
|
-
|
|
138
|
-
## Fleet-Ready Gaps
|
|
139
|
-
|
|
140
|
-
Wave 10 hardens the service contract enough for QA and integration proof, but it is not yet a
|
|
141
|
-
fleet-ready general validation plane.
|
|
142
|
-
|
|
143
|
-
Current assumptions and blockers:
|
|
144
|
-
|
|
145
|
-
- private-mode admission is a single environment-variable guard; there is no service-to-service
|
|
146
|
-
auth or identity layer yet
|
|
147
|
-
- diagnostics are request-scoped JSON only; there is no durable validator-side audit store,
|
|
148
|
-
retention policy, or operator dashboard
|
|
149
|
-
- the validator stays intentionally validation-only and does not attempt repair, normalization, or
|
|
150
|
-
canonical import/export work
|
|
151
|
-
- Railway proof still depends on a fresh private deploy capture rather than a persistent
|
|
152
|
-
environment-managed health SLO bundle
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://railway.com/railway.schema.json",
|
|
3
|
-
"build": {
|
|
4
|
-
"builder": "DOCKERFILE",
|
|
5
|
-
"dockerfilePath": "/services/openxml-validator/Dockerfile",
|
|
6
|
-
"watchPatterns": [
|
|
7
|
-
"/services/openxml-validator/**"
|
|
8
|
-
]
|
|
9
|
-
},
|
|
10
|
-
"deploy": {
|
|
11
|
-
"healthcheckPath": "/deploy-health",
|
|
12
|
-
"healthcheckTimeout": 60,
|
|
13
|
-
"restartPolicyType": "ON_FAILURE",
|
|
14
|
-
"restartPolicyMaxRetries": 10
|
|
15
|
-
}
|
|
16
|
-
}
|