@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,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-pattern ContextFormatterImpl
|
|
4
|
+
* @architect-status active
|
|
5
|
+
* @architect-implements DataAPIContextAssembly
|
|
6
|
+
* @architect-uses ContextAssemblerImpl
|
|
7
|
+
* @architect-used-by ProcessAPICLIImpl
|
|
8
|
+
* @architect-arch-role service
|
|
9
|
+
* @architect-arch-context api
|
|
10
|
+
* @architect-arch-layer application
|
|
11
|
+
*
|
|
12
|
+
* ## ContextFormatter — Plain Text Renderer for Context Bundles
|
|
13
|
+
*
|
|
14
|
+
* First plain-text formatter in the codebase. All other rendering goes
|
|
15
|
+
* through the Codec/RenderableDocument/UniversalRenderer markdown pipeline.
|
|
16
|
+
* Context bundles are rendered as compact structured text with === section
|
|
17
|
+
* markers for easy AI parsing (see ADR-008).
|
|
18
|
+
*
|
|
19
|
+
* **When to Use:** When rendering a ContextBundle as plain text for CLI output — use this instead of the markdown codec pipeline.
|
|
20
|
+
*/
|
|
21
|
+
import { isDeliverableStatusComplete } from '../taxonomy/deliverable-status.js';
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Bundle Formatter
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
export function formatContextBundle(bundle) {
|
|
26
|
+
const sections = [];
|
|
27
|
+
// Metadata (always present)
|
|
28
|
+
for (const meta of bundle.metadata) {
|
|
29
|
+
const parts = [];
|
|
30
|
+
if (meta.status !== undefined)
|
|
31
|
+
parts.push(`Status: ${meta.status}`);
|
|
32
|
+
if (meta.phase !== undefined)
|
|
33
|
+
parts.push(`Phase: ${String(meta.phase)}`);
|
|
34
|
+
parts.push(`Category: ${meta.category}`);
|
|
35
|
+
sections.push(`=== PATTERN: ${meta.name} ===\n` +
|
|
36
|
+
`${parts.join(' | ')}\n` +
|
|
37
|
+
(meta.summary !== '' ? `${meta.summary}\n` : '') +
|
|
38
|
+
`File: ${meta.file}`);
|
|
39
|
+
}
|
|
40
|
+
// Spec files
|
|
41
|
+
if (bundle.specFiles.length > 0) {
|
|
42
|
+
sections.push('=== SPEC ===\n' + bundle.specFiles.join('\n'));
|
|
43
|
+
}
|
|
44
|
+
// Stubs
|
|
45
|
+
if (bundle.stubs.length > 0) {
|
|
46
|
+
const lines = bundle.stubs.map((s) => s.targetPath !== '' ? `${s.stubFile} -> ${s.targetPath}` : s.stubFile);
|
|
47
|
+
sections.push('=== STUBS ===\n' + lines.join('\n'));
|
|
48
|
+
}
|
|
49
|
+
// Dependencies
|
|
50
|
+
if (bundle.dependencies.length > 0) {
|
|
51
|
+
const lines = bundle.dependencies.map((d) => {
|
|
52
|
+
const status = d.status !== undefined ? `[${d.status}]` : '[unknown]';
|
|
53
|
+
const filePart = d.file !== '' ? ` ${d.file}` : '';
|
|
54
|
+
return `${status} ${d.name} (${d.kind})${filePart}`;
|
|
55
|
+
});
|
|
56
|
+
let header = '=== DEPENDENCIES ===';
|
|
57
|
+
if (bundle.sharedDependencies.length > 0) {
|
|
58
|
+
header += `\nShared: ${bundle.sharedDependencies.join(', ')}`;
|
|
59
|
+
}
|
|
60
|
+
sections.push(header + '\n' + lines.join('\n'));
|
|
61
|
+
}
|
|
62
|
+
// Consumers
|
|
63
|
+
if (bundle.consumers.length > 0) {
|
|
64
|
+
const lines = bundle.consumers.map((c) => {
|
|
65
|
+
const status = c.status ?? 'unknown';
|
|
66
|
+
return `${c.name} (${status})`;
|
|
67
|
+
});
|
|
68
|
+
sections.push('=== CONSUMERS ===\n' + lines.join('\n'));
|
|
69
|
+
}
|
|
70
|
+
// Architecture neighbors
|
|
71
|
+
if (bundle.architectureNeighbors.length > 0) {
|
|
72
|
+
const ctx = bundle.architectureNeighbors[0]?.archContext ?? 'unknown';
|
|
73
|
+
const lines = bundle.architectureNeighbors.map((n) => {
|
|
74
|
+
const status = n.status ?? 'unknown';
|
|
75
|
+
const role = n.archRole !== undefined ? `, ${n.archRole}` : '';
|
|
76
|
+
return `${n.name} (${status}${role})`;
|
|
77
|
+
});
|
|
78
|
+
sections.push(`=== ARCHITECTURE (context: ${ctx}) ===\n` + lines.join('\n'));
|
|
79
|
+
}
|
|
80
|
+
// Deliverables
|
|
81
|
+
if (bundle.deliverables.length > 0) {
|
|
82
|
+
const lines = bundle.deliverables.map((d) => {
|
|
83
|
+
const checkbox = isDeliverableStatusComplete(d.status) ? '[x]' : '[ ]';
|
|
84
|
+
return `${checkbox} ${d.name} (${d.location})`;
|
|
85
|
+
});
|
|
86
|
+
sections.push('=== DELIVERABLES ===\n' + lines.join('\n'));
|
|
87
|
+
}
|
|
88
|
+
// FSM
|
|
89
|
+
if (bundle.fsm !== undefined) {
|
|
90
|
+
const transitions = bundle.fsm.validTransitions.length > 0 ? bundle.fsm.validTransitions.join(', ') : 'none';
|
|
91
|
+
sections.push('=== FSM ===\n' +
|
|
92
|
+
`Status: ${bundle.fsm.currentStatus} | Transitions: ${transitions} | Protection: ${bundle.fsm.protectionLevel}`);
|
|
93
|
+
}
|
|
94
|
+
// Test files
|
|
95
|
+
if (bundle.testFiles.length > 0) {
|
|
96
|
+
sections.push('=== TEST FILES ===\n' + bundle.testFiles.join('\n'));
|
|
97
|
+
}
|
|
98
|
+
return sections.join('\n\n') + '\n';
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Dep-Tree Formatter
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
export function formatDepTree(tree) {
|
|
104
|
+
const lines = [];
|
|
105
|
+
renderTreeNode(tree, 0, lines);
|
|
106
|
+
return lines.join('\n') + '\n';
|
|
107
|
+
}
|
|
108
|
+
function renderTreeNode(node, depth, lines) {
|
|
109
|
+
const indent = depth > 0 ? ' '.repeat(depth) + '-> ' : '';
|
|
110
|
+
const phase = node.phase !== undefined ? `${String(node.phase)}, ` : '';
|
|
111
|
+
const status = node.status ?? 'unknown';
|
|
112
|
+
const focal = node.isFocal ? ' <- YOU ARE HERE' : '';
|
|
113
|
+
lines.push(`${indent}${node.name} (${phase}${status})${focal}`);
|
|
114
|
+
if (node.truncated) {
|
|
115
|
+
const truncIndent = ' '.repeat(depth + 1) + '-> ';
|
|
116
|
+
lines.push(`${truncIndent}... (depth limit reached)`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
for (const child of node.children) {
|
|
120
|
+
renderTreeNode(child, depth + 1, lines);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
// File Reading List Formatter
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
export function formatFileReadingList(list) {
|
|
127
|
+
const sections = [];
|
|
128
|
+
if (list.primary.length > 0) {
|
|
129
|
+
sections.push('=== PRIMARY ===\n' + list.primary.join('\n'));
|
|
130
|
+
}
|
|
131
|
+
if (list.completedDeps.length > 0) {
|
|
132
|
+
sections.push('=== COMPLETED DEPENDENCIES ===\n' + list.completedDeps.join('\n'));
|
|
133
|
+
}
|
|
134
|
+
if (list.roadmapDeps.length > 0) {
|
|
135
|
+
sections.push('=== ROADMAP DEPENDENCIES ===\n' + list.roadmapDeps.join('\n'));
|
|
136
|
+
}
|
|
137
|
+
if (list.architectureNeighbors.length > 0) {
|
|
138
|
+
sections.push('=== ARCHITECTURE NEIGHBORS ===\n' + list.architectureNeighbors.join('\n'));
|
|
139
|
+
}
|
|
140
|
+
return sections.join('\n\n') + '\n';
|
|
141
|
+
}
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
// Overview Formatter
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
export function formatOverview(overview) {
|
|
146
|
+
const sections = [];
|
|
147
|
+
const { progress } = overview;
|
|
148
|
+
sections.push('=== PROGRESS ===\n' +
|
|
149
|
+
`${String(progress.total)} patterns (${String(progress.completed)} completed, ${String(progress.active)} active, ${String(progress.planned)} planned) = ${String(progress.percentage)}%`);
|
|
150
|
+
if (overview.activePhases.length > 0) {
|
|
151
|
+
const lines = overview.activePhases.map((p) => {
|
|
152
|
+
const name = p.name !== undefined ? `: ${p.name}` : '';
|
|
153
|
+
return `Phase ${String(p.phase)}${name} (${String(p.activeCount)} active)`;
|
|
154
|
+
});
|
|
155
|
+
sections.push('=== ACTIVE PHASES ===\n' + lines.join('\n'));
|
|
156
|
+
}
|
|
157
|
+
if (overview.blocking.length > 0) {
|
|
158
|
+
const lines = overview.blocking.map((b) => {
|
|
159
|
+
const blockers = b.blockedBy.join(', ');
|
|
160
|
+
return `${b.pattern} blocked by: ${blockers}`;
|
|
161
|
+
});
|
|
162
|
+
sections.push('=== BLOCKING ===\n' + lines.join('\n'));
|
|
163
|
+
}
|
|
164
|
+
sections.push('=== DATA API — Use Instead of Explore Agents ===\n' +
|
|
165
|
+
'pnpm architect:query -- <subcommand>\n' +
|
|
166
|
+
'\n' +
|
|
167
|
+
' overview Project health (this output)\n' +
|
|
168
|
+
' context <pattern> --session <type> Curated context bundle (planning/design/implement)\n' +
|
|
169
|
+
' scope-validate <pattern> <session> Pre-flight check before starting work\n' +
|
|
170
|
+
' dep-tree <pattern> Dependency chains\n' +
|
|
171
|
+
' list --status roadmap Available patterns to work on\n' +
|
|
172
|
+
' stubs --unresolved Design stubs missing implementations\n' +
|
|
173
|
+
' files <pattern> File paths for a pattern\n' +
|
|
174
|
+
' rules Business rules from Gherkin\n' +
|
|
175
|
+
' arch blocking Patterns stuck on incomplete deps\n' +
|
|
176
|
+
'\n' +
|
|
177
|
+
'Full reference: pnpm architect:query -- --help');
|
|
178
|
+
return sections.join('\n\n') + '\n';
|
|
179
|
+
}
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
// Helpers
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
//# sourceMappingURL=context-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-formatter.js","sourceRoot":"","sources":["../../src/api/context-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEhF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,4BAA4B;IAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEzC,QAAQ,CAAC,IAAI,CACX,gBAAgB,IAAI,CAAC,IAAI,QAAQ;YAC/B,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YACxB,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,SAAS,IAAI,CAAC,IAAI,EAAE,CACvB,CAAC;IACJ,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,QAAQ;IACR,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtE,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;YACtE,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,sBAAsB,CAAC;QACpC,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,aAAa,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,YAAY;IACZ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;YACrC,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,SAAS,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;YACrC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,8BAA8B,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,2BAA2B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACvE,OAAO,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM;IACN,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,WAAW,GACf,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,QAAQ,CAAC,IAAI,CACX,eAAe;YACb,WAAW,MAAM,CAAC,GAAG,CAAC,aAAa,mBAAmB,WAAW,kBAAkB,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAClH,CAAC;IACJ,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,IAAiB,EAAE,KAAa,EAAE,KAAe;IACvE,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAErD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;IAEhE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,2BAA2B,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CAAC,IAAqB;IACzD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAE9B,QAAQ,CAAC,IAAI,CACX,oBAAoB;QAClB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAC3L,CAAC;IAEF,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;QAC7E,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,GAAG,CAAC,CAAC,OAAO,gBAAgB,QAAQ,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAC,IAAI,CACX,oDAAoD;QAClD,wCAAwC;QACxC,IAAI;QACJ,uEAAuE;QACvE,6FAA6F;QAC7F,gFAAgF;QAChF,4DAA4D;QAC5D,wEAAwE;QACxE,+EAA+E;QAC/E,mEAAmE;QACnE,sEAAsE;QACtE,4EAA4E;QAC5E,IAAI;QACJ,gDAAgD,CACnD,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-pattern CoverageAnalyzerImpl
|
|
4
|
+
* @architect-status active
|
|
5
|
+
* @architect-implements DataAPIArchitectureQueries
|
|
6
|
+
* @architect-uses Pattern Scanner, MasterDataset
|
|
7
|
+
* @architect-used-by ProcessAPICLIImpl
|
|
8
|
+
* @architect-arch-role service
|
|
9
|
+
* @architect-arch-context api
|
|
10
|
+
* @architect-arch-layer application
|
|
11
|
+
*
|
|
12
|
+
* ## CoverageAnalyzer — Annotation Coverage and Taxonomy Gap Detection
|
|
13
|
+
*
|
|
14
|
+
* Reports annotation completeness by comparing scannable files (from glob)
|
|
15
|
+
* against annotated patterns in MasterDataset. Uses independent glob via
|
|
16
|
+
* findFilesToScan() — cheap (~1ms) and avoids changing buildPipeline().
|
|
17
|
+
*
|
|
18
|
+
* **When to Use:** When checking annotation completeness or finding unannotated files via `arch coverage` or `unannotated` CLI subcommands.
|
|
19
|
+
*/
|
|
20
|
+
import type { MasterDataset } from '../validation-schemas/master-dataset.js';
|
|
21
|
+
import type { TagRegistry } from '../validation-schemas/tag-registry.js';
|
|
22
|
+
export interface UnusedTaxonomyReport {
|
|
23
|
+
readonly unusedCategories: readonly string[];
|
|
24
|
+
readonly unusedRoles: readonly string[];
|
|
25
|
+
readonly unusedLayers: readonly string[];
|
|
26
|
+
readonly unusedStatuses: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
export interface CoverageReport {
|
|
29
|
+
readonly annotatedFileCount: number;
|
|
30
|
+
readonly totalScannableFiles: number;
|
|
31
|
+
readonly coveragePercentage: number;
|
|
32
|
+
readonly unannotatedFiles: readonly string[];
|
|
33
|
+
readonly unusedTaxonomy: UnusedTaxonomyReport;
|
|
34
|
+
}
|
|
35
|
+
export declare function findUnusedTaxonomy(dataset: MasterDataset, registry: TagRegistry): UnusedTaxonomyReport;
|
|
36
|
+
export declare function findUnannotatedFiles(inputGlobs: readonly string[], baseDir: string, registry: TagRegistry, pathFilter?: string): Promise<readonly string[]>;
|
|
37
|
+
export declare function analyzeCoverage(dataset: MasterDataset, inputGlobs: readonly string[], baseDir: string, registry: TagRegistry): Promise<CoverageReport>;
|
|
38
|
+
//# sourceMappingURL=coverage-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage-analyzer.d.ts","sourceRoot":"","sources":["../../src/api/coverage-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAMzE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;CAC/C;AAMD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,WAAW,GACpB,oBAAoB,CAsCtB;AAMD,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAgB5B;AAMD,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,cAAc,CAAC,CAoCzB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-pattern CoverageAnalyzerImpl
|
|
4
|
+
* @architect-status active
|
|
5
|
+
* @architect-implements DataAPIArchitectureQueries
|
|
6
|
+
* @architect-uses Pattern Scanner, MasterDataset
|
|
7
|
+
* @architect-used-by ProcessAPICLIImpl
|
|
8
|
+
* @architect-arch-role service
|
|
9
|
+
* @architect-arch-context api
|
|
10
|
+
* @architect-arch-layer application
|
|
11
|
+
*
|
|
12
|
+
* ## CoverageAnalyzer — Annotation Coverage and Taxonomy Gap Detection
|
|
13
|
+
*
|
|
14
|
+
* Reports annotation completeness by comparing scannable files (from glob)
|
|
15
|
+
* against annotated patterns in MasterDataset. Uses independent glob via
|
|
16
|
+
* findFilesToScan() — cheap (~1ms) and avoids changing buildPipeline().
|
|
17
|
+
*
|
|
18
|
+
* **When to Use:** When checking annotation completeness or finding unannotated files via `arch coverage` or `unannotated` CLI subcommands.
|
|
19
|
+
*/
|
|
20
|
+
import * as fs from 'node:fs/promises';
|
|
21
|
+
import * as path from 'node:path';
|
|
22
|
+
import { findFilesToScan, hasFileOptIn } from '../scanner/pattern-scanner.js';
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// findUnusedTaxonomy
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
export function findUnusedTaxonomy(dataset, registry) {
|
|
27
|
+
// Collect used values from patterns
|
|
28
|
+
const usedCategories = new Set();
|
|
29
|
+
const usedRoles = new Set();
|
|
30
|
+
const usedLayers = new Set();
|
|
31
|
+
const usedStatuses = new Set();
|
|
32
|
+
for (const p of dataset.patterns) {
|
|
33
|
+
usedCategories.add(String(p.category));
|
|
34
|
+
if (p.archRole !== undefined)
|
|
35
|
+
usedRoles.add(p.archRole);
|
|
36
|
+
if (p.archLayer !== undefined)
|
|
37
|
+
usedLayers.add(p.archLayer);
|
|
38
|
+
if (p.status !== undefined)
|
|
39
|
+
usedStatuses.add(p.status);
|
|
40
|
+
}
|
|
41
|
+
// Get defined values from registry
|
|
42
|
+
const definedCategories = registry.categories.map((c) => c.tag);
|
|
43
|
+
// Find arch-role and arch-layer enum values from metadataTags
|
|
44
|
+
let definedRoles = [];
|
|
45
|
+
let definedLayers = [];
|
|
46
|
+
let definedStatuses = [];
|
|
47
|
+
for (const tag of registry.metadataTags) {
|
|
48
|
+
if (tag.tag === 'arch-role' && tag.values !== undefined) {
|
|
49
|
+
definedRoles = tag.values;
|
|
50
|
+
}
|
|
51
|
+
else if (tag.tag === 'arch-layer' && tag.values !== undefined) {
|
|
52
|
+
definedLayers = tag.values;
|
|
53
|
+
}
|
|
54
|
+
else if (tag.tag === 'status' && tag.values !== undefined) {
|
|
55
|
+
definedStatuses = tag.values;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
unusedCategories: definedCategories.filter((c) => !usedCategories.has(c)),
|
|
60
|
+
unusedRoles: definedRoles.filter((r) => !usedRoles.has(r)),
|
|
61
|
+
unusedLayers: definedLayers.filter((l) => !usedLayers.has(l)),
|
|
62
|
+
unusedStatuses: definedStatuses.filter((s) => !usedStatuses.has(s)),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// findUnannotatedFiles
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
export async function findUnannotatedFiles(inputGlobs, baseDir, registry, pathFilter) {
|
|
69
|
+
const patterns = pathFilter !== undefined ? [pathFilter] : [...inputGlobs];
|
|
70
|
+
const allFiles = await findFilesToScan({ patterns, baseDir });
|
|
71
|
+
const resolvedBaseDir = path.resolve(baseDir);
|
|
72
|
+
const unannotated = [];
|
|
73
|
+
for (const filePath of allFiles) {
|
|
74
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
75
|
+
if (!hasFileOptIn(content, registry)) {
|
|
76
|
+
// Return relative paths
|
|
77
|
+
const relative = path.relative(resolvedBaseDir, filePath);
|
|
78
|
+
unannotated.push(relative);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return unannotated.sort();
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// analyzeCoverage
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
export async function analyzeCoverage(dataset, inputGlobs, baseDir, registry) {
|
|
87
|
+
const allFiles = await findFilesToScan({ patterns: [...inputGlobs], baseDir });
|
|
88
|
+
const resolvedBaseDir = path.resolve(baseDir);
|
|
89
|
+
// Collect annotated file paths (normalized to absolute)
|
|
90
|
+
const annotatedFiles = new Set();
|
|
91
|
+
for (const p of dataset.patterns) {
|
|
92
|
+
const filePath = p.source.file;
|
|
93
|
+
// Normalize: resolve relative paths against baseDir
|
|
94
|
+
const absolute = path.isAbsolute(filePath) ? filePath : path.resolve(resolvedBaseDir, filePath);
|
|
95
|
+
annotatedFiles.add(absolute);
|
|
96
|
+
}
|
|
97
|
+
// Find unannotated files
|
|
98
|
+
const unannotatedFiles = [];
|
|
99
|
+
for (const filePath of allFiles) {
|
|
100
|
+
if (!annotatedFiles.has(filePath)) {
|
|
101
|
+
unannotatedFiles.push(path.relative(resolvedBaseDir, filePath));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
unannotatedFiles.sort();
|
|
105
|
+
const totalScannableFiles = allFiles.length;
|
|
106
|
+
const annotatedFileCount = totalScannableFiles - unannotatedFiles.length;
|
|
107
|
+
const coveragePercentage = totalScannableFiles > 0 ? Math.round((annotatedFileCount / totalScannableFiles) * 100) : 0;
|
|
108
|
+
const unusedTaxonomy = findUnusedTaxonomy(dataset, registry);
|
|
109
|
+
return {
|
|
110
|
+
annotatedFileCount,
|
|
111
|
+
totalScannableFiles,
|
|
112
|
+
coveragePercentage,
|
|
113
|
+
unannotatedFiles,
|
|
114
|
+
unusedTaxonomy,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=coverage-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage-analyzer.js","sourceRoot":"","sources":["../../src/api/coverage-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-core
|
|
4
|
+
* @architect-pattern FuzzyMatcherImpl
|
|
5
|
+
* @architect-status active
|
|
6
|
+
* @architect-implements DataAPIOutputShaping
|
|
7
|
+
* @architect-used-by ProcessAPICLIImpl
|
|
8
|
+
* @architect-arch-role service
|
|
9
|
+
* @architect-arch-context api
|
|
10
|
+
* @architect-arch-layer application
|
|
11
|
+
*
|
|
12
|
+
* ## FuzzyMatcher — Pattern Name Fuzzy Search
|
|
13
|
+
*
|
|
14
|
+
* Provides fuzzy matching for pattern names with tiered scoring:
|
|
15
|
+
* exact (1.0) > prefix (0.9) > substring (0.7) > Levenshtein (distance-based).
|
|
16
|
+
*
|
|
17
|
+
* No external dependencies — Levenshtein implementation is ~20 lines.
|
|
18
|
+
*
|
|
19
|
+
* Used by:
|
|
20
|
+
* - `search` subcommand: ranked results via fuzzyMatchPatterns()
|
|
21
|
+
* - `pattern` subcommand: "Did you mean...?" fallback via findBestMatch()
|
|
22
|
+
*
|
|
23
|
+
* **When to Use:** When resolving user-typed pattern names that may contain typos or partial matches.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Result of a fuzzy match against a pattern name.
|
|
27
|
+
*/
|
|
28
|
+
export interface FuzzyMatch {
|
|
29
|
+
/** The matched pattern name */
|
|
30
|
+
readonly patternName: string;
|
|
31
|
+
/** Match quality score (0-1, higher is better) */
|
|
32
|
+
readonly score: number;
|
|
33
|
+
/** How the match was achieved */
|
|
34
|
+
readonly matchType: 'exact' | 'prefix' | 'substring' | 'fuzzy';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Compute Levenshtein edit distance between two strings.
|
|
38
|
+
*
|
|
39
|
+
* Pure implementation with no external dependencies.
|
|
40
|
+
* Uses dynamic programming O(m*n) approach.
|
|
41
|
+
*
|
|
42
|
+
* @param a - First string
|
|
43
|
+
* @param b - Second string
|
|
44
|
+
* @returns Edit distance (0 = identical)
|
|
45
|
+
*/
|
|
46
|
+
export declare function levenshteinDistance(a: string, b: string): number;
|
|
47
|
+
/**
|
|
48
|
+
* Find patterns matching a query with fuzzy matching.
|
|
49
|
+
*
|
|
50
|
+
* Scoring tiers (all case-insensitive):
|
|
51
|
+
* 1. Exact match: score = 1.0
|
|
52
|
+
* 2. Prefix match: score = 0.9 + (queryLen/nameLen) * 0.09 (shorter names rank higher)
|
|
53
|
+
* 3. Substring match: score = 0.7
|
|
54
|
+
* 4. Levenshtein distance <= 3: score = 1 - (distance / max(len1, len2))
|
|
55
|
+
*
|
|
56
|
+
* Results are sorted by score descending, with shorter names as tie-breaker.
|
|
57
|
+
*
|
|
58
|
+
* @param query - Search query string
|
|
59
|
+
* @param patternNames - All available pattern names to search
|
|
60
|
+
* @param maxResults - Maximum number of results to return (default: 10)
|
|
61
|
+
* @returns Sorted array of FuzzyMatch results
|
|
62
|
+
*/
|
|
63
|
+
export declare function fuzzyMatchPatterns(query: string, patternNames: readonly string[], maxResults?: number): readonly FuzzyMatch[];
|
|
64
|
+
/**
|
|
65
|
+
* Find the single best match for a query.
|
|
66
|
+
*
|
|
67
|
+
* Used for "Did you mean...?" suggestions when an exact pattern lookup fails.
|
|
68
|
+
* Returns undefined if no match scores above the minimum threshold (0.3).
|
|
69
|
+
*
|
|
70
|
+
* @param query - Pattern name that wasn't found
|
|
71
|
+
* @param patternNames - All available pattern names
|
|
72
|
+
* @returns Best matching FuzzyMatch, or undefined if no good match
|
|
73
|
+
*/
|
|
74
|
+
export declare function findBestMatch(query: string, patternNames: readonly string[]): FuzzyMatch | undefined;
|
|
75
|
+
//# sourceMappingURL=fuzzy-match.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-match.d.ts","sourceRoot":"","sources":["../../src/api/fuzzy-match.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;CAChE;AAYD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBhE;AA0CD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,UAAU,SAAK,GACd,SAAS,UAAU,EAAE,CAuBvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,UAAU,GAAG,SAAS,CAGxB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-core
|
|
4
|
+
* @architect-pattern FuzzyMatcherImpl
|
|
5
|
+
* @architect-status active
|
|
6
|
+
* @architect-implements DataAPIOutputShaping
|
|
7
|
+
* @architect-used-by ProcessAPICLIImpl
|
|
8
|
+
* @architect-arch-role service
|
|
9
|
+
* @architect-arch-context api
|
|
10
|
+
* @architect-arch-layer application
|
|
11
|
+
*
|
|
12
|
+
* ## FuzzyMatcher — Pattern Name Fuzzy Search
|
|
13
|
+
*
|
|
14
|
+
* Provides fuzzy matching for pattern names with tiered scoring:
|
|
15
|
+
* exact (1.0) > prefix (0.9) > substring (0.7) > Levenshtein (distance-based).
|
|
16
|
+
*
|
|
17
|
+
* No external dependencies — Levenshtein implementation is ~20 lines.
|
|
18
|
+
*
|
|
19
|
+
* Used by:
|
|
20
|
+
* - `search` subcommand: ranked results via fuzzyMatchPatterns()
|
|
21
|
+
* - `pattern` subcommand: "Did you mean...?" fallback via findBestMatch()
|
|
22
|
+
*
|
|
23
|
+
* **When to Use:** When resolving user-typed pattern names that may contain typos or partial matches.
|
|
24
|
+
*/
|
|
25
|
+
/** Minimum score threshold for inclusion in results */
|
|
26
|
+
const MIN_SCORE_THRESHOLD = 0.3;
|
|
27
|
+
/** Maximum Levenshtein distance to consider */
|
|
28
|
+
const MAX_LEVENSHTEIN_DISTANCE = 3;
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Functions
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Compute Levenshtein edit distance between two strings.
|
|
34
|
+
*
|
|
35
|
+
* Pure implementation with no external dependencies.
|
|
36
|
+
* Uses dynamic programming O(m*n) approach.
|
|
37
|
+
*
|
|
38
|
+
* @param a - First string
|
|
39
|
+
* @param b - Second string
|
|
40
|
+
* @returns Edit distance (0 = identical)
|
|
41
|
+
*/
|
|
42
|
+
export function levenshteinDistance(a, b) {
|
|
43
|
+
const m = a.length;
|
|
44
|
+
const n = b.length;
|
|
45
|
+
if (m === 0)
|
|
46
|
+
return n;
|
|
47
|
+
if (n === 0)
|
|
48
|
+
return m;
|
|
49
|
+
// Two-row DP: previous row and current row
|
|
50
|
+
let prevRow = Array.from({ length: n + 1 }, (_, i) => i);
|
|
51
|
+
let currRow = new Array(n + 1);
|
|
52
|
+
for (let i = 1; i <= m; i++) {
|
|
53
|
+
currRow[0] = i;
|
|
54
|
+
for (let j = 1; j <= n; j++) {
|
|
55
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
56
|
+
const deletion = (prevRow[j] ?? 0) + 1;
|
|
57
|
+
const insertion = (currRow[j - 1] ?? 0) + 1;
|
|
58
|
+
const substitution = (prevRow[j - 1] ?? 0) + cost;
|
|
59
|
+
currRow[j] = Math.min(deletion, insertion, substitution);
|
|
60
|
+
}
|
|
61
|
+
// Swap rows
|
|
62
|
+
[prevRow, currRow] = [currRow, prevRow];
|
|
63
|
+
}
|
|
64
|
+
return prevRow[n] ?? 0;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Score a single pattern name against a query using tiered matching.
|
|
68
|
+
*/
|
|
69
|
+
function scoreMatch(query, patternName) {
|
|
70
|
+
const queryLower = query.toLowerCase();
|
|
71
|
+
const nameLower = patternName.toLowerCase();
|
|
72
|
+
// Tier 1: Exact match (case-insensitive)
|
|
73
|
+
if (queryLower === nameLower) {
|
|
74
|
+
return { score: 1.0, matchType: 'exact' };
|
|
75
|
+
}
|
|
76
|
+
// Tier 2: Prefix match — score increases with query coverage of the name
|
|
77
|
+
if (nameLower.startsWith(queryLower)) {
|
|
78
|
+
const coverage = queryLower.length / nameLower.length;
|
|
79
|
+
const score = 0.9 + coverage * 0.09;
|
|
80
|
+
return { score: Math.min(score, 0.99), matchType: 'prefix' };
|
|
81
|
+
}
|
|
82
|
+
// Tier 3: Substring match
|
|
83
|
+
if (nameLower.includes(queryLower)) {
|
|
84
|
+
return { score: 0.7, matchType: 'substring' };
|
|
85
|
+
}
|
|
86
|
+
// Tier 4: Levenshtein distance
|
|
87
|
+
const distance = levenshteinDistance(queryLower, nameLower);
|
|
88
|
+
if (distance <= MAX_LEVENSHTEIN_DISTANCE) {
|
|
89
|
+
const maxLen = Math.max(queryLower.length, nameLower.length);
|
|
90
|
+
const score = maxLen > 0 ? 1 - distance / maxLen : 0;
|
|
91
|
+
if (score >= MIN_SCORE_THRESHOLD) {
|
|
92
|
+
return { score, matchType: 'fuzzy' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Find patterns matching a query with fuzzy matching.
|
|
99
|
+
*
|
|
100
|
+
* Scoring tiers (all case-insensitive):
|
|
101
|
+
* 1. Exact match: score = 1.0
|
|
102
|
+
* 2. Prefix match: score = 0.9 + (queryLen/nameLen) * 0.09 (shorter names rank higher)
|
|
103
|
+
* 3. Substring match: score = 0.7
|
|
104
|
+
* 4. Levenshtein distance <= 3: score = 1 - (distance / max(len1, len2))
|
|
105
|
+
*
|
|
106
|
+
* Results are sorted by score descending, with shorter names as tie-breaker.
|
|
107
|
+
*
|
|
108
|
+
* @param query - Search query string
|
|
109
|
+
* @param patternNames - All available pattern names to search
|
|
110
|
+
* @param maxResults - Maximum number of results to return (default: 10)
|
|
111
|
+
* @returns Sorted array of FuzzyMatch results
|
|
112
|
+
*/
|
|
113
|
+
export function fuzzyMatchPatterns(query, patternNames, maxResults = 10) {
|
|
114
|
+
const matches = [];
|
|
115
|
+
for (const patternName of patternNames) {
|
|
116
|
+
const result = scoreMatch(query, patternName);
|
|
117
|
+
if (result !== undefined) {
|
|
118
|
+
matches.push({
|
|
119
|
+
patternName,
|
|
120
|
+
score: result.score,
|
|
121
|
+
matchType: result.matchType,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
matches.sort((a, b) => {
|
|
126
|
+
if (b.score !== a.score)
|
|
127
|
+
return b.score - a.score;
|
|
128
|
+
// Tie-breaker: shorter name = more specific match
|
|
129
|
+
if (a.patternName.length !== b.patternName.length)
|
|
130
|
+
return a.patternName.length - b.patternName.length;
|
|
131
|
+
// Final tie-breaker: lexical ordering for deterministic results
|
|
132
|
+
return a.patternName.localeCompare(b.patternName);
|
|
133
|
+
});
|
|
134
|
+
return matches.slice(0, maxResults);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Find the single best match for a query.
|
|
138
|
+
*
|
|
139
|
+
* Used for "Did you mean...?" suggestions when an exact pattern lookup fails.
|
|
140
|
+
* Returns undefined if no match scores above the minimum threshold (0.3).
|
|
141
|
+
*
|
|
142
|
+
* @param query - Pattern name that wasn't found
|
|
143
|
+
* @param patternNames - All available pattern names
|
|
144
|
+
* @returns Best matching FuzzyMatch, or undefined if no good match
|
|
145
|
+
*/
|
|
146
|
+
export function findBestMatch(query, patternNames) {
|
|
147
|
+
const results = fuzzyMatchPatterns(query, patternNames, 1);
|
|
148
|
+
return results.length > 0 ? results[0] : undefined;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=fuzzy-match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-match.js","sourceRoot":"","sources":["../../src/api/fuzzy-match.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @architect
|
|
3
|
+
* @architect-pattern HandoffGeneratorImpl
|
|
4
|
+
* @architect-status completed
|
|
5
|
+
* @architect-implements DataAPIDesignSessionSupport
|
|
6
|
+
* @architect-uses ProcessStateAPI, MasterDataset, ContextFormatterImpl
|
|
7
|
+
* @architect-used-by ProcessAPICLIImpl
|
|
8
|
+
* @architect-target src/api/handoff-generator.ts
|
|
9
|
+
* @architect-arch-role service
|
|
10
|
+
* @architect-arch-context api
|
|
11
|
+
* @architect-arch-layer application
|
|
12
|
+
*
|
|
13
|
+
* ## HandoffGenerator — Session-End State Summary
|
|
14
|
+
*
|
|
15
|
+
* Pure function that assembles a handoff document from ProcessStateAPI
|
|
16
|
+
* and MasterDataset. Captures everything the next session needs to
|
|
17
|
+
* continue work without context loss.
|
|
18
|
+
*
|
|
19
|
+
* **When to Use:** When ending a work session and capturing state for the next session via the `handoff` CLI subcommand.
|
|
20
|
+
*/
|
|
21
|
+
import type { SessionType } from './context-assembler.js';
|
|
22
|
+
import type { ProcessStateAPI } from './process-state.js';
|
|
23
|
+
import type { MasterDataset } from '../validation-schemas/master-dataset.js';
|
|
24
|
+
/** Handoff supports 'review' in addition to standard session types (DD-3). */
|
|
25
|
+
export type HandoffSessionType = SessionType | 'review';
|
|
26
|
+
export interface HandoffOptions {
|
|
27
|
+
readonly patternName: string;
|
|
28
|
+
readonly sessionType?: HandoffSessionType;
|
|
29
|
+
readonly modifiedFiles?: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
export interface HandoffSection {
|
|
32
|
+
readonly title: string;
|
|
33
|
+
readonly items: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export interface HandoffDocument {
|
|
36
|
+
readonly pattern: string;
|
|
37
|
+
readonly sessionType: HandoffSessionType;
|
|
38
|
+
readonly date: string;
|
|
39
|
+
readonly status: string | undefined;
|
|
40
|
+
readonly sections: readonly HandoffSection[];
|
|
41
|
+
}
|
|
42
|
+
export declare function generateHandoff(api: ProcessStateAPI, _dataset: MasterDataset, // _dataset reserved for future use per design stub
|
|
43
|
+
options: HandoffOptions): HandoffDocument;
|
|
44
|
+
export declare function formatHandoff(doc: HandoffDocument): string;
|
|
45
|
+
//# sourceMappingURL=handoff-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-generator.d.ts","sourceRoot":"","sources":["../../src/api/handoff-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAc7E,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAsBD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,aAAa,EAAE,mDAAmD;AAC5E,OAAO,EAAE,cAAc,GACtB,eAAe,CA8FjB;AAMD,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAa1D"}
|