@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,543 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-extractor
|
|
4
|
+
* @architect-pattern GherkinExtractor
|
|
5
|
+
* @architect-status completed
|
|
6
|
+
* @architect-implements GherkinRulesSupport
|
|
7
|
+
* @architect-uses GherkinTypes, GherkinASTParser
|
|
8
|
+
* @architect-used-by DualSourceExtractor, Orchestrator
|
|
9
|
+
* @architect-arch-role service
|
|
10
|
+
* @architect-arch-context extractor
|
|
11
|
+
* @architect-arch-layer application
|
|
12
|
+
*
|
|
13
|
+
* ## GherkinExtractor - Convert Feature Files to Pattern Documentation
|
|
14
|
+
*
|
|
15
|
+
* Transforms scanned Gherkin feature files into ExtractedPattern objects
|
|
16
|
+
* for inclusion in generated documentation. Maps feature tags, descriptions,
|
|
17
|
+
* and scenarios to pattern metadata.
|
|
18
|
+
*
|
|
19
|
+
* ### When to Use
|
|
20
|
+
*
|
|
21
|
+
* - When building multi-source documentation (TypeScript + Gherkin)
|
|
22
|
+
* - When converting acceptance criteria to pattern documentation
|
|
23
|
+
* - When defining roadmap patterns in .feature files before implementation
|
|
24
|
+
*
|
|
25
|
+
* ### Key Concepts
|
|
26
|
+
*
|
|
27
|
+
* - **Feature → Pattern**: Feature name becomes pattern name
|
|
28
|
+
* - **Tags → Metadata**: @pattern:Name, @phase:N map to pattern fields
|
|
29
|
+
* - **Scenarios → Use Cases**: Acceptance criteria become "When to Use" examples
|
|
30
|
+
*/
|
|
31
|
+
// TODO: Abstract filesystem operations for future Convex migration.
|
|
32
|
+
// Direct fs/path usage should be moved to injected interface (via GherkinExtractorConfig)
|
|
33
|
+
// or deferred to CLI-layer orchestration. See PR-79 comment #042.
|
|
34
|
+
import * as fs from 'node:fs';
|
|
35
|
+
import * as path from 'node:path';
|
|
36
|
+
import { ExtractedPatternSchema, } from '../validation-schemas/extracted-pattern.js';
|
|
37
|
+
import { extractPatternTags } from '../scanner/gherkin-ast-parser.js';
|
|
38
|
+
import { asPatternId, asCategoryName, asSourceFilePath, asDirectiveTag } from '../types/branded.js';
|
|
39
|
+
import { inferFeatureLayer } from './layer-inference.js';
|
|
40
|
+
import { extractDeliverables } from './dual-source-extractor.js';
|
|
41
|
+
import { createGherkinPatternValidationError, } from '../types/errors.js';
|
|
42
|
+
import { generatePatternId } from '../utils/index.js';
|
|
43
|
+
import { getPatternName } from '../api/pattern-helpers.js';
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// Constants
|
|
46
|
+
// =============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Semantic tags for scenario categorization.
|
|
49
|
+
*
|
|
50
|
+
* These tags identify the nature of a scenario (e.g., happy-path, validation)
|
|
51
|
+
* and are extracted from scenario tags during pattern extraction.
|
|
52
|
+
*/
|
|
53
|
+
export const SEMANTIC_SCENARIO_TAGS = [
|
|
54
|
+
'happy-path',
|
|
55
|
+
'validation',
|
|
56
|
+
'business-failure',
|
|
57
|
+
'business-rule',
|
|
58
|
+
'compensation',
|
|
59
|
+
'idempotency',
|
|
60
|
+
'expiration',
|
|
61
|
+
'workflow-state',
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* Assign a property to an object only if the value is defined (not undefined/null).
|
|
65
|
+
*
|
|
66
|
+
* Performance optimization: Avoids creating intermediate objects from conditional spreads.
|
|
67
|
+
* Instead of `...(x && { field: x })` which creates a temporary object,
|
|
68
|
+
* this directly assigns to the target object.
|
|
69
|
+
*
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
function assignIfDefined(obj, key, value) {
|
|
73
|
+
if (value !== undefined && value !== null) {
|
|
74
|
+
obj[key] = value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Assign a property to an object only if the array is non-empty.
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
function assignIfNonEmpty(obj, key, arr) {
|
|
83
|
+
if (arr && arr.length > 0) {
|
|
84
|
+
obj[key] = arr;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Shared Gherkin raw-pattern builder.
|
|
89
|
+
*
|
|
90
|
+
* Keeps the sync and async extraction paths aligned so metadata fields
|
|
91
|
+
* do not drift when one path is updated independently.
|
|
92
|
+
*/
|
|
93
|
+
function buildGherkinRawPattern(input) {
|
|
94
|
+
const { relativePath, filePath, patternId, patternName, primaryCategory, feature, metadata, whenToUse, scenarios, rules, deliverables, behaviorFile, behaviorFileVerified, } = input;
|
|
95
|
+
const rawPattern = {
|
|
96
|
+
id: patternId,
|
|
97
|
+
name: patternName,
|
|
98
|
+
category: asCategoryName(primaryCategory),
|
|
99
|
+
directive: {
|
|
100
|
+
tags: feature.tags.map((tag) => asDirectiveTag(`@architect-${tag}`)),
|
|
101
|
+
description: feature.description,
|
|
102
|
+
examples: [],
|
|
103
|
+
position: { startLine: feature.line, endLine: feature.line },
|
|
104
|
+
status: metadata.status,
|
|
105
|
+
phase: metadata.phase,
|
|
106
|
+
},
|
|
107
|
+
code: '',
|
|
108
|
+
source: {
|
|
109
|
+
file: asSourceFilePath(relativePath),
|
|
110
|
+
lines: [feature.line, feature.line],
|
|
111
|
+
},
|
|
112
|
+
exports: [],
|
|
113
|
+
extractedAt: new Date().toISOString(),
|
|
114
|
+
};
|
|
115
|
+
assignIfDefined(rawPattern, 'patternName', metadata.pattern);
|
|
116
|
+
assignIfDefined(rawPattern, 'status', metadata.status);
|
|
117
|
+
assignIfDefined(rawPattern, 'phase', metadata.phase);
|
|
118
|
+
assignIfDefined(rawPattern, 'release', metadata.release);
|
|
119
|
+
assignIfDefined(rawPattern, 'brief', metadata.brief);
|
|
120
|
+
assignIfNonEmpty(rawPattern, 'dependsOn', metadata.dependsOn);
|
|
121
|
+
assignIfNonEmpty(rawPattern, 'enables', metadata.enables);
|
|
122
|
+
assignIfNonEmpty(rawPattern, 'implementsPatterns', metadata.implementsPatterns);
|
|
123
|
+
assignIfDefined(rawPattern, 'extendsPattern', metadata.extendsPattern);
|
|
124
|
+
assignIfDefined(rawPattern, 'targetPath', metadata.target);
|
|
125
|
+
assignIfDefined(rawPattern, 'since', metadata.since);
|
|
126
|
+
assignIfDefined(rawPattern, 'quarter', metadata.quarter);
|
|
127
|
+
assignIfDefined(rawPattern, 'completed', metadata.completed);
|
|
128
|
+
assignIfDefined(rawPattern, 'effort', metadata.effort);
|
|
129
|
+
assignIfDefined(rawPattern, 'effortActual', metadata.effortActual);
|
|
130
|
+
assignIfDefined(rawPattern, 'team', metadata.team);
|
|
131
|
+
assignIfDefined(rawPattern, 'workflow', metadata.workflow);
|
|
132
|
+
assignIfDefined(rawPattern, 'risk', metadata.risk);
|
|
133
|
+
assignIfDefined(rawPattern, 'priority', metadata.priority);
|
|
134
|
+
assignIfDefined(rawPattern, 'productArea', metadata.productArea);
|
|
135
|
+
assignIfDefined(rawPattern, 'userRole', metadata.userRole);
|
|
136
|
+
assignIfDefined(rawPattern, 'businessValue', metadata.businessValue);
|
|
137
|
+
assignIfDefined(rawPattern, 'level', metadata.level);
|
|
138
|
+
assignIfDefined(rawPattern, 'parent', metadata.parent);
|
|
139
|
+
assignIfNonEmpty(rawPattern, 'discoveredGaps', metadata.discoveredGaps);
|
|
140
|
+
assignIfNonEmpty(rawPattern, 'discoveredImprovements', metadata.discoveredImprovements);
|
|
141
|
+
assignIfNonEmpty(rawPattern, 'discoveredRisks', metadata.discoveredRisks);
|
|
142
|
+
assignIfNonEmpty(rawPattern, 'discoveredLearnings', metadata.discoveredLearnings);
|
|
143
|
+
assignIfNonEmpty(rawPattern, 'constraints', metadata.constraints);
|
|
144
|
+
assignIfDefined(rawPattern, 'adr', metadata.adr);
|
|
145
|
+
assignIfDefined(rawPattern, 'adrStatus', metadata.adrStatus);
|
|
146
|
+
assignIfDefined(rawPattern, 'adrCategory', metadata.adrCategory);
|
|
147
|
+
assignIfDefined(rawPattern, 'adrSupersedes', metadata.adrSupersedes);
|
|
148
|
+
assignIfDefined(rawPattern, 'adrSupersededBy', metadata.adrSupersededBy);
|
|
149
|
+
assignIfDefined(rawPattern, 'adrTheme', metadata.adrTheme);
|
|
150
|
+
assignIfDefined(rawPattern, 'adrLayer', metadata.adrLayer);
|
|
151
|
+
assignIfNonEmpty(rawPattern, 'convention', metadata.convention);
|
|
152
|
+
assignIfNonEmpty(rawPattern, 'include', metadata.include);
|
|
153
|
+
assignIfDefined(rawPattern, 'claudeModule', metadata.claudeModule);
|
|
154
|
+
assignIfDefined(rawPattern, 'claudeSection', metadata.claudeSection);
|
|
155
|
+
assignIfNonEmpty(rawPattern, 'claudeTags', metadata.claudeTags);
|
|
156
|
+
assignIfDefined(rawPattern, 'sequenceOrchestrator', metadata.sequenceOrchestrator);
|
|
157
|
+
assignIfNonEmpty(rawPattern, 'whenToUse', whenToUse);
|
|
158
|
+
assignIfNonEmpty(rawPattern, 'deliverables', deliverables);
|
|
159
|
+
if (scenarios.length > 0) {
|
|
160
|
+
rawPattern['scenarios'] = scenarios.map((scenario) => {
|
|
161
|
+
const scenarioRef = {
|
|
162
|
+
featureFile: relativePath,
|
|
163
|
+
featureName: feature.name,
|
|
164
|
+
featureDescription: feature.description,
|
|
165
|
+
scenarioName: scenario.name,
|
|
166
|
+
semanticTags: scenario.tags.filter((tag) => SEMANTIC_SCENARIO_TAGS.includes(tag)),
|
|
167
|
+
tags: scenario.tags,
|
|
168
|
+
layer: inferFeatureLayer(filePath),
|
|
169
|
+
line: scenario.line,
|
|
170
|
+
};
|
|
171
|
+
if (scenario.steps.length > 0) {
|
|
172
|
+
scenarioRef['steps'] = scenario.steps.map((step) => {
|
|
173
|
+
const stepObj = { keyword: step.keyword, text: step.text };
|
|
174
|
+
assignIfDefined(stepObj, 'dataTable', step.dataTable);
|
|
175
|
+
assignIfDefined(stepObj, 'docString', step.docString);
|
|
176
|
+
return stepObj;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return scenarioRef;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
assignIfDefined(rawPattern, 'behaviorFile', behaviorFile);
|
|
183
|
+
if (behaviorFileVerified !== undefined) {
|
|
184
|
+
rawPattern['behaviorFileVerified'] = behaviorFileVerified;
|
|
185
|
+
}
|
|
186
|
+
if (rules && rules.length > 0) {
|
|
187
|
+
rawPattern['rules'] = rules.map((rule) => {
|
|
188
|
+
const errorNames = rule.scenarios
|
|
189
|
+
.filter((s) => s.tags.some((t) => t === 'sequence-error'))
|
|
190
|
+
.map((s) => s.name);
|
|
191
|
+
return {
|
|
192
|
+
name: rule.name,
|
|
193
|
+
description: rule.description,
|
|
194
|
+
scenarioCount: rule.scenarios.length,
|
|
195
|
+
scenarioNames: rule.scenarios.map((s) => s.name),
|
|
196
|
+
...(rule.tags.length > 0 && { tags: rule.tags }),
|
|
197
|
+
...(errorNames.length > 0 && { errorScenarioNames: errorNames }),
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return rawPattern;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Extract patterns from scanned Gherkin feature files
|
|
205
|
+
*
|
|
206
|
+
* Converts feature file metadata into ExtractedPattern objects that can be
|
|
207
|
+
* merged with TypeScript-sourced patterns for unified documentation generation.
|
|
208
|
+
*
|
|
209
|
+
* Returns both successfully extracted patterns and validation errors for
|
|
210
|
+
* patterns that failed extraction. This enables partial success scenarios.
|
|
211
|
+
*
|
|
212
|
+
* @param scannedFiles - Array of scanned Gherkin files
|
|
213
|
+
* @param config - Extractor configuration (requires baseDir for relative paths)
|
|
214
|
+
* @returns Object containing extracted patterns and any validation errors
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* const scanResult = await scanGherkinFiles({
|
|
219
|
+
* patterns: 'tests/features/roadmap/**\/*.feature'
|
|
220
|
+
* });
|
|
221
|
+
*
|
|
222
|
+
* if (scanResult.ok) {
|
|
223
|
+
* const { patterns, errors } = extractPatternsFromGherkin(scanResult.value.files, {
|
|
224
|
+
* baseDir: process.cwd()
|
|
225
|
+
* });
|
|
226
|
+
* console.log(`${patterns.length} patterns extracted, ${errors.length} errors`);
|
|
227
|
+
* }
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
export function extractPatternsFromGherkin(scannedFiles, config) {
|
|
231
|
+
const patterns = [];
|
|
232
|
+
const errors = [];
|
|
233
|
+
const { baseDir } = config;
|
|
234
|
+
const scenariosAsUseCases = config.scenariosAsUseCases ?? true;
|
|
235
|
+
for (const file of scannedFiles) {
|
|
236
|
+
const { feature, scenarios, rules, filePath } = file;
|
|
237
|
+
// Convert absolute path to relative path from baseDir
|
|
238
|
+
const relativePath = path.relative(baseDir, filePath);
|
|
239
|
+
// Extract pattern metadata from feature tags
|
|
240
|
+
const metadata = extractPatternTags(feature.tags);
|
|
241
|
+
// Skip if no @architect opt-in marker (consistent with TypeScript requirement)
|
|
242
|
+
// The marker normalizes to 'architect' after stripping the @ prefix
|
|
243
|
+
const hasOptIn = feature.tags.some((tag) => tag === 'architect');
|
|
244
|
+
if (!hasOptIn) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
// Skip if no pattern tag (not a pattern definition)
|
|
248
|
+
if (!metadata.pattern) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
// Skip if no status tag (pattern reference for scenario mapping, not a pattern definition)
|
|
252
|
+
// Roadmap patterns MUST have @status:roadmap, @status:active, or @status:completed
|
|
253
|
+
if (!metadata.status) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
// Determine pattern name (from @pattern:Name tag or feature name)
|
|
257
|
+
const patternName = metadata.pattern || feature.name;
|
|
258
|
+
// Determine category (from category tags or default to first one)
|
|
259
|
+
const categories = metadata.categories ?? [];
|
|
260
|
+
const primaryCategory = categories[0] ?? 'ddd';
|
|
261
|
+
// Extract "When to Use" from scenarios if enabled
|
|
262
|
+
const whenToUse = [];
|
|
263
|
+
if (scenariosAsUseCases) {
|
|
264
|
+
for (const scenario of scenarios) {
|
|
265
|
+
// Only include scenarios tagged with @acceptance-criteria
|
|
266
|
+
if (scenario.tags.includes('acceptance-criteria')) {
|
|
267
|
+
whenToUse.push(`When ${scenario.name.toLowerCase()}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Create pattern ID from file path and line number (deterministic)
|
|
272
|
+
const patternId = asPatternId(generatePatternId(relativePath, feature.line));
|
|
273
|
+
// Extract deliverables from Background table
|
|
274
|
+
const deliverables = extractDeliverables(file);
|
|
275
|
+
// Infer and verify behavior file for traceability
|
|
276
|
+
let behaviorFile = metadata.behaviorFile;
|
|
277
|
+
let behaviorFileVerified;
|
|
278
|
+
if (!behaviorFile) {
|
|
279
|
+
// Infer from convention: timeline/phase-N-name.feature → behavior/name.feature
|
|
280
|
+
const inferred = inferBehaviorFilePath(relativePath);
|
|
281
|
+
if (inferred) {
|
|
282
|
+
behaviorFile = inferred;
|
|
283
|
+
// Verify file exists on disk
|
|
284
|
+
const absolutePath = path.join(baseDir, inferred);
|
|
285
|
+
behaviorFileVerified = fileExistsSync(absolutePath);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Verify explicit tag path exists
|
|
290
|
+
const absolutePath = path.join(baseDir, behaviorFile);
|
|
291
|
+
behaviorFileVerified = fileExistsSync(absolutePath);
|
|
292
|
+
}
|
|
293
|
+
const rawPattern = buildGherkinRawPattern({
|
|
294
|
+
relativePath,
|
|
295
|
+
filePath,
|
|
296
|
+
patternId,
|
|
297
|
+
patternName,
|
|
298
|
+
primaryCategory,
|
|
299
|
+
feature,
|
|
300
|
+
metadata,
|
|
301
|
+
whenToUse,
|
|
302
|
+
scenarios,
|
|
303
|
+
rules,
|
|
304
|
+
deliverables,
|
|
305
|
+
behaviorFile,
|
|
306
|
+
behaviorFileVerified,
|
|
307
|
+
});
|
|
308
|
+
// Validate against schema (schema-first enforcement)
|
|
309
|
+
const validation = ExtractedPatternSchema.safeParse(rawPattern);
|
|
310
|
+
if (!validation.success) {
|
|
311
|
+
// Collect validation error instead of console.warn
|
|
312
|
+
errors.push(createGherkinPatternValidationError(relativePath, patternName, 'Schema validation failed', validation.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`)));
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
patterns.push(validation.data);
|
|
316
|
+
}
|
|
317
|
+
return { patterns, errors };
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Infer behavior file path from timeline feature file path using convention
|
|
321
|
+
*
|
|
322
|
+
* Convention: `timeline/phase-N[suffix]-name.feature` → `behavior/name.feature`
|
|
323
|
+
*
|
|
324
|
+
* Handles edge cases:
|
|
325
|
+
* - `phase-37-remaining-work-enhancement.feature` → `remaining-work-enhancement.feature`
|
|
326
|
+
* - `phase-02b-enhanced-dogfooding.feature` → `enhanced-dogfooding.feature`
|
|
327
|
+
* - `phase-03-watch-mode.feature` → `watch-mode.feature`
|
|
328
|
+
*
|
|
329
|
+
* @param timelineFilePath - Relative path to timeline feature file
|
|
330
|
+
* @returns Inferred behavior file path, or undefined if not a timeline file
|
|
331
|
+
*/
|
|
332
|
+
export function inferBehaviorFilePath(timelineFilePath) {
|
|
333
|
+
// Match: phase-NN[a-z]?-name.feature (supports phase-02b, phase-37, etc.)
|
|
334
|
+
const match = /phase-\d+[a-z]?-(.+)\.feature$/.exec(timelineFilePath);
|
|
335
|
+
if (match?.[1]) {
|
|
336
|
+
return `tests/features/behavior/${match[1]}.feature`;
|
|
337
|
+
}
|
|
338
|
+
return undefined;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Check if a file exists at the given path (sync)
|
|
342
|
+
*
|
|
343
|
+
* @param filePath - Absolute path to check
|
|
344
|
+
* @returns true if file exists, false otherwise
|
|
345
|
+
*/
|
|
346
|
+
function fileExistsSync(filePath) {
|
|
347
|
+
try {
|
|
348
|
+
return fs.existsSync(filePath);
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Check if a file exists at the given path (async)
|
|
356
|
+
*
|
|
357
|
+
* @param filePath - Absolute path to check
|
|
358
|
+
* @returns Promise resolving to true if file exists, false otherwise
|
|
359
|
+
*/
|
|
360
|
+
async function fileExistsAsync(filePath) {
|
|
361
|
+
try {
|
|
362
|
+
await fs.promises.access(filePath);
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Extract patterns from scanned Gherkin feature files (async variant)
|
|
371
|
+
*
|
|
372
|
+
* This is the async version of `extractPatternsFromGherkin` that performs
|
|
373
|
+
* file existence checks asynchronously in parallel, avoiding event loop blocking.
|
|
374
|
+
*
|
|
375
|
+
* Use this variant when processing many feature files or when running on
|
|
376
|
+
* systems with slow disk I/O.
|
|
377
|
+
*
|
|
378
|
+
* @param scannedFiles - Array of scanned Gherkin files
|
|
379
|
+
* @param config - Extractor configuration (requires baseDir for relative paths)
|
|
380
|
+
* @returns Promise resolving to extracted patterns and validation errors
|
|
381
|
+
*
|
|
382
|
+
* @example
|
|
383
|
+
* ```typescript
|
|
384
|
+
* const scanResult = await scanGherkinFiles({
|
|
385
|
+
* patterns: 'tests/features/roadmap/**\/*.feature'
|
|
386
|
+
* });
|
|
387
|
+
*
|
|
388
|
+
* if (scanResult.ok) {
|
|
389
|
+
* const { patterns, errors } = await extractPatternsFromGherkinAsync(
|
|
390
|
+
* scanResult.value.files,
|
|
391
|
+
* { baseDir: process.cwd() }
|
|
392
|
+
* );
|
|
393
|
+
* }
|
|
394
|
+
* ```
|
|
395
|
+
*/
|
|
396
|
+
export async function extractPatternsFromGherkinAsync(scannedFiles, config) {
|
|
397
|
+
const { baseDir } = config;
|
|
398
|
+
const scenariosAsUseCases = config.scenariosAsUseCases ?? true;
|
|
399
|
+
const patternsToVerify = [];
|
|
400
|
+
const errors = [];
|
|
401
|
+
for (const file of scannedFiles) {
|
|
402
|
+
const { feature, scenarios, rules, filePath } = file;
|
|
403
|
+
const relativePath = path.relative(baseDir, filePath);
|
|
404
|
+
const metadata = extractPatternTags(feature.tags);
|
|
405
|
+
// Skip if no @architect opt-in marker (consistent with TypeScript requirement)
|
|
406
|
+
// The marker normalizes to 'architect' after stripping the @ prefix
|
|
407
|
+
const hasOptIn = feature.tags.some((tag) => tag === 'architect');
|
|
408
|
+
if (!hasOptIn)
|
|
409
|
+
continue;
|
|
410
|
+
// Skip if no pattern or status tag
|
|
411
|
+
if (!metadata.pattern || !metadata.status)
|
|
412
|
+
continue;
|
|
413
|
+
const patternName = metadata.pattern || feature.name;
|
|
414
|
+
const categories = metadata.categories ?? [];
|
|
415
|
+
const primaryCategory = categories[0] ?? 'ddd';
|
|
416
|
+
const whenToUse = [];
|
|
417
|
+
if (scenariosAsUseCases) {
|
|
418
|
+
for (const scenario of scenarios) {
|
|
419
|
+
if (scenario.tags.includes('acceptance-criteria')) {
|
|
420
|
+
whenToUse.push(`When ${scenario.name.toLowerCase()}`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
const patternId = asPatternId(generatePatternId(relativePath, feature.line));
|
|
425
|
+
const deliverables = extractDeliverables(file);
|
|
426
|
+
// Infer behavior file path but DON'T verify yet
|
|
427
|
+
let behaviorFile = metadata.behaviorFile;
|
|
428
|
+
let behaviorPathToVerify;
|
|
429
|
+
if (!behaviorFile) {
|
|
430
|
+
const inferred = inferBehaviorFilePath(relativePath);
|
|
431
|
+
if (inferred) {
|
|
432
|
+
behaviorFile = inferred;
|
|
433
|
+
behaviorPathToVerify = path.join(baseDir, inferred);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
behaviorPathToVerify = path.join(baseDir, behaviorFile);
|
|
438
|
+
}
|
|
439
|
+
const rawPattern = buildGherkinRawPattern({
|
|
440
|
+
relativePath,
|
|
441
|
+
filePath,
|
|
442
|
+
patternId,
|
|
443
|
+
patternName,
|
|
444
|
+
primaryCategory,
|
|
445
|
+
feature,
|
|
446
|
+
metadata,
|
|
447
|
+
whenToUse,
|
|
448
|
+
scenarios,
|
|
449
|
+
rules,
|
|
450
|
+
deliverables,
|
|
451
|
+
behaviorFile,
|
|
452
|
+
behaviorFileVerified: undefined,
|
|
453
|
+
});
|
|
454
|
+
const validation = ExtractedPatternSchema.safeParse(rawPattern);
|
|
455
|
+
if (!validation.success) {
|
|
456
|
+
errors.push(createGherkinPatternValidationError(relativePath, patternName, 'Schema validation failed', validation.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`)));
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
// Use explicit conditional to satisfy exactOptionalPropertyTypes
|
|
460
|
+
// (undefined is not the same as "property not present")
|
|
461
|
+
if (behaviorPathToVerify !== undefined) {
|
|
462
|
+
patternsToVerify.push({ pattern: validation.data, behaviorPathToVerify });
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
patternsToVerify.push({ pattern: validation.data });
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
// Second pass: Batch async verification of all behavior file paths
|
|
469
|
+
const verificationPromises = patternsToVerify.map(async ({ pattern, behaviorPathToVerify }) => {
|
|
470
|
+
if (behaviorPathToVerify) {
|
|
471
|
+
const exists = await fileExistsAsync(behaviorPathToVerify);
|
|
472
|
+
// Return pattern with behaviorFileVerified set
|
|
473
|
+
return { ...pattern, behaviorFileVerified: exists };
|
|
474
|
+
}
|
|
475
|
+
return pattern;
|
|
476
|
+
});
|
|
477
|
+
const patterns = await Promise.all(verificationPromises);
|
|
478
|
+
return { patterns, errors };
|
|
479
|
+
}
|
|
480
|
+
// NOTE: extractAdrContent() was removed as part of Issue #99.
|
|
481
|
+
// ADR content (context, decision, consequences) is now derived from
|
|
482
|
+
// Gherkin Rule: keywords instead of parsed markdown in feature descriptions.
|
|
483
|
+
// Rules prefixed with "Context -", "Decision -", "Consequences -" are
|
|
484
|
+
// semantically detected and rendered by the ADR codec.
|
|
485
|
+
/**
|
|
486
|
+
* Compute children arrays from parent references
|
|
487
|
+
*
|
|
488
|
+
* Post-processing step that populates the `children` field on each pattern
|
|
489
|
+
* by finding all patterns that reference it via their `parent` field.
|
|
490
|
+
*
|
|
491
|
+
* This enables bidirectional hierarchy navigation:
|
|
492
|
+
* - Child → Parent: via `parent` field (explicit in feature file)
|
|
493
|
+
* - Parent → Children: via `children` field (computed here)
|
|
494
|
+
*
|
|
495
|
+
* **Performance Note:** This function does NOT re-validate patterns through
|
|
496
|
+
* the schema because:
|
|
497
|
+
* 1. Input patterns have already been validated by extractPatternsFromGherkin()
|
|
498
|
+
* 2. We're only adding a `children: string[]` field which matches the schema
|
|
499
|
+
* 3. Re-validation of the complex ExtractedPatternSchema is expensive (~320 lines)
|
|
500
|
+
*
|
|
501
|
+
* This invariant is safe because:
|
|
502
|
+
* - The children array is derived from validated pattern names
|
|
503
|
+
* - ExtractedPatternSchema.children is defined as `z.array(z.string()).readonly().optional()`
|
|
504
|
+
*
|
|
505
|
+
* @param patterns - Array of validated ExtractedPattern objects
|
|
506
|
+
* @returns New array with `children` populated (does not mutate input)
|
|
507
|
+
*
|
|
508
|
+
* @example
|
|
509
|
+
* ```typescript
|
|
510
|
+
* const rawPatterns = extractPatternsFromGherkin(files, config);
|
|
511
|
+
* const patternsWithHierarchy = computeHierarchyChildren(rawPatterns);
|
|
512
|
+
*
|
|
513
|
+
* // Now epic patterns have children arrays
|
|
514
|
+
* const epic = patternsWithHierarchy.find(p => p.level === 'epic');
|
|
515
|
+
* console.log(epic.children); // ["PhaseA", "PhaseB"]
|
|
516
|
+
* ```
|
|
517
|
+
*/
|
|
518
|
+
export function computeHierarchyChildren(patterns) {
|
|
519
|
+
// Build a map: parent name → child names
|
|
520
|
+
const parentToChildren = new Map();
|
|
521
|
+
for (const pattern of patterns) {
|
|
522
|
+
if (pattern.parent) {
|
|
523
|
+
const children = parentToChildren.get(pattern.parent) ?? [];
|
|
524
|
+
// Use patternName if available, otherwise fall back to name
|
|
525
|
+
const childName = getPatternName(pattern);
|
|
526
|
+
children.push(childName);
|
|
527
|
+
parentToChildren.set(pattern.parent, children);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
// Apply children arrays to patterns
|
|
531
|
+
// No re-validation needed - input is already validated and we're only adding children: string[]
|
|
532
|
+
return patterns.map((pattern) => {
|
|
533
|
+
const patternName = getPatternName(pattern);
|
|
534
|
+
const children = parentToChildren.get(patternName);
|
|
535
|
+
if (children && children.length > 0) {
|
|
536
|
+
// Type-safe spread: pattern is validated ExtractedPattern, children is string[]
|
|
537
|
+
// This matches ExtractedPatternSchema.children: z.array(z.string()).readonly().optional()
|
|
538
|
+
return { ...pattern, children };
|
|
539
|
+
}
|
|
540
|
+
return pattern;
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
//# sourceMappingURL=gherkin-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gherkin-extractor.js","sourceRoot":"","sources":["../../src/extractor/gherkin-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { extractPatterns, buildPattern, inferPatternName, inferCategory, hasAggregationTag, getAggregationTags, type ExtractionResults, type AggregationTags, } from './doc-extractor.js';
|
|
2
|
+
export { extractProcessMetadata, extractDeliverables, combineSources, validateDualSource, type ProcessMetadata, type Deliverable, type DualSourcePattern, type CrossValidationError, type DualSourceResults, type ValidationSummary, } from './dual-source-extractor.js';
|
|
3
|
+
export { inferFeatureLayer, FEATURE_LAYERS, type FeatureLayer } from './layer-inference.js';
|
|
4
|
+
export { extractPatternsFromGherkin, extractPatternsFromGherkinAsync, computeHierarchyChildren, type GherkinExtractorConfig, type GherkinExtractionResult, } from './gherkin-extractor.js';
|
|
5
|
+
export { extractShapes, processExtractShapesTag, type ProcessExtractShapesResult, } from './shape-extractor.js';
|
|
6
|
+
export { renderShapesAsMarkdown } from '../renderable/codecs/helpers.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG5F,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { extractPatterns, buildPattern, inferPatternName, inferCategory, hasAggregationTag, getAggregationTags, } from './doc-extractor.js';
|
|
2
|
+
// Dual-Source Extraction (USDP)
|
|
3
|
+
export { extractProcessMetadata, extractDeliverables, combineSources, validateDualSource, } from './dual-source-extractor.js';
|
|
4
|
+
// Layer Inference
|
|
5
|
+
export { inferFeatureLayer, FEATURE_LAYERS } from './layer-inference.js';
|
|
6
|
+
// Gherkin Extraction (Feature File → Pattern)
|
|
7
|
+
export { extractPatternsFromGherkin, extractPatternsFromGherkinAsync, computeHierarchyChildren, } from './gherkin-extractor.js';
|
|
8
|
+
// Shape Extraction (ADR-021: Documentation Generation)
|
|
9
|
+
export { extractShapes, processExtractShapesTag, } from './shape-extractor.js';
|
|
10
|
+
export { renderShapesAsMarkdown } from '../renderable/codecs/helpers.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAE5B,gCAAgC;AAChC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GAOnB,MAAM,4BAA4B,CAAC;AAEpC,kBAAkB;AAClB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAE5F,8CAA8C;AAC9C,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,wBAAwB,GAGzB,MAAM,wBAAwB,CAAC;AAEhC,uDAAuD;AACvD,OAAO,EACL,aAAa,EACb,uBAAuB,GAExB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-extractor
|
|
4
|
+
* @architect-pattern LayerInference
|
|
5
|
+
* @architect-status completed
|
|
6
|
+
* @architect-used-by GherkinExtractor
|
|
7
|
+
*
|
|
8
|
+
* ## LayerInference - Directory-Based Feature Classification
|
|
9
|
+
*
|
|
10
|
+
* Infers feature file layer (timeline, domain, integration, e2e, component)
|
|
11
|
+
* from directory path patterns. Enables filtering without explicit annotations.
|
|
12
|
+
*
|
|
13
|
+
* ### When to Use
|
|
14
|
+
*
|
|
15
|
+
* - When filtering scenarios by testing layer
|
|
16
|
+
* - When generating layer-specific documentation
|
|
17
|
+
* - When calculating test coverage by layer
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Feature layer classification based on directory structure
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* Layers represent different testing contexts and documentation purposes:
|
|
24
|
+
* - `timeline`: Process documentation features (roadmap, milestones)
|
|
25
|
+
* - `domain`: Pure domain logic tests (deciders, command handlers)
|
|
26
|
+
* - `integration`: Full-stack integration tests with real backend
|
|
27
|
+
* - `e2e`: Browser-based end-to-end user journey tests
|
|
28
|
+
* - `component`: Tooling/infrastructure component tests
|
|
29
|
+
* - `unknown`: Unclassified features (fallback)
|
|
30
|
+
*/
|
|
31
|
+
export type FeatureLayer = 'timeline' | 'domain' | 'integration' | 'e2e' | 'component' | 'unknown';
|
|
32
|
+
/**
|
|
33
|
+
* All valid feature layers as a readonly array
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* Useful for validation and schema definitions
|
|
37
|
+
*/
|
|
38
|
+
export declare const FEATURE_LAYERS: readonly FeatureLayer[];
|
|
39
|
+
/**
|
|
40
|
+
* Infer feature layer from file path
|
|
41
|
+
*
|
|
42
|
+
* Uses directory structure patterns to classify feature files:
|
|
43
|
+
* - `/timeline/` → timeline (process documentation)
|
|
44
|
+
* - `/deciders/` → domain (pure domain logic)
|
|
45
|
+
* - `/orders/`, `/inventory/` (not integration) → domain
|
|
46
|
+
* - `/integration-features/`, `/integration/` → integration
|
|
47
|
+
* - `/e2e/` → e2e (browser-based tests)
|
|
48
|
+
* - `/scanner/`, `/lint/` → component (tooling tests)
|
|
49
|
+
*
|
|
50
|
+
* @param filePath - Absolute or relative path to feature file
|
|
51
|
+
* @returns Inferred layer based on directory patterns
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* inferFeatureLayer('tests/features/timeline/phase-01.feature');
|
|
56
|
+
* // Returns: 'timeline'
|
|
57
|
+
*
|
|
58
|
+
* inferFeatureLayer('tests/features/deciders/order.decider.feature');
|
|
59
|
+
* // Returns: 'domain'
|
|
60
|
+
*
|
|
61
|
+
* inferFeatureLayer('tests/integration-features/orders/flow.feature');
|
|
62
|
+
* // Returns: 'integration'
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function inferFeatureLayer(filePath: string): FeatureLayer;
|
|
66
|
+
//# sourceMappingURL=layer-inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-inference.d.ts","sourceRoot":"","sources":["../../src/extractor/layer-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnG;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAOxC,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CA0ChE"}
|