@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,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-core @architect-extractor
|
|
4
|
+
* @architect-pattern Document Extractor
|
|
5
|
+
* @architect-status completed
|
|
6
|
+
* @architect-arch-role service
|
|
7
|
+
* @architect-arch-context extractor
|
|
8
|
+
* @architect-arch-layer application
|
|
9
|
+
* @architect-include pipeline-stages
|
|
10
|
+
* @architect-uses Pattern Scanner, Tag Registry, Zod
|
|
11
|
+
* @architect-used-by Orchestrator, Generators
|
|
12
|
+
* @architect-usecase "When converting scanned files to ExtractedPattern objects"
|
|
13
|
+
* @architect-usecase "When inferring pattern names and categories from exports"
|
|
14
|
+
*
|
|
15
|
+
* ## Document Extractor - Pattern Extraction and Metadata Generation
|
|
16
|
+
*
|
|
17
|
+
* Converts scanned file data into complete ExtractedPattern objects with
|
|
18
|
+
* unique IDs, inferred names, categories, and timestamps. Second stage of
|
|
19
|
+
* the pipeline: Scanner → **Extractor** → Generator.
|
|
20
|
+
*
|
|
21
|
+
* ### When to Use
|
|
22
|
+
*
|
|
23
|
+
* - Transforming directives to structured patterns
|
|
24
|
+
* - Inferring metadata from tags and exports
|
|
25
|
+
* - Validating pattern structure against schemas
|
|
26
|
+
*
|
|
27
|
+
* ### Key Concepts
|
|
28
|
+
*
|
|
29
|
+
* - **Category Inference**: Uses tag registry priorities to determine primary category
|
|
30
|
+
* - **Name Inference**: Extracts from exports or JSDoc title when not explicit
|
|
31
|
+
* - **Deterministic IDs**: MD5 hash of file path + line number ensures stable identifiers
|
|
32
|
+
*/
|
|
33
|
+
import * as fs from 'fs';
|
|
34
|
+
import * as path from 'path';
|
|
35
|
+
import { processExtractShapesTag, discoverTaggedShapes } from './shape-extractor.js';
|
|
36
|
+
import { Result } from '../types/index.js';
|
|
37
|
+
import { asPatternId, asCategoryName, asSourceFilePath, createPatternValidationError, } from '../types/index.js';
|
|
38
|
+
import { ExtractedPatternSchema, createDefaultTagRegistry, } from '../validation-schemas/index.js';
|
|
39
|
+
import { generatePatternId } from '../utils/index.js';
|
|
40
|
+
/**
|
|
41
|
+
* Convert scanned files to extracted patterns
|
|
42
|
+
*
|
|
43
|
+
* **Result Pattern**: Collects both successful extractions AND validation errors,
|
|
44
|
+
* enabling partial success scenarios.
|
|
45
|
+
*
|
|
46
|
+
* @param scannedFiles - Files scanned for directives
|
|
47
|
+
* @param baseDir - Base directory for relative path calculation
|
|
48
|
+
* @param registry - Tag registry for category inference and aggregation tags (optional, defaults to generic registry)
|
|
49
|
+
* @returns Extraction results with patterns and errors
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* import { scanPatterns } from '@libar-dev/code-first-docs/scanner';
|
|
54
|
+
* import { extractPatterns } from '@libar-dev/code-first-docs/extractor';
|
|
55
|
+
*
|
|
56
|
+
* const scanResult = await scanPatterns(config);
|
|
57
|
+
* if (scanResult.ok) {
|
|
58
|
+
* const extraction = extractPatterns(scanResult.value.files, '/path/to/project');
|
|
59
|
+
* console.log(`Extracted ${extraction.patterns.length} patterns`);
|
|
60
|
+
* console.log(`Failed ${extraction.errors.length} validations`);
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export function extractPatterns(scannedFiles, baseDir, registry) {
|
|
65
|
+
const patterns = [];
|
|
66
|
+
const errors = [];
|
|
67
|
+
const effectiveRegistry = registry ?? createDefaultTagRegistry();
|
|
68
|
+
for (const scannedFile of scannedFiles) {
|
|
69
|
+
for (const item of scannedFile.directives) {
|
|
70
|
+
const result = buildPattern(item.directive, item.code, item.exports, scannedFile.filePath, baseDir, effectiveRegistry);
|
|
71
|
+
if (Result.isOk(result)) {
|
|
72
|
+
patterns.push(result.value);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
errors.push(result.error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { patterns, errors };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build a complete ExtractedPattern from components
|
|
83
|
+
*
|
|
84
|
+
* **Schema-First Enforcement**: Validates constructed pattern against schema
|
|
85
|
+
* to ensure data integrity at the boundary.
|
|
86
|
+
*
|
|
87
|
+
* @param directive - Parsed JSDoc directive
|
|
88
|
+
* @param code - Extracted code snippet
|
|
89
|
+
* @param exports - Exported symbols from code block
|
|
90
|
+
* @param filePath - Absolute file path
|
|
91
|
+
* @param baseDir - Base directory for relative path calculation
|
|
92
|
+
* @param registry - Tag registry for category inference
|
|
93
|
+
* @returns Result containing validated pattern or validation error
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const result = buildPattern(
|
|
98
|
+
* directive,
|
|
99
|
+
* codeSnippet,
|
|
100
|
+
* exports,
|
|
101
|
+
* '/project/src/utils.ts',
|
|
102
|
+
* '/project',
|
|
103
|
+
* tagRegistry
|
|
104
|
+
* );
|
|
105
|
+
*
|
|
106
|
+
* if (result.ok) {
|
|
107
|
+
* console.log(result.value.id); // 'pattern-a1b2c3d4'
|
|
108
|
+
* console.log(result.value.source.file); // 'src/utils.ts'
|
|
109
|
+
* }
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export function buildPattern(directive, code, exports, filePath, baseDir, registry) {
|
|
113
|
+
const relativePath = path.relative(baseDir, filePath);
|
|
114
|
+
const id = asPatternId(generatePatternId(relativePath, directive.position.startLine));
|
|
115
|
+
const name = inferPatternName(directive, exports, registry);
|
|
116
|
+
const category = asCategoryName(inferCategory(directive.tags, registry));
|
|
117
|
+
// Shape extraction: both @architect-extract-shapes (pattern-level) and
|
|
118
|
+
// @architect-shape (declaration-level) contribute to extractedShapes.
|
|
119
|
+
// Read file once for both paths.
|
|
120
|
+
let extractedShapes;
|
|
121
|
+
const extractionWarnings = [];
|
|
122
|
+
// Only TypeScript files can have shapes
|
|
123
|
+
if (filePath.endsWith('.ts') || filePath.endsWith('.tsx')) {
|
|
124
|
+
const jsx = filePath.endsWith('.tsx');
|
|
125
|
+
let sourceContent;
|
|
126
|
+
try {
|
|
127
|
+
sourceContent = fs.readFileSync(filePath, 'utf-8');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
extractionWarnings.push(`[shape-extraction] Failed to read file: ${filePath} - ${error instanceof Error ? error.message : String(error)}`);
|
|
131
|
+
}
|
|
132
|
+
// Path 1: Existing @architect-extract-shapes tag processing
|
|
133
|
+
if (sourceContent !== undefined &&
|
|
134
|
+
directive.extractShapes !== undefined &&
|
|
135
|
+
directive.extractShapes.length > 0) {
|
|
136
|
+
const shapeResult = processExtractShapesTag(sourceContent, directive.extractShapes.join(', '), { jsx });
|
|
137
|
+
extractedShapes = shapeResult.shapes;
|
|
138
|
+
extractionWarnings.push(...shapeResult.warnings);
|
|
139
|
+
}
|
|
140
|
+
// Path 2: Declaration-level @architect-shape discovery
|
|
141
|
+
// Performance note: when both paths fire, sourceCode is parsed by typescript-estree
|
|
142
|
+
// twice (once in processExtractShapesTag, once in discoverTaggedShapes). Acceptable
|
|
143
|
+
// for v1 — future optimization could accept a pre-parsed AST.
|
|
144
|
+
if (sourceContent?.includes('architect-shape') === true) {
|
|
145
|
+
const taggedResult = discoverTaggedShapes(sourceContent, { jsx });
|
|
146
|
+
if (taggedResult.ok && taggedResult.value.shapes.length > 0) {
|
|
147
|
+
const existingByName = new Map((extractedShapes ?? []).map((s) => [s.name, s]));
|
|
148
|
+
const newShapes = taggedResult.value.shapes.filter((s) => !existingByName.has(s.name));
|
|
149
|
+
// Merge group and includes from tagged shapes onto existing Path 1 shapes
|
|
150
|
+
for (const tagged of taggedResult.value.shapes) {
|
|
151
|
+
const existing = existingByName.get(tagged.name);
|
|
152
|
+
if (existing !== undefined) {
|
|
153
|
+
if (tagged.group !== undefined) {
|
|
154
|
+
existing.group = tagged.group;
|
|
155
|
+
}
|
|
156
|
+
if (tagged.includes !== undefined) {
|
|
157
|
+
existing.includes = tagged.includes;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
extractedShapes = [...(extractedShapes ?? []), ...newShapes];
|
|
162
|
+
extractionWarnings.push(...taggedResult.value.warnings);
|
|
163
|
+
}
|
|
164
|
+
else if (!taggedResult.ok) {
|
|
165
|
+
extractionWarnings.push(`[shape-discovery] ${taggedResult.error.message}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (directive.extractShapes !== undefined && directive.extractShapes.length > 0) {
|
|
170
|
+
// Non-TS file with extract-shapes tag — non-TS extraction path
|
|
171
|
+
try {
|
|
172
|
+
const sourceContent = fs.readFileSync(filePath, 'utf-8');
|
|
173
|
+
const shapeResult = processExtractShapesTag(sourceContent, directive.extractShapes.join(', '));
|
|
174
|
+
extractedShapes = shapeResult.shapes;
|
|
175
|
+
extractionWarnings.push(...shapeResult.warnings);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
extractionWarnings.push(`[shape-extraction] Failed to read file: ${filePath} - ${error instanceof Error ? error.message : String(error)}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Note: extractionWarnings are collected but currently not surfaced
|
|
182
|
+
// Future enhancement: add warnings field to ExtractedPattern schema
|
|
183
|
+
// Build pattern object
|
|
184
|
+
const pattern = {
|
|
185
|
+
id,
|
|
186
|
+
name,
|
|
187
|
+
category,
|
|
188
|
+
directive,
|
|
189
|
+
code,
|
|
190
|
+
source: {
|
|
191
|
+
file: asSourceFilePath(relativePath),
|
|
192
|
+
lines: [directive.position.startLine, directive.position.endLine],
|
|
193
|
+
},
|
|
194
|
+
exports: [...exports],
|
|
195
|
+
extractedAt: new Date().toISOString(),
|
|
196
|
+
// Include optional fields only if present in directive
|
|
197
|
+
...(directive.patternName !== undefined && { patternName: directive.patternName }),
|
|
198
|
+
...(directive.status !== undefined && { status: directive.status }),
|
|
199
|
+
...(directive.isCore === true && { isCore: directive.isCore }),
|
|
200
|
+
...(directive.useCases !== undefined &&
|
|
201
|
+
directive.useCases.length > 0 && { useCases: directive.useCases }),
|
|
202
|
+
...(directive.whenToUse !== undefined && { whenToUse: directive.whenToUse }),
|
|
203
|
+
...(directive.uses !== undefined && directive.uses.length > 0 && { uses: directive.uses }),
|
|
204
|
+
...(directive.usedBy !== undefined &&
|
|
205
|
+
directive.usedBy.length > 0 && { usedBy: directive.usedBy }),
|
|
206
|
+
// Roadmap integration fields
|
|
207
|
+
...(directive.phase !== undefined && { phase: directive.phase }),
|
|
208
|
+
...(directive.brief !== undefined && { brief: directive.brief }),
|
|
209
|
+
...(directive.dependsOn !== undefined &&
|
|
210
|
+
directive.dependsOn.length > 0 && { dependsOn: directive.dependsOn }),
|
|
211
|
+
...(directive.enables !== undefined &&
|
|
212
|
+
directive.enables.length > 0 && { enables: directive.enables }),
|
|
213
|
+
// UML-inspired relationship fields (PatternRelationshipModel)
|
|
214
|
+
...(directive.implements !== undefined &&
|
|
215
|
+
directive.implements.length > 0 && { implementsPatterns: directive.implements }),
|
|
216
|
+
...(directive.extends !== undefined && { extendsPattern: directive.extends }),
|
|
217
|
+
// Cross-reference and API navigation fields (PatternRelationshipModel enhancement)
|
|
218
|
+
...(directive.seeAlso !== undefined &&
|
|
219
|
+
directive.seeAlso.length > 0 && { seeAlso: directive.seeAlso }),
|
|
220
|
+
...(directive.apiRef !== undefined &&
|
|
221
|
+
directive.apiRef.length > 0 && { apiRef: directive.apiRef }),
|
|
222
|
+
// Design session stub metadata fields
|
|
223
|
+
...(directive.target !== undefined && { targetPath: directive.target }),
|
|
224
|
+
...(directive.since !== undefined && { since: directive.since }),
|
|
225
|
+
// Architecture diagram generation fields
|
|
226
|
+
...(directive.archRole !== undefined && { archRole: directive.archRole }),
|
|
227
|
+
...(directive.archContext !== undefined && { archContext: directive.archContext }),
|
|
228
|
+
...(directive.archLayer !== undefined && { archLayer: directive.archLayer }),
|
|
229
|
+
...(directive.include !== undefined &&
|
|
230
|
+
directive.include.length > 0 && { include: directive.include }),
|
|
231
|
+
...(directive.claudeModule !== undefined && { claudeModule: directive.claudeModule }),
|
|
232
|
+
...(directive.claudeSection !== undefined && { claudeSection: directive.claudeSection }),
|
|
233
|
+
...(directive.claudeTags !== undefined &&
|
|
234
|
+
directive.claudeTags.length > 0 && { claudeTags: directive.claudeTags }),
|
|
235
|
+
// PRD metadata fields
|
|
236
|
+
...(directive.productArea !== undefined && { productArea: directive.productArea }),
|
|
237
|
+
// Shape extraction fields (extracted from source file when @architect-extract-shapes present)
|
|
238
|
+
...(extractedShapes && extractedShapes.length > 0 && { extractedShapes }),
|
|
239
|
+
// Convention tags for reference document generation
|
|
240
|
+
...(directive.convention !== undefined &&
|
|
241
|
+
directive.convention.length > 0 && { convention: directive.convention }),
|
|
242
|
+
};
|
|
243
|
+
// Validate against schema (schema-first enforcement)
|
|
244
|
+
const validation = ExtractedPatternSchema.safeParse(pattern);
|
|
245
|
+
if (!validation.success) {
|
|
246
|
+
const errorMessages = validation.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`);
|
|
247
|
+
const error = createPatternValidationError(asSourceFilePath(relativePath), name, 'Pattern validation failed', errorMessages);
|
|
248
|
+
return Result.err(error);
|
|
249
|
+
}
|
|
250
|
+
return Result.ok(validation.data);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Infer pattern name from directive or exports
|
|
254
|
+
*
|
|
255
|
+
* Uses fallback chain:
|
|
256
|
+
* 1. Explicit pattern tag value (highest priority)
|
|
257
|
+
* 2. First line of description (if not a tag)
|
|
258
|
+
* 3. First export name
|
|
259
|
+
* 4. Generated from primary tag
|
|
260
|
+
*
|
|
261
|
+
* @param directive - Parsed JSDoc directive
|
|
262
|
+
* @param exports - Exported symbols from code block
|
|
263
|
+
* @param registry - Tag registry for prefix-aware tag stripping
|
|
264
|
+
* @returns Inferred pattern name
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* ```typescript
|
|
268
|
+
* // From explicit pattern tag (highest priority)
|
|
269
|
+
* const name0 = inferPatternName(
|
|
270
|
+
* { patternName: 'Decider Pattern', description: 'Some description', tags: [...] },
|
|
271
|
+
* [],
|
|
272
|
+
* registry
|
|
273
|
+
* );
|
|
274
|
+
* console.log(name0); // 'Decider Pattern'
|
|
275
|
+
*
|
|
276
|
+
* // From description
|
|
277
|
+
* const name1 = inferPatternName(
|
|
278
|
+
* { description: 'User Authentication\n...', tags: [...] },
|
|
279
|
+
* [],
|
|
280
|
+
* registry
|
|
281
|
+
* );
|
|
282
|
+
* console.log(name1); // 'User Authentication'
|
|
283
|
+
*
|
|
284
|
+
* // From export
|
|
285
|
+
* const name2 = inferPatternName(
|
|
286
|
+
* { description: '@architect-core', tags: [...] },
|
|
287
|
+
* [{ name: 'createUser', type: 'function' }],
|
|
288
|
+
* registry
|
|
289
|
+
* );
|
|
290
|
+
* console.log(name2); // 'createUser'
|
|
291
|
+
*
|
|
292
|
+
* // From tag
|
|
293
|
+
* const name3 = inferPatternName(
|
|
294
|
+
* { description: '', tags: ['@architect-domain-auth'] },
|
|
295
|
+
* [],
|
|
296
|
+
* registry
|
|
297
|
+
* );
|
|
298
|
+
* console.log(name3); // 'domain-pattern'
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
301
|
+
export function inferPatternName(directive, exports, registry) {
|
|
302
|
+
// Priority 1: Explicit pattern tag value
|
|
303
|
+
if (directive.patternName) {
|
|
304
|
+
return directive.patternName;
|
|
305
|
+
}
|
|
306
|
+
// Priority 2: Try to extract name from first line of description
|
|
307
|
+
const lines = directive.description.split('\n');
|
|
308
|
+
const firstLine = lines[0];
|
|
309
|
+
if (firstLine?.trim() && !firstLine.trim().startsWith('@')) {
|
|
310
|
+
// Strip markdown header prefixes (##, ###, etc.)
|
|
311
|
+
const cleanedName = firstLine.trim().replace(/^#+\s*/, '');
|
|
312
|
+
if (cleanedName) {
|
|
313
|
+
return cleanedName;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Fall back to first export name
|
|
317
|
+
const firstExport = exports[0];
|
|
318
|
+
if (firstExport) {
|
|
319
|
+
return firstExport.name;
|
|
320
|
+
}
|
|
321
|
+
// Last resort: generate from tags using registry prefix
|
|
322
|
+
const tagPrefix = registry.tagPrefix;
|
|
323
|
+
const firstTag = directive.tags[0];
|
|
324
|
+
const primaryTag = firstTag?.replace(tagPrefix, '') ?? 'unknown';
|
|
325
|
+
return `${primaryTag}-pattern`;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Infer category from @architect-* tags using priority system
|
|
329
|
+
*
|
|
330
|
+
* Categories are selected based on priority order:
|
|
331
|
+
* domain > arch > infra > validation > testing > performance > security > core
|
|
332
|
+
*
|
|
333
|
+
* @param tags - Array of @architect-* tags
|
|
334
|
+
* @returns Inferred category string
|
|
335
|
+
*
|
|
336
|
+
* @example
|
|
337
|
+
* ```typescript
|
|
338
|
+
* // Priority-based selection
|
|
339
|
+
* const cat1 = inferCategory([
|
|
340
|
+
* '@architect-core',
|
|
341
|
+
* '@architect-domain-auth'
|
|
342
|
+
* ]);
|
|
343
|
+
* console.log(cat1); // 'domain' (higher priority than 'core')
|
|
344
|
+
*
|
|
345
|
+
* // From first tag
|
|
346
|
+
* const cat2 = inferCategory(['@architect-validation-zod']);
|
|
347
|
+
* console.log(cat2); // 'validation'
|
|
348
|
+
*
|
|
349
|
+
* // No tags
|
|
350
|
+
* const cat3 = inferCategory([]);
|
|
351
|
+
* console.log(cat3); // 'uncategorized'
|
|
352
|
+
* ```
|
|
353
|
+
*/
|
|
354
|
+
export function inferCategory(tags, registry) {
|
|
355
|
+
// Build priority map from registry (includes aliases)
|
|
356
|
+
// Also track canonical tag for each alias
|
|
357
|
+
const priorityMap = new Map();
|
|
358
|
+
const canonicalMap = new Map(); // Maps alias → canonical tag
|
|
359
|
+
for (const cat of registry.categories) {
|
|
360
|
+
priorityMap.set(cat.tag, cat.priority);
|
|
361
|
+
canonicalMap.set(cat.tag, cat.tag); // Canonical tags map to themselves
|
|
362
|
+
// Include aliases with same priority, mapping to canonical tag
|
|
363
|
+
for (const alias of cat.aliases) {
|
|
364
|
+
priorityMap.set(alias, cat.priority);
|
|
365
|
+
canonicalMap.set(alias, cat.tag); // Alias maps to canonical tag
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// Extract category names from tags (remove prefix)
|
|
369
|
+
const prefix = registry.tagPrefix;
|
|
370
|
+
const categoryTags = [];
|
|
371
|
+
for (const tag of tags) {
|
|
372
|
+
if (!tag.startsWith(prefix))
|
|
373
|
+
continue;
|
|
374
|
+
// Remove prefix to get tag content
|
|
375
|
+
const withoutPrefix = tag.substring(prefix.length);
|
|
376
|
+
// Find ALL matching categories in this tag
|
|
377
|
+
// This handles cases like "@architect-utils-validation" which contains both "utils" and "validation"
|
|
378
|
+
const matches = [];
|
|
379
|
+
// Check for exact match first
|
|
380
|
+
if (priorityMap.has(withoutPrefix)) {
|
|
381
|
+
matches.push(withoutPrefix);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// Check all possible contiguous subsequences for category matches
|
|
385
|
+
// e.g., for "utils-validation" check: "utils-validation", "utils", "validation"
|
|
386
|
+
const parts = withoutPrefix.split('-');
|
|
387
|
+
// Try all contiguous subsequences from longest to shortest
|
|
388
|
+
for (let len = parts.length; len > 0; len--) {
|
|
389
|
+
for (let start = 0; start <= parts.length - len; start++) {
|
|
390
|
+
const candidate = parts.slice(start, start + len).join('-');
|
|
391
|
+
if (priorityMap.has(candidate)) {
|
|
392
|
+
matches.push(candidate);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// Add all matches to categoryTags
|
|
398
|
+
categoryTags.push(...matches);
|
|
399
|
+
}
|
|
400
|
+
// Find tag with highest priority (lowest number)
|
|
401
|
+
// Use canonical tags (normalize aliases)
|
|
402
|
+
let selectedCategory = null;
|
|
403
|
+
let highestPriority = Infinity;
|
|
404
|
+
for (const categoryTag of categoryTags) {
|
|
405
|
+
const priority = priorityMap.get(categoryTag);
|
|
406
|
+
if (priority !== undefined && priority < highestPriority) {
|
|
407
|
+
highestPriority = priority;
|
|
408
|
+
// Use canonical tag (normalizes aliases like "infrastructure" → "infra")
|
|
409
|
+
selectedCategory = canonicalMap.get(categoryTag) ?? categoryTag;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// If found by priority, return it
|
|
413
|
+
if (selectedCategory !== null) {
|
|
414
|
+
return selectedCategory;
|
|
415
|
+
}
|
|
416
|
+
// Fallback: Extract category from first tag
|
|
417
|
+
const firstTag = tags[0];
|
|
418
|
+
if (firstTag?.startsWith(prefix) === true) {
|
|
419
|
+
const withoutPrefix = firstTag.substring(prefix.length);
|
|
420
|
+
const parts = withoutPrefix.split('-');
|
|
421
|
+
const firstPart = parts[0];
|
|
422
|
+
if (firstPart) {
|
|
423
|
+
return firstPart;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return 'uncategorized';
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Check if directive has specific aggregation tag
|
|
430
|
+
*
|
|
431
|
+
* Generic helper for checking any aggregation tag. Replaces individual
|
|
432
|
+
* hasOverviewTag/hasDecisionTag/hasIntroTag helpers with a unified approach.
|
|
433
|
+
*
|
|
434
|
+
* @param tags - Directive tags to check
|
|
435
|
+
* @param aggregationTagName - Name of aggregation tag (e.g., "overview", "decision", "intro")
|
|
436
|
+
* @param registry - Tag registry
|
|
437
|
+
* @returns True if directive has the specified aggregation tag
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* hasAggregationTag(['@architect-core', '@architect-overview'], "overview", registry); // true
|
|
442
|
+
* hasAggregationTag(['@architect-core'], "overview", registry); // false
|
|
443
|
+
* hasAggregationTag(['@architect-arch', '@architect-decision'], "decision", registry); // true
|
|
444
|
+
* ```
|
|
445
|
+
*/
|
|
446
|
+
export function hasAggregationTag(tags, aggregationTagName, registry) {
|
|
447
|
+
const aggregationTag = registry.aggregationTags.find((t) => t.tag === aggregationTagName);
|
|
448
|
+
if (!aggregationTag)
|
|
449
|
+
return false;
|
|
450
|
+
const fullTag = `${registry.tagPrefix}${aggregationTag.tag}`;
|
|
451
|
+
return tags.some((t) => t === fullTag);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Extract aggregation tags from pattern tags
|
|
455
|
+
*
|
|
456
|
+
* Identifies which aggregated documents a pattern should appear in.
|
|
457
|
+
* Patterns can appear in multiple documents if they have multiple aggregation tags.
|
|
458
|
+
*
|
|
459
|
+
* @param tags - Array of @architect-* tags
|
|
460
|
+
* @param registry - Tag registry for aggregation tag lookup
|
|
461
|
+
* @returns Object indicating which aggregated docs to include pattern in
|
|
462
|
+
*
|
|
463
|
+
* @example
|
|
464
|
+
* ```typescript
|
|
465
|
+
* // Pattern with both overview and decision tags
|
|
466
|
+
* getAggregationTags(['@architect-overview', '@architect-decision'], registry);
|
|
467
|
+
* // { overview: true, decision: true, intro: false }
|
|
468
|
+
*
|
|
469
|
+
* // Pattern with only core tag (no aggregation)
|
|
470
|
+
* getAggregationTags(['@architect-core'], registry);
|
|
471
|
+
* // { overview: false, decision: false, intro: false }
|
|
472
|
+
* ```
|
|
473
|
+
*/
|
|
474
|
+
export function getAggregationTags(tags, registry) {
|
|
475
|
+
return {
|
|
476
|
+
overview: hasAggregationTag(tags, 'overview', registry),
|
|
477
|
+
decision: hasAggregationTag(tags, 'decision', registry),
|
|
478
|
+
intro: hasAggregationTag(tags, 'intro', registry),
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=doc-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-extractor.js","sourceRoot":"","sources":["../../src/extractor/doc-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-extractor
|
|
4
|
+
* @architect-pattern DualSourceExtractor
|
|
5
|
+
* @architect-status completed
|
|
6
|
+
* @architect-uses DocExtractor, GherkinExtractor, GherkinScanner
|
|
7
|
+
* @architect-used-by Orchestrator
|
|
8
|
+
* @architect-arch-role service
|
|
9
|
+
* @architect-arch-context extractor
|
|
10
|
+
* @architect-arch-layer application
|
|
11
|
+
*
|
|
12
|
+
* ## DualSourceExtractor - Compose Pattern Data from Code + Features
|
|
13
|
+
*
|
|
14
|
+
* Extracts pattern metadata from both TypeScript code stubs (@architect-*)
|
|
15
|
+
* and Gherkin feature files (@architect-*), validates consistency,
|
|
16
|
+
* and composes unified pattern data for documentation generation.
|
|
17
|
+
*
|
|
18
|
+
* ### When to Use
|
|
19
|
+
*
|
|
20
|
+
* - When implementing USDP Pattern 2 (Standard) or higher
|
|
21
|
+
* - When you have both code stubs AND timeline features
|
|
22
|
+
* - When generating artifacts that need both timeless and temporal data
|
|
23
|
+
* - When validating cross-source consistency (pattern name, phase alignment)
|
|
24
|
+
*
|
|
25
|
+
* ### Key Concepts
|
|
26
|
+
*
|
|
27
|
+
* - **Code Source**: @architect-* tags define timeless pattern graph
|
|
28
|
+
* - **Feature Source**: @architect-* tags add temporal process metadata
|
|
29
|
+
* - **Cross-Validation**: Pattern name + phase must match across sources
|
|
30
|
+
* - **Deliverables**: Parsed from Gherkin Background tables in features
|
|
31
|
+
*/
|
|
32
|
+
import type { ExtractedPattern } from '../types/index.js';
|
|
33
|
+
import { type ScannedGherkinFile, type ProcessMetadata, type Deliverable, type CrossValidationError, type ValidationSummary } from '../validation-schemas/index.js';
|
|
34
|
+
export type { ProcessMetadata, Deliverable, CrossValidationError, ValidationSummary };
|
|
35
|
+
/**
|
|
36
|
+
* Results from dual-source extraction
|
|
37
|
+
*
|
|
38
|
+
* Contains patterns successfully matched across sources, orphaned
|
|
39
|
+
* code/feature patterns, and cross-validation errors.
|
|
40
|
+
*/
|
|
41
|
+
export interface DualSourceResults {
|
|
42
|
+
/** Patterns with both code + process data */
|
|
43
|
+
readonly patterns: readonly DualSourcePattern[];
|
|
44
|
+
/** Patterns from code only (no matching feature) */
|
|
45
|
+
readonly codeOnly: readonly ExtractedPattern[];
|
|
46
|
+
/** Features without matching code stubs */
|
|
47
|
+
readonly featureOnly: readonly ProcessMetadata[];
|
|
48
|
+
/** Cross-validation errors */
|
|
49
|
+
readonly validationErrors: readonly CrossValidationError[];
|
|
50
|
+
/** Non-fatal warnings (e.g., pattern name collisions) */
|
|
51
|
+
readonly warnings: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Combined pattern data from code + features
|
|
55
|
+
*
|
|
56
|
+
* When multiple code files define the same pattern (e.g., ServiceIndependence
|
|
57
|
+
* with ECST and Reservation sub-patterns), they are merged into a single
|
|
58
|
+
* dual-source pattern with the `sources` array containing all variants.
|
|
59
|
+
*/
|
|
60
|
+
export interface DualSourcePattern extends ExtractedPattern {
|
|
61
|
+
/** Process metadata from feature file (optional) */
|
|
62
|
+
readonly process?: ProcessMetadata;
|
|
63
|
+
/** Deliverables from feature Background table (optional) */
|
|
64
|
+
readonly deliverables?: readonly Deliverable[];
|
|
65
|
+
/**
|
|
66
|
+
* Multiple source patterns when there's a name collision (optional)
|
|
67
|
+
* Present when multiple code files use the same @architect-pattern name
|
|
68
|
+
*/
|
|
69
|
+
readonly sources?: readonly ExtractedPattern[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract process metadata from Gherkin feature tags
|
|
73
|
+
*
|
|
74
|
+
* Uses schema validation instead of type assertions to ensure data integrity.
|
|
75
|
+
* Returns null if required tags are missing OR if validation fails.
|
|
76
|
+
*
|
|
77
|
+
* @param feature - Scanned Gherkin feature
|
|
78
|
+
* @returns Process metadata or null if missing required tags or validation fails
|
|
79
|
+
*/
|
|
80
|
+
export declare function extractProcessMetadata(feature: ScannedGherkinFile): ProcessMetadata | null;
|
|
81
|
+
/**
|
|
82
|
+
* Extract deliverables from Gherkin Background table
|
|
83
|
+
*
|
|
84
|
+
* Parses Background section looking for DataTables with a "Deliverable" column.
|
|
85
|
+
* Expected table format:
|
|
86
|
+
* | Deliverable | Status | Tests | Location |
|
|
87
|
+
*
|
|
88
|
+
* Optional columns for extended tracking:
|
|
89
|
+
* | Deliverable | Status | Tests | Location | Finding | Release |
|
|
90
|
+
*
|
|
91
|
+
* - **Finding**: Review traceability ID (e.g., "CODE-001")
|
|
92
|
+
* - **Release**: Semver version for changelog grouping (e.g., "v0.2.0")
|
|
93
|
+
*
|
|
94
|
+
* @param feature - Scanned Gherkin feature with optional background
|
|
95
|
+
* @returns Array of deliverables or empty array if no table found
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```gherkin
|
|
99
|
+
* Background: Deliverables
|
|
100
|
+
* Given the following deliverables:
|
|
101
|
+
* | Deliverable | Status | Tests | Location | Finding | Release |
|
|
102
|
+
* | Fix parseArgs() call | Done | Yes | src/cli/generate-docs.ts | CODE-001 | v0.2.0 |
|
|
103
|
+
* | Update README.md | Done | No | README.md | DOC-001 | v0.2.0 |
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function extractDeliverables(feature: ScannedGherkinFile): readonly Deliverable[];
|
|
107
|
+
/**
|
|
108
|
+
* Combine patterns from code and features into dual-source patterns
|
|
109
|
+
*
|
|
110
|
+
* Validates that pattern names and phases match across sources.
|
|
111
|
+
* Creates unified pattern objects with both code and process metadata.
|
|
112
|
+
*
|
|
113
|
+
* **Pattern Name Collisions:**
|
|
114
|
+
* When multiple code files use the same `@architect-pattern` name (e.g.,
|
|
115
|
+
* ServiceIndependence with ECST and Reservation sub-patterns), they are
|
|
116
|
+
* automatically merged:
|
|
117
|
+
* - Categories, dependencies, and enables are unioned across all sources
|
|
118
|
+
* - Primary pattern (first in array) provides base metadata
|
|
119
|
+
* - All source patterns are preserved in the `sources` array
|
|
120
|
+
* - Console warning is emitted for visibility
|
|
121
|
+
*
|
|
122
|
+
* @param codePatterns - Patterns extracted from TypeScript code
|
|
123
|
+
* @param featureFiles - Scanned Gherkin feature files
|
|
124
|
+
* @returns Dual-source extraction results
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* // Extract from both sources
|
|
129
|
+
* const codeScan = await scanPatterns({ patterns: 'packages/**\/*.ts' });
|
|
130
|
+
* const featureScan = await scanGherkinFiles({ patterns: 'tests/features/**\/*.feature' });
|
|
131
|
+
*
|
|
132
|
+
* if (codeScan.ok && featureScan.ok) {
|
|
133
|
+
* const codeExtraction = extractPatterns(codeScan.value.files, '/project');
|
|
134
|
+
* const dualSource = combineSources(codeExtraction.patterns, featureScan.value.files);
|
|
135
|
+
*
|
|
136
|
+
* console.log(`Combined: ${dualSource.patterns.length}`);
|
|
137
|
+
* console.log(`Code-only: ${dualSource.codeOnly.length}`);
|
|
138
|
+
* console.log(`Feature-only: ${dualSource.featureOnly.length}`);
|
|
139
|
+
* console.log(`Validation errors: ${dualSource.validationErrors.length}`);
|
|
140
|
+
*
|
|
141
|
+
* // Check for collisions
|
|
142
|
+
* for (const pattern of dualSource.patterns) {
|
|
143
|
+
* if (pattern.sources) {
|
|
144
|
+
* console.log(`${pattern.patternName} has ${pattern.sources.length} implementations`);
|
|
145
|
+
* }
|
|
146
|
+
* }
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export declare function combineSources(codePatterns: readonly ExtractedPattern[], featureFiles: readonly ScannedGherkinFile[]): DualSourceResults;
|
|
151
|
+
/**
|
|
152
|
+
* Validate dual-source consistency
|
|
153
|
+
*
|
|
154
|
+
* Checks that patterns are properly aligned across sources.
|
|
155
|
+
* Reports code stubs without features and features without code.
|
|
156
|
+
*
|
|
157
|
+
* @param results - Dual-source extraction results
|
|
158
|
+
* @returns Validation summary
|
|
159
|
+
*/
|
|
160
|
+
export declare function validateDualSource(results: DualSourceResults): ValidationSummary;
|
|
161
|
+
//# sourceMappingURL=dual-source-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dual-source-extractor.d.ts","sourceRoot":"","sources":["../../src/extractor/dual-source-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,gCAAgC,CAAC;AAIxC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACjD,8BAA8B;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAChD;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,IAAI,CA4E1F;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,WAAW,EAAE,CA8EvF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAC1C,iBAAiB,CAuHnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CA6BhF"}
|