@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,1636 @@
|
|
|
1
|
+
# Architecture: @libar-dev/architect
|
|
2
|
+
|
|
3
|
+
> **Deprecated:** Architecture documentation is now auto-generated across multiple reference docs: [Architecture Diagram](../docs-live/ARCHITECTURE.md), [Architecture Codecs](../docs-live/reference/ARCHITECTURE-CODECS.md), and [Architecture Types](../docs-live/reference/ARCHITECTURE-TYPES.md). This file is preserved for reference only.
|
|
4
|
+
|
|
5
|
+
> **Code-Driven Documentation Generator with Codec-Based Transformation Pipeline**
|
|
6
|
+
|
|
7
|
+
This document describes the architecture of the `@libar-dev/architect` package, a documentation generator that extracts patterns from TypeScript and Gherkin sources, transforms them through a unified pipeline, and renders them as Markdown via typed codecs.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Table of Contents
|
|
12
|
+
|
|
13
|
+
1. [Executive Summary](#executive-summary)
|
|
14
|
+
2. [Configuration Architecture](#configuration-architecture)
|
|
15
|
+
3. [Four-Stage Pipeline](#four-stage-pipeline)
|
|
16
|
+
4. [Unified Transformation Architecture](#unified-transformation-architecture)
|
|
17
|
+
5. [Codec Architecture](#codec-architecture)
|
|
18
|
+
6. [Available Codecs](#available-codecs)
|
|
19
|
+
7. [Progressive Disclosure](#progressive-disclosure)
|
|
20
|
+
8. [Source Systems](#source-systems)
|
|
21
|
+
9. [Key Design Patterns](#key-design-patterns)
|
|
22
|
+
10. [Data Flow Diagrams](#data-flow-diagrams)
|
|
23
|
+
11. [Workflow Integration](#workflow-integration)
|
|
24
|
+
12. [Programmatic Usage](#programmatic-usage)
|
|
25
|
+
13. [Extending the System](#extending-the-system)
|
|
26
|
+
14. [Quick Reference](#quick-reference)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Executive Summary
|
|
31
|
+
|
|
32
|
+
### What This Package Does
|
|
33
|
+
|
|
34
|
+
The `@libar-dev/architect` package generates LLM-optimized documentation from dual sources:
|
|
35
|
+
|
|
36
|
+
- **TypeScript code** with configurable JSDoc annotations (e.g., `@architect-*`)
|
|
37
|
+
- **Gherkin feature files** with matching tags
|
|
38
|
+
|
|
39
|
+
The tag prefix is configurable via presets or custom configuration (see [Configuration Architecture](#configuration-architecture)).
|
|
40
|
+
|
|
41
|
+
### Key Design Principles
|
|
42
|
+
|
|
43
|
+
| Principle | Description |
|
|
44
|
+
| ------------------------------ | ------------------------------------------------------------------------------------------------ |
|
|
45
|
+
| **Single Source of Truth** | Code + .feature files are authoritative; docs are generated projections |
|
|
46
|
+
| **Single-Pass Transformation** | All derived views computed in O(n) time, not redundant O(n) per section |
|
|
47
|
+
| **Codec-Based Rendering** | Zod 4 codecs transform MasterDataset → RenderableDocument → Markdown |
|
|
48
|
+
| **Schema-First Validation** | Zod schemas define types; runtime validation at all boundaries |
|
|
49
|
+
| **Single Read Model** | MasterDataset is the sole read model for all consumers — codecs, validators, query API (ADR-006) |
|
|
50
|
+
| **Result Monad** | Explicit error handling via `Result<T, E>` instead of exceptions |
|
|
51
|
+
|
|
52
|
+
### Architecture Overview
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Four-Stage Pipeline
|
|
56
|
+
|
|
57
|
+
┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ ┌─────────────┐
|
|
58
|
+
│ SCANNER │ → │ EXTRACTOR │ → │ TRANSFORMER │ → │ CODEC │
|
|
59
|
+
│ │ │ │ │ │ │ │
|
|
60
|
+
│ TypeScript │ │ ExtractedP- │ │ MasterDataset │ │ Renderable │
|
|
61
|
+
│ Gherkin │ │ attern[] │ │ (pre-computed │ │ Document │
|
|
62
|
+
│ Files │ │ │ │ views) │ │ → Markdown │
|
|
63
|
+
└─────────────┘ └─────────────┘ └─────────────────┘ └─────────────┘
|
|
64
|
+
↑
|
|
65
|
+
┌─────────────┐
|
|
66
|
+
│ CONFIG │ defineConfig() → resolveProjectConfig() → ResolvedConfig
|
|
67
|
+
└─────────────┘
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Configuration Architecture
|
|
73
|
+
|
|
74
|
+
The package supports configurable tag prefixes via the Configuration API.
|
|
75
|
+
|
|
76
|
+
### Entry Point
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// architect.config.ts
|
|
80
|
+
import { defineConfig } from '@libar-dev/architect/config';
|
|
81
|
+
|
|
82
|
+
export default defineConfig({
|
|
83
|
+
preset: 'libar-generic',
|
|
84
|
+
sources: { typescript: ['src/**/*.ts'], features: ['specs/*.feature'] },
|
|
85
|
+
output: { directory: 'docs-generated', overwrite: true },
|
|
86
|
+
});
|
|
87
|
+
// Resolved to: ResolvedConfig { instance, project, isDefault, configPath }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### How Configuration Affects the Pipeline
|
|
91
|
+
|
|
92
|
+
| Stage | Configuration Input | Effect |
|
|
93
|
+
| --------------- | -------------------------------- | ------------------------------------------- |
|
|
94
|
+
| **Scanner** | `regexBuilders.hasFileOptIn()` | Detects files with configured opt-in marker |
|
|
95
|
+
| **Scanner** | `regexBuilders.directivePattern` | Matches tags with configured prefix |
|
|
96
|
+
| **Extractor** | `registry.categories` | Maps tags to category names |
|
|
97
|
+
| **Transformer** | `registry` | Builds MasterDataset with category indexes |
|
|
98
|
+
|
|
99
|
+
### Configuration Resolution
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
defineConfig(userConfig)
|
|
103
|
+
│
|
|
104
|
+
▼
|
|
105
|
+
┌──────────────────────────────────────────┐
|
|
106
|
+
│ 1. loadProjectConfig() discovers file │
|
|
107
|
+
│ and validates via Zod schema │
|
|
108
|
+
└──────────────────────────────────────────┘
|
|
109
|
+
│
|
|
110
|
+
▼
|
|
111
|
+
┌──────────────────────────────────────────┐
|
|
112
|
+
│ 2. resolveProjectConfig() │
|
|
113
|
+
│ - Select preset (or use default) │
|
|
114
|
+
│ - Apply tagPrefix/fileOptInTag/cats │
|
|
115
|
+
│ - Build registry + RegexBuilders │
|
|
116
|
+
│ - Merge stubs into TypeScript sources │
|
|
117
|
+
│ - Apply output defaults │
|
|
118
|
+
│ - Resolve generator overrides │
|
|
119
|
+
└──────────────────────────────────────────┘
|
|
120
|
+
│
|
|
121
|
+
▼
|
|
122
|
+
ResolvedConfig { instance, project, isDefault, configPath }
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Key Files
|
|
126
|
+
|
|
127
|
+
| File | Purpose |
|
|
128
|
+
| ------------------------------------- | ---------------------------------------------------------- |
|
|
129
|
+
| `src/config/define-config.ts` | `defineConfig()` identity function for type-safe authoring |
|
|
130
|
+
| `src/config/project-config.ts` | `ArchitectProjectConfig`, `ResolvedConfig` types |
|
|
131
|
+
| `src/config/project-config-schema.ts` | Zod validation schema, `isProjectConfig()` type guard |
|
|
132
|
+
| `src/config/resolve-config.ts` | `resolveProjectConfig()` — defaults + taxonomy resolution |
|
|
133
|
+
| `src/config/merge-sources.ts` | `mergeSourcesForGenerator()` — per-generator sources |
|
|
134
|
+
| `src/config/config-loader.ts` | `loadProjectConfig()` — file discovery + loading |
|
|
135
|
+
| `src/config/factory.ts` | `createArchitect()` — taxonomy factory (internal) |
|
|
136
|
+
| `src/config/presets.ts` | LIBAR_GENERIC_PRESET, DDD_ES_CQRS_PRESET |
|
|
137
|
+
|
|
138
|
+
> **See:** [CONFIGURATION.md](./CONFIGURATION.md) for usage examples and API reference.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Four-Stage Pipeline
|
|
143
|
+
|
|
144
|
+
The pipeline has two entry points. The orchestrator (`src/generators/orchestrator.ts`) runs all 10 steps end-to-end for documentation generation. The shared pipeline factory `buildMasterDataset()` (`src/generators/pipeline/build-pipeline.ts`) runs steps 1-8 and returns a `Result<PipelineResult, PipelineError>` for CLI consumers like process-api and validate-patterns (see [Pipeline Factory](#pipeline-factory-adr-006)).
|
|
145
|
+
|
|
146
|
+
### Stage 1: Scanner
|
|
147
|
+
|
|
148
|
+
**Purpose:** Discover source files and parse them into structured AST representations.
|
|
149
|
+
|
|
150
|
+
| Scanner Type | Input | Output | Key File |
|
|
151
|
+
| ------------ | ----------------------------- | ---------------------- | -------------------------------- |
|
|
152
|
+
| TypeScript | `.ts` files with `@architect` | `ScannedFile[]` | `src/scanner/pattern-scanner.ts` |
|
|
153
|
+
| Gherkin | `.feature` files | `ScannedGherkinFile[]` | `src/scanner/gherkin-scanner.ts` |
|
|
154
|
+
|
|
155
|
+
**TypeScript Scanning Flow:**
|
|
156
|
+
|
|
157
|
+
```text
|
|
158
|
+
findFilesToScan() → hasFileOptIn() → parseFileDirectives()
|
|
159
|
+
(glob patterns) (@architect check) (AST extraction)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Gherkin Scanning Flow:**
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
findFeatureFiles() → parseFeatureFile() → extractPatternTags()
|
|
166
|
+
(glob patterns) (Cucumber parser) (tag extraction)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Stage 2: Extractor
|
|
170
|
+
|
|
171
|
+
**Purpose:** Convert scanned files into normalized `ExtractedPattern` objects.
|
|
172
|
+
|
|
173
|
+
**Key Files:**
|
|
174
|
+
|
|
175
|
+
- `src/extractor/doc-extractor.ts:extractPatterns()` - Pattern extraction
|
|
176
|
+
- `src/extractor/shape-extractor.ts` - Shape extraction (3 modes)
|
|
177
|
+
|
|
178
|
+
**Shape Extraction Modes:**
|
|
179
|
+
|
|
180
|
+
| Mode | Trigger | Behavior |
|
|
181
|
+
| ----------------------- | ------------------------------------- | ---------------------------------------------- |
|
|
182
|
+
| Explicit names | `@architect-extract-shapes Foo, Bar` | Extracts named declarations only |
|
|
183
|
+
| Wildcard auto-discovery | `@architect-extract-shapes *` | Extracts all exported declarations from file |
|
|
184
|
+
| Declaration-level | `@architect-shape` on individual decl | Extracts tagged declarations (exported or not) |
|
|
185
|
+
|
|
186
|
+
Shapes now include `params`, `returns`, and `throws` fields (parsed from `@param`/`@returns`/`@throws` JSDoc tags on function shapes), and an optional `group` field from the `@architect-shape` tag value. `ExportInfo` includes an optional `signature` field for function/const/class declarations.
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
interface ExtractedPattern {
|
|
190
|
+
id: string; // pattern-{8-char-hex}
|
|
191
|
+
name: string;
|
|
192
|
+
category: string;
|
|
193
|
+
directive: DocDirective;
|
|
194
|
+
code: string;
|
|
195
|
+
source: SourceInfo; // { file, lines: [start, end] }
|
|
196
|
+
|
|
197
|
+
// Metadata from annotations
|
|
198
|
+
patternName?: string;
|
|
199
|
+
status?: PatternStatus; // roadmap|active|completed|deferred
|
|
200
|
+
phase?: number;
|
|
201
|
+
quarter?: string; // Q1-2025
|
|
202
|
+
release?: string; // v0.1.0 or vNEXT
|
|
203
|
+
useCases?: string[];
|
|
204
|
+
uses?: string[];
|
|
205
|
+
usedBy?: string[];
|
|
206
|
+
dependsOn?: string[];
|
|
207
|
+
enables?: string[];
|
|
208
|
+
|
|
209
|
+
// ... 30+ additional fields
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Dual-Source Merging:**
|
|
214
|
+
|
|
215
|
+
After extraction, patterns from both sources are merged with conflict detection. Merge behavior varies by consumer: `'fatal'` mode (used by process-api and orchestrator) returns an error if the same pattern name exists in both TypeScript and Gherkin; `'concatenate'` mode (used by validate-patterns) falls back to concatenation on conflict, since the validator needs both sources for cross-source matching.
|
|
216
|
+
|
|
217
|
+
### Pipeline Factory (ADR-006)
|
|
218
|
+
|
|
219
|
+
ADR-006 established the **Single Read Model Architecture**: the MasterDataset is the sole read model for all consumers. The shared pipeline factory extracts the 8-step scan-extract-merge-transform pipeline into a reusable function.
|
|
220
|
+
|
|
221
|
+
**Key File:** `src/generators/pipeline/build-pipeline.ts`
|
|
222
|
+
|
|
223
|
+
**Signature:**
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
function buildMasterDataset(
|
|
227
|
+
options: PipelineOptions
|
|
228
|
+
): Promise<Result<PipelineResult, PipelineError>>;
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**PipelineOptions:**
|
|
232
|
+
|
|
233
|
+
| Field | Type | Description |
|
|
234
|
+
| ----------------------- | -------------------------------------------- | -------------------------------------------------------- |
|
|
235
|
+
| `input` | `readonly string[]` | TypeScript source glob patterns |
|
|
236
|
+
| `features` | `readonly string[]` | Gherkin feature glob patterns |
|
|
237
|
+
| `baseDir` | `string` | Base directory for glob resolution |
|
|
238
|
+
| `mergeConflictStrategy` | `'fatal' \| 'concatenate'` | How to handle duplicate pattern names across sources |
|
|
239
|
+
| `exclude` | `readonly string[]` (optional) | Glob patterns to exclude from scanning |
|
|
240
|
+
| `workflowPath` | `string` (optional) | Custom workflow config JSON path |
|
|
241
|
+
| `contextInferenceRules` | `readonly ContextInferenceRule[]` (optional) | Custom context inference rules |
|
|
242
|
+
| `includeValidation` | `boolean` (optional) | When false, skip validation pass (default true) |
|
|
243
|
+
| `failOnScanErrors` | `boolean` (optional) | When true, return error on scan failures (default false) |
|
|
244
|
+
|
|
245
|
+
**PipelineResult:**
|
|
246
|
+
|
|
247
|
+
| Field | Type | Description |
|
|
248
|
+
| -------------- | ---------------------------- | ------------------------------------------ |
|
|
249
|
+
| `dataset` | `RuntimeMasterDataset` | The fully-computed read model |
|
|
250
|
+
| `validation` | `ValidationSummary` | Schema validation results for all patterns |
|
|
251
|
+
| `warnings` | `readonly PipelineWarning[]` | Structured non-fatal warnings |
|
|
252
|
+
| `scanMetadata` | `ScanMetadata` | Aggregate scan counts for reporting |
|
|
253
|
+
|
|
254
|
+
**PipelineWarning:**
|
|
255
|
+
|
|
256
|
+
| Field | Type | Description |
|
|
257
|
+
| --------- | --------------------------------------------- | -------------------------- |
|
|
258
|
+
| `type` | `'scan' \| 'extraction' \| 'gherkin-parse'` | Warning category |
|
|
259
|
+
| `message` | `string` | Human-readable description |
|
|
260
|
+
| `count` | `number` (optional) | Number of affected items |
|
|
261
|
+
| `details` | `readonly PipelineWarningDetail[]` (optional) | File-level diagnostics |
|
|
262
|
+
|
|
263
|
+
**ScanMetadata:**
|
|
264
|
+
|
|
265
|
+
| Field | Type | Description |
|
|
266
|
+
| ----------------------- | -------- | ---------------------------------- |
|
|
267
|
+
| `scannedFileCount` | `number` | Total files successfully scanned |
|
|
268
|
+
| `scanErrorCount` | `number` | Files that failed to scan |
|
|
269
|
+
| `skippedDirectiveCount` | `number` | Invalid directives skipped |
|
|
270
|
+
| `gherkinErrorCount` | `number` | Feature files that failed to parse |
|
|
271
|
+
|
|
272
|
+
**PipelineError:**
|
|
273
|
+
|
|
274
|
+
| Field | Type | Description |
|
|
275
|
+
| --------- | -------- | ------------------------------------------------------- |
|
|
276
|
+
| `step` | `string` | Pipeline step that failed (e.g., `'config'`, `'merge'`) |
|
|
277
|
+
| `message` | `string` | Human-readable error description |
|
|
278
|
+
|
|
279
|
+
**Consumer Table:**
|
|
280
|
+
|
|
281
|
+
| Consumer | `mergeConflictStrategy` | Error Handling |
|
|
282
|
+
| -------------------- | -------------------------------- | --------------------------- |
|
|
283
|
+
| `architect` | `'fatal'` | Maps to `process.exit(1)` |
|
|
284
|
+
| `architect-validate` | `'concatenate'` | Falls back to concatenation |
|
|
285
|
+
| `orchestrator` | inline (equivalent to `'fatal'`) | Inline error reporting |
|
|
286
|
+
|
|
287
|
+
**Consumer Layers (ADR-006):**
|
|
288
|
+
|
|
289
|
+
| Layer | May Import | Examples |
|
|
290
|
+
| ---------------------- | ------------------------------------- | ----------------------------------------------------- |
|
|
291
|
+
| Pipeline Orchestration | `scanner/`, `extractor/`, `pipeline/` | `orchestrator.ts`, pipeline setup in CLI entry points |
|
|
292
|
+
| Feature Consumption | `MasterDataset`, `relationshipIndex` | codecs, ProcessStateAPI, validators, query handlers |
|
|
293
|
+
|
|
294
|
+
**Named Anti-Patterns (ADR-006):**
|
|
295
|
+
|
|
296
|
+
| Anti-Pattern | Detection Signal |
|
|
297
|
+
| ----------------------- | -------------------------------------------------------------------------------------------------- |
|
|
298
|
+
| Parallel Pipeline | Feature consumer imports from `scanner/` or `extractor/` |
|
|
299
|
+
| Lossy Local Type | Local interface with subset of `ExtractedPattern` fields + dedicated extraction function |
|
|
300
|
+
| Re-derived Relationship | Building `Map` or `Set` from `pattern.implementsPatterns`, `uses`, or `dependsOn` in consumer code |
|
|
301
|
+
|
|
302
|
+
### Stage 3: Transformer
|
|
303
|
+
|
|
304
|
+
**Purpose:** Compute all derived views in a single O(n) pass.
|
|
305
|
+
|
|
306
|
+
**Key File:** `src/generators/pipeline/transform-dataset.ts:transformToMasterDataset()`
|
|
307
|
+
|
|
308
|
+
This is the **key innovation** of the unified pipeline. Instead of each section calling `.filter()` repeatedly:
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
// OLD: Each section filters independently - O(n) per section
|
|
312
|
+
const completed = patterns.filter((p) => normalizeStatus(p.status) === 'completed');
|
|
313
|
+
const active = patterns.filter((p) => normalizeStatus(p.status) === 'active');
|
|
314
|
+
const phase3 = patterns.filter((p) => p.phase === 3);
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
The transformer computes ALL views upfront:
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// NEW: Single-pass transformation - O(n) total
|
|
321
|
+
const masterDataset = transformToMasterDataset({ patterns, tagRegistry, workflow });
|
|
322
|
+
|
|
323
|
+
// Sections access pre-computed views - O(1)
|
|
324
|
+
const completed = masterDataset.byStatus.completed;
|
|
325
|
+
const phase3 = masterDataset.byPhase.find((p) => p.phaseNumber === 3);
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Stage 4: Codec
|
|
329
|
+
|
|
330
|
+
**Purpose:** Transform MasterDataset into RenderableDocument, then render to markdown.
|
|
331
|
+
|
|
332
|
+
**Key Files:**
|
|
333
|
+
|
|
334
|
+
- `src/renderable/codecs/*.ts` - Document codecs
|
|
335
|
+
- `src/renderable/render.ts` - Markdown renderer
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
// Codec transforms to universal intermediate format
|
|
339
|
+
const doc = PatternsDocumentCodec.decode(masterDataset);
|
|
340
|
+
|
|
341
|
+
// Renderer produces markdown files
|
|
342
|
+
const files = renderDocumentWithFiles(doc, 'PATTERNS.md');
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Unified Transformation Architecture
|
|
348
|
+
|
|
349
|
+
### MasterDataset Schema
|
|
350
|
+
|
|
351
|
+
**Key File:** `src/validation-schemas/master-dataset.ts`
|
|
352
|
+
|
|
353
|
+
The `MasterDataset` is the central data structure containing all pre-computed views:
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
interface MasterDataset {
|
|
357
|
+
// ─── Raw Data ───────────────────────────────────────────────────────────
|
|
358
|
+
patterns: ExtractedPattern[];
|
|
359
|
+
tagRegistry: TagRegistry;
|
|
360
|
+
|
|
361
|
+
// ─── Pre-computed Views (O(1) access) ───────────────────────────────────
|
|
362
|
+
byStatus: {
|
|
363
|
+
completed: ExtractedPattern[]; // status: completed
|
|
364
|
+
active: ExtractedPattern[]; // status: active
|
|
365
|
+
planned: ExtractedPattern[]; // status: roadmap|planned|undefined
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
byPhase: Array<{
|
|
369
|
+
phaseNumber: number;
|
|
370
|
+
phaseName?: string; // From workflow config
|
|
371
|
+
patterns: ExtractedPattern[];
|
|
372
|
+
counts: StatusCounts; // Pre-computed per-phase counts
|
|
373
|
+
}>; // Sorted by phase number ascending
|
|
374
|
+
|
|
375
|
+
byQuarter: Record<string, ExtractedPattern[]>; // e.g., "Q4-2024"
|
|
376
|
+
byCategory: Record<string, ExtractedPattern[]>;
|
|
377
|
+
|
|
378
|
+
bySource: {
|
|
379
|
+
typescript: ExtractedPattern[]; // From .ts files
|
|
380
|
+
gherkin: ExtractedPattern[]; // From .feature files
|
|
381
|
+
roadmap: ExtractedPattern[]; // Has phase metadata
|
|
382
|
+
prd: ExtractedPattern[]; // Has productArea/userRole/businessValue
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
// ─── Aggregate Statistics ───────────────────────────────────────────────
|
|
386
|
+
counts: StatusCounts; // { completed, active, planned, total }
|
|
387
|
+
phaseCount: number;
|
|
388
|
+
categoryCount: number;
|
|
389
|
+
|
|
390
|
+
// ─── Relationship Index (10 fields) ─────────────────────────────────────
|
|
391
|
+
relationshipIndex?: Record<
|
|
392
|
+
string,
|
|
393
|
+
{
|
|
394
|
+
// Forward relationships (from annotations)
|
|
395
|
+
uses: string[]; // @architect-uses
|
|
396
|
+
dependsOn: string[]; // @architect-depends-on
|
|
397
|
+
implementsPatterns: string[]; // @architect-implements
|
|
398
|
+
extendsPattern?: string; // @architect-extends
|
|
399
|
+
seeAlso: string[]; // @architect-see-also
|
|
400
|
+
apiRef: string[]; // @architect-api-ref
|
|
401
|
+
|
|
402
|
+
// Reverse lookups (computed by transformer)
|
|
403
|
+
usedBy: string[]; // inverse of uses
|
|
404
|
+
enables: string[]; // inverse of dependsOn
|
|
405
|
+
implementedBy: ImplementationRef[]; // inverse of implementsPatterns (with file paths)
|
|
406
|
+
extendedBy: string[]; // inverse of extendsPattern
|
|
407
|
+
}
|
|
408
|
+
>;
|
|
409
|
+
|
|
410
|
+
// ─── Architecture Data (optional) ──────────────────────────────────────
|
|
411
|
+
archIndex?: {
|
|
412
|
+
byRole: Record<string, ExtractedPattern[]>;
|
|
413
|
+
byContext: Record<string, ExtractedPattern[]>;
|
|
414
|
+
byLayer: Record<string, ExtractedPattern[]>;
|
|
415
|
+
byView: Record<string, ExtractedPattern[]>;
|
|
416
|
+
all: ExtractedPattern[];
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
### RuntimeMasterDataset
|
|
422
|
+
|
|
423
|
+
The runtime type extends `MasterDataset` with non-serializable workflow:
|
|
424
|
+
|
|
425
|
+
```typescript
|
|
426
|
+
// transform-dataset.ts:50-53
|
|
427
|
+
interface RuntimeMasterDataset extends MasterDataset {
|
|
428
|
+
readonly workflow?: LoadedWorkflow; // Contains Maps - not JSON-serializable
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Single-Pass Transformation
|
|
433
|
+
|
|
434
|
+
The `transformToMasterDataset()` function iterates over patterns exactly once, accumulating all views:
|
|
435
|
+
|
|
436
|
+
```typescript
|
|
437
|
+
// transform-dataset.ts:98-235 (simplified)
|
|
438
|
+
export function transformToMasterDataset(raw: RawDataset): RuntimeMasterDataset {
|
|
439
|
+
// Initialize accumulators
|
|
440
|
+
const byStatus: StatusGroups = { completed: [], active: [], planned: [] };
|
|
441
|
+
const byPhaseMap = new Map<number, ExtractedPattern[]>();
|
|
442
|
+
const byQuarter: Record<string, ExtractedPattern[]> = {};
|
|
443
|
+
const byCategoryMap = new Map<string, ExtractedPattern[]>();
|
|
444
|
+
const bySource: SourceViews = { typescript: [], gherkin: [], roadmap: [], prd: [] };
|
|
445
|
+
|
|
446
|
+
// Single pass over all patterns
|
|
447
|
+
for (const pattern of patterns) {
|
|
448
|
+
// Status grouping
|
|
449
|
+
const status = normalizeStatus(pattern.status);
|
|
450
|
+
byStatus[status].push(pattern);
|
|
451
|
+
|
|
452
|
+
// Phase grouping (also adds to roadmap)
|
|
453
|
+
if (pattern.phase !== undefined) {
|
|
454
|
+
byPhaseMap.get(pattern.phase)?.push(pattern) ?? byPhaseMap.set(pattern.phase, [pattern]);
|
|
455
|
+
bySource.roadmap.push(pattern);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// Quarter grouping
|
|
459
|
+
if (pattern.quarter) {
|
|
460
|
+
byQuarter[pattern.quarter] ??= [];
|
|
461
|
+
byQuarter[pattern.quarter].push(pattern);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Category grouping
|
|
465
|
+
byCategoryMap.get(pattern.category)?.push(pattern) ?? /* ... */;
|
|
466
|
+
|
|
467
|
+
// Source grouping (typescript vs gherkin)
|
|
468
|
+
// PRD grouping (has productArea/userRole/businessValue)
|
|
469
|
+
// Relationship index building
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// Build sorted phase groups with counts
|
|
473
|
+
const byPhase = Array.from(byPhaseMap.entries())
|
|
474
|
+
.sort(([a], [b]) => a - b)
|
|
475
|
+
.map(([phaseNumber, patterns]) => ({ phaseNumber, patterns, counts: computeCounts(patterns) }));
|
|
476
|
+
|
|
477
|
+
return { patterns, tagRegistry, byStatus, byPhase, byQuarter, byCategory, bySource, counts, /* ... */ };
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
## Codec Architecture
|
|
484
|
+
|
|
485
|
+
### Key Concepts
|
|
486
|
+
|
|
487
|
+
The Architect package uses a codec-based architecture for document generation:
|
|
488
|
+
|
|
489
|
+
```
|
|
490
|
+
MasterDataset → Codec.decode() → RenderableDocument ─┬→ renderToMarkdown → Markdown Files
|
|
491
|
+
└→ renderToClaudeMdModule → Modular Claude.md
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
| Component | Description |
|
|
495
|
+
| -------------------------- | --------------------------------------------------------------------------------- |
|
|
496
|
+
| **MasterDataset** | Aggregated view of all extracted patterns with indexes by category, phase, status |
|
|
497
|
+
| **Codec** | Zod 4 codec that transforms MasterDataset into RenderableDocument |
|
|
498
|
+
| **RenderableDocument** | Universal intermediate format with typed section blocks |
|
|
499
|
+
| **renderToMarkdown** | Domain-agnostic markdown renderer for human documentation |
|
|
500
|
+
| **renderToClaudeMdModule** | Modular-claude-md renderer (H3-rooted headings, omits Mermaid/link-outs) |
|
|
501
|
+
|
|
502
|
+
### Block Vocabulary (9 Types)
|
|
503
|
+
|
|
504
|
+
The RenderableDocument uses a fixed vocabulary of section blocks:
|
|
505
|
+
|
|
506
|
+
| Category | Block Types |
|
|
507
|
+
| --------------- | ----------------------------------- |
|
|
508
|
+
| **Structural** | `heading`, `paragraph`, `separator` |
|
|
509
|
+
| **Content** | `table`, `list`, `code`, `mermaid` |
|
|
510
|
+
| **Progressive** | `collapsible`, `link-out` |
|
|
511
|
+
|
|
512
|
+
### Factory Pattern
|
|
513
|
+
|
|
514
|
+
Every codec provides two exports:
|
|
515
|
+
|
|
516
|
+
```typescript
|
|
517
|
+
// Default codec with standard options
|
|
518
|
+
import { PatternsDocumentCodec } from './codecs';
|
|
519
|
+
const doc = PatternsDocumentCodec.decode(dataset);
|
|
520
|
+
|
|
521
|
+
// Factory for custom options
|
|
522
|
+
import { createPatternsCodec } from './codecs';
|
|
523
|
+
const codec = createPatternsCodec({ generateDetailFiles: false });
|
|
524
|
+
const doc = codec.decode(dataset);
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
## Available Codecs
|
|
530
|
+
|
|
531
|
+
> **Note:** Codec options shown below are illustrative. For complete and current options,
|
|
532
|
+
> see the source files in `src/renderable/codecs/` and `src/generators/types.ts`.
|
|
533
|
+
|
|
534
|
+
### Pattern-Focused Codecs
|
|
535
|
+
|
|
536
|
+
#### PatternsDocumentCodec
|
|
537
|
+
|
|
538
|
+
**Purpose:** Pattern registry with category-based organization.
|
|
539
|
+
|
|
540
|
+
**Output Files:**
|
|
541
|
+
|
|
542
|
+
- `PATTERNS.md` - Main index with progress summary, navigation, and pattern table
|
|
543
|
+
- `patterns/<category>.md` - Detail files per category (when progressive disclosure enabled)
|
|
544
|
+
|
|
545
|
+
**Options (PatternsCodecOptions):**
|
|
546
|
+
|
|
547
|
+
| Option | Type | Default | Description |
|
|
548
|
+
| -------------------------- | --------------------------------------- | ------------ | ------------------------------------------- |
|
|
549
|
+
| `generateDetailFiles` | boolean | `true` | Create category detail files |
|
|
550
|
+
| `detailLevel` | `"summary" \| "standard" \| "detailed"` | `"standard"` | Output verbosity |
|
|
551
|
+
| `includeDependencyGraph` | boolean | `true` | Render Mermaid dependency graph |
|
|
552
|
+
| `includeUseCases` | boolean | `true` | Show use cases section |
|
|
553
|
+
| `filterCategories` | string[] | `[]` | Filter to specific categories (empty = all) |
|
|
554
|
+
| `limits.recentItems` | number | `10` | Max recent items in summaries |
|
|
555
|
+
| `limits.collapseThreshold` | number | `5` | Items before collapsing |
|
|
556
|
+
|
|
557
|
+
#### RequirementsDocumentCodec
|
|
558
|
+
|
|
559
|
+
**Purpose:** Product requirements documentation grouped by product area or user role.
|
|
560
|
+
|
|
561
|
+
**Output Files:**
|
|
562
|
+
|
|
563
|
+
- `PRODUCT-REQUIREMENTS.md` - Main requirements index
|
|
564
|
+
- `requirements/<area-slug>.md` - Detail files per product area
|
|
565
|
+
|
|
566
|
+
**Options (RequirementsCodecOptions):**
|
|
567
|
+
|
|
568
|
+
| Option | Type | Default | Description |
|
|
569
|
+
| ---------------------- | ------------------------------------------ | ---------------- | -------------------------------- |
|
|
570
|
+
| `generateDetailFiles` | boolean | `true` | Create product area detail files |
|
|
571
|
+
| `groupBy` | `"product-area" \| "user-role" \| "phase"` | `"product-area"` | Primary grouping |
|
|
572
|
+
| `filterStatus` | `NormalizedStatusFilter[]` | `[]` | Filter by status (empty = all) |
|
|
573
|
+
| `includeScenarioSteps` | boolean | `true` | Show Given/When/Then steps |
|
|
574
|
+
| `includeBusinessValue` | boolean | `true` | Display business value metadata |
|
|
575
|
+
| `includeBusinessRules` | boolean | `true` | Show Gherkin Rule: sections |
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### Timeline-Focused Codecs
|
|
580
|
+
|
|
581
|
+
#### RoadmapDocumentCodec
|
|
582
|
+
|
|
583
|
+
**Purpose:** Development roadmap organized by phase with progress tracking.
|
|
584
|
+
|
|
585
|
+
**Output Files:**
|
|
586
|
+
|
|
587
|
+
- `ROADMAP.md` - Main roadmap with phase navigation and quarterly timeline
|
|
588
|
+
- `phases/phase-<N>-<name>.md` - Detail files per phase
|
|
589
|
+
|
|
590
|
+
**Options (RoadmapCodecOptions):**
|
|
591
|
+
|
|
592
|
+
| Option | Type | Default | Description |
|
|
593
|
+
| --------------------- | -------------------------- | ------- | ----------------------------------- |
|
|
594
|
+
| `generateDetailFiles` | boolean | `true` | Create phase detail files |
|
|
595
|
+
| `filterStatus` | `NormalizedStatusFilter[]` | `[]` | Filter by status |
|
|
596
|
+
| `includeProcess` | boolean | `true` | Show quarter, effort, team metadata |
|
|
597
|
+
| `includeDeliverables` | boolean | `true` | List deliverables per phase |
|
|
598
|
+
| `filterPhases` | number[] | `[]` | Filter to specific phases |
|
|
599
|
+
|
|
600
|
+
#### CompletedMilestonesCodec
|
|
601
|
+
|
|
602
|
+
**Purpose:** Historical record of completed work organized by quarter.
|
|
603
|
+
|
|
604
|
+
**Output Files:**
|
|
605
|
+
|
|
606
|
+
- `COMPLETED-MILESTONES.md` - Summary with completed phases and recent completions
|
|
607
|
+
- `milestones/<quarter>.md` - Detail files per quarter (e.g., `Q1-2026.md`)
|
|
608
|
+
|
|
609
|
+
#### CurrentWorkCodec
|
|
610
|
+
|
|
611
|
+
**Purpose:** Active development work currently in progress.
|
|
612
|
+
|
|
613
|
+
**Output Files:**
|
|
614
|
+
|
|
615
|
+
- `CURRENT-WORK.md` - Summary of active phases and patterns
|
|
616
|
+
- `current/phase-<N>-<name>.md` - Detail files for active phases
|
|
617
|
+
|
|
618
|
+
#### ChangelogCodec
|
|
619
|
+
|
|
620
|
+
**Purpose:** Keep a Changelog format changelog grouped by release version.
|
|
621
|
+
|
|
622
|
+
**Output Files:**
|
|
623
|
+
|
|
624
|
+
- `CHANGELOG.md` - Changelog with `[vNEXT]`, `[v0.1.0]` sections
|
|
625
|
+
|
|
626
|
+
**Options (ChangelogCodecOptions):**
|
|
627
|
+
|
|
628
|
+
| Option | Type | Default | Description |
|
|
629
|
+
| ------------------- | ------------------------ | ------- | --------------------------------- |
|
|
630
|
+
| `includeUnreleased` | boolean | `true` | Include unreleased section |
|
|
631
|
+
| `includeLinks` | boolean | `true` | Include links |
|
|
632
|
+
| `categoryMapping` | `Record<string, string>` | `{}` | Map categories to changelog types |
|
|
633
|
+
|
|
634
|
+
---
|
|
635
|
+
|
|
636
|
+
### Session-Focused Codecs
|
|
637
|
+
|
|
638
|
+
#### SessionContextCodec
|
|
639
|
+
|
|
640
|
+
**Purpose:** Current session context for AI agents and developers.
|
|
641
|
+
|
|
642
|
+
**Output Files:**
|
|
643
|
+
|
|
644
|
+
- `SESSION-CONTEXT.md` - Session status, active work, current phase focus
|
|
645
|
+
- `sessions/phase-<N>-<name>.md` - Detail files for incomplete phases
|
|
646
|
+
|
|
647
|
+
#### RemainingWorkCodec
|
|
648
|
+
|
|
649
|
+
**Purpose:** Aggregate view of all incomplete work across phases.
|
|
650
|
+
|
|
651
|
+
**Output Files:**
|
|
652
|
+
|
|
653
|
+
- `REMAINING-WORK.md` - Summary by phase, priority breakdown, next actionable
|
|
654
|
+
- `remaining/phase-<N>-<name>.md` - Detail files per incomplete phase
|
|
655
|
+
|
|
656
|
+
**Options (RemainingWorkCodecOptions):**
|
|
657
|
+
|
|
658
|
+
| Option | Type | Default | Description |
|
|
659
|
+
| ----------------------- | ------------------------------------------------ | --------- | ----------------------------- |
|
|
660
|
+
| `includeIncomplete` | boolean | `true` | Include planned items |
|
|
661
|
+
| `includeBlocked` | boolean | `true` | Show blocked items analysis |
|
|
662
|
+
| `includeNextActionable` | boolean | `true` | Next actionable items section |
|
|
663
|
+
| `maxNextActionable` | number | `5` | Max items in next actionable |
|
|
664
|
+
| `sortBy` | `"phase" \| "priority" \| "effort" \| "quarter"` | `"phase"` | Sort order |
|
|
665
|
+
| `groupPlannedBy` | `"quarter" \| "priority" \| "level" \| "none"` | `"none"` | Group planned items |
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
### Planning Codecs
|
|
670
|
+
|
|
671
|
+
#### PlanningChecklistCodec
|
|
672
|
+
|
|
673
|
+
**Purpose:** Pre-planning questions and Definition of Done validation.
|
|
674
|
+
|
|
675
|
+
**Output Files:** `PLANNING-CHECKLIST.md`
|
|
676
|
+
|
|
677
|
+
#### SessionPlanCodec
|
|
678
|
+
|
|
679
|
+
**Purpose:** Implementation plans for coding sessions.
|
|
680
|
+
|
|
681
|
+
**Output Files:** `SESSION-PLAN.md`
|
|
682
|
+
|
|
683
|
+
#### SessionFindingsCodec
|
|
684
|
+
|
|
685
|
+
**Purpose:** Retrospective discoveries for roadmap refinement.
|
|
686
|
+
|
|
687
|
+
**Output Files:** `SESSION-FINDINGS.md`
|
|
688
|
+
|
|
689
|
+
**Finding Sources:**
|
|
690
|
+
|
|
691
|
+
- `pattern.discoveredGaps` - Gap findings
|
|
692
|
+
- `pattern.discoveredImprovements` - Improvement suggestions
|
|
693
|
+
- `pattern.discoveredRisks` / `pattern.risk` - Risk findings
|
|
694
|
+
- `pattern.discoveredLearnings` - Learned insights
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
### Other Codecs
|
|
699
|
+
|
|
700
|
+
#### AdrDocumentCodec
|
|
701
|
+
|
|
702
|
+
**Purpose:** Architecture Decision Records extracted from patterns with @architect-adr tags.
|
|
703
|
+
|
|
704
|
+
**Output Files:**
|
|
705
|
+
|
|
706
|
+
- `DECISIONS.md` - ADR index with summary and grouping
|
|
707
|
+
- `decisions/<category-slug>.md` - Detail files per category
|
|
708
|
+
|
|
709
|
+
#### PrChangesCodec
|
|
710
|
+
|
|
711
|
+
**Purpose:** PR-scoped view filtered by changed files or release version.
|
|
712
|
+
|
|
713
|
+
**Output Files:** `working/PR-CHANGES.md`
|
|
714
|
+
|
|
715
|
+
#### TraceabilityCodec
|
|
716
|
+
|
|
717
|
+
**Purpose:** Timeline to behavior file coverage report.
|
|
718
|
+
|
|
719
|
+
**Output Files:** `TRACEABILITY.md`
|
|
720
|
+
|
|
721
|
+
#### OverviewCodec
|
|
722
|
+
|
|
723
|
+
**Purpose:** Project architecture and status overview.
|
|
724
|
+
|
|
725
|
+
**Output Files:** `OVERVIEW.md`
|
|
726
|
+
|
|
727
|
+
#### BusinessRulesCodec
|
|
728
|
+
|
|
729
|
+
**Purpose:** Business rules documentation organized by product area, phase, and feature. Extracts domain constraints from Gherkin `Rule:` blocks.
|
|
730
|
+
|
|
731
|
+
**Output Files:**
|
|
732
|
+
|
|
733
|
+
- `BUSINESS-RULES.md` - Main index with statistics and all rules
|
|
734
|
+
|
|
735
|
+
**Options (BusinessRulesCodecOptions extends BaseCodecOptions):**
|
|
736
|
+
|
|
737
|
+
| Option | Type | Default | Description |
|
|
738
|
+
| ---------------------- | -------------------------------------------- | --------------------- | ----------------------------------------- |
|
|
739
|
+
| `groupBy` | `"domain" \| "phase" \| "domain-then-phase"` | `"domain-then-phase"` | Primary grouping strategy |
|
|
740
|
+
| `includeCodeExamples` | boolean | `false` | Include code examples from DocStrings |
|
|
741
|
+
| `includeTables` | boolean | `true` | Include markdown tables from descriptions |
|
|
742
|
+
| `includeRationale` | boolean | `true` | Include rationale section per rule |
|
|
743
|
+
| `filterDomains` | string[] | `[]` | Filter by domain categories (empty = all) |
|
|
744
|
+
| `filterPhases` | number[] | `[]` | Filter by phases (empty = all) |
|
|
745
|
+
| `onlyWithInvariants` | boolean | `false` | Show only rules with explicit invariants |
|
|
746
|
+
| `includeSource` | boolean | `true` | Include source feature file link |
|
|
747
|
+
| `includeVerifiedBy` | boolean | `true` | Include "Verified by" scenario links |
|
|
748
|
+
| `maxDescriptionLength` | number | `150` | Max description length in standard mode |
|
|
749
|
+
| `excludeSourcePaths` | string[] | `[]` | Exclude patterns by source path prefix |
|
|
750
|
+
|
|
751
|
+
#### ArchitectureDocumentCodec
|
|
752
|
+
|
|
753
|
+
**Purpose:** Architecture diagrams (Mermaid) generated from source annotations. Supports component and layered views.
|
|
754
|
+
|
|
755
|
+
**Output Files:**
|
|
756
|
+
|
|
757
|
+
- `ARCHITECTURE.md` (generated) - Architecture diagrams with component inventory
|
|
758
|
+
|
|
759
|
+
**Options (ArchitectureCodecOptions extends BaseCodecOptions):**
|
|
760
|
+
|
|
761
|
+
| Option | Type | Default | Description |
|
|
762
|
+
| ------------------ | -------------------------- | ------------- | ----------------------------------------- |
|
|
763
|
+
| `diagramType` | `"component" \| "layered"` | `"component"` | Type of diagram to generate |
|
|
764
|
+
| `includeInventory` | boolean | `true` | Include component inventory table |
|
|
765
|
+
| `includeLegend` | boolean | `true` | Include legend for arrow styles |
|
|
766
|
+
| `filterContexts` | string[] | `[]` | Filter to specific contexts (empty = all) |
|
|
767
|
+
|
|
768
|
+
#### TaxonomyDocumentCodec
|
|
769
|
+
|
|
770
|
+
**Purpose:** Taxonomy reference documentation with tag definitions, preset comparison, and format type reference.
|
|
771
|
+
|
|
772
|
+
**Output Files:**
|
|
773
|
+
|
|
774
|
+
- `TAXONOMY.md` - Main taxonomy reference
|
|
775
|
+
- `taxonomy/*.md` - Detail files per tag domain
|
|
776
|
+
|
|
777
|
+
**Options (TaxonomyCodecOptions extends BaseCodecOptions):**
|
|
778
|
+
|
|
779
|
+
| Option | Type | Default | Description |
|
|
780
|
+
| -------------------- | ------- | ------- | ------------------------------- |
|
|
781
|
+
| `includePresets` | boolean | `true` | Include preset comparison table |
|
|
782
|
+
| `includeFormatTypes` | boolean | `true` | Include format type reference |
|
|
783
|
+
| `includeArchDiagram` | boolean | `true` | Include architecture diagram |
|
|
784
|
+
| `groupByDomain` | boolean | `true` | Group metadata tags by domain |
|
|
785
|
+
|
|
786
|
+
#### ValidationRulesCodec
|
|
787
|
+
|
|
788
|
+
**Purpose:** Process Guard validation rules reference with FSM diagrams and protection level matrix.
|
|
789
|
+
|
|
790
|
+
**Output Files:**
|
|
791
|
+
|
|
792
|
+
- `VALIDATION-RULES.md` - Main validation rules reference
|
|
793
|
+
- `validation/*.md` - Detail files per rule category
|
|
794
|
+
|
|
795
|
+
**Options (ValidationRulesCodecOptions extends BaseCodecOptions):**
|
|
796
|
+
|
|
797
|
+
| Option | Type | Default | Description |
|
|
798
|
+
| ------------------------- | ------- | ------- | -------------------------------- |
|
|
799
|
+
| `includeFSMDiagram` | boolean | `true` | Include FSM state diagram |
|
|
800
|
+
| `includeCLIUsage` | boolean | `true` | Include CLI usage section |
|
|
801
|
+
| `includeEscapeHatches` | boolean | `true` | Include escape hatches section |
|
|
802
|
+
| `includeProtectionMatrix` | boolean | `true` | Include protection levels matrix |
|
|
803
|
+
|
|
804
|
+
---
|
|
805
|
+
|
|
806
|
+
### Reference & Composition Codecs
|
|
807
|
+
|
|
808
|
+
#### ReferenceCodec
|
|
809
|
+
|
|
810
|
+
**Purpose:** Scoped reference documentation assembling four content layers into a single document.
|
|
811
|
+
|
|
812
|
+
**Output Files:**
|
|
813
|
+
|
|
814
|
+
- Configured per-instance (e.g., `docs/REFERENCE-SAMPLE.md`, `_claude-md/architecture/reference-sample.md`)
|
|
815
|
+
|
|
816
|
+
**4-Layer Composition (in order):**
|
|
817
|
+
|
|
818
|
+
1. **Convention content** — Extracted from `@architect-convention`-tagged patterns (rules, invariants, tables)
|
|
819
|
+
2. **Scoped diagrams** — Mermaid diagrams filtered by `archContext`, `archLayer`, `patterns`, or `archView`
|
|
820
|
+
3. **TypeScript shapes** — API surfaces from `shapeSelectors` (declaration-level filtering)
|
|
821
|
+
4. **Behavior content** — Gherkin-sourced patterns from `behaviorCategories`
|
|
822
|
+
|
|
823
|
+
**Diagram Types (via `DiagramScope.diagramType`):**
|
|
824
|
+
|
|
825
|
+
| Type | Description |
|
|
826
|
+
| ----------------- | -------------------------------------------------------------- |
|
|
827
|
+
| `graph` (default) | Flowchart with subgraphs by `archContext`, custom node shapes |
|
|
828
|
+
| `sequenceDiagram` | Sequence diagram with typed messages between participants |
|
|
829
|
+
| `stateDiagram-v2` | State diagram with transitions from `dependsOn` relationships |
|
|
830
|
+
| `C4Context` | C4 context diagram with boundaries, systems, and relationships |
|
|
831
|
+
| `classDiagram` | Class diagram with `<<archRole>>` stereotypes and typed arrows |
|
|
832
|
+
|
|
833
|
+
**Key Options (ReferenceDocConfig):**
|
|
834
|
+
|
|
835
|
+
| Option | Type | Description |
|
|
836
|
+
| -------------------- | ----------------- | ---------------------------------------------- |
|
|
837
|
+
| `diagramScopes` | `DiagramScope[]` | Multiple diagrams (takes precedence) |
|
|
838
|
+
| `shapeSelectors` | `ShapeSelector[]` | Fine-grained declaration-level shape filtering |
|
|
839
|
+
| `behaviorCategories` | `string[]` | Category tags for behavior pattern content |
|
|
840
|
+
| `conventionTags` | `string[]` | Convention tag values to include |
|
|
841
|
+
|
|
842
|
+
**ShapeSelector Variants:**
|
|
843
|
+
|
|
844
|
+
| Variant | Example | Behavior |
|
|
845
|
+
| ------------------- | ----------------------------------------------- | ------------------------- |
|
|
846
|
+
| `{ group: string }` | `{ group: "api-types" }` | Match shapes by group tag |
|
|
847
|
+
| `{ source, names }` | `{ source: "src/types.ts", names: ["Config"] }` | Named shapes from file |
|
|
848
|
+
| `{ source }` | `{ source: "src/**/*.ts" }` | All shapes from glob |
|
|
849
|
+
|
|
850
|
+
#### CompositeCodec
|
|
851
|
+
|
|
852
|
+
**Purpose:** Assembles documents from multiple child codecs into a single RenderableDocument.
|
|
853
|
+
|
|
854
|
+
**Key Exports:**
|
|
855
|
+
|
|
856
|
+
- `createCompositeCodec(codecs, options)` — Factory that decodes each child codec against the same MasterDataset and composes their outputs
|
|
857
|
+
- `composeDocuments(documents, options)` — Pure document-level composition (concatenates sections, merges `additionalFiles` with last-wins semantics)
|
|
858
|
+
|
|
859
|
+
**Options (CompositeCodecOptions):**
|
|
860
|
+
|
|
861
|
+
| Option | Type | Default | Description |
|
|
862
|
+
| ------------------ | ------- | ------- | -------------------------------------- |
|
|
863
|
+
| `title` | string | — | Document title |
|
|
864
|
+
| `purpose` | string | — | Document purpose for frontmatter |
|
|
865
|
+
| `separateSections` | boolean | `true` | Insert separator blocks between codecs |
|
|
866
|
+
|
|
867
|
+
---
|
|
868
|
+
|
|
869
|
+
## Progressive Disclosure
|
|
870
|
+
|
|
871
|
+
Progressive disclosure splits large documents into a main index plus detail files. This improves readability and enables focused navigation.
|
|
872
|
+
|
|
873
|
+
### How It Works
|
|
874
|
+
|
|
875
|
+
1. Main document contains summaries and navigation links
|
|
876
|
+
2. Detail files contain full information for each grouping
|
|
877
|
+
3. `link-out` blocks in main doc point to detail files
|
|
878
|
+
4. `additionalFiles` in RenderableDocument specifies detail paths
|
|
879
|
+
|
|
880
|
+
### Codec Split Logic
|
|
881
|
+
|
|
882
|
+
| Codec | Split By | Detail Path Pattern |
|
|
883
|
+
| ------------------ | ---------------------- | ------------------------------- |
|
|
884
|
+
| `patterns` | Category | `patterns/<category>.md` |
|
|
885
|
+
| `roadmap` | Phase | `phases/phase-<N>-<name>.md` |
|
|
886
|
+
| `milestones` | Quarter | `milestones/<quarter>.md` |
|
|
887
|
+
| `current` | Active Phase | `current/phase-<N>-<name>.md` |
|
|
888
|
+
| `requirements` | Product Area | `requirements/<area-slug>.md` |
|
|
889
|
+
| `session` | Incomplete Phase | `sessions/phase-<N>-<name>.md` |
|
|
890
|
+
| `remaining` | Incomplete Phase | `remaining/phase-<N>-<name>.md` |
|
|
891
|
+
| `adrs` | Category (≥ threshold) | `decisions/<category-slug>.md` |
|
|
892
|
+
| `taxonomy` | Tag Domain | `taxonomy/<domain>.md` |
|
|
893
|
+
| `validation-rules` | Rule Category | `validation/<category>.md` |
|
|
894
|
+
| `pr-changes` | None | Single file only |
|
|
895
|
+
|
|
896
|
+
### Disabling Progressive Disclosure
|
|
897
|
+
|
|
898
|
+
All codecs accept `generateDetailFiles: false` to produce compact single-file output:
|
|
899
|
+
|
|
900
|
+
```typescript
|
|
901
|
+
const codec = createPatternsCodec({ generateDetailFiles: false });
|
|
902
|
+
// Only produces PATTERNS.md, no patterns/*.md files
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
### Detail Level
|
|
906
|
+
|
|
907
|
+
The `detailLevel` option controls output verbosity:
|
|
908
|
+
|
|
909
|
+
| Value | Behavior |
|
|
910
|
+
| ------------ | ------------------------------------- |
|
|
911
|
+
| `"summary"` | Minimal output, key metrics only |
|
|
912
|
+
| `"standard"` | Default with all sections |
|
|
913
|
+
| `"detailed"` | Maximum detail, all optional sections |
|
|
914
|
+
|
|
915
|
+
---
|
|
916
|
+
|
|
917
|
+
## Source Systems
|
|
918
|
+
|
|
919
|
+
### TypeScript Scanner
|
|
920
|
+
|
|
921
|
+
**Key Files:**
|
|
922
|
+
|
|
923
|
+
- `src/scanner/pattern-scanner.ts` - File discovery and opt-in detection
|
|
924
|
+
- `src/scanner/ast-parser.ts` - TypeScript AST parsing
|
|
925
|
+
|
|
926
|
+
> **Note:** The scanner uses `RegexBuilders` from configuration to detect tags.
|
|
927
|
+
> The examples below use `@architect-*` (DDD_ES_CQRS_PRESET). For other prefixes, substitute accordingly.
|
|
928
|
+
|
|
929
|
+
**Annotation Format:**
|
|
930
|
+
|
|
931
|
+
```typescript
|
|
932
|
+
/**
|
|
933
|
+
* @architect // Required opt-in (file level)
|
|
934
|
+
* @architect-core @architect-infra // Category tags
|
|
935
|
+
* @architect-pattern MyPatternName // Pattern name
|
|
936
|
+
* @architect-status completed // Status: roadmap|active|completed|deferred
|
|
937
|
+
* @architect-phase 14 // Roadmap phase number
|
|
938
|
+
* @architect-uses OtherPattern, Another // Dependencies (CSV)
|
|
939
|
+
* @architect-usecase "When doing X" // Use cases (repeatable)
|
|
940
|
+
* @architect-convention fsm-rules // Convention tag (CSV, links to decisions)
|
|
941
|
+
* @architect-extract-shapes * // Auto-shape discovery (wildcard = all exports)
|
|
942
|
+
*
|
|
943
|
+
* ## Pattern Description // Markdown description
|
|
944
|
+
*
|
|
945
|
+
* Detailed description of the pattern...
|
|
946
|
+
*/
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
**Declaration-Level Shape Tagging:**
|
|
950
|
+
|
|
951
|
+
Individual declarations can be tagged with `@architect-shape` in their JSDoc, without requiring a file-level `@architect-extract-shapes` tag:
|
|
952
|
+
|
|
953
|
+
```typescript
|
|
954
|
+
/**
|
|
955
|
+
* @architect-shape api-types
|
|
956
|
+
* Configuration for the architect pipeline.
|
|
957
|
+
*/
|
|
958
|
+
export interface PipelineConfig { ... }
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
The optional value (e.g., `api-types`) sets the shape's `group` field, enabling `ShapeSelector` filtering by group in reference codecs.
|
|
962
|
+
|
|
963
|
+
**Tag Registry:** Defines categories, priorities, and metadata formats. Source: `src/taxonomy/` TypeScript modules.
|
|
964
|
+
|
|
965
|
+
### Gherkin Scanner
|
|
966
|
+
|
|
967
|
+
**Key Files:**
|
|
968
|
+
|
|
969
|
+
- `src/scanner/gherkin-scanner.ts` - Feature file discovery
|
|
970
|
+
- `src/scanner/gherkin-ast-parser.ts` - Cucumber Gherkin parsing
|
|
971
|
+
|
|
972
|
+
**Annotation Format:**
|
|
973
|
+
|
|
974
|
+
```gherkin
|
|
975
|
+
@architect-pattern:MyPattern @architect-phase:15 @architect-status:roadmap
|
|
976
|
+
@architect-quarter:Q1-2025 @architect-effort:2w @architect-team:platform
|
|
977
|
+
@architect-depends-on:OtherPattern @architect-enables:NextPattern
|
|
978
|
+
@architect-product-area:Generators @architect-user-role:Developer
|
|
979
|
+
@architect-release:v0.1.0
|
|
980
|
+
Feature: My Pattern Implementation
|
|
981
|
+
|
|
982
|
+
Background:
|
|
983
|
+
Given the following deliverables:
|
|
984
|
+
| Deliverable | Status |
|
|
985
|
+
| Core implementation | completed |
|
|
986
|
+
| Tests | active |
|
|
987
|
+
|
|
988
|
+
@acceptance-criteria
|
|
989
|
+
Scenario: Basic usage
|
|
990
|
+
When user does X
|
|
991
|
+
Then Y happens
|
|
992
|
+
```
|
|
993
|
+
|
|
994
|
+
**Data-Driven Tag Extraction:**
|
|
995
|
+
|
|
996
|
+
The Gherkin parser uses a data-driven approach — a `TAG_LOOKUP` map is built from `buildRegistry().metadataTags` at module load. For each tag, the registry definition provides: format (number/enum/csv/flag/value/quoted-value), optional transforms (`hyphenToSpace`, `padAdr`, `stripQuotes`), and the target `metadataKey`. Adding new Gherkin tags requires only a registry definition — no parser code changes.
|
|
997
|
+
|
|
998
|
+
**Tag Mapping:**
|
|
999
|
+
|
|
1000
|
+
| Gherkin Tag | ExtractedPattern Field |
|
|
1001
|
+
| ----------------------------- | ---------------------- |
|
|
1002
|
+
| `@architect-pattern:Name` | `patternName` |
|
|
1003
|
+
| `@architect-phase:N` | `phase` |
|
|
1004
|
+
| `@architect-status:*` | `status` |
|
|
1005
|
+
| `@architect-quarter:*` | `quarter` |
|
|
1006
|
+
| `@architect-release:*` | `release` |
|
|
1007
|
+
| `@architect-depends-on:*` | `dependsOn` |
|
|
1008
|
+
| `@architect-product-area:*` | `productArea` |
|
|
1009
|
+
| `@architect-convention:*` | `convention` |
|
|
1010
|
+
| `@architect-discovered-gap:*` | `discoveredGaps` |
|
|
1011
|
+
|
|
1012
|
+
### Status Normalization
|
|
1013
|
+
|
|
1014
|
+
All codecs normalize status to three canonical values:
|
|
1015
|
+
|
|
1016
|
+
| Input Status | Normalized To |
|
|
1017
|
+
| --------------------------------------- | ------------- |
|
|
1018
|
+
| `"completed"` | `"completed"` |
|
|
1019
|
+
| `"active"` | `"active"` |
|
|
1020
|
+
| `"roadmap"`, `"deferred"`, or undefined | `"planned"` |
|
|
1021
|
+
|
|
1022
|
+
---
|
|
1023
|
+
|
|
1024
|
+
## Key Design Patterns
|
|
1025
|
+
|
|
1026
|
+
### Result Monad
|
|
1027
|
+
|
|
1028
|
+
All operations return `Result<T, E>` for explicit error handling:
|
|
1029
|
+
|
|
1030
|
+
```typescript
|
|
1031
|
+
// types/result.ts
|
|
1032
|
+
type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };
|
|
1033
|
+
|
|
1034
|
+
// Usage
|
|
1035
|
+
const result = await scanPatterns(options);
|
|
1036
|
+
if (result.ok) {
|
|
1037
|
+
const { files } = result.value;
|
|
1038
|
+
} else {
|
|
1039
|
+
console.error(result.error); // Explicit error handling
|
|
1040
|
+
}
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
**Benefits:**
|
|
1044
|
+
|
|
1045
|
+
- No exception swallowing
|
|
1046
|
+
- Partial success scenarios supported
|
|
1047
|
+
- Type-safe error handling at boundaries
|
|
1048
|
+
|
|
1049
|
+
### Schema-First Validation
|
|
1050
|
+
|
|
1051
|
+
Types are defined as Zod schemas first, TypeScript types inferred:
|
|
1052
|
+
|
|
1053
|
+
```typescript
|
|
1054
|
+
// src/validation-schemas/extracted-pattern.ts
|
|
1055
|
+
export const ExtractedPatternSchema = z
|
|
1056
|
+
.object({
|
|
1057
|
+
id: PatternIdSchema,
|
|
1058
|
+
name: z.string().min(1),
|
|
1059
|
+
category: CategoryNameSchema,
|
|
1060
|
+
status: PatternStatusSchema.optional(),
|
|
1061
|
+
phase: z.number().int().positive().optional(),
|
|
1062
|
+
// ... 30+ fields
|
|
1063
|
+
})
|
|
1064
|
+
.strict();
|
|
1065
|
+
|
|
1066
|
+
export type ExtractedPattern = z.infer<typeof ExtractedPatternSchema>;
|
|
1067
|
+
```
|
|
1068
|
+
|
|
1069
|
+
**Benefits:**
|
|
1070
|
+
|
|
1071
|
+
- Runtime validation at all boundaries
|
|
1072
|
+
- Type inference from schemas (single source of truth)
|
|
1073
|
+
- Codec support for transformations
|
|
1074
|
+
|
|
1075
|
+
### Tag Registry
|
|
1076
|
+
|
|
1077
|
+
Data-driven configuration for pattern categorization:
|
|
1078
|
+
|
|
1079
|
+
```json
|
|
1080
|
+
// Generated from TypeScript taxonomy (src/taxonomy/)
|
|
1081
|
+
{
|
|
1082
|
+
"categories": [
|
|
1083
|
+
{ "tag": "core", "domain": "Core", "priority": 1, "description": "Core patterns" },
|
|
1084
|
+
{ "tag": "scanner", "domain": "Scanner", "priority": 10, "aliases": ["scan"] },
|
|
1085
|
+
{ "tag": "generator", "domain": "Generator", "priority": 20, "aliases": ["gen"] }
|
|
1086
|
+
],
|
|
1087
|
+
"metadataTags": [
|
|
1088
|
+
{ "tag": "status", "format": "enum", "values": ["roadmap", "active", "completed", "deferred"] },
|
|
1089
|
+
{ "tag": "phase", "format": "number" },
|
|
1090
|
+
{ "tag": "release", "format": "value" },
|
|
1091
|
+
{ "tag": "usecase", "format": "quoted-value", "repeatable": true }
|
|
1092
|
+
]
|
|
1093
|
+
}
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
**Category Inference Algorithm:**
|
|
1097
|
+
|
|
1098
|
+
1. Extract tag parts (e.g., `@architect-core-utils` → `["core", "utils"]`)
|
|
1099
|
+
2. Find matching categories in registry (with aliases)
|
|
1100
|
+
3. Select highest priority (lowest number)
|
|
1101
|
+
4. Fallback to "uncategorized"
|
|
1102
|
+
|
|
1103
|
+
---
|
|
1104
|
+
|
|
1105
|
+
## Data Flow Diagrams
|
|
1106
|
+
|
|
1107
|
+
### Complete Pipeline Flow
|
|
1108
|
+
|
|
1109
|
+
```
|
|
1110
|
+
┌─────────────────────────────────────────────────────────────────────────────────┐
|
|
1111
|
+
│ ORCHESTRATOR │
|
|
1112
|
+
│ │
|
|
1113
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1114
|
+
│ │ Step 1: Load Tag Registry ││
|
|
1115
|
+
│ │ buildRegistry() → TagRegistry ││
|
|
1116
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1117
|
+
│ │ │
|
|
1118
|
+
│ ▼ │
|
|
1119
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1120
|
+
│ │ Step 2-3: Scan TypeScript Sources ││
|
|
1121
|
+
│ │ scanPatterns() → extractPatterns() → ExtractedPattern[] ││
|
|
1122
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1123
|
+
│ │ │
|
|
1124
|
+
│ ▼ │
|
|
1125
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1126
|
+
│ │ Step 4-5: Scan Gherkin Sources ││
|
|
1127
|
+
│ │ scanGherkinFiles() → extractPatternsFromGherkin() ││
|
|
1128
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1129
|
+
│ │ │
|
|
1130
|
+
│ ▼ │
|
|
1131
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1132
|
+
│ │ Step 6: Merge Patterns (with conflict detection) ││
|
|
1133
|
+
│ │ mergePatterns(tsPatterns, gherkinPatterns) ││
|
|
1134
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1135
|
+
│ │ │
|
|
1136
|
+
│ ▼ │
|
|
1137
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1138
|
+
│ │ Step 7: Compute Hierarchy Children ││
|
|
1139
|
+
│ │ computeHierarchyChildren() → patterns with children[] populated ││
|
|
1140
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1141
|
+
│ │ │
|
|
1142
|
+
│ ▼ │
|
|
1143
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1144
|
+
│ │ Step 8: Transform to MasterDataset (SINGLE PASS) ││
|
|
1145
|
+
│ │ transformToMasterDataset({ patterns, tagRegistry, workflow }) ││
|
|
1146
|
+
│ │ ││
|
|
1147
|
+
│ │ Computes: byStatus, byPhase, byQuarter, byCategory, bySource, ││
|
|
1148
|
+
│ │ counts, phaseCount, categoryCount, relationshipIndex ││
|
|
1149
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1150
|
+
│ │ │
|
|
1151
|
+
│ ▼ │
|
|
1152
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1153
|
+
│ │ Step 9: Run Codecs ││
|
|
1154
|
+
│ │ for each generator: ││
|
|
1155
|
+
│ │ doc = Codec.decode(masterDataset) ││
|
|
1156
|
+
│ │ files = renderDocumentWithFiles(doc, outputPath) ││
|
|
1157
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1158
|
+
│ │ │
|
|
1159
|
+
│ ▼ │
|
|
1160
|
+
│ ┌─────────────────────────────────────────────────────────────────────────────┐│
|
|
1161
|
+
│ │ Step 10: Write Output Files ││
|
|
1162
|
+
│ │ fs.writeFile() for each OutputFile ││
|
|
1163
|
+
│ └─────────────────────────────────────────────────────────────────────────────┘│
|
|
1164
|
+
│ │
|
|
1165
|
+
└─────────────────────────────────────────────────────────────────────────────────┘
|
|
1166
|
+
```
|
|
1167
|
+
|
|
1168
|
+
### Pipeline Factory Entry Point (ADR-006)
|
|
1169
|
+
|
|
1170
|
+
Steps 1-8 are also available via `buildMasterDataset()` from `src/generators/pipeline/build-pipeline.ts`. The orchestrator adds Steps 9-10 (codec execution and file writing).
|
|
1171
|
+
|
|
1172
|
+
```
|
|
1173
|
+
buildMasterDataset(options)
|
|
1174
|
+
│
|
|
1175
|
+
▼
|
|
1176
|
+
Steps 1-8 (scan → extract → merge → transform)
|
|
1177
|
+
│
|
|
1178
|
+
▼
|
|
1179
|
+
Result<PipelineResult, PipelineError>
|
|
1180
|
+
│
|
|
1181
|
+
├── process-api CLI (mergeConflictStrategy: 'fatal')
|
|
1182
|
+
│ └── query handlers consume dataset
|
|
1183
|
+
│
|
|
1184
|
+
├── validate-patterns CLI (mergeConflictStrategy: 'concatenate')
|
|
1185
|
+
│ └── cross-source validation via relationshipIndex
|
|
1186
|
+
│
|
|
1187
|
+
└── orchestrator (inline pipeline, adds Steps 9-10)
|
|
1188
|
+
├── Step 9: Codec execution → RenderableDocument[]
|
|
1189
|
+
└── Step 10: File writing → OutputFile[]
|
|
1190
|
+
```
|
|
1191
|
+
|
|
1192
|
+
### MasterDataset Views
|
|
1193
|
+
|
|
1194
|
+
```
|
|
1195
|
+
┌─────────────────────────────────────┐
|
|
1196
|
+
│ MasterDataset │
|
|
1197
|
+
│ │
|
|
1198
|
+
│ patterns: ExtractedPattern[] │
|
|
1199
|
+
│ tagRegistry: TagRegistry │
|
|
1200
|
+
└─────────────────┬───────────────────┘
|
|
1201
|
+
│
|
|
1202
|
+
┌───────────────────────────────┼───────────────────────────────┐
|
|
1203
|
+
│ │ │
|
|
1204
|
+
▼ ▼ ▼
|
|
1205
|
+
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
|
|
1206
|
+
│ byStatus │ │ byPhase │ │ byQuarter │
|
|
1207
|
+
│ │ │ │ │ │
|
|
1208
|
+
│ .completed[] │ │ [0] phaseNumber: 1 │ │ "Q4-2024": [...] │
|
|
1209
|
+
│ .active[] │ │ patterns[] │ │ "Q1-2025": [...] │
|
|
1210
|
+
│ .planned[] │ │ counts │ │ "Q2-2025": [...] │
|
|
1211
|
+
└─────────────────────┘ │ │ └─────────────────────┘
|
|
1212
|
+
│ [1] phaseNumber: 14 │
|
|
1213
|
+
┌─────────────────│ patterns[] │───────────────────┐
|
|
1214
|
+
│ │ counts │ │
|
|
1215
|
+
▼ └─────────────────────┘ ▼
|
|
1216
|
+
┌─────────────────────┐ ┌─────────────────────┐
|
|
1217
|
+
│ byCategory │ │ bySource │
|
|
1218
|
+
│ │ │ │
|
|
1219
|
+
│ "core": [...] │ │ .typescript[] │
|
|
1220
|
+
│ "scanner": [...] │ │ .gherkin[] │
|
|
1221
|
+
│ "generator": [...] │ │ .roadmap[] │
|
|
1222
|
+
└─────────────────────┘ │ .prd[] │
|
|
1223
|
+
└─────────────────────┘
|
|
1224
|
+
│ │
|
|
1225
|
+
└───────────────────────┬───────────────────────────────┘
|
|
1226
|
+
│
|
|
1227
|
+
▼
|
|
1228
|
+
┌─────────────────────────────┐
|
|
1229
|
+
│ Aggregate Statistics │
|
|
1230
|
+
│ │
|
|
1231
|
+
│ counts: { completed: 45, │
|
|
1232
|
+
│ active: 12, │
|
|
1233
|
+
│ planned: 38, │
|
|
1234
|
+
│ total: 95 } │
|
|
1235
|
+
│ │
|
|
1236
|
+
│ phaseCount: 15 │
|
|
1237
|
+
│ categoryCount: 9 │
|
|
1238
|
+
└─────────────────────────────┘
|
|
1239
|
+
```
|
|
1240
|
+
|
|
1241
|
+
### Codec Transformation
|
|
1242
|
+
|
|
1243
|
+
````
|
|
1244
|
+
┌─────────────────────────────┐
|
|
1245
|
+
│ MasterDataset │
|
|
1246
|
+
└──────────────┬──────────────┘
|
|
1247
|
+
│
|
|
1248
|
+
┌──────────────────────────┼──────────────────────────┐
|
|
1249
|
+
│ │ │
|
|
1250
|
+
▼ ▼ ▼
|
|
1251
|
+
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
|
|
1252
|
+
│ PatternsCodec │ │ RoadmapCodec │ │ SessionCodec │
|
|
1253
|
+
│ .decode() │ │ .decode() │ │ .decode() │
|
|
1254
|
+
└─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘
|
|
1255
|
+
│ │ │
|
|
1256
|
+
▼ ▼ ▼
|
|
1257
|
+
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
|
|
1258
|
+
│RenderableDocument │ │RenderableDocument │ │RenderableDocument │
|
|
1259
|
+
│ │ │ │ │ │
|
|
1260
|
+
│ title: "Patterns" │ │ title: "Roadmap" │ │ title: "Session" │
|
|
1261
|
+
│ sections: [ │ │ sections: [ │ │ sections: [ │
|
|
1262
|
+
│ heading(...), │ │ heading(...), │ │ heading(...), │
|
|
1263
|
+
│ table(...), │ │ list(...), │ │ paragraph(...), │
|
|
1264
|
+
│ link-out(...) │ │ mermaid(...) │ │ collapsible() │
|
|
1265
|
+
│ ] │ │ ] │ │ ] │
|
|
1266
|
+
│ │ │ │ │ │
|
|
1267
|
+
│ additionalFiles: │ │ additionalFiles: │ │ additionalFiles: │
|
|
1268
|
+
│ { "patterns/ │ │ { "phases/ │ │ { "sessions/ │
|
|
1269
|
+
│ core.md": ... }│ │ phase-14.md" } │ │ phase-15.md" } │
|
|
1270
|
+
└───────────────────┘ └───────────────────┘ └───────────────────┘
|
|
1271
|
+
│ │ │
|
|
1272
|
+
└───────────────────────┼───────────────────────┘
|
|
1273
|
+
│
|
|
1274
|
+
▼
|
|
1275
|
+
┌─────────────────────────────┐
|
|
1276
|
+
│ renderToMarkdown() │
|
|
1277
|
+
│ │
|
|
1278
|
+
│ Traverses blocks: │
|
|
1279
|
+
│ heading → ## Title │
|
|
1280
|
+
│ table → | col | col | │
|
|
1281
|
+
│ list → - item │
|
|
1282
|
+
│ code → ```lang │
|
|
1283
|
+
│ mermaid → ```mermaid │
|
|
1284
|
+
│ link-out → [See ...](path)│
|
|
1285
|
+
└─────────────────────────────┘
|
|
1286
|
+
````
|
|
1287
|
+
|
|
1288
|
+
---
|
|
1289
|
+
|
|
1290
|
+
## Workflow Integration
|
|
1291
|
+
|
|
1292
|
+
### Planning a PR
|
|
1293
|
+
|
|
1294
|
+
Use planning codecs to prepare for implementation:
|
|
1295
|
+
|
|
1296
|
+
```typescript
|
|
1297
|
+
import { createSessionPlanCodec, createPlanningChecklistCodec } from '@libar-dev/architect';
|
|
1298
|
+
|
|
1299
|
+
// Generate planning documents
|
|
1300
|
+
const planCodec = createSessionPlanCodec({
|
|
1301
|
+
statusFilter: ['planned'],
|
|
1302
|
+
includeAcceptanceCriteria: true,
|
|
1303
|
+
});
|
|
1304
|
+
|
|
1305
|
+
const checklistCodec = createPlanningChecklistCodec({
|
|
1306
|
+
forActivePhases: false,
|
|
1307
|
+
forNextActionable: true,
|
|
1308
|
+
});
|
|
1309
|
+
```
|
|
1310
|
+
|
|
1311
|
+
**Output documents:**
|
|
1312
|
+
|
|
1313
|
+
- `SESSION-PLAN.md` - What to implement
|
|
1314
|
+
- `PLANNING-CHECKLIST.md` - Pre-flight verification
|
|
1315
|
+
|
|
1316
|
+
### Implementing a PR
|
|
1317
|
+
|
|
1318
|
+
Use session context and PR changes for active development:
|
|
1319
|
+
|
|
1320
|
+
```typescript
|
|
1321
|
+
import { createSessionContextCodec, createPrChangesCodec } from '@libar-dev/architect';
|
|
1322
|
+
|
|
1323
|
+
// Current session context
|
|
1324
|
+
const sessionCodec = createSessionContextCodec({
|
|
1325
|
+
includeAcceptanceCriteria: true,
|
|
1326
|
+
includeDependencies: true,
|
|
1327
|
+
});
|
|
1328
|
+
|
|
1329
|
+
// PR-scoped changes
|
|
1330
|
+
const prCodec = createPrChangesCodec({
|
|
1331
|
+
changedFiles: getChangedFiles(), // from git
|
|
1332
|
+
includeReviewChecklist: true,
|
|
1333
|
+
});
|
|
1334
|
+
```
|
|
1335
|
+
|
|
1336
|
+
**Output documents:**
|
|
1337
|
+
|
|
1338
|
+
- `SESSION-CONTEXT.md` - Current focus and blocked items
|
|
1339
|
+
- `working/PR-CHANGES.md` - PR review context
|
|
1340
|
+
|
|
1341
|
+
### Release Preparation
|
|
1342
|
+
|
|
1343
|
+
Use milestone and changelog codecs for release documentation:
|
|
1344
|
+
|
|
1345
|
+
```typescript
|
|
1346
|
+
import { createMilestonesCodec, createChangelogCodec } from '@libar-dev/architect';
|
|
1347
|
+
|
|
1348
|
+
// Quarter-filtered milestones
|
|
1349
|
+
const milestonesCodec = createMilestonesCodec({
|
|
1350
|
+
filterQuarters: ['Q1-2026'],
|
|
1351
|
+
});
|
|
1352
|
+
|
|
1353
|
+
// Changelog with release tagging
|
|
1354
|
+
const changelogCodec = createChangelogCodec({
|
|
1355
|
+
includeUnreleased: false,
|
|
1356
|
+
});
|
|
1357
|
+
```
|
|
1358
|
+
|
|
1359
|
+
**Output documents:**
|
|
1360
|
+
|
|
1361
|
+
- `COMPLETED-MILESTONES.md` - What shipped
|
|
1362
|
+
- `CHANGELOG.md` - Release notes
|
|
1363
|
+
|
|
1364
|
+
### Session Context Generation
|
|
1365
|
+
|
|
1366
|
+
For AI agents or session handoffs:
|
|
1367
|
+
|
|
1368
|
+
```typescript
|
|
1369
|
+
import {
|
|
1370
|
+
createSessionContextCodec,
|
|
1371
|
+
createRemainingWorkCodec,
|
|
1372
|
+
createCurrentWorkCodec,
|
|
1373
|
+
} from '@libar-dev/architect';
|
|
1374
|
+
|
|
1375
|
+
// Full session context bundle
|
|
1376
|
+
const sessionCodec = createSessionContextCodec({
|
|
1377
|
+
includeHandoffContext: true,
|
|
1378
|
+
includeRelatedPatterns: true,
|
|
1379
|
+
});
|
|
1380
|
+
|
|
1381
|
+
const remainingCodec = createRemainingWorkCodec({
|
|
1382
|
+
includeNextActionable: true,
|
|
1383
|
+
maxNextActionable: 10,
|
|
1384
|
+
groupPlannedBy: 'priority',
|
|
1385
|
+
});
|
|
1386
|
+
|
|
1387
|
+
const currentCodec = createCurrentWorkCodec({
|
|
1388
|
+
includeDeliverables: true,
|
|
1389
|
+
includeProcess: true,
|
|
1390
|
+
});
|
|
1391
|
+
```
|
|
1392
|
+
|
|
1393
|
+
**Output documents:**
|
|
1394
|
+
|
|
1395
|
+
- `SESSION-CONTEXT.md` - Where we are
|
|
1396
|
+
- `REMAINING-WORK.md` - What's left
|
|
1397
|
+
- `CURRENT-WORK.md` - What's in progress
|
|
1398
|
+
|
|
1399
|
+
---
|
|
1400
|
+
|
|
1401
|
+
## Programmatic Usage
|
|
1402
|
+
|
|
1403
|
+
### Direct Codec Usage
|
|
1404
|
+
|
|
1405
|
+
```typescript
|
|
1406
|
+
import { createPatternsCodec, type MasterDataset } from '@libar-dev/architect';
|
|
1407
|
+
import { renderToMarkdown } from '@libar-dev/architect/renderable';
|
|
1408
|
+
|
|
1409
|
+
// Create custom codec
|
|
1410
|
+
const codec = createPatternsCodec({
|
|
1411
|
+
filterCategories: ['core'],
|
|
1412
|
+
generateDetailFiles: false,
|
|
1413
|
+
});
|
|
1414
|
+
|
|
1415
|
+
// Transform dataset
|
|
1416
|
+
const document = codec.decode(masterDataset);
|
|
1417
|
+
|
|
1418
|
+
// Render to markdown
|
|
1419
|
+
const markdown = renderToMarkdown(document);
|
|
1420
|
+
```
|
|
1421
|
+
|
|
1422
|
+
### Using generateDocument
|
|
1423
|
+
|
|
1424
|
+
```typescript
|
|
1425
|
+
import { generateDocument, type DocumentType } from '@libar-dev/architect/renderable';
|
|
1426
|
+
|
|
1427
|
+
// Generate with default options
|
|
1428
|
+
const files = generateDocument('patterns', masterDataset);
|
|
1429
|
+
|
|
1430
|
+
// files is OutputFile[]
|
|
1431
|
+
for (const file of files) {
|
|
1432
|
+
console.log(`${file.path}: ${file.content.length} bytes`);
|
|
1433
|
+
}
|
|
1434
|
+
```
|
|
1435
|
+
|
|
1436
|
+
### Accessing Additional Files
|
|
1437
|
+
|
|
1438
|
+
The RenderableDocument includes detail files in `additionalFiles`:
|
|
1439
|
+
|
|
1440
|
+
```typescript
|
|
1441
|
+
const document = PatternsDocumentCodec.decode(dataset);
|
|
1442
|
+
|
|
1443
|
+
// Main content
|
|
1444
|
+
console.log(document.title); // "Pattern Registry"
|
|
1445
|
+
console.log(document.sections.length);
|
|
1446
|
+
|
|
1447
|
+
// Detail files (for progressive disclosure)
|
|
1448
|
+
if (document.additionalFiles) {
|
|
1449
|
+
for (const [path, subDoc] of Object.entries(document.additionalFiles)) {
|
|
1450
|
+
console.log(`Detail file: ${path}`);
|
|
1451
|
+
console.log(` Title: ${subDoc.title}`);
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
```
|
|
1455
|
+
|
|
1456
|
+
---
|
|
1457
|
+
|
|
1458
|
+
## Extending the System
|
|
1459
|
+
|
|
1460
|
+
### Creating a Custom Codec
|
|
1461
|
+
|
|
1462
|
+
```typescript
|
|
1463
|
+
import { z } from 'zod';
|
|
1464
|
+
import { MasterDatasetSchema, type MasterDataset } from '../validation-schemas/master-dataset';
|
|
1465
|
+
import { type RenderableDocument, document, heading, paragraph } from '../renderable/schema';
|
|
1466
|
+
import { RenderableDocumentOutputSchema } from '../renderable/codecs/shared-schema';
|
|
1467
|
+
|
|
1468
|
+
// Define options
|
|
1469
|
+
interface MyCodecOptions {
|
|
1470
|
+
includeCustomSection?: boolean;
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
// Create factory
|
|
1474
|
+
export function createMyCodec(options?: MyCodecOptions) {
|
|
1475
|
+
const opts = { includeCustomSection: true, ...options };
|
|
1476
|
+
|
|
1477
|
+
return z.codec(MasterDatasetSchema, RenderableDocumentOutputSchema, {
|
|
1478
|
+
decode: (dataset: MasterDataset): RenderableDocument => {
|
|
1479
|
+
const sections = [
|
|
1480
|
+
heading(2, 'Summary'),
|
|
1481
|
+
paragraph(`Total patterns: ${dataset.counts.total}`),
|
|
1482
|
+
];
|
|
1483
|
+
|
|
1484
|
+
if (opts.includeCustomSection) {
|
|
1485
|
+
sections.push(heading(2, 'Custom Section'));
|
|
1486
|
+
sections.push(paragraph('Custom content here'));
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
return document('My Custom Document', sections, {
|
|
1490
|
+
purpose: 'Custom document purpose',
|
|
1491
|
+
});
|
|
1492
|
+
},
|
|
1493
|
+
encode: () => {
|
|
1494
|
+
throw new Error('MyCodec is decode-only');
|
|
1495
|
+
},
|
|
1496
|
+
});
|
|
1497
|
+
}
|
|
1498
|
+
```
|
|
1499
|
+
|
|
1500
|
+
### Registering a Custom Generator
|
|
1501
|
+
|
|
1502
|
+
```typescript
|
|
1503
|
+
import { generatorRegistry } from '@libar-dev/architect/generators';
|
|
1504
|
+
import { createCodecGenerator } from '@libar-dev/architect/generators/codec-based';
|
|
1505
|
+
|
|
1506
|
+
// Register if using existing document type
|
|
1507
|
+
generatorRegistry.register(createCodecGenerator('my-patterns', 'patterns'));
|
|
1508
|
+
|
|
1509
|
+
// Or create custom generator class for new codec
|
|
1510
|
+
class MyCustomGenerator implements DocumentGenerator {
|
|
1511
|
+
readonly name = 'my-custom';
|
|
1512
|
+
readonly description = 'My custom generator';
|
|
1513
|
+
|
|
1514
|
+
generate(patterns, context) {
|
|
1515
|
+
const codec = createMyCodec();
|
|
1516
|
+
const doc = codec.decode(context.masterDataset);
|
|
1517
|
+
const files = renderDocumentWithFiles(doc, 'MY-CUSTOM.md');
|
|
1518
|
+
return Promise.resolve({ files });
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
generatorRegistry.register(new MyCustomGenerator());
|
|
1523
|
+
```
|
|
1524
|
+
|
|
1525
|
+
---
|
|
1526
|
+
|
|
1527
|
+
## Quick Reference
|
|
1528
|
+
|
|
1529
|
+
### Codec to Generator Mapping
|
|
1530
|
+
|
|
1531
|
+
| Codec | Generator Name | CLI Flag |
|
|
1532
|
+
| --------------------------- | -------------------- | ----------------------- |
|
|
1533
|
+
| `PatternsDocumentCodec` | `patterns` | `-g patterns` |
|
|
1534
|
+
| `RoadmapDocumentCodec` | `roadmap` | `-g roadmap` |
|
|
1535
|
+
| `CompletedMilestonesCodec` | `milestones` | `-g milestones` |
|
|
1536
|
+
| `CurrentWorkCodec` | `current` | `-g current` |
|
|
1537
|
+
| `RequirementsDocumentCodec` | `requirements` | `-g requirements` |
|
|
1538
|
+
| `SessionContextCodec` | `session` | `-g session` |
|
|
1539
|
+
| `RemainingWorkCodec` | `remaining` | `-g remaining` |
|
|
1540
|
+
| `PrChangesCodec` | `pr-changes` | `-g pr-changes` |
|
|
1541
|
+
| `AdrDocumentCodec` | `adrs` | `-g adrs` |
|
|
1542
|
+
| `PlanningChecklistCodec` | `planning-checklist` | `-g planning-checklist` |
|
|
1543
|
+
| `SessionPlanCodec` | `session-plan` | `-g session-plan` |
|
|
1544
|
+
| `SessionFindingsCodec` | `session-findings` | `-g session-findings` |
|
|
1545
|
+
| `ChangelogCodec` | `changelog` | `-g changelog` |
|
|
1546
|
+
| `TraceabilityCodec` | `traceability` | `-g traceability` |
|
|
1547
|
+
| `OverviewCodec` | `overview-rdm` | `-g overview-rdm` |
|
|
1548
|
+
| `BusinessRulesCodec` | `business-rules` | `-g business-rules` |
|
|
1549
|
+
| `ArchitectureDocumentCodec` | `architecture` | `-g architecture` |
|
|
1550
|
+
| `TaxonomyDocumentCodec` | `taxonomy` | `-g taxonomy` |
|
|
1551
|
+
| `ValidationRulesCodec` | `validation-rules` | `-g validation-rules` |
|
|
1552
|
+
| `ReferenceCodec` | `reference-sample` | `-g reference-sample` |
|
|
1553
|
+
| `DecisionDocGenerator` | `doc-from-decision` | `-g doc-from-decision` |
|
|
1554
|
+
|
|
1555
|
+
### CLI Usage
|
|
1556
|
+
|
|
1557
|
+
```bash
|
|
1558
|
+
# Single generator
|
|
1559
|
+
pnpm exec architect-generate -i "src/**/*.ts" -g patterns -o docs
|
|
1560
|
+
|
|
1561
|
+
# Multiple generators
|
|
1562
|
+
pnpm exec architect-generate -i "src/**/*.ts" -g patterns -g roadmap -g session -o docs
|
|
1563
|
+
|
|
1564
|
+
# List available generators
|
|
1565
|
+
pnpm exec architect-generate --list-generators
|
|
1566
|
+
```
|
|
1567
|
+
|
|
1568
|
+
### Common Filter Patterns
|
|
1569
|
+
|
|
1570
|
+
```typescript
|
|
1571
|
+
// Status filters
|
|
1572
|
+
filterStatus: ['completed']; // Historical only
|
|
1573
|
+
filterStatus: ['active', 'planned']; // Future work
|
|
1574
|
+
filterStatus: []; // All (default)
|
|
1575
|
+
|
|
1576
|
+
// Phase filters
|
|
1577
|
+
filterPhases: [14, 15, 16]; // Specific phases
|
|
1578
|
+
filterPhases: []; // All (default)
|
|
1579
|
+
|
|
1580
|
+
// Category filters
|
|
1581
|
+
filterCategories: ['core', 'ddd']; // Specific categories
|
|
1582
|
+
filterCategories: []; // All (default)
|
|
1583
|
+
|
|
1584
|
+
// Quarter filters
|
|
1585
|
+
filterQuarters: ['Q1-2026']; // Specific quarter
|
|
1586
|
+
filterQuarters: []; // All (default)
|
|
1587
|
+
```
|
|
1588
|
+
|
|
1589
|
+
### Output Mode Shortcuts
|
|
1590
|
+
|
|
1591
|
+
```typescript
|
|
1592
|
+
// Compact single-file output
|
|
1593
|
+
{ generateDetailFiles: false, detailLevel: "summary" }
|
|
1594
|
+
|
|
1595
|
+
// Standard with progressive disclosure
|
|
1596
|
+
{ generateDetailFiles: true, detailLevel: "standard" }
|
|
1597
|
+
|
|
1598
|
+
// Maximum detail
|
|
1599
|
+
{ generateDetailFiles: true, detailLevel: "detailed" }
|
|
1600
|
+
```
|
|
1601
|
+
|
|
1602
|
+
---
|
|
1603
|
+
|
|
1604
|
+
## Related Documentation
|
|
1605
|
+
|
|
1606
|
+
- [README.md](../README.md) - Package quick start and API overview
|
|
1607
|
+
- [CONFIGURATION.md](./CONFIGURATION.md) - Configuration guide, presets, customization
|
|
1608
|
+
- [TAXONOMY.md](./TAXONOMY.md) - Tag taxonomy concepts and API
|
|
1609
|
+
- [src/taxonomy/](../src/taxonomy/) - TypeScript taxonomy source (categories, status values, priorities)
|
|
1610
|
+
|
|
1611
|
+
---
|
|
1612
|
+
|
|
1613
|
+
## Code References
|
|
1614
|
+
|
|
1615
|
+
| Component | File | Purpose |
|
|
1616
|
+
| ------------------------ | --------------------------------------------------- | ---------------------------------------------- |
|
|
1617
|
+
| MasterDataset Schema | `src/validation-schemas/master-dataset.ts` | Central data structure |
|
|
1618
|
+
| transformToMasterDataset | `src/generators/pipeline/transform-dataset.ts` | Single-pass transformation |
|
|
1619
|
+
| Document Codecs | `src/renderable/codecs/*.ts` | Zod 4 codec implementations |
|
|
1620
|
+
| Reference Codec | `src/renderable/codecs/reference.ts` | Scoped reference documents |
|
|
1621
|
+
| Composite Codec | `src/renderable/codecs/composite.ts` | Multi-codec assembly |
|
|
1622
|
+
| Convention Extractor | `src/renderable/codecs/convention-extractor.ts` | Convention content extraction |
|
|
1623
|
+
| Shape Matcher | `src/renderable/codecs/shape-matcher.ts` | Declaration-level filtering |
|
|
1624
|
+
| Markdown Renderer | `src/renderable/render.ts` | Block → Markdown |
|
|
1625
|
+
| Claude Context Renderer | `src/renderable/render.ts` | LLM-optimized rendering |
|
|
1626
|
+
| Orchestrator | `src/generators/orchestrator.ts` | Pipeline coordination |
|
|
1627
|
+
| TypeScript Scanner | `src/scanner/pattern-scanner.ts` | TS AST parsing |
|
|
1628
|
+
| Gherkin Scanner | `src/scanner/gherkin-scanner.ts` | Feature file parsing |
|
|
1629
|
+
| Pipeline Factory | `src/generators/pipeline/build-pipeline.ts` | Shared 8-step pipeline for CLI consumers |
|
|
1630
|
+
| Business Rules Query | `src/api/rules-query.ts` | Rules domain query (from Gherkin Rule: blocks) |
|
|
1631
|
+
| Business Rules Codec | `src/renderable/codecs/business-rules.ts` | Business rules from Gherkin Rule: blocks |
|
|
1632
|
+
| Architecture Codec | `src/renderable/codecs/architecture.ts` | Architecture diagrams from annotations |
|
|
1633
|
+
| Taxonomy Codec | `src/renderable/codecs/taxonomy.ts` | Taxonomy reference documentation |
|
|
1634
|
+
| Validation Rules Codec | `src/renderable/codecs/validation-rules.ts` | Process Guard validation rules reference |
|
|
1635
|
+
| Decision Doc Generator | `src/generators/built-in/decision-doc-generator.ts` | ADR/PDR decision documents |
|
|
1636
|
+
| Shape Extractor | `src/extractor/shape-extractor.ts` | Shape extraction from TS |
|