@libar-dev/architect 1.0.0-pre.3
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/CHANGELOG.md +50 -0
- package/LICENSE +25 -0
- package/LICENSE-MCP +62 -0
- package/README.md +147 -0
- package/dist/api/arch-queries.d.ts +95 -0
- package/dist/api/arch-queries.d.ts.map +1 -0
- package/dist/api/arch-queries.js +310 -0
- package/dist/api/arch-queries.js.map +1 -0
- package/dist/api/context-assembler.d.ts +124 -0
- package/dist/api/context-assembler.d.ts.map +1 -0
- package/dist/api/context-assembler.js +472 -0
- package/dist/api/context-assembler.js.map +1 -0
- package/dist/api/context-formatter.d.ts +26 -0
- package/dist/api/context-formatter.d.ts.map +1 -0
- package/dist/api/context-formatter.js +183 -0
- package/dist/api/context-formatter.js.map +1 -0
- package/dist/api/coverage-analyzer.d.ts +38 -0
- package/dist/api/coverage-analyzer.d.ts.map +1 -0
- package/dist/api/coverage-analyzer.js +117 -0
- package/dist/api/coverage-analyzer.js.map +1 -0
- package/dist/api/fuzzy-match.d.ts +75 -0
- package/dist/api/fuzzy-match.d.ts.map +1 -0
- package/dist/api/fuzzy-match.js +150 -0
- package/dist/api/fuzzy-match.js.map +1 -0
- package/dist/api/handoff-generator.d.ts +45 -0
- package/dist/api/handoff-generator.d.ts.map +1 -0
- package/dist/api/handoff-generator.js +139 -0
- package/dist/api/handoff-generator.js.map +1 -0
- package/dist/api/index.d.ts +61 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +54 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/pattern-helpers.d.ts +51 -0
- package/dist/api/pattern-helpers.d.ts.map +1 -0
- package/dist/api/pattern-helpers.js +84 -0
- package/dist/api/pattern-helpers.js.map +1 -0
- package/dist/api/process-state.d.ts +224 -0
- package/dist/api/process-state.d.ts.map +1 -0
- package/dist/api/process-state.js +308 -0
- package/dist/api/process-state.js.map +1 -0
- package/dist/api/rules-query.d.ts +60 -0
- package/dist/api/rules-query.d.ts.map +1 -0
- package/dist/api/rules-query.js +154 -0
- package/dist/api/rules-query.js.map +1 -0
- package/dist/api/scope-validator.d.ts +56 -0
- package/dist/api/scope-validator.d.ts.map +1 -0
- package/dist/api/scope-validator.js +293 -0
- package/dist/api/scope-validator.js.map +1 -0
- package/dist/api/stub-resolver.d.ts +117 -0
- package/dist/api/stub-resolver.d.ts.map +1 -0
- package/dist/api/stub-resolver.js +154 -0
- package/dist/api/stub-resolver.js.map +1 -0
- package/dist/api/summarize.d.ts +75 -0
- package/dist/api/summarize.d.ts.map +1 -0
- package/dist/api/summarize.js +97 -0
- package/dist/api/summarize.js.map +1 -0
- package/dist/api/types.d.ts +221 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +57 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cache/file-cache.d.ts +72 -0
- package/dist/cache/file-cache.d.ts.map +1 -0
- package/dist/cache/file-cache.js +80 -0
- package/dist/cache/file-cache.js.map +1 -0
- package/dist/cache/index.d.ts +5 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cli/cli-schema.d.ts +83 -0
- package/dist/cli/cli-schema.d.ts.map +1 -0
- package/dist/cli/cli-schema.js +505 -0
- package/dist/cli/cli-schema.js.map +1 -0
- package/dist/cli/dataset-cache.d.ts +66 -0
- package/dist/cli/dataset-cache.d.ts.map +1 -0
- package/dist/cli/dataset-cache.js +179 -0
- package/dist/cli/dataset-cache.js.map +1 -0
- package/dist/cli/error-handler.d.ts +84 -0
- package/dist/cli/error-handler.d.ts.map +1 -0
- package/dist/cli/error-handler.js +197 -0
- package/dist/cli/error-handler.js.map +1 -0
- package/dist/cli/generate-docs.d.ts +30 -0
- package/dist/cli/generate-docs.d.ts.map +1 -0
- package/dist/cli/generate-docs.js +370 -0
- package/dist/cli/generate-docs.js.map +1 -0
- package/dist/cli/lint-patterns.d.ts +57 -0
- package/dist/cli/lint-patterns.d.ts.map +1 -0
- package/dist/cli/lint-patterns.js +257 -0
- package/dist/cli/lint-patterns.js.map +1 -0
- package/dist/cli/lint-process.d.ts +54 -0
- package/dist/cli/lint-process.d.ts.map +1 -0
- package/dist/cli/lint-process.js +319 -0
- package/dist/cli/lint-process.js.map +1 -0
- package/dist/cli/lint-steps.d.ts +32 -0
- package/dist/cli/lint-steps.d.ts.map +1 -0
- package/dist/cli/lint-steps.js +172 -0
- package/dist/cli/lint-steps.js.map +1 -0
- package/dist/cli/mcp-server.d.ts +22 -0
- package/dist/cli/mcp-server.d.ts.map +1 -0
- package/dist/cli/mcp-server.js +57 -0
- package/dist/cli/mcp-server.js.map +1 -0
- package/dist/cli/output-pipeline.d.ts +130 -0
- package/dist/cli/output-pipeline.d.ts.map +1 -0
- package/dist/cli/output-pipeline.js +234 -0
- package/dist/cli/output-pipeline.js.map +1 -0
- package/dist/cli/process-api.d.ts +37 -0
- package/dist/cli/process-api.d.ts.map +1 -0
- package/dist/cli/process-api.js +1550 -0
- package/dist/cli/process-api.js.map +1 -0
- package/dist/cli/repl.d.ts +38 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +239 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/validate-patterns.d.ts +115 -0
- package/dist/cli/validate-patterns.d.ts.map +1 -0
- package/dist/cli/validate-patterns.js +707 -0
- package/dist/cli/validate-patterns.js.map +1 -0
- package/dist/cli/version.d.ts +35 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +64 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/config/config-loader.d.ts +167 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +294 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/defaults.d.ts +92 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +103 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/define-config.d.ts +37 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +38 -0
- package/dist/config/define-config.js.map +1 -0
- package/dist/config/factory.d.ts +79 -0
- package/dist/config/factory.d.ts.map +1 -0
- package/dist/config/factory.js +116 -0
- package/dist/config/factory.js.map +1 -0
- package/dist/config/index.d.ts +45 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +48 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge-sources.d.ts +47 -0
- package/dist/config/merge-sources.d.ts.map +1 -0
- package/dist/config/merge-sources.js +61 -0
- package/dist/config/merge-sources.js.map +1 -0
- package/dist/config/presets.d.ts +115 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +119 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/project-config-schema.d.ts +192 -0
- package/dist/config/project-config-schema.d.ts.map +1 -0
- package/dist/config/project-config-schema.js +231 -0
- package/dist/config/project-config-schema.js.map +1 -0
- package/dist/config/project-config.d.ts +229 -0
- package/dist/config/project-config.d.ts.map +1 -0
- package/dist/config/project-config.js +37 -0
- package/dist/config/project-config.js.map +1 -0
- package/dist/config/regex-builders.d.ts +49 -0
- package/dist/config/regex-builders.d.ts.map +1 -0
- package/dist/config/regex-builders.js +85 -0
- package/dist/config/regex-builders.js.map +1 -0
- package/dist/config/resolve-config.d.ts +65 -0
- package/dist/config/resolve-config.d.ts.map +1 -0
- package/dist/config/resolve-config.js +150 -0
- package/dist/config/resolve-config.js.map +1 -0
- package/dist/config/types.d.ts +81 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +22 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/workflow-loader.d.ts +90 -0
- package/dist/config/workflow-loader.d.ts.map +1 -0
- package/dist/config/workflow-loader.js +167 -0
- package/dist/config/workflow-loader.js.map +1 -0
- package/dist/extractor/doc-extractor.d.ts +233 -0
- package/dist/extractor/doc-extractor.d.ts.map +1 -0
- package/dist/extractor/doc-extractor.js +481 -0
- package/dist/extractor/doc-extractor.js.map +1 -0
- package/dist/extractor/dual-source-extractor.d.ts +161 -0
- package/dist/extractor/dual-source-extractor.d.ts.map +1 -0
- package/dist/extractor/dual-source-extractor.js +407 -0
- package/dist/extractor/dual-source-extractor.js.map +1 -0
- package/dist/extractor/gherkin-extractor.d.ts +170 -0
- package/dist/extractor/gherkin-extractor.d.ts.map +1 -0
- package/dist/extractor/gherkin-extractor.js +543 -0
- package/dist/extractor/gherkin-extractor.js.map +1 -0
- package/dist/extractor/index.d.ts +7 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +11 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/layer-inference.d.ts +66 -0
- package/dist/extractor/layer-inference.d.ts.map +1 -0
- package/dist/extractor/layer-inference.js +93 -0
- package/dist/extractor/layer-inference.js.map +1 -0
- package/dist/extractor/shape-extractor.d.ts +79 -0
- package/dist/extractor/shape-extractor.d.ts.map +1 -0
- package/dist/extractor/shape-extractor.js +966 -0
- package/dist/extractor/shape-extractor.js.map +1 -0
- package/dist/generators/built-in/cli-recipe-generator.d.ts +30 -0
- package/dist/generators/built-in/cli-recipe-generator.d.ts.map +1 -0
- package/dist/generators/built-in/cli-recipe-generator.js +155 -0
- package/dist/generators/built-in/cli-recipe-generator.js.map +1 -0
- package/dist/generators/built-in/codec-generators.d.ts +29 -0
- package/dist/generators/built-in/codec-generators.d.ts.map +1 -0
- package/dist/generators/built-in/codec-generators.js +195 -0
- package/dist/generators/built-in/codec-generators.js.map +1 -0
- package/dist/generators/built-in/decision-doc-generator.d.ts +204 -0
- package/dist/generators/built-in/decision-doc-generator.d.ts.map +1 -0
- package/dist/generators/built-in/decision-doc-generator.js +654 -0
- package/dist/generators/built-in/decision-doc-generator.js.map +1 -0
- package/dist/generators/built-in/design-review-generator.d.ts +26 -0
- package/dist/generators/built-in/design-review-generator.d.ts.map +1 -0
- package/dist/generators/built-in/design-review-generator.js +94 -0
- package/dist/generators/built-in/design-review-generator.js.map +1 -0
- package/dist/generators/built-in/index.d.ts +22 -0
- package/dist/generators/built-in/index.d.ts.map +1 -0
- package/dist/generators/built-in/index.js +23 -0
- package/dist/generators/built-in/index.js.map +1 -0
- package/dist/generators/built-in/process-api-reference-generator.d.ts +18 -0
- package/dist/generators/built-in/process-api-reference-generator.d.ts.map +1 -0
- package/dist/generators/built-in/process-api-reference-generator.js +85 -0
- package/dist/generators/built-in/process-api-reference-generator.js.map +1 -0
- package/dist/generators/built-in/reference-generators.d.ts +51 -0
- package/dist/generators/built-in/reference-generators.d.ts.map +1 -0
- package/dist/generators/built-in/reference-generators.js +320 -0
- package/dist/generators/built-in/reference-generators.js.map +1 -0
- package/dist/generators/codec-based.d.ts +63 -0
- package/dist/generators/codec-based.d.ts.map +1 -0
- package/dist/generators/codec-based.js +88 -0
- package/dist/generators/codec-based.js.map +1 -0
- package/dist/generators/content-deduplicator.d.ts +114 -0
- package/dist/generators/content-deduplicator.d.ts.map +1 -0
- package/dist/generators/content-deduplicator.js +356 -0
- package/dist/generators/content-deduplicator.js.map +1 -0
- package/dist/generators/index.d.ts +50 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +54 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/orchestrator.d.ts +265 -0
- package/dist/generators/orchestrator.d.ts.map +1 -0
- package/dist/generators/orchestrator.js +570 -0
- package/dist/generators/orchestrator.js.map +1 -0
- package/dist/generators/pipeline/build-pipeline.d.ts +131 -0
- package/dist/generators/pipeline/build-pipeline.d.ts.map +1 -0
- package/dist/generators/pipeline/build-pipeline.js +248 -0
- package/dist/generators/pipeline/build-pipeline.js.map +1 -0
- package/dist/generators/pipeline/context-inference.d.ts +55 -0
- package/dist/generators/pipeline/context-inference.d.ts.map +1 -0
- package/dist/generators/pipeline/context-inference.js +76 -0
- package/dist/generators/pipeline/context-inference.js.map +1 -0
- package/dist/generators/pipeline/index.d.ts +27 -0
- package/dist/generators/pipeline/index.d.ts.map +1 -0
- package/dist/generators/pipeline/index.js +34 -0
- package/dist/generators/pipeline/index.js.map +1 -0
- package/dist/generators/pipeline/merge-patterns.d.ts +33 -0
- package/dist/generators/pipeline/merge-patterns.d.ts.map +1 -0
- package/dist/generators/pipeline/merge-patterns.js +50 -0
- package/dist/generators/pipeline/merge-patterns.js.map +1 -0
- package/dist/generators/pipeline/relationship-resolver.d.ts +47 -0
- package/dist/generators/pipeline/relationship-resolver.d.ts.map +1 -0
- package/dist/generators/pipeline/relationship-resolver.js +132 -0
- package/dist/generators/pipeline/relationship-resolver.js.map +1 -0
- package/dist/generators/pipeline/sequence-utils.d.ts +49 -0
- package/dist/generators/pipeline/sequence-utils.d.ts.map +1 -0
- package/dist/generators/pipeline/sequence-utils.js +235 -0
- package/dist/generators/pipeline/sequence-utils.js.map +1 -0
- package/dist/generators/pipeline/transform-dataset.d.ts +82 -0
- package/dist/generators/pipeline/transform-dataset.d.ts.map +1 -0
- package/dist/generators/pipeline/transform-dataset.js +355 -0
- package/dist/generators/pipeline/transform-dataset.js.map +1 -0
- package/dist/generators/pipeline/transform-types.d.ts +96 -0
- package/dist/generators/pipeline/transform-types.d.ts.map +1 -0
- package/dist/generators/pipeline/transform-types.js +18 -0
- package/dist/generators/pipeline/transform-types.js.map +1 -0
- package/dist/generators/registry.d.ts +64 -0
- package/dist/generators/registry.d.ts.map +1 -0
- package/dist/generators/registry.js +77 -0
- package/dist/generators/registry.js.map +1 -0
- package/dist/generators/source-mapper.d.ts +143 -0
- package/dist/generators/source-mapper.d.ts.map +1 -0
- package/dist/generators/source-mapper.js +602 -0
- package/dist/generators/source-mapper.js.map +1 -0
- package/dist/generators/source-mapping-validator.d.ts +118 -0
- package/dist/generators/source-mapping-validator.d.ts.map +1 -0
- package/dist/generators/source-mapping-validator.js +334 -0
- package/dist/generators/source-mapping-validator.js.map +1 -0
- package/dist/generators/types.d.ts +104 -0
- package/dist/generators/types.d.ts.map +1 -0
- package/dist/generators/types.js +5 -0
- package/dist/generators/types.js.map +1 -0
- package/dist/generators/warning-collector.d.ts +144 -0
- package/dist/generators/warning-collector.d.ts.map +1 -0
- package/dist/generators/warning-collector.js +166 -0
- package/dist/generators/warning-collector.js.map +1 -0
- package/dist/git/branch-diff.d.ts +44 -0
- package/dist/git/branch-diff.d.ts.map +1 -0
- package/dist/git/branch-diff.js +57 -0
- package/dist/git/branch-diff.js.map +1 -0
- package/dist/git/helpers.d.ts +46 -0
- package/dist/git/helpers.d.ts.map +1 -0
- package/dist/git/helpers.js +67 -0
- package/dist/git/helpers.js.map +1 -0
- package/dist/git/index.d.ts +18 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +18 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/name-status.d.ts +32 -0
- package/dist/git/name-status.d.ts.map +1 -0
- package/dist/git/name-status.js +66 -0
- package/dist/git/name-status.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/lint/engine.d.ts +113 -0
- package/dist/lint/engine.d.ts.map +1 -0
- package/dist/lint/engine.js +228 -0
- package/dist/lint/engine.js.map +1 -0
- package/dist/lint/index.d.ts +26 -0
- package/dist/lint/index.d.ts.map +1 -0
- package/dist/lint/index.js +24 -0
- package/dist/lint/index.js.map +1 -0
- package/dist/lint/process-guard/decider.d.ts +166 -0
- package/dist/lint/process-guard/decider.d.ts.map +1 -0
- package/dist/lint/process-guard/decider.js +412 -0
- package/dist/lint/process-guard/decider.js.map +1 -0
- package/dist/lint/process-guard/derive-state.d.ts +96 -0
- package/dist/lint/process-guard/derive-state.d.ts.map +1 -0
- package/dist/lint/process-guard/derive-state.js +368 -0
- package/dist/lint/process-guard/derive-state.js.map +1 -0
- package/dist/lint/process-guard/detect-changes.d.ts +109 -0
- package/dist/lint/process-guard/detect-changes.d.ts.map +1 -0
- package/dist/lint/process-guard/detect-changes.js +487 -0
- package/dist/lint/process-guard/detect-changes.js.map +1 -0
- package/dist/lint/process-guard/index.d.ts +35 -0
- package/dist/lint/process-guard/index.d.ts.map +1 -0
- package/dist/lint/process-guard/index.js +39 -0
- package/dist/lint/process-guard/index.js.map +1 -0
- package/dist/lint/process-guard/types.d.ts +255 -0
- package/dist/lint/process-guard/types.d.ts.map +1 -0
- package/dist/lint/process-guard/types.js +31 -0
- package/dist/lint/process-guard/types.js.map +1 -0
- package/dist/lint/rules.d.ts +147 -0
- package/dist/lint/rules.d.ts.map +1 -0
- package/dist/lint/rules.js +289 -0
- package/dist/lint/rules.js.map +1 -0
- package/dist/lint/steps/cross-checks.d.ts +66 -0
- package/dist/lint/steps/cross-checks.d.ts.map +1 -0
- package/dist/lint/steps/cross-checks.js +290 -0
- package/dist/lint/steps/cross-checks.js.map +1 -0
- package/dist/lint/steps/feature-checks.d.ts +78 -0
- package/dist/lint/steps/feature-checks.d.ts.map +1 -0
- package/dist/lint/steps/feature-checks.js +279 -0
- package/dist/lint/steps/feature-checks.js.map +1 -0
- package/dist/lint/steps/index.d.ts +22 -0
- package/dist/lint/steps/index.d.ts.map +1 -0
- package/dist/lint/steps/index.js +26 -0
- package/dist/lint/steps/index.js.map +1 -0
- package/dist/lint/steps/pair-resolver.d.ts +29 -0
- package/dist/lint/steps/pair-resolver.d.ts.map +1 -0
- package/dist/lint/steps/pair-resolver.js +76 -0
- package/dist/lint/steps/pair-resolver.js.map +1 -0
- package/dist/lint/steps/runner.d.ts +28 -0
- package/dist/lint/steps/runner.d.ts.map +1 -0
- package/dist/lint/steps/runner.js +143 -0
- package/dist/lint/steps/runner.js.map +1 -0
- package/dist/lint/steps/step-checks.d.ts +41 -0
- package/dist/lint/steps/step-checks.d.ts.map +1 -0
- package/dist/lint/steps/step-checks.js +164 -0
- package/dist/lint/steps/step-checks.js.map +1 -0
- package/dist/lint/steps/types.d.ts +95 -0
- package/dist/lint/steps/types.d.ts.map +1 -0
- package/dist/lint/steps/types.js +79 -0
- package/dist/lint/steps/types.js.map +1 -0
- package/dist/lint/steps/utils.d.ts +22 -0
- package/dist/lint/steps/utils.d.ts.map +1 -0
- package/dist/lint/steps/utils.js +57 -0
- package/dist/lint/steps/utils.js.map +1 -0
- package/dist/mcp/file-watcher.d.ts +24 -0
- package/dist/mcp/file-watcher.d.ts.map +1 -0
- package/dist/mcp/file-watcher.js +75 -0
- package/dist/mcp/file-watcher.js.map +1 -0
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +21 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/pipeline-session.d.ts +33 -0
- package/dist/mcp/pipeline-session.d.ts.map +1 -0
- package/dist/mcp/pipeline-session.js +149 -0
- package/dist/mcp/pipeline-session.js.map +1 -0
- package/dist/mcp/server.d.ts +28 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +197 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-registry.d.ts +4 -0
- package/dist/mcp/tool-registry.d.ts.map +1 -0
- package/dist/mcp/tool-registry.js +525 -0
- package/dist/mcp/tool-registry.js.map +1 -0
- package/dist/renderable/codecs/adr.d.ts +4730 -0
- package/dist/renderable/codecs/adr.d.ts.map +1 -0
- package/dist/renderable/codecs/adr.js +590 -0
- package/dist/renderable/codecs/adr.js.map +1 -0
- package/dist/renderable/codecs/architecture.d.ts +4760 -0
- package/dist/renderable/codecs/architecture.d.ts.map +1 -0
- package/dist/renderable/codecs/architecture.js +524 -0
- package/dist/renderable/codecs/architecture.js.map +1 -0
- package/dist/renderable/codecs/business-rules.d.ts +4777 -0
- package/dist/renderable/codecs/business-rules.d.ts.map +1 -0
- package/dist/renderable/codecs/business-rules.js +648 -0
- package/dist/renderable/codecs/business-rules.js.map +1 -0
- package/dist/renderable/codecs/claude-module.d.ts +4710 -0
- package/dist/renderable/codecs/claude-module.d.ts.map +1 -0
- package/dist/renderable/codecs/claude-module.js +214 -0
- package/dist/renderable/codecs/claude-module.js.map +1 -0
- package/dist/renderable/codecs/composite.d.ts +84 -0
- package/dist/renderable/codecs/composite.d.ts.map +1 -0
- package/dist/renderable/codecs/composite.js +124 -0
- package/dist/renderable/codecs/composite.js.map +1 -0
- package/dist/renderable/codecs/convention-extractor.d.ts +105 -0
- package/dist/renderable/codecs/convention-extractor.d.ts.map +1 -0
- package/dist/renderable/codecs/convention-extractor.js +353 -0
- package/dist/renderable/codecs/convention-extractor.js.map +1 -0
- package/dist/renderable/codecs/decision-doc.d.ts +308 -0
- package/dist/renderable/codecs/decision-doc.d.ts.map +1 -0
- package/dist/renderable/codecs/decision-doc.js +485 -0
- package/dist/renderable/codecs/decision-doc.js.map +1 -0
- package/dist/renderable/codecs/design-review.d.ts +55 -0
- package/dist/renderable/codecs/design-review.d.ts.map +1 -0
- package/dist/renderable/codecs/design-review.js +532 -0
- package/dist/renderable/codecs/design-review.js.map +1 -0
- package/dist/renderable/codecs/diagram-utils.d.ts +62 -0
- package/dist/renderable/codecs/diagram-utils.d.ts.map +1 -0
- package/dist/renderable/codecs/diagram-utils.js +70 -0
- package/dist/renderable/codecs/diagram-utils.js.map +1 -0
- package/dist/renderable/codecs/helpers.d.ts +553 -0
- package/dist/renderable/codecs/helpers.d.ts.map +1 -0
- package/dist/renderable/codecs/helpers.js +913 -0
- package/dist/renderable/codecs/helpers.js.map +1 -0
- package/dist/renderable/codecs/index-codec.d.ts +4714 -0
- package/dist/renderable/codecs/index-codec.d.ts.map +1 -0
- package/dist/renderable/codecs/index-codec.js +250 -0
- package/dist/renderable/codecs/index-codec.js.map +1 -0
- package/dist/renderable/codecs/index.d.ts +46 -0
- package/dist/renderable/codecs/index.d.ts.map +1 -0
- package/dist/renderable/codecs/index.js +70 -0
- package/dist/renderable/codecs/index.js.map +1 -0
- package/dist/renderable/codecs/patterns.d.ts +4757 -0
- package/dist/renderable/codecs/patterns.d.ts.map +1 -0
- package/dist/renderable/codecs/patterns.js +462 -0
- package/dist/renderable/codecs/patterns.js.map +1 -0
- package/dist/renderable/codecs/planning.d.ts +14055 -0
- package/dist/renderable/codecs/planning.d.ts.map +1 -0
- package/dist/renderable/codecs/planning.js +449 -0
- package/dist/renderable/codecs/planning.js.map +1 -0
- package/dist/renderable/codecs/pr-changes.d.ts +4742 -0
- package/dist/renderable/codecs/pr-changes.d.ts.map +1 -0
- package/dist/renderable/codecs/pr-changes.js +425 -0
- package/dist/renderable/codecs/pr-changes.js.map +1 -0
- package/dist/renderable/codecs/reference.d.ts +215 -0
- package/dist/renderable/codecs/reference.d.ts.map +1 -0
- package/dist/renderable/codecs/reference.js +1578 -0
- package/dist/renderable/codecs/reference.js.map +1 -0
- package/dist/renderable/codecs/reporting.d.ts +14026 -0
- package/dist/renderable/codecs/reporting.d.ts.map +1 -0
- package/dist/renderable/codecs/reporting.js +365 -0
- package/dist/renderable/codecs/reporting.js.map +1 -0
- package/dist/renderable/codecs/requirements.d.ts +4743 -0
- package/dist/renderable/codecs/requirements.d.ts.map +1 -0
- package/dist/renderable/codecs/requirements.js +428 -0
- package/dist/renderable/codecs/requirements.js.map +1 -0
- package/dist/renderable/codecs/session.d.ts +9410 -0
- package/dist/renderable/codecs/session.d.ts.map +1 -0
- package/dist/renderable/codecs/session.js +848 -0
- package/dist/renderable/codecs/session.js.map +1 -0
- package/dist/renderable/codecs/shape-matcher.d.ts +54 -0
- package/dist/renderable/codecs/shape-matcher.d.ts.map +1 -0
- package/dist/renderable/codecs/shape-matcher.js +106 -0
- package/dist/renderable/codecs/shape-matcher.js.map +1 -0
- package/dist/renderable/codecs/shared-schema.d.ts +44 -0
- package/dist/renderable/codecs/shared-schema.d.ts.map +1 -0
- package/dist/renderable/codecs/shared-schema.js +43 -0
- package/dist/renderable/codecs/shared-schema.js.map +1 -0
- package/dist/renderable/codecs/taxonomy.d.ts +4733 -0
- package/dist/renderable/codecs/taxonomy.d.ts.map +1 -0
- package/dist/renderable/codecs/taxonomy.js +570 -0
- package/dist/renderable/codecs/taxonomy.js.map +1 -0
- package/dist/renderable/codecs/timeline.d.ts +14094 -0
- package/dist/renderable/codecs/timeline.d.ts.map +1 -0
- package/dist/renderable/codecs/timeline.js +906 -0
- package/dist/renderable/codecs/timeline.js.map +1 -0
- package/dist/renderable/codecs/types/base.d.ts +81 -0
- package/dist/renderable/codecs/types/base.d.ts.map +1 -0
- package/dist/renderable/codecs/types/base.js +56 -0
- package/dist/renderable/codecs/types/base.js.map +1 -0
- package/dist/renderable/codecs/types/index.d.ts +5 -0
- package/dist/renderable/codecs/types/index.d.ts.map +1 -0
- package/dist/renderable/codecs/types/index.js +5 -0
- package/dist/renderable/codecs/types/index.js.map +1 -0
- package/dist/renderable/codecs/validation-rules.d.ts +4773 -0
- package/dist/renderable/codecs/validation-rules.d.ts.map +1 -0
- package/dist/renderable/codecs/validation-rules.js +537 -0
- package/dist/renderable/codecs/validation-rules.js.map +1 -0
- package/dist/renderable/generate.d.ts +338 -0
- package/dist/renderable/generate.d.ts.map +1 -0
- package/dist/renderable/generate.js +437 -0
- package/dist/renderable/generate.js.map +1 -0
- package/dist/renderable/index.d.ts +36 -0
- package/dist/renderable/index.d.ts.map +1 -0
- package/dist/renderable/index.js +58 -0
- package/dist/renderable/index.js.map +1 -0
- package/dist/renderable/load-preamble.d.ts +56 -0
- package/dist/renderable/load-preamble.d.ts.map +1 -0
- package/dist/renderable/load-preamble.js +298 -0
- package/dist/renderable/load-preamble.js.map +1 -0
- package/dist/renderable/render.d.ts +61 -0
- package/dist/renderable/render.d.ts.map +1 -0
- package/dist/renderable/render.js +346 -0
- package/dist/renderable/render.js.map +1 -0
- package/dist/renderable/schema.d.ts +194 -0
- package/dist/renderable/schema.d.ts.map +1 -0
- package/dist/renderable/schema.js +197 -0
- package/dist/renderable/schema.js.map +1 -0
- package/dist/renderable/utils.d.ts +146 -0
- package/dist/renderable/utils.d.ts.map +1 -0
- package/dist/renderable/utils.js +362 -0
- package/dist/renderable/utils.js.map +1 -0
- package/dist/scanner/ast-parser.d.ts +75 -0
- package/dist/scanner/ast-parser.d.ts.map +1 -0
- package/dist/scanner/ast-parser.js +835 -0
- package/dist/scanner/ast-parser.js.map +1 -0
- package/dist/scanner/gherkin-ast-parser.d.ts +166 -0
- package/dist/scanner/gherkin-ast-parser.d.ts.map +1 -0
- package/dist/scanner/gherkin-ast-parser.js +507 -0
- package/dist/scanner/gherkin-ast-parser.js.map +1 -0
- package/dist/scanner/gherkin-scanner.d.ts +106 -0
- package/dist/scanner/gherkin-scanner.d.ts.map +1 -0
- package/dist/scanner/gherkin-scanner.js +149 -0
- package/dist/scanner/gherkin-scanner.js.map +1 -0
- package/dist/scanner/index.d.ts +85 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +102 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/pattern-scanner.d.ts +83 -0
- package/dist/scanner/pattern-scanner.d.ts.map +1 -0
- package/dist/scanner/pattern-scanner.js +110 -0
- package/dist/scanner/pattern-scanner.js.map +1 -0
- package/dist/taxonomy/categories.d.ts +47 -0
- package/dist/taxonomy/categories.d.ts.map +1 -0
- package/dist/taxonomy/categories.js +175 -0
- package/dist/taxonomy/categories.js.map +1 -0
- package/dist/taxonomy/claude-section-values.d.ts +12 -0
- package/dist/taxonomy/claude-section-values.d.ts.map +1 -0
- package/dist/taxonomy/claude-section-values.js +17 -0
- package/dist/taxonomy/claude-section-values.js.map +1 -0
- package/dist/taxonomy/conventions.d.ts +13 -0
- package/dist/taxonomy/conventions.d.ts.map +1 -0
- package/dist/taxonomy/conventions.js +27 -0
- package/dist/taxonomy/conventions.js.map +1 -0
- package/dist/taxonomy/deliverable-status.d.ts +99 -0
- package/dist/taxonomy/deliverable-status.d.ts.map +1 -0
- package/dist/taxonomy/deliverable-status.js +131 -0
- package/dist/taxonomy/deliverable-status.js.map +1 -0
- package/dist/taxonomy/format-types.d.ts +17 -0
- package/dist/taxonomy/format-types.d.ts.map +1 -0
- package/dist/taxonomy/format-types.js +23 -0
- package/dist/taxonomy/format-types.js.map +1 -0
- package/dist/taxonomy/generator-options.d.ts +67 -0
- package/dist/taxonomy/generator-options.d.ts.map +1 -0
- package/dist/taxonomy/generator-options.js +75 -0
- package/dist/taxonomy/generator-options.js.map +1 -0
- package/dist/taxonomy/hierarchy-levels.d.ts +23 -0
- package/dist/taxonomy/hierarchy-levels.d.ts.map +1 -0
- package/dist/taxonomy/hierarchy-levels.js +22 -0
- package/dist/taxonomy/hierarchy-levels.js.map +1 -0
- package/dist/taxonomy/index.d.ts +35 -0
- package/dist/taxonomy/index.d.ts.map +1 -0
- package/dist/taxonomy/index.js +56 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/layer-types.d.ts +22 -0
- package/dist/taxonomy/layer-types.d.ts.map +1 -0
- package/dist/taxonomy/layer-types.js +28 -0
- package/dist/taxonomy/layer-types.js.map +1 -0
- package/dist/taxonomy/normalized-status.d.ts +99 -0
- package/dist/taxonomy/normalized-status.d.ts.map +1 -0
- package/dist/taxonomy/normalized-status.js +113 -0
- package/dist/taxonomy/normalized-status.js.map +1 -0
- package/dist/taxonomy/registry-builder.d.ts +104 -0
- package/dist/taxonomy/registry-builder.d.ts.map +1 -0
- package/dist/taxonomy/registry-builder.js +561 -0
- package/dist/taxonomy/registry-builder.js.map +1 -0
- package/dist/taxonomy/risk-levels.d.ts +16 -0
- package/dist/taxonomy/risk-levels.d.ts.map +1 -0
- package/dist/taxonomy/risk-levels.js +15 -0
- package/dist/taxonomy/risk-levels.js.map +1 -0
- package/dist/taxonomy/severity-types.d.ts +6 -0
- package/dist/taxonomy/severity-types.d.ts.map +1 -0
- package/dist/taxonomy/severity-types.js +5 -0
- package/dist/taxonomy/severity-types.js.map +1 -0
- package/dist/taxonomy/status-values.d.ts +39 -0
- package/dist/taxonomy/status-values.d.ts.map +1 -0
- package/dist/taxonomy/status-values.js +42 -0
- package/dist/taxonomy/status-values.js.map +1 -0
- package/dist/types/branded.d.ts +89 -0
- package/dist/types/branded.d.ts.map +1 -0
- package/dist/types/branded.js +57 -0
- package/dist/types/branded.js.map +1 -0
- package/dist/types/errors.d.ts +342 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +251 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/result.d.ts +78 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +78 -0
- package/dist/types/result.js.map +1 -0
- package/dist/utils/collection-utils.d.ts +49 -0
- package/dist/utils/collection-utils.d.ts.map +1 -0
- package/dist/utils/collection-utils.js +58 -0
- package/dist/utils/collection-utils.js.map +1 -0
- package/dist/utils/id-utils.d.ts +46 -0
- package/dist/utils/id-utils.d.ts.map +1 -0
- package/dist/utils/id-utils.js +51 -0
- package/dist/utils/id-utils.js.map +1 -0
- package/dist/utils/index.d.ts +21 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/string-utils.d.ts +150 -0
- package/dist/utils/string-utils.d.ts.map +1 -0
- package/dist/utils/string-utils.js +281 -0
- package/dist/utils/string-utils.js.map +1 -0
- package/dist/validation/anti-patterns.d.ts +134 -0
- package/dist/validation/anti-patterns.d.ts.map +1 -0
- package/dist/validation/anti-patterns.js +307 -0
- package/dist/validation/anti-patterns.js.map +1 -0
- package/dist/validation/dod-validator.d.ts +94 -0
- package/dist/validation/dod-validator.d.ts.map +1 -0
- package/dist/validation/dod-validator.js +198 -0
- package/dist/validation/dod-validator.js.map +1 -0
- package/dist/validation/fsm/index.d.ts +59 -0
- package/dist/validation/fsm/index.d.ts.map +1 -0
- package/dist/validation/fsm/index.js +64 -0
- package/dist/validation/fsm/index.js.map +1 -0
- package/dist/validation/fsm/states.d.ts +93 -0
- package/dist/validation/fsm/states.d.ts.map +1 -0
- package/dist/validation/fsm/states.js +98 -0
- package/dist/validation/fsm/states.js.map +1 -0
- package/dist/validation/fsm/transitions.d.ts +100 -0
- package/dist/validation/fsm/transitions.d.ts.map +1 -0
- package/dist/validation/fsm/transitions.js +122 -0
- package/dist/validation/fsm/transitions.js.map +1 -0
- package/dist/validation/fsm/validator.d.ts +163 -0
- package/dist/validation/fsm/validator.d.ts.map +1 -0
- package/dist/validation/fsm/validator.js +205 -0
- package/dist/validation/fsm/validator.js.map +1 -0
- package/dist/validation/index.d.ts +23 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +25 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/types.d.ts +136 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +56 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation-schemas/codec-utils.d.ts +188 -0
- package/dist/validation-schemas/codec-utils.d.ts.map +1 -0
- package/dist/validation-schemas/codec-utils.js +258 -0
- package/dist/validation-schemas/codec-utils.js.map +1 -0
- package/dist/validation-schemas/config.d.ts +99 -0
- package/dist/validation-schemas/config.d.ts.map +1 -0
- package/dist/validation-schemas/config.js +178 -0
- package/dist/validation-schemas/config.js.map +1 -0
- package/dist/validation-schemas/doc-directive.d.ts +195 -0
- package/dist/validation-schemas/doc-directive.d.ts.map +1 -0
- package/dist/validation-schemas/doc-directive.js +239 -0
- package/dist/validation-schemas/doc-directive.js.map +1 -0
- package/dist/validation-schemas/dual-source.d.ts +167 -0
- package/dist/validation-schemas/dual-source.d.ts.map +1 -0
- package/dist/validation-schemas/dual-source.js +168 -0
- package/dist/validation-schemas/dual-source.js.map +1 -0
- package/dist/validation-schemas/export-info.d.ts +53 -0
- package/dist/validation-schemas/export-info.d.ts.map +1 -0
- package/dist/validation-schemas/export-info.js +101 -0
- package/dist/validation-schemas/export-info.js.map +1 -0
- package/dist/validation-schemas/extracted-pattern.d.ts +351 -0
- package/dist/validation-schemas/extracted-pattern.d.ts.map +1 -0
- package/dist/validation-schemas/extracted-pattern.js +459 -0
- package/dist/validation-schemas/extracted-pattern.js.map +1 -0
- package/dist/validation-schemas/extracted-shape.d.ts +200 -0
- package/dist/validation-schemas/extracted-shape.d.ts.map +1 -0
- package/dist/validation-schemas/extracted-shape.js +182 -0
- package/dist/validation-schemas/extracted-shape.js.map +1 -0
- package/dist/validation-schemas/feature.d.ts +554 -0
- package/dist/validation-schemas/feature.d.ts.map +1 -0
- package/dist/validation-schemas/feature.js +262 -0
- package/dist/validation-schemas/feature.js.map +1 -0
- package/dist/validation-schemas/index.d.ts +15 -0
- package/dist/validation-schemas/index.d.ts.map +1 -0
- package/dist/validation-schemas/index.js +32 -0
- package/dist/validation-schemas/index.js.map +1 -0
- package/dist/validation-schemas/lint.d.ts +46 -0
- package/dist/validation-schemas/lint.d.ts.map +1 -0
- package/dist/validation-schemas/lint.js +45 -0
- package/dist/validation-schemas/lint.js.map +1 -0
- package/dist/validation-schemas/master-dataset.d.ts +8299 -0
- package/dist/validation-schemas/master-dataset.d.ts.map +1 -0
- package/dist/validation-schemas/master-dataset.js +275 -0
- package/dist/validation-schemas/master-dataset.js.map +1 -0
- package/dist/validation-schemas/output-schemas.d.ts +183 -0
- package/dist/validation-schemas/output-schemas.d.ts.map +1 -0
- package/dist/validation-schemas/output-schemas.js +149 -0
- package/dist/validation-schemas/output-schemas.js.map +1 -0
- package/dist/validation-schemas/scenario-ref.d.ts +80 -0
- package/dist/validation-schemas/scenario-ref.d.ts.map +1 -0
- package/dist/validation-schemas/scenario-ref.js +73 -0
- package/dist/validation-schemas/scenario-ref.js.map +1 -0
- package/dist/validation-schemas/tag-registry.d.ts +210 -0
- package/dist/validation-schemas/tag-registry.d.ts.map +1 -0
- package/dist/validation-schemas/tag-registry.js +248 -0
- package/dist/validation-schemas/tag-registry.js.map +1 -0
- package/dist/validation-schemas/workflow-config.d.ts +125 -0
- package/dist/validation-schemas/workflow-config.d.ts.map +1 -0
- package/dist/validation-schemas/workflow-config.js +138 -0
- package/dist/validation-schemas/workflow-config.js.map +1 -0
- package/docs/ANNOTATION-GUIDE.md +271 -0
- package/docs/ARCHITECTURE.md +1636 -0
- package/docs/CONFIGURATION.md +337 -0
- package/docs/DOCS-GAP-ANALYSIS.md +811 -0
- package/docs/GHERKIN-PATTERNS.md +366 -0
- package/docs/INDEX.md +345 -0
- package/docs/MCP-SETUP.md +140 -0
- package/docs/METHODOLOGY.md +240 -0
- package/docs/PROCESS-API.md +65 -0
- package/docs/PROCESS-GUARD.md +341 -0
- package/docs/SESSION-GUIDES.md +391 -0
- package/docs/TAXONOMY.md +106 -0
- package/docs/VALIDATION.md +418 -0
- package/docs-live/ARCHITECTURE.md +362 -0
- package/docs-live/BUSINESS-RULES.md +24 -0
- package/docs-live/CHANGELOG-GENERATED.md +375 -0
- package/docs-live/DECISIONS.md +78 -0
- package/docs-live/INDEX.md +231 -0
- package/docs-live/PRODUCT-AREAS.md +255 -0
- package/docs-live/TAXONOMY.md +202 -0
- package/docs-live/VALIDATION-RULES.md +119 -0
- package/docs-live/_claude-md/annotation/annotation-overview.md +26 -0
- package/docs-live/_claude-md/annotation/annotation-reference.md +213 -0
- package/docs-live/_claude-md/architecture/architecture-codecs.md +160 -0
- package/docs-live/_claude-md/architecture/architecture-types.md +32 -0
- package/docs-live/_claude-md/architecture/reference-sample.md +162 -0
- package/docs-live/_claude-md/authoring/gherkin-authoring-guide.md +245 -0
- package/docs-live/_claude-md/configuration/configuration-guide.md +216 -0
- package/docs-live/_claude-md/configuration/configuration-overview.md +37 -0
- package/docs-live/_claude-md/core-types/core-types-overview.md +20 -0
- package/docs-live/_claude-md/data-api/data-api-overview.md +39 -0
- package/docs-live/_claude-md/generation/generation-overview.md +30 -0
- package/docs-live/_claude-md/process/process-overview.md +127 -0
- package/docs-live/_claude-md/validation/process-guard.md +185 -0
- package/docs-live/_claude-md/validation/validation-overview.md +37 -0
- package/docs-live/_claude-md/validation/validation-tools-guide.md +242 -0
- package/docs-live/_claude-md/workflow/session-workflow-guide.md +141 -0
- package/docs-live/business-rules/annotation.md +1462 -0
- package/docs-live/business-rules/configuration.md +465 -0
- package/docs-live/business-rules/core-types.md +531 -0
- package/docs-live/business-rules/data-api.md +1403 -0
- package/docs-live/business-rules/generation.md +4726 -0
- package/docs-live/business-rules/process.md +122 -0
- package/docs-live/business-rules/validation.md +998 -0
- package/docs-live/decisions/adr-001-taxonomy-canonical-values.md +197 -0
- package/docs-live/decisions/adr-002-gherkin-only-testing.md +57 -0
- package/docs-live/decisions/adr-003-source-first-pattern-architecture.md +147 -0
- package/docs-live/decisions/adr-004-session-workflow-commands.md +137 -0
- package/docs-live/decisions/adr-005-codec-based-markdown-rendering.md +150 -0
- package/docs-live/decisions/adr-006-single-read-model-architecture.md +136 -0
- package/docs-live/decisions/adr-021-doc-generation-proof-of-concept.md +489 -0
- package/docs-live/product-areas/ANNOTATION.md +591 -0
- package/docs-live/product-areas/CONFIGURATION.md +1048 -0
- package/docs-live/product-areas/CORE-TYPES.md +221 -0
- package/docs-live/product-areas/DATA-API.md +850 -0
- package/docs-live/product-areas/GENERATION.md +1200 -0
- package/docs-live/product-areas/PROCESS.md +351 -0
- package/docs-live/product-areas/VALIDATION.md +1135 -0
- package/docs-live/reference/ANNOTATION-REFERENCE.md +232 -0
- package/docs-live/reference/ARCHITECTURE-CODECS.md +675 -0
- package/docs-live/reference/ARCHITECTURE-TYPES.md +436 -0
- package/docs-live/reference/CONFIGURATION-GUIDE.md +235 -0
- package/docs-live/reference/GHERKIN-AUTHORING-GUIDE.md +270 -0
- package/docs-live/reference/PROCESS-API-RECIPES.md +476 -0
- package/docs-live/reference/PROCESS-API-REFERENCE.md +63 -0
- package/docs-live/reference/PROCESS-GUARD-REFERENCE.md +258 -0
- package/docs-live/reference/REFERENCE-SAMPLE.md +1135 -0
- package/docs-live/reference/SESSION-WORKFLOW-GUIDE.md +384 -0
- package/docs-live/reference/VALIDATION-TOOLS-GUIDE.md +263 -0
- package/docs-live/taxonomy/categories.md +33 -0
- package/docs-live/taxonomy/format-types.md +67 -0
- package/docs-live/taxonomy/metadata-tags.md +693 -0
- package/docs-live/validation/error-catalog.md +78 -0
- package/docs-live/validation/fsm-transitions.md +50 -0
- package/docs-live/validation/protection-levels.md +51 -0
- package/package.json +233 -0
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-core
|
|
4
|
+
* @architect-pattern DecisionDocGenerator
|
|
5
|
+
* @architect-status completed
|
|
6
|
+
* @architect-phase 27
|
|
7
|
+
* @architect-arch-role service
|
|
8
|
+
* @architect-arch-context generator
|
|
9
|
+
* @architect-arch-layer application
|
|
10
|
+
* @architect-depends-on DecisionDocCodec,SourceMapper
|
|
11
|
+
*
|
|
12
|
+
* ## Decision Doc Generator - Documentation from Decision Documents
|
|
13
|
+
*
|
|
14
|
+
* Orchestrates the full pipeline for generating documentation from decision
|
|
15
|
+
* documents (ADR/PDR in .feature format):
|
|
16
|
+
*
|
|
17
|
+
* 1. Decision parsing - Extract source mappings, rules, DocStrings
|
|
18
|
+
* 2. Source mapping - Aggregate content from TypeScript, Gherkin, decision sources
|
|
19
|
+
* 3. Content assembly - Build RenderableDocument from aggregated sections
|
|
20
|
+
* 4. Multi-level output - Generate compact (_claude-md/) and detailed (docs/) versions
|
|
21
|
+
*
|
|
22
|
+
* ### When to Use
|
|
23
|
+
*
|
|
24
|
+
* - When generating documentation from ADR/PDR decision documents
|
|
25
|
+
* - When decision documents contain source mapping tables
|
|
26
|
+
* - When building progressive disclosure docs at multiple detail levels
|
|
27
|
+
*
|
|
28
|
+
* ### Output Path Convention
|
|
29
|
+
*
|
|
30
|
+
* - Compact: `_claude-md/{section}/{module}.md` (~50 lines)
|
|
31
|
+
* - Detailed: `docs/{PATTERN-NAME}.md` (~300 lines)
|
|
32
|
+
*/
|
|
33
|
+
import { heading, paragraph, code, list, separator, collapsible, document as createDocument, } from '../../renderable/schema.js';
|
|
34
|
+
import { renderToMarkdown } from '../../renderable/render.js';
|
|
35
|
+
import { parseDecisionDocument, } from '../../renderable/codecs/decision-doc.js';
|
|
36
|
+
import { parseDescriptionWithDocStrings, renderRuleDescription, renderPropertyDocsTable, } from '../../renderable/codecs/helpers.js';
|
|
37
|
+
import { executeSourceMapping, } from '../source-mapper.js';
|
|
38
|
+
import { toKebabCase, toUpperKebabCase } from '../../utils/string-utils.js';
|
|
39
|
+
import { createWarningCollector, } from '../warning-collector.js';
|
|
40
|
+
import { validateSourceMappingTable } from '../source-mapping-validator.js';
|
|
41
|
+
import { deduplicateSections } from '../content-deduplicator.js';
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// Output Path Resolution
|
|
44
|
+
// =============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Determine output paths from decision metadata
|
|
47
|
+
*
|
|
48
|
+
* Uses pattern name and optional section to compute paths:
|
|
49
|
+
* - Compact: _claude-md/{section}/{module}.md
|
|
50
|
+
* - Detailed: docs/{PATTERN-NAME}.md
|
|
51
|
+
*
|
|
52
|
+
* @param patternName - Pattern name from decision document
|
|
53
|
+
* @param options - Generator options including section override
|
|
54
|
+
* @returns Computed output paths
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const paths = determineOutputPaths('ProcessGuard', { section: 'validation' });
|
|
59
|
+
* // Returns:
|
|
60
|
+
* // {
|
|
61
|
+
* // compact: '_claude-md/validation/process-guard.md',
|
|
62
|
+
* // detailed: 'docs/PROCESS-GUARD.md'
|
|
63
|
+
* // }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function determineOutputPaths(patternName, options) {
|
|
67
|
+
// Convert PatternName to kebab-case for module name
|
|
68
|
+
const moduleName = toKebabCase(patternName);
|
|
69
|
+
// Use provided section or default to 'generated'
|
|
70
|
+
const section = options?.section ?? 'generated';
|
|
71
|
+
// Convert PatternName to UPPER-KEBAB-CASE for detailed path
|
|
72
|
+
const upperKebab = toUpperKebabCase(patternName);
|
|
73
|
+
return {
|
|
74
|
+
compact: `_claude-md/${section}/${moduleName}.md`,
|
|
75
|
+
detailed: `docs/${upperKebab}.md`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// =============================================================================
|
|
79
|
+
// Content Generation
|
|
80
|
+
// =============================================================================
|
|
81
|
+
/**
|
|
82
|
+
* Generate compact/summary output (~50 lines)
|
|
83
|
+
*
|
|
84
|
+
* Includes only essential tables and type definitions.
|
|
85
|
+
* Suitable for Claude MD context files.
|
|
86
|
+
*
|
|
87
|
+
* @param decisionContent - Parsed decision document
|
|
88
|
+
* @param aggregatedContent - Content from source mapping execution
|
|
89
|
+
* @returns RenderableDocument for compact output
|
|
90
|
+
*/
|
|
91
|
+
export function generateCompactOutput(decisionContent, aggregatedContent) {
|
|
92
|
+
const sections = [];
|
|
93
|
+
// Title and brief
|
|
94
|
+
sections.push(heading(2, 'Overview'));
|
|
95
|
+
// Extract key tables and types from aggregated sections
|
|
96
|
+
for (const extracted of aggregatedContent.sections) {
|
|
97
|
+
// Only include sections with substantial content
|
|
98
|
+
if (!extracted.content || extracted.content.trim().length === 0) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// For compact output, only include:
|
|
102
|
+
// 1. Type/interface definitions (shapes)
|
|
103
|
+
// 2. Key tables
|
|
104
|
+
if (extracted.shapes && extracted.shapes.length > 0) {
|
|
105
|
+
sections.push(heading(3, extracted.section));
|
|
106
|
+
// Render shapes as compact type list
|
|
107
|
+
const typeList = extracted.shapes.map((shape) => `\`${shape.name}\` - ${shape.kind}`);
|
|
108
|
+
sections.push(list(typeList));
|
|
109
|
+
}
|
|
110
|
+
else if (extracted.content.includes('|')) {
|
|
111
|
+
// Content contains a table - include it
|
|
112
|
+
sections.push(heading(3, extracted.section));
|
|
113
|
+
sections.push(paragraph(extracted.content));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// If no sections were added, add a placeholder
|
|
117
|
+
if (sections.length <= 1) {
|
|
118
|
+
sections.push(paragraph('*No structured content extracted.*'));
|
|
119
|
+
}
|
|
120
|
+
return createDocument(decisionContent.patternName, sections, {
|
|
121
|
+
purpose: 'Compact reference for Claude context',
|
|
122
|
+
detailLevel: 'summary',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate detailed output (~300 lines)
|
|
127
|
+
*
|
|
128
|
+
* Includes everything: JSDoc, examples, full descriptions.
|
|
129
|
+
* Suitable for docs/ directory.
|
|
130
|
+
*
|
|
131
|
+
* @param decisionContent - Parsed decision document
|
|
132
|
+
* @param aggregatedContent - Content from source mapping execution
|
|
133
|
+
* @returns RenderableDocument for detailed output
|
|
134
|
+
*/
|
|
135
|
+
export function generateDetailedOutput(decisionContent, aggregatedContent) {
|
|
136
|
+
const sections = [];
|
|
137
|
+
// Track rendered DocString content to prevent duplicates
|
|
138
|
+
// Key is content hash (language + content) to identify unique DocStrings
|
|
139
|
+
const renderedDocStrings = new Set();
|
|
140
|
+
// Feature description
|
|
141
|
+
if (decisionContent.description && decisionContent.description.trim().length > 0) {
|
|
142
|
+
sections.push(paragraph(decisionContent.description));
|
|
143
|
+
sections.push(separator());
|
|
144
|
+
}
|
|
145
|
+
// Context section from rules
|
|
146
|
+
if (decisionContent.rules.context.length > 0) {
|
|
147
|
+
sections.push(heading(2, 'Context'));
|
|
148
|
+
for (const rule of decisionContent.rules.context) {
|
|
149
|
+
sections.push(heading(3, rule.name.replace(/^Context\s*[-:]\s*/i, '')));
|
|
150
|
+
if (rule.description) {
|
|
151
|
+
sections.push(...renderRuleDescription(rule.description));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Decision section from rules
|
|
156
|
+
if (decisionContent.rules.decision.length > 0) {
|
|
157
|
+
sections.push(heading(2, 'Decision'));
|
|
158
|
+
for (const rule of decisionContent.rules.decision) {
|
|
159
|
+
sections.push(heading(3, rule.name.replace(/^Decision\s*[-:]\s*/i, '')));
|
|
160
|
+
if (rule.description) {
|
|
161
|
+
sections.push(...renderRuleDescription(rule.description));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Aggregated content sections
|
|
166
|
+
// Include all sections from Source Mapping - both external files AND self-references
|
|
167
|
+
// The Source Mapping table defines the canonical order of content
|
|
168
|
+
// Self-references to rules will be rendered here, and we filter them from "Other rules" below
|
|
169
|
+
const nonDuplicateSections = aggregatedContent.sections.filter((extracted) => {
|
|
170
|
+
// Skip empty content
|
|
171
|
+
if (!extracted.content || extracted.content.trim().length === 0) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
return true;
|
|
175
|
+
});
|
|
176
|
+
if (nonDuplicateSections.length > 0) {
|
|
177
|
+
sections.push(heading(2, 'Implementation Details'));
|
|
178
|
+
for (const extracted of nonDuplicateSections) {
|
|
179
|
+
sections.push(heading(3, extracted.section));
|
|
180
|
+
// Handle different content types
|
|
181
|
+
if (extracted.shapes && extracted.shapes.length > 0) {
|
|
182
|
+
// Render full shape definitions with JSDoc
|
|
183
|
+
for (const shape of extracted.shapes) {
|
|
184
|
+
// Include JSDoc as part of the code block (combined with source)
|
|
185
|
+
const fullSource = shape.jsDoc ? `${shape.jsDoc}\n${shape.sourceText}` : shape.sourceText;
|
|
186
|
+
sections.push(code(fullSource, 'typescript'));
|
|
187
|
+
// Add property description table for interfaces with documented properties
|
|
188
|
+
const propertyTable = renderPropertyDocsTable(shape.propertyDocs);
|
|
189
|
+
if (propertyTable) {
|
|
190
|
+
sections.push(paragraph(propertyTable));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (extracted.docStrings && extracted.docStrings.length > 0) {
|
|
195
|
+
// Check if content has meaningful text beyond just DocStrings
|
|
196
|
+
// Rule block extractions include context text, tables, AND DocStrings
|
|
197
|
+
// We should render full content to preserve all text, not just DocStrings
|
|
198
|
+
const contentWithoutDocStrings = extracted.content
|
|
199
|
+
.replace(/"""[\w]*\n[\s\S]*?"""/g, '') // Remove Gherkin DocStrings
|
|
200
|
+
.replace(/```[\w]*\n[\s\S]*?```/g, '') // Remove markdown code blocks
|
|
201
|
+
.trim();
|
|
202
|
+
if (contentWithoutDocStrings.length > 0) {
|
|
203
|
+
// Content has text beyond DocStrings - render full content with inline DocStrings
|
|
204
|
+
sections.push(...parseDescriptionWithDocStrings(extracted.content));
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Content is ONLY DocStrings - render them as code blocks, skipping duplicates
|
|
208
|
+
for (const ds of extracted.docStrings) {
|
|
209
|
+
const contentKey = `${ds.language}:${ds.content}`;
|
|
210
|
+
if (!renderedDocStrings.has(contentKey)) {
|
|
211
|
+
renderedDocStrings.add(contentKey);
|
|
212
|
+
sections.push(code(ds.content, ds.language));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// Plain content - convert DocStrings to code fences
|
|
219
|
+
sections.push(...parseDescriptionWithDocStrings(extracted.content));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Consequences section from rules
|
|
224
|
+
if (decisionContent.rules.consequences.length > 0) {
|
|
225
|
+
sections.push(heading(2, 'Consequences'));
|
|
226
|
+
for (const rule of decisionContent.rules.consequences) {
|
|
227
|
+
sections.push(heading(3, rule.name.replace(/^Consequence[s]?\s*[-:]\s*/i, '')));
|
|
228
|
+
if (rule.description) {
|
|
229
|
+
sections.push(...renderRuleDescription(rule.description));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Other rules (custom sections)
|
|
234
|
+
// Skip if these rules are already covered by Source Mapping entries
|
|
235
|
+
// to prevent duplicate content in reference documentation
|
|
236
|
+
if (decisionContent.rules.other.length > 0) {
|
|
237
|
+
// Build set of section names from Source Mapping (both self-references and external files)
|
|
238
|
+
const sourceMappedSectionNames = new Set();
|
|
239
|
+
for (const mapping of decisionContent.sourceMappings) {
|
|
240
|
+
// Normalize section name for matching (case-insensitive)
|
|
241
|
+
const normalizedSection = mapping.section.toLowerCase().trim();
|
|
242
|
+
sourceMappedSectionNames.add(normalizedSection);
|
|
243
|
+
}
|
|
244
|
+
// Helper: extract significant words (3+ chars) for fuzzy matching
|
|
245
|
+
const getWords = (text) => new Set(text
|
|
246
|
+
.toLowerCase()
|
|
247
|
+
.split(/[^a-z]+/)
|
|
248
|
+
.filter((w) => w.length >= 3));
|
|
249
|
+
// Only render rules that aren't covered by Source Mapping section names
|
|
250
|
+
for (const rule of decisionContent.rules.other) {
|
|
251
|
+
const ruleName = rule.name.toLowerCase().trim();
|
|
252
|
+
const ruleWords = getWords(ruleName);
|
|
253
|
+
// Check if any Source Mapping section matches this rule name
|
|
254
|
+
// Match if: exact match, substring match, or 2+ words overlap
|
|
255
|
+
const isCovered = Array.from(sourceMappedSectionNames).some((sectionName) => {
|
|
256
|
+
// Exact or substring match
|
|
257
|
+
if (ruleName === sectionName ||
|
|
258
|
+
ruleName.includes(sectionName) ||
|
|
259
|
+
sectionName.includes(ruleName)) {
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
// Word overlap match (at least 2 significant words)
|
|
263
|
+
const sectionWords = getWords(sectionName);
|
|
264
|
+
let matches = 0;
|
|
265
|
+
for (const word of ruleWords) {
|
|
266
|
+
if (sectionWords.has(word))
|
|
267
|
+
matches++;
|
|
268
|
+
}
|
|
269
|
+
return matches >= 2;
|
|
270
|
+
});
|
|
271
|
+
if (!isCovered) {
|
|
272
|
+
sections.push(heading(2, rule.name));
|
|
273
|
+
if (rule.description) {
|
|
274
|
+
sections.push(...renderRuleDescription(rule.description));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// DocStrings if not already included
|
|
280
|
+
if (decisionContent.docStrings.length > 0 && aggregatedContent.sections.length === 0) {
|
|
281
|
+
sections.push(heading(2, 'Examples'));
|
|
282
|
+
for (const ds of decisionContent.docStrings) {
|
|
283
|
+
sections.push(code(ds.content, ds.language));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Add generation warnings if any
|
|
287
|
+
if (aggregatedContent.warnings.length > 0) {
|
|
288
|
+
sections.push(separator());
|
|
289
|
+
sections.push(collapsible('Generation Warnings', aggregatedContent.warnings.map((w) => paragraph(`- ${w.severity}: ${w.message}`))));
|
|
290
|
+
}
|
|
291
|
+
return createDocument(decisionContent.patternName, sections, {
|
|
292
|
+
purpose: 'Full documentation generated from decision document',
|
|
293
|
+
detailLevel: 'detailed',
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Generate standard output (~150 lines)
|
|
298
|
+
*
|
|
299
|
+
* Balance between compact and detailed: tables, types, key descriptions.
|
|
300
|
+
* Suitable for general documentation.
|
|
301
|
+
*
|
|
302
|
+
* @param decisionContent - Parsed decision document
|
|
303
|
+
* @param aggregatedContent - Content from source mapping execution
|
|
304
|
+
* @returns RenderableDocument for standard output
|
|
305
|
+
*/
|
|
306
|
+
export function generateStandardOutput(decisionContent, aggregatedContent) {
|
|
307
|
+
const sections = [];
|
|
308
|
+
// Brief description
|
|
309
|
+
if (decisionContent.description && decisionContent.description.trim().length > 0) {
|
|
310
|
+
const briefDesc = decisionContent.description.split('\n').slice(0, 3).join('\n');
|
|
311
|
+
sections.push(paragraph(briefDesc));
|
|
312
|
+
sections.push(separator());
|
|
313
|
+
}
|
|
314
|
+
// Context summary
|
|
315
|
+
if (decisionContent.rules.context.length > 0) {
|
|
316
|
+
sections.push(heading(2, 'Context'));
|
|
317
|
+
const contextNames = decisionContent.rules.context.map((r) => r.name.replace(/^Context\s*[-:]\s*/i, ''));
|
|
318
|
+
sections.push(list(contextNames));
|
|
319
|
+
}
|
|
320
|
+
// Decision summary
|
|
321
|
+
if (decisionContent.rules.decision.length > 0) {
|
|
322
|
+
sections.push(heading(2, 'Decision'));
|
|
323
|
+
for (const rule of decisionContent.rules.decision) {
|
|
324
|
+
sections.push(heading(3, rule.name.replace(/^Decision\s*[-:]\s*/i, '')));
|
|
325
|
+
// First paragraph only
|
|
326
|
+
if (rule.description) {
|
|
327
|
+
const firstPara = rule.description.split('\n\n')[0] ?? '';
|
|
328
|
+
sections.push(paragraph(firstPara));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Aggregated content with moderate detail
|
|
333
|
+
for (const extracted of aggregatedContent.sections) {
|
|
334
|
+
if (!extracted.content || extracted.content.trim().length === 0) {
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
sections.push(heading(3, extracted.section));
|
|
338
|
+
if (extracted.shapes && extracted.shapes.length > 0) {
|
|
339
|
+
// Type definitions without full JSDoc
|
|
340
|
+
for (const shape of extracted.shapes) {
|
|
341
|
+
sections.push(code(shape.sourceText, 'typescript'));
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
sections.push(paragraph(extracted.content));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return createDocument(decisionContent.patternName, sections, {
|
|
349
|
+
purpose: 'Standard documentation from decision document',
|
|
350
|
+
detailLevel: 'standard',
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Execute the generation pipeline: validation, extraction, deduplication
|
|
355
|
+
*
|
|
356
|
+
* Internal function that performs the expensive work once. Both single-level
|
|
357
|
+
* and multi-level generators use this to avoid duplicate work.
|
|
358
|
+
*
|
|
359
|
+
* @param pattern - Extracted pattern with decision document content
|
|
360
|
+
* @param options - Generator options
|
|
361
|
+
* @returns Pipeline result or error
|
|
362
|
+
*/
|
|
363
|
+
async function executePipeline(pattern, options) {
|
|
364
|
+
// Default options - all robustness features enabled by default
|
|
365
|
+
const enableValidation = options.enableValidation ?? true;
|
|
366
|
+
const enableDeduplication = options.enableDeduplication ?? true;
|
|
367
|
+
const enableWarningCollection = options.enableWarningCollection ?? true;
|
|
368
|
+
// Step 1: Create WarningCollector for unified warning handling
|
|
369
|
+
const warningCollector = enableWarningCollection
|
|
370
|
+
? createWarningCollector()
|
|
371
|
+
: undefined;
|
|
372
|
+
// Pattern name can come from directive.patternName or pattern.patternName or pattern.name
|
|
373
|
+
// directive.patternName and pattern.patternName are optional, pattern.name is required
|
|
374
|
+
// Use helper function to catch both null/undefined AND empty strings
|
|
375
|
+
const getPatternName = () => {
|
|
376
|
+
if (pattern.directive.patternName?.trim()) {
|
|
377
|
+
return pattern.directive.patternName;
|
|
378
|
+
}
|
|
379
|
+
if (pattern.patternName?.trim()) {
|
|
380
|
+
return pattern.patternName;
|
|
381
|
+
}
|
|
382
|
+
return pattern.name;
|
|
383
|
+
};
|
|
384
|
+
const patternName = getPatternName();
|
|
385
|
+
const description = pattern.directive.description;
|
|
386
|
+
const rules = pattern.rules ?? [];
|
|
387
|
+
// Step 2: Parse decision document
|
|
388
|
+
const decisionContent = parseDecisionDocument(patternName, description, rules);
|
|
389
|
+
// Step 3 & 4: Validate and execute source mapping (if mappings exist)
|
|
390
|
+
let aggregatedContent = {
|
|
391
|
+
sections: [],
|
|
392
|
+
warnings: [],
|
|
393
|
+
success: true,
|
|
394
|
+
};
|
|
395
|
+
// Deduplication warnings when warningCollector is not used
|
|
396
|
+
const dedupWarnings = [];
|
|
397
|
+
if (decisionContent.sourceMappings.length > 0) {
|
|
398
|
+
// Step 3: PRE-FLIGHT VALIDATION (if enabled)
|
|
399
|
+
if (enableValidation) {
|
|
400
|
+
const validatorOptions = warningCollector
|
|
401
|
+
? { baseDir: options.baseDir, warningCollector }
|
|
402
|
+
: { baseDir: options.baseDir };
|
|
403
|
+
const validationResult = validateSourceMappingTable(decisionContent.sourceMappings, validatorOptions);
|
|
404
|
+
// Capture validation warnings after successful validation (Issue #4 fix)
|
|
405
|
+
if (validationResult.isValid && warningCollector && validationResult.warnings.length > 0) {
|
|
406
|
+
for (const warning of validationResult.warnings) {
|
|
407
|
+
warningCollector.capture(warning);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// If validation fails with errors, return early
|
|
411
|
+
if (!validationResult.isValid) {
|
|
412
|
+
const warnings = warningCollector
|
|
413
|
+
? warningCollector.getAll().map((w) => `${w.category}: ${w.message}`)
|
|
414
|
+
: [];
|
|
415
|
+
return {
|
|
416
|
+
warnings,
|
|
417
|
+
errors: validationResult.errors.map((e) => {
|
|
418
|
+
// Include suggestions if available
|
|
419
|
+
if (e.suggestions && e.suggestions.length > 0) {
|
|
420
|
+
return `${e.message}. Did you mean: ${e.suggestions.join(', ')}?`;
|
|
421
|
+
}
|
|
422
|
+
return e.message;
|
|
423
|
+
}),
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
// Step 4: EXECUTE SOURCE MAPPING (with warning collector)
|
|
428
|
+
const baseMapperOptions = {
|
|
429
|
+
baseDir: options.baseDir,
|
|
430
|
+
decisionDocPath: pattern.source.file,
|
|
431
|
+
decisionContent,
|
|
432
|
+
detailLevel: options.detailLevel ?? 'standard',
|
|
433
|
+
};
|
|
434
|
+
const mapperOptions = warningCollector
|
|
435
|
+
? { ...baseMapperOptions, warningCollector }
|
|
436
|
+
: baseMapperOptions;
|
|
437
|
+
aggregatedContent = await executeSourceMapping(decisionContent.sourceMappings, mapperOptions);
|
|
438
|
+
// Step 5: DEDUPLICATE SECTIONS (if enabled)
|
|
439
|
+
if (enableDeduplication && aggregatedContent.sections.length > 0) {
|
|
440
|
+
const dedupOptions = warningCollector ? { warningCollector } : undefined;
|
|
441
|
+
const dedupResult = deduplicateSections(aggregatedContent.sections, dedupOptions);
|
|
442
|
+
aggregatedContent.sections = dedupResult.sections;
|
|
443
|
+
// Capture deduplication warnings when not using collector
|
|
444
|
+
// (When collector is present, warnings are captured via side-effect)
|
|
445
|
+
if (!warningCollector && dedupResult.warnings.length > 0) {
|
|
446
|
+
dedupWarnings.push(...dedupResult.warnings);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return { decisionContent, aggregatedContent, warningCollector, patternName, dedupWarnings };
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Check if pipeline result is an error
|
|
454
|
+
*/
|
|
455
|
+
function isPipelineError(result) {
|
|
456
|
+
return 'errors' in result;
|
|
457
|
+
}
|
|
458
|
+
// =============================================================================
|
|
459
|
+
// Main Generation Function
|
|
460
|
+
// =============================================================================
|
|
461
|
+
/**
|
|
462
|
+
* Generate documentation from a decision document
|
|
463
|
+
*
|
|
464
|
+
* Main entry point that orchestrates the full pipeline:
|
|
465
|
+
* 1. Create WarningCollector for unified warning handling
|
|
466
|
+
* 2. Parse decision document to extract content
|
|
467
|
+
* 3. Validate source mappings (if enabled) - fails fast on validation errors
|
|
468
|
+
* 4. Execute source mapping to aggregate content from referenced files
|
|
469
|
+
* 5. Deduplicate sections (if enabled)
|
|
470
|
+
* 6. Generate output at specified detail level(s)
|
|
471
|
+
* 7. Return output files with all warnings
|
|
472
|
+
*
|
|
473
|
+
* @param pattern - Extracted pattern with decision document content
|
|
474
|
+
* @param options - Generator options
|
|
475
|
+
* @returns Generation result with files and warnings
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* ```typescript
|
|
479
|
+
* const result = await generateFromDecision(processGuardPattern, {
|
|
480
|
+
* baseDir: process.cwd(),
|
|
481
|
+
* detailLevel: 'detailed',
|
|
482
|
+
* claudeMdSection: 'validation',
|
|
483
|
+
* });
|
|
484
|
+
*
|
|
485
|
+
* for (const file of result.files) {
|
|
486
|
+
* fs.writeFileSync(file.path, file.content);
|
|
487
|
+
* }
|
|
488
|
+
* ```
|
|
489
|
+
*/
|
|
490
|
+
export async function generateFromDecision(pattern, options) {
|
|
491
|
+
// Execute the pipeline
|
|
492
|
+
const pipelineResult = await executePipeline(pattern, options);
|
|
493
|
+
// If pipeline failed, return errors
|
|
494
|
+
if (isPipelineError(pipelineResult)) {
|
|
495
|
+
return {
|
|
496
|
+
files: [],
|
|
497
|
+
warnings: pipelineResult.warnings,
|
|
498
|
+
errors: pipelineResult.errors,
|
|
499
|
+
success: false,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
const { decisionContent, aggregatedContent, warningCollector, patternName, dedupWarnings } = pipelineResult;
|
|
503
|
+
// Generate output at requested detail level
|
|
504
|
+
const sectionOption = options.claudeMdSection ?? pattern.claudeSection;
|
|
505
|
+
const outputPaths = determineOutputPaths(patternName, sectionOption ? { section: sectionOption } : undefined);
|
|
506
|
+
const detailLevel = options.detailLevel ?? 'standard';
|
|
507
|
+
// Generate based on detail level
|
|
508
|
+
let doc;
|
|
509
|
+
let outputPath;
|
|
510
|
+
switch (detailLevel) {
|
|
511
|
+
case 'summary':
|
|
512
|
+
doc = generateCompactOutput(decisionContent, aggregatedContent);
|
|
513
|
+
outputPath = outputPaths.compact;
|
|
514
|
+
break;
|
|
515
|
+
case 'detailed':
|
|
516
|
+
doc = generateDetailedOutput(decisionContent, aggregatedContent);
|
|
517
|
+
outputPath = outputPaths.detailed;
|
|
518
|
+
break;
|
|
519
|
+
case 'standard':
|
|
520
|
+
default:
|
|
521
|
+
doc = generateStandardOutput(decisionContent, aggregatedContent);
|
|
522
|
+
outputPath = outputPaths.detailed;
|
|
523
|
+
break;
|
|
524
|
+
}
|
|
525
|
+
// Render to markdown
|
|
526
|
+
const content = renderToMarkdown(doc);
|
|
527
|
+
const files = [{ path: outputPath, content }];
|
|
528
|
+
// Collect all warnings and return
|
|
529
|
+
// When warningCollector is present, it captures all warnings via side-effects
|
|
530
|
+
// When not present, we need to merge extraction warnings with deduplication warnings
|
|
531
|
+
const warnings = warningCollector
|
|
532
|
+
? warningCollector.getAll().map((w) => `${w.category}: ${w.message}`)
|
|
533
|
+
: [
|
|
534
|
+
...aggregatedContent.warnings.map((w) => `${w.severity}: ${w.message}`),
|
|
535
|
+
...dedupWarnings.map((w) => `${w.category}: ${w.message}`),
|
|
536
|
+
];
|
|
537
|
+
return { files, warnings, errors: [], success: true };
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Generate both compact and detailed outputs
|
|
541
|
+
*
|
|
542
|
+
* Runs the pipeline once and generates documentation at both detail levels.
|
|
543
|
+
* More efficient than calling generateFromDecision twice.
|
|
544
|
+
*
|
|
545
|
+
* @param pattern - Extracted pattern with decision document content
|
|
546
|
+
* @param options - Generator options
|
|
547
|
+
* @returns Generation result with both output files
|
|
548
|
+
*/
|
|
549
|
+
export async function generateFromDecisionMultiLevel(pattern, options) {
|
|
550
|
+
// Execute the pipeline ONCE
|
|
551
|
+
const pipelineResult = await executePipeline(pattern, options);
|
|
552
|
+
// If pipeline failed, return errors
|
|
553
|
+
if (isPipelineError(pipelineResult)) {
|
|
554
|
+
return {
|
|
555
|
+
files: [],
|
|
556
|
+
warnings: pipelineResult.warnings,
|
|
557
|
+
errors: pipelineResult.errors,
|
|
558
|
+
success: false,
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
const { decisionContent, aggregatedContent, warningCollector, patternName, dedupWarnings } = pipelineResult;
|
|
562
|
+
// Determine output paths
|
|
563
|
+
const sectionOption = options.claudeMdSection ?? pattern.claudeSection;
|
|
564
|
+
const outputPaths = determineOutputPaths(patternName, sectionOption ? { section: sectionOption } : undefined);
|
|
565
|
+
// Generate BOTH outputs from the same processed data
|
|
566
|
+
const compactDoc = generateCompactOutput(decisionContent, aggregatedContent);
|
|
567
|
+
const detailedDoc = generateDetailedOutput(decisionContent, aggregatedContent);
|
|
568
|
+
const compactContent = renderToMarkdown(compactDoc);
|
|
569
|
+
const detailedContent = renderToMarkdown(detailedDoc);
|
|
570
|
+
const files = [
|
|
571
|
+
{ path: outputPaths.compact, content: compactContent },
|
|
572
|
+
{ path: outputPaths.detailed, content: detailedContent },
|
|
573
|
+
];
|
|
574
|
+
// Collect all warnings
|
|
575
|
+
// When warningCollector is present, it captures all warnings via side-effects
|
|
576
|
+
// When not present, we need to merge extraction warnings with deduplication warnings
|
|
577
|
+
const warnings = warningCollector
|
|
578
|
+
? warningCollector.getAll().map((w) => `${w.category}: ${w.message}`)
|
|
579
|
+
: [
|
|
580
|
+
...aggregatedContent.warnings.map((w) => `${w.severity}: ${w.message}`),
|
|
581
|
+
...dedupWarnings.map((w) => `${w.category}: ${w.message}`),
|
|
582
|
+
];
|
|
583
|
+
return { files, warnings, errors: [], success: true };
|
|
584
|
+
}
|
|
585
|
+
// =============================================================================
|
|
586
|
+
// DocumentGenerator Implementation
|
|
587
|
+
// =============================================================================
|
|
588
|
+
/**
|
|
589
|
+
* Decision Doc Generator for registry integration
|
|
590
|
+
*
|
|
591
|
+
* Implements DocumentGenerator interface for use with the generator registry.
|
|
592
|
+
* Filters patterns by type to find ADR/PDR decision documents with source mappings.
|
|
593
|
+
*/
|
|
594
|
+
export class DecisionDocGeneratorImpl {
|
|
595
|
+
name = 'doc-from-decision';
|
|
596
|
+
description = 'Generate documentation from ADR/PDR decision documents';
|
|
597
|
+
async generate(patterns, context) {
|
|
598
|
+
const allFiles = [];
|
|
599
|
+
// Filter for decision documents (ADR/PDR patterns with source mappings)
|
|
600
|
+
const decisionPatterns = patterns.filter((p) => {
|
|
601
|
+
// Check if pattern has source mapping table in description or rules
|
|
602
|
+
const description = p.directive.description;
|
|
603
|
+
const hasSourceMappingInDesc = description.includes('| Section |') &&
|
|
604
|
+
(description.includes('| Source File |') || description.includes('| Source |'));
|
|
605
|
+
// Check rules for source mapping tables
|
|
606
|
+
const hasSourceMappingInRules = (p.rules ?? []).some((rule) => rule.description.includes('| Section |') &&
|
|
607
|
+
(rule.description.includes('| Source File |') || rule.description.includes('| Source |')));
|
|
608
|
+
return hasSourceMappingInDesc || hasSourceMappingInRules;
|
|
609
|
+
});
|
|
610
|
+
// Collect all warnings and errors for metadata instead of console output
|
|
611
|
+
const allWarnings = [];
|
|
612
|
+
const allErrors = [];
|
|
613
|
+
if (decisionPatterns.length === 0) {
|
|
614
|
+
allWarnings.push('No decision documents with source mappings found. Ensure patterns have source mapping tables.');
|
|
615
|
+
return {
|
|
616
|
+
files: [],
|
|
617
|
+
metadata: {
|
|
618
|
+
warnings: allWarnings,
|
|
619
|
+
errors: allErrors,
|
|
620
|
+
patternsProcessed: 0,
|
|
621
|
+
},
|
|
622
|
+
};
|
|
623
|
+
}
|
|
624
|
+
// Generate documentation for each decision pattern
|
|
625
|
+
for (const pattern of decisionPatterns) {
|
|
626
|
+
// Use the canonical extracted claude section when present.
|
|
627
|
+
const section = pattern.claudeSection ?? 'generated';
|
|
628
|
+
const result = await generateFromDecisionMultiLevel(pattern, {
|
|
629
|
+
baseDir: context.baseDir,
|
|
630
|
+
detailLevel: 'detailed', // Generate both levels
|
|
631
|
+
claudeMdSection: section,
|
|
632
|
+
});
|
|
633
|
+
allFiles.push(...result.files);
|
|
634
|
+
// Collect errors and warnings (but don't fail)
|
|
635
|
+
allErrors.push(...result.errors);
|
|
636
|
+
allWarnings.push(...result.warnings);
|
|
637
|
+
}
|
|
638
|
+
return {
|
|
639
|
+
files: allFiles,
|
|
640
|
+
metadata: {
|
|
641
|
+
warnings: allWarnings,
|
|
642
|
+
errors: allErrors,
|
|
643
|
+
patternsProcessed: decisionPatterns.length,
|
|
644
|
+
},
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Create decision doc generator instance
|
|
650
|
+
*/
|
|
651
|
+
export function createDecisionDocGenerator() {
|
|
652
|
+
return new DecisionDocGeneratorImpl();
|
|
653
|
+
}
|
|
654
|
+
//# sourceMappingURL=decision-doc-generator.js.map
|