@libar-dev/architect 1.0.0-pre.3 → 1.0.0-pre.5
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 +1 -1
- package/README.md +5 -5
- package/dist/api/arch-queries.d.ts.map +1 -1
- package/dist/api/context-assembler.d.ts.map +1 -1
- package/dist/api/handoff-generator.d.ts.map +1 -1
- package/dist/api/index.d.ts +8 -8
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +7 -7
- package/dist/api/index.js.map +1 -1
- package/dist/api/{process-state.d.ts → pattern-graph-api.d.ts} +15 -15
- package/dist/api/pattern-graph-api.d.ts.map +1 -0
- package/dist/api/{process-state.js → pattern-graph-api.js} +13 -13
- package/dist/api/pattern-graph-api.js.map +1 -0
- package/dist/api/rules-query.d.ts +6 -6
- package/dist/api/rules-query.d.ts.map +1 -1
- package/dist/api/rules-query.js +4 -4
- package/dist/api/rules-query.js.map +1 -1
- package/dist/api/scope-validator.d.ts.map +1 -1
- package/dist/api/types.d.ts +8 -8
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js +5 -5
- package/dist/cli/cli-schema.d.ts +3 -4
- package/dist/cli/cli-schema.d.ts.map +1 -1
- package/dist/cli/cli-schema.js +13 -14
- package/dist/cli/cli-schema.js.map +1 -1
- package/dist/cli/output-pipeline.d.ts.map +1 -1
- package/dist/cli/pattern-graph-cli.d.ts.map +1 -0
- package/dist/cli/validate-patterns.d.ts.map +1 -1
- package/dist/generators/built-in/cli-recipe-generator.d.ts +3 -4
- package/dist/generators/built-in/cli-recipe-generator.d.ts.map +1 -1
- package/dist/generators/built-in/cli-recipe-generator.js +6 -7
- package/dist/generators/built-in/cli-recipe-generator.js.map +1 -1
- package/dist/generators/built-in/cli-reference-generator.d.ts +18 -0
- package/dist/generators/built-in/cli-reference-generator.d.ts.map +1 -0
- package/dist/generators/built-in/{process-api-reference-generator.js → cli-reference-generator.js} +13 -13
- package/dist/generators/built-in/cli-reference-generator.js.map +1 -0
- package/dist/generators/built-in/codec-generators.js +12 -12
- package/dist/generators/built-in/codec-generators.js.map +1 -1
- package/dist/generators/built-in/design-review-generator.d.ts.map +1 -1
- package/dist/generators/built-in/reference-generators.d.ts.map +1 -1
- package/dist/generators/codec-based.d.ts.map +1 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/orchestrator.d.ts.map +1 -1
- package/dist/generators/pipeline/build-pipeline.d.ts +17 -14
- package/dist/generators/pipeline/build-pipeline.d.ts.map +1 -1
- package/dist/generators/pipeline/build-pipeline.js +27 -21
- package/dist/generators/pipeline/build-pipeline.js.map +1 -1
- package/dist/generators/pipeline/index.d.ts.map +1 -1
- package/dist/generators/types.d.ts.map +1 -1
- package/dist/mcp/pipeline-session.d.ts.map +1 -1
- package/dist/renderable/codecs/index-codec.d.ts.map +1 -1
- package/dist/renderable/codecs/index-codec.js +54 -28
- package/dist/renderable/codecs/index-codec.js.map +1 -1
- package/docs/ANNOTATION-GUIDE.md +5 -5
- package/docs/ARCHITECTURE.md +79 -79
- package/docs/{PROCESS-API.md → CLI.md} +6 -6
- package/docs/CONFIGURATION.md +2 -2
- package/docs/DOCS-GAP-ANALYSIS.md +65 -65
- package/docs/INDEX.md +34 -34
- package/docs/MCP-SETUP.md +3 -3
- package/docs/METHODOLOGY.md +1 -1
- package/docs/SESSION-GUIDES.md +3 -3
- package/docs/VALIDATION.md +4 -4
- package/docs-live/ARCHITECTURE.md +48 -42
- package/docs-live/BUSINESS-RULES.md +3 -3
- package/docs-live/CHANGELOG-GENERATED.md +109 -103
- package/docs-live/INDEX.md +21 -21
- package/docs-live/PRODUCT-AREAS.md +7 -7
- package/docs-live/TAXONOMY.md +3 -5
- package/docs-live/_claude-md/annotation/annotation-overview.md +1 -1
- package/docs-live/_claude-md/annotation/annotation-reference.md +5 -5
- package/docs-live/_claude-md/architecture/architecture-types.md +4 -4
- package/docs-live/_claude-md/architecture/reference-sample.md +2 -2
- package/docs-live/_claude-md/data-api/data-api-overview.md +2 -2
- package/docs-live/_claude-md/generation/generation-overview.md +15 -15
- package/docs-live/_claude-md/process/process-overview.md +1 -1
- package/docs-live/_claude-md/validation/validation-overview.md +1 -1
- package/docs-live/business-rules/annotation.md +1 -2
- package/docs-live/business-rules/configuration.md +1 -1
- package/docs-live/business-rules/data-api.md +149 -136
- package/docs-live/business-rules/generation.md +172 -20
- package/docs-live/decisions/adr-003-source-first-pattern-architecture.md +1 -1
- package/docs-live/decisions/adr-005-codec-based-markdown-rendering.md +5 -5
- package/docs-live/decisions/adr-006-single-read-model-architecture.md +24 -24
- package/docs-live/product-areas/ANNOTATION.md +19 -9
- package/docs-live/product-areas/CONFIGURATION.md +39 -19
- package/docs-live/product-areas/DATA-API.md +155 -151
- package/docs-live/product-areas/GENERATION.md +159 -144
- package/docs-live/product-areas/PROCESS.md +4 -4
- package/docs-live/product-areas/VALIDATION.md +35 -20
- package/docs-live/reference/ANNOTATION-REFERENCE.md +5 -5
- package/docs-live/reference/ARCHITECTURE-CODECS.md +11 -11
- package/docs-live/reference/ARCHITECTURE-TYPES.md +28 -25
- package/docs-live/reference/{PROCESS-API-RECIPES.md → CLI-RECIPES.md} +11 -11
- package/docs-live/reference/{PROCESS-API-REFERENCE.md → CLI-REFERENCE.md} +2 -2
- package/docs-live/reference/REFERENCE-SAMPLE.md +56 -56
- package/docs-live/reference/SESSION-WORKFLOW-GUIDE.md +3 -3
- package/docs-live/taxonomy/format-types.md +2 -2
- package/docs-live/taxonomy/metadata-tags.md +1 -23
- package/package.json +7 -7
- package/dist/api/arch-queries.d.ts +0 -95
- package/dist/api/arch-queries.js +0 -310
- package/dist/api/arch-queries.js.map +0 -1
- package/dist/api/context-assembler.d.ts +0 -124
- package/dist/api/context-assembler.js +0 -472
- package/dist/api/context-assembler.js.map +0 -1
- package/dist/api/context-formatter.d.ts +0 -26
- package/dist/api/context-formatter.js +0 -183
- package/dist/api/context-formatter.js.map +0 -1
- package/dist/api/coverage-analyzer.d.ts +0 -38
- package/dist/api/coverage-analyzer.d.ts.map +0 -1
- package/dist/api/coverage-analyzer.js +0 -117
- package/dist/api/coverage-analyzer.js.map +0 -1
- package/dist/api/fuzzy-match.d.ts +0 -75
- package/dist/api/fuzzy-match.d.ts.map +0 -1
- package/dist/api/fuzzy-match.js +0 -150
- package/dist/api/fuzzy-match.js.map +0 -1
- package/dist/api/handoff-generator.d.ts +0 -45
- package/dist/api/handoff-generator.js +0 -139
- package/dist/api/handoff-generator.js.map +0 -1
- package/dist/api/pattern-helpers.d.ts +0 -51
- package/dist/api/pattern-helpers.d.ts.map +0 -1
- package/dist/api/pattern-helpers.js +0 -84
- package/dist/api/pattern-helpers.js.map +0 -1
- package/dist/api/process-state.d.ts.map +0 -1
- package/dist/api/process-state.js.map +0 -1
- package/dist/api/scope-validator.d.ts +0 -56
- package/dist/api/scope-validator.js +0 -293
- package/dist/api/scope-validator.js.map +0 -1
- package/dist/api/stub-resolver.d.ts +0 -117
- package/dist/api/stub-resolver.d.ts.map +0 -1
- package/dist/api/stub-resolver.js +0 -154
- package/dist/api/stub-resolver.js.map +0 -1
- package/dist/api/summarize.d.ts +0 -75
- package/dist/api/summarize.d.ts.map +0 -1
- package/dist/api/summarize.js +0 -97
- package/dist/api/summarize.js.map +0 -1
- package/dist/cache/file-cache.d.ts +0 -72
- package/dist/cache/file-cache.d.ts.map +0 -1
- package/dist/cache/file-cache.js +0 -80
- package/dist/cache/file-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -5
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -5
- package/dist/cache/index.js.map +0 -1
- package/dist/cli/dataset-cache.d.ts +0 -66
- package/dist/cli/dataset-cache.js +0 -179
- package/dist/cli/dataset-cache.js.map +0 -1
- package/dist/cli/error-handler.d.ts +0 -84
- package/dist/cli/error-handler.d.ts.map +0 -1
- package/dist/cli/error-handler.js +0 -197
- package/dist/cli/error-handler.js.map +0 -1
- package/dist/cli/generate-docs.d.ts +0 -30
- package/dist/cli/generate-docs.js +0 -370
- package/dist/cli/generate-docs.js.map +0 -1
- package/dist/cli/lint-patterns.d.ts +0 -57
- package/dist/cli/lint-patterns.d.ts.map +0 -1
- package/dist/cli/lint-patterns.js +0 -257
- package/dist/cli/lint-patterns.js.map +0 -1
- package/dist/cli/lint-process.d.ts +0 -54
- package/dist/cli/lint-process.d.ts.map +0 -1
- package/dist/cli/lint-process.js +0 -319
- package/dist/cli/lint-process.js.map +0 -1
- package/dist/cli/lint-steps.d.ts +0 -32
- package/dist/cli/lint-steps.d.ts.map +0 -1
- package/dist/cli/lint-steps.js +0 -172
- package/dist/cli/lint-steps.js.map +0 -1
- package/dist/cli/mcp-server.d.ts +0 -22
- package/dist/cli/mcp-server.js +0 -57
- package/dist/cli/mcp-server.js.map +0 -1
- package/dist/cli/output-pipeline.d.ts +0 -130
- package/dist/cli/output-pipeline.js +0 -234
- package/dist/cli/output-pipeline.js.map +0 -1
- package/dist/cli/process-api.d.ts +0 -37
- package/dist/cli/process-api.d.ts.map +0 -1
- package/dist/cli/process-api.js +0 -1550
- package/dist/cli/process-api.js.map +0 -1
- package/dist/cli/repl.d.ts +0 -38
- package/dist/cli/repl.js +0 -239
- package/dist/cli/repl.js.map +0 -1
- package/dist/cli/validate-patterns.d.ts +0 -115
- package/dist/cli/validate-patterns.js +0 -707
- package/dist/cli/validate-patterns.js.map +0 -1
- package/dist/cli/version.d.ts +0 -35
- package/dist/cli/version.d.ts.map +0 -1
- package/dist/cli/version.js +0 -64
- package/dist/cli/version.js.map +0 -1
- package/dist/config/config-loader.d.ts +0 -167
- package/dist/config/config-loader.d.ts.map +0 -1
- package/dist/config/config-loader.js +0 -294
- package/dist/config/config-loader.js.map +0 -1
- package/dist/config/defaults.d.ts +0 -92
- package/dist/config/defaults.d.ts.map +0 -1
- package/dist/config/defaults.js +0 -103
- package/dist/config/defaults.js.map +0 -1
- package/dist/config/define-config.d.ts +0 -37
- package/dist/config/define-config.d.ts.map +0 -1
- package/dist/config/define-config.js +0 -38
- package/dist/config/define-config.js.map +0 -1
- package/dist/config/factory.d.ts +0 -79
- package/dist/config/factory.d.ts.map +0 -1
- package/dist/config/factory.js +0 -116
- package/dist/config/factory.js.map +0 -1
- package/dist/config/index.d.ts +0 -45
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -48
- package/dist/config/index.js.map +0 -1
- package/dist/config/merge-sources.d.ts +0 -47
- package/dist/config/merge-sources.d.ts.map +0 -1
- package/dist/config/merge-sources.js +0 -61
- package/dist/config/merge-sources.js.map +0 -1
- package/dist/config/presets.d.ts +0 -115
- package/dist/config/presets.d.ts.map +0 -1
- package/dist/config/presets.js +0 -119
- package/dist/config/presets.js.map +0 -1
- package/dist/config/project-config-schema.d.ts +0 -192
- package/dist/config/project-config-schema.d.ts.map +0 -1
- package/dist/config/project-config-schema.js +0 -231
- package/dist/config/project-config-schema.js.map +0 -1
- package/dist/config/project-config.d.ts +0 -229
- package/dist/config/project-config.d.ts.map +0 -1
- package/dist/config/project-config.js +0 -37
- package/dist/config/project-config.js.map +0 -1
- package/dist/config/regex-builders.d.ts +0 -49
- package/dist/config/regex-builders.d.ts.map +0 -1
- package/dist/config/regex-builders.js +0 -85
- package/dist/config/regex-builders.js.map +0 -1
- package/dist/config/resolve-config.d.ts +0 -65
- package/dist/config/resolve-config.d.ts.map +0 -1
- package/dist/config/resolve-config.js +0 -150
- package/dist/config/resolve-config.js.map +0 -1
- package/dist/config/types.d.ts +0 -81
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -22
- package/dist/config/types.js.map +0 -1
- package/dist/config/workflow-loader.d.ts +0 -90
- package/dist/config/workflow-loader.d.ts.map +0 -1
- package/dist/config/workflow-loader.js +0 -167
- package/dist/config/workflow-loader.js.map +0 -1
- package/dist/extractor/doc-extractor.d.ts +0 -233
- package/dist/extractor/doc-extractor.d.ts.map +0 -1
- package/dist/extractor/doc-extractor.js +0 -481
- package/dist/extractor/doc-extractor.js.map +0 -1
- package/dist/extractor/dual-source-extractor.d.ts +0 -161
- package/dist/extractor/dual-source-extractor.d.ts.map +0 -1
- package/dist/extractor/dual-source-extractor.js +0 -407
- package/dist/extractor/dual-source-extractor.js.map +0 -1
- package/dist/extractor/gherkin-extractor.d.ts +0 -170
- package/dist/extractor/gherkin-extractor.d.ts.map +0 -1
- package/dist/extractor/gherkin-extractor.js +0 -543
- package/dist/extractor/gherkin-extractor.js.map +0 -1
- package/dist/extractor/index.d.ts +0 -7
- package/dist/extractor/index.d.ts.map +0 -1
- package/dist/extractor/index.js +0 -11
- package/dist/extractor/index.js.map +0 -1
- package/dist/extractor/layer-inference.d.ts +0 -66
- package/dist/extractor/layer-inference.d.ts.map +0 -1
- package/dist/extractor/layer-inference.js +0 -93
- package/dist/extractor/layer-inference.js.map +0 -1
- package/dist/extractor/shape-extractor.d.ts +0 -79
- package/dist/extractor/shape-extractor.d.ts.map +0 -1
- package/dist/extractor/shape-extractor.js +0 -966
- package/dist/extractor/shape-extractor.js.map +0 -1
- package/dist/generators/built-in/codec-generators.d.ts +0 -29
- package/dist/generators/built-in/decision-doc-generator.d.ts +0 -204
- package/dist/generators/built-in/decision-doc-generator.js +0 -654
- package/dist/generators/built-in/decision-doc-generator.js.map +0 -1
- package/dist/generators/built-in/design-review-generator.d.ts +0 -26
- package/dist/generators/built-in/design-review-generator.js +0 -94
- package/dist/generators/built-in/design-review-generator.js.map +0 -1
- package/dist/generators/built-in/index.d.ts +0 -22
- package/dist/generators/built-in/index.js +0 -23
- package/dist/generators/built-in/index.js.map +0 -1
- package/dist/generators/built-in/process-api-reference-generator.d.ts +0 -18
- package/dist/generators/built-in/process-api-reference-generator.d.ts.map +0 -1
- package/dist/generators/built-in/process-api-reference-generator.js.map +0 -1
- package/dist/generators/built-in/reference-generators.d.ts +0 -51
- package/dist/generators/built-in/reference-generators.js +0 -320
- package/dist/generators/built-in/reference-generators.js.map +0 -1
- package/dist/generators/codec-based.d.ts +0 -63
- package/dist/generators/codec-based.js +0 -88
- package/dist/generators/codec-based.js.map +0 -1
- package/dist/generators/content-deduplicator.d.ts +0 -114
- package/dist/generators/content-deduplicator.d.ts.map +0 -1
- package/dist/generators/content-deduplicator.js +0 -356
- package/dist/generators/content-deduplicator.js.map +0 -1
- package/dist/generators/index.d.ts +0 -50
- package/dist/generators/index.js +0 -54
- package/dist/generators/index.js.map +0 -1
- package/dist/generators/orchestrator.d.ts +0 -265
- package/dist/generators/orchestrator.js +0 -570
- package/dist/generators/orchestrator.js.map +0 -1
- package/dist/generators/pipeline/context-inference.d.ts +0 -55
- package/dist/generators/pipeline/context-inference.d.ts.map +0 -1
- package/dist/generators/pipeline/context-inference.js +0 -76
- package/dist/generators/pipeline/context-inference.js.map +0 -1
- package/dist/generators/pipeline/index.d.ts +0 -27
- package/dist/generators/pipeline/index.js +0 -34
- package/dist/generators/pipeline/index.js.map +0 -1
- package/dist/generators/pipeline/merge-patterns.d.ts +0 -33
- package/dist/generators/pipeline/merge-patterns.d.ts.map +0 -1
- package/dist/generators/pipeline/merge-patterns.js +0 -50
- package/dist/generators/pipeline/merge-patterns.js.map +0 -1
- package/dist/generators/pipeline/relationship-resolver.d.ts +0 -47
- package/dist/generators/pipeline/relationship-resolver.d.ts.map +0 -1
- package/dist/generators/pipeline/relationship-resolver.js +0 -132
- package/dist/generators/pipeline/relationship-resolver.js.map +0 -1
- package/dist/generators/pipeline/sequence-utils.d.ts +0 -49
- package/dist/generators/pipeline/sequence-utils.d.ts.map +0 -1
- package/dist/generators/pipeline/sequence-utils.js +0 -235
- package/dist/generators/pipeline/sequence-utils.js.map +0 -1
- package/dist/generators/pipeline/transform-dataset.d.ts +0 -82
- package/dist/generators/pipeline/transform-dataset.d.ts.map +0 -1
- package/dist/generators/pipeline/transform-dataset.js +0 -355
- package/dist/generators/pipeline/transform-dataset.js.map +0 -1
- package/dist/generators/pipeline/transform-types.d.ts +0 -96
- package/dist/generators/pipeline/transform-types.d.ts.map +0 -1
- package/dist/generators/pipeline/transform-types.js +0 -18
- package/dist/generators/pipeline/transform-types.js.map +0 -1
- package/dist/generators/registry.d.ts +0 -64
- package/dist/generators/registry.js +0 -77
- package/dist/generators/registry.js.map +0 -1
- package/dist/generators/source-mapper.d.ts +0 -143
- package/dist/generators/source-mapper.d.ts.map +0 -1
- package/dist/generators/source-mapper.js +0 -602
- package/dist/generators/source-mapper.js.map +0 -1
- package/dist/generators/source-mapping-validator.d.ts +0 -118
- package/dist/generators/source-mapping-validator.d.ts.map +0 -1
- package/dist/generators/source-mapping-validator.js +0 -334
- package/dist/generators/source-mapping-validator.js.map +0 -1
- package/dist/generators/types.d.ts +0 -104
- package/dist/generators/types.js +0 -5
- package/dist/generators/types.js.map +0 -1
- package/dist/generators/warning-collector.d.ts +0 -144
- package/dist/generators/warning-collector.d.ts.map +0 -1
- package/dist/generators/warning-collector.js +0 -166
- package/dist/generators/warning-collector.js.map +0 -1
- package/dist/git/branch-diff.d.ts +0 -44
- package/dist/git/branch-diff.d.ts.map +0 -1
- package/dist/git/branch-diff.js +0 -57
- package/dist/git/branch-diff.js.map +0 -1
- package/dist/git/helpers.d.ts +0 -46
- package/dist/git/helpers.d.ts.map +0 -1
- package/dist/git/helpers.js +0 -67
- package/dist/git/helpers.js.map +0 -1
- package/dist/git/index.d.ts +0 -18
- package/dist/git/index.d.ts.map +0 -1
- package/dist/git/index.js +0 -18
- package/dist/git/index.js.map +0 -1
- package/dist/git/name-status.d.ts +0 -32
- package/dist/git/name-status.d.ts.map +0 -1
- package/dist/git/name-status.js +0 -66
- package/dist/git/name-status.js.map +0 -1
- package/dist/index.d.ts +0 -107
- package/dist/index.js +0 -122
- package/dist/index.js.map +0 -1
- package/dist/lint/engine.d.ts +0 -113
- package/dist/lint/engine.d.ts.map +0 -1
- package/dist/lint/engine.js +0 -228
- package/dist/lint/engine.js.map +0 -1
- package/dist/lint/index.d.ts +0 -26
- package/dist/lint/index.d.ts.map +0 -1
- package/dist/lint/index.js +0 -24
- package/dist/lint/index.js.map +0 -1
- package/dist/lint/process-guard/decider.d.ts +0 -166
- package/dist/lint/process-guard/decider.d.ts.map +0 -1
- package/dist/lint/process-guard/decider.js +0 -412
- package/dist/lint/process-guard/decider.js.map +0 -1
- package/dist/lint/process-guard/derive-state.d.ts +0 -96
- package/dist/lint/process-guard/derive-state.d.ts.map +0 -1
- package/dist/lint/process-guard/derive-state.js +0 -368
- package/dist/lint/process-guard/derive-state.js.map +0 -1
- package/dist/lint/process-guard/detect-changes.d.ts +0 -109
- package/dist/lint/process-guard/detect-changes.d.ts.map +0 -1
- package/dist/lint/process-guard/detect-changes.js +0 -487
- package/dist/lint/process-guard/detect-changes.js.map +0 -1
- package/dist/lint/process-guard/index.d.ts +0 -35
- package/dist/lint/process-guard/index.d.ts.map +0 -1
- package/dist/lint/process-guard/index.js +0 -39
- package/dist/lint/process-guard/index.js.map +0 -1
- package/dist/lint/process-guard/types.d.ts +0 -255
- package/dist/lint/process-guard/types.d.ts.map +0 -1
- package/dist/lint/process-guard/types.js +0 -31
- package/dist/lint/process-guard/types.js.map +0 -1
- package/dist/lint/rules.d.ts +0 -147
- package/dist/lint/rules.d.ts.map +0 -1
- package/dist/lint/rules.js +0 -289
- package/dist/lint/rules.js.map +0 -1
- package/dist/lint/steps/cross-checks.d.ts +0 -66
- package/dist/lint/steps/cross-checks.d.ts.map +0 -1
- package/dist/lint/steps/cross-checks.js +0 -290
- package/dist/lint/steps/cross-checks.js.map +0 -1
- package/dist/lint/steps/feature-checks.d.ts +0 -78
- package/dist/lint/steps/feature-checks.d.ts.map +0 -1
- package/dist/lint/steps/feature-checks.js +0 -279
- package/dist/lint/steps/feature-checks.js.map +0 -1
- package/dist/lint/steps/index.d.ts +0 -22
- package/dist/lint/steps/index.d.ts.map +0 -1
- package/dist/lint/steps/index.js +0 -26
- package/dist/lint/steps/index.js.map +0 -1
- package/dist/lint/steps/pair-resolver.d.ts +0 -29
- package/dist/lint/steps/pair-resolver.d.ts.map +0 -1
- package/dist/lint/steps/pair-resolver.js +0 -76
- package/dist/lint/steps/pair-resolver.js.map +0 -1
- package/dist/lint/steps/runner.d.ts +0 -28
- package/dist/lint/steps/runner.d.ts.map +0 -1
- package/dist/lint/steps/runner.js +0 -143
- package/dist/lint/steps/runner.js.map +0 -1
- package/dist/lint/steps/step-checks.d.ts +0 -41
- package/dist/lint/steps/step-checks.d.ts.map +0 -1
- package/dist/lint/steps/step-checks.js +0 -164
- package/dist/lint/steps/step-checks.js.map +0 -1
- package/dist/lint/steps/types.d.ts +0 -95
- package/dist/lint/steps/types.d.ts.map +0 -1
- package/dist/lint/steps/types.js +0 -79
- package/dist/lint/steps/types.js.map +0 -1
- package/dist/lint/steps/utils.d.ts +0 -22
- package/dist/lint/steps/utils.d.ts.map +0 -1
- package/dist/lint/steps/utils.js +0 -57
- package/dist/lint/steps/utils.js.map +0 -1
- package/dist/mcp/file-watcher.d.ts +0 -24
- package/dist/mcp/file-watcher.js +0 -75
- package/dist/mcp/file-watcher.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -19
- package/dist/mcp/index.js +0 -21
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/pipeline-session.d.ts +0 -33
- package/dist/mcp/pipeline-session.js +0 -149
- package/dist/mcp/pipeline-session.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -28
- package/dist/mcp/server.js +0 -197
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tool-registry.d.ts +0 -4
- package/dist/mcp/tool-registry.js +0 -525
- package/dist/mcp/tool-registry.js.map +0 -1
- package/dist/renderable/codecs/adr.d.ts +0 -4730
- package/dist/renderable/codecs/adr.d.ts.map +0 -1
- package/dist/renderable/codecs/adr.js +0 -590
- package/dist/renderable/codecs/adr.js.map +0 -1
- package/dist/renderable/codecs/architecture.d.ts +0 -4760
- package/dist/renderable/codecs/architecture.d.ts.map +0 -1
- package/dist/renderable/codecs/architecture.js +0 -524
- package/dist/renderable/codecs/architecture.js.map +0 -1
- package/dist/renderable/codecs/business-rules.d.ts +0 -4777
- package/dist/renderable/codecs/business-rules.d.ts.map +0 -1
- package/dist/renderable/codecs/business-rules.js +0 -648
- package/dist/renderable/codecs/business-rules.js.map +0 -1
- package/dist/renderable/codecs/claude-module.d.ts +0 -4710
- package/dist/renderable/codecs/claude-module.d.ts.map +0 -1
- package/dist/renderable/codecs/claude-module.js +0 -214
- package/dist/renderable/codecs/claude-module.js.map +0 -1
- package/dist/renderable/codecs/composite.d.ts +0 -84
- package/dist/renderable/codecs/composite.d.ts.map +0 -1
- package/dist/renderable/codecs/composite.js +0 -124
- package/dist/renderable/codecs/composite.js.map +0 -1
- package/dist/renderable/codecs/convention-extractor.d.ts +0 -105
- package/dist/renderable/codecs/convention-extractor.d.ts.map +0 -1
- package/dist/renderable/codecs/convention-extractor.js +0 -353
- package/dist/renderable/codecs/convention-extractor.js.map +0 -1
- package/dist/renderable/codecs/decision-doc.d.ts +0 -308
- package/dist/renderable/codecs/decision-doc.d.ts.map +0 -1
- package/dist/renderable/codecs/decision-doc.js +0 -485
- package/dist/renderable/codecs/decision-doc.js.map +0 -1
- package/dist/renderable/codecs/design-review.d.ts +0 -55
- package/dist/renderable/codecs/design-review.d.ts.map +0 -1
- package/dist/renderable/codecs/design-review.js +0 -532
- package/dist/renderable/codecs/design-review.js.map +0 -1
- package/dist/renderable/codecs/diagram-utils.d.ts +0 -62
- package/dist/renderable/codecs/diagram-utils.d.ts.map +0 -1
- package/dist/renderable/codecs/diagram-utils.js +0 -70
- package/dist/renderable/codecs/diagram-utils.js.map +0 -1
- package/dist/renderable/codecs/helpers.d.ts +0 -553
- package/dist/renderable/codecs/helpers.d.ts.map +0 -1
- package/dist/renderable/codecs/helpers.js +0 -913
- package/dist/renderable/codecs/helpers.js.map +0 -1
- package/dist/renderable/codecs/index-codec.d.ts +0 -4714
- package/dist/renderable/codecs/index.d.ts +0 -46
- package/dist/renderable/codecs/index.d.ts.map +0 -1
- package/dist/renderable/codecs/index.js +0 -70
- package/dist/renderable/codecs/index.js.map +0 -1
- package/dist/renderable/codecs/patterns.d.ts +0 -4757
- package/dist/renderable/codecs/patterns.d.ts.map +0 -1
- package/dist/renderable/codecs/patterns.js +0 -462
- package/dist/renderable/codecs/patterns.js.map +0 -1
- package/dist/renderable/codecs/planning.d.ts +0 -14055
- package/dist/renderable/codecs/planning.d.ts.map +0 -1
- package/dist/renderable/codecs/planning.js +0 -449
- package/dist/renderable/codecs/planning.js.map +0 -1
- package/dist/renderable/codecs/pr-changes.d.ts +0 -4742
- package/dist/renderable/codecs/pr-changes.d.ts.map +0 -1
- package/dist/renderable/codecs/pr-changes.js +0 -425
- package/dist/renderable/codecs/pr-changes.js.map +0 -1
- package/dist/renderable/codecs/reference.d.ts +0 -215
- package/dist/renderable/codecs/reference.d.ts.map +0 -1
- package/dist/renderable/codecs/reference.js +0 -1578
- package/dist/renderable/codecs/reference.js.map +0 -1
- package/dist/renderable/codecs/reporting.d.ts +0 -14026
- package/dist/renderable/codecs/reporting.d.ts.map +0 -1
- package/dist/renderable/codecs/reporting.js +0 -365
- package/dist/renderable/codecs/reporting.js.map +0 -1
- package/dist/renderable/codecs/requirements.d.ts +0 -4743
- package/dist/renderable/codecs/requirements.d.ts.map +0 -1
- package/dist/renderable/codecs/requirements.js +0 -428
- package/dist/renderable/codecs/requirements.js.map +0 -1
- package/dist/renderable/codecs/session.d.ts +0 -9410
- package/dist/renderable/codecs/session.d.ts.map +0 -1
- package/dist/renderable/codecs/session.js +0 -848
- package/dist/renderable/codecs/session.js.map +0 -1
- package/dist/renderable/codecs/shape-matcher.d.ts +0 -54
- package/dist/renderable/codecs/shape-matcher.d.ts.map +0 -1
- package/dist/renderable/codecs/shape-matcher.js +0 -106
- package/dist/renderable/codecs/shape-matcher.js.map +0 -1
- package/dist/renderable/codecs/shared-schema.d.ts +0 -44
- package/dist/renderable/codecs/shared-schema.d.ts.map +0 -1
- package/dist/renderable/codecs/shared-schema.js +0 -43
- package/dist/renderable/codecs/shared-schema.js.map +0 -1
- package/dist/renderable/codecs/taxonomy.d.ts +0 -4733
- package/dist/renderable/codecs/taxonomy.d.ts.map +0 -1
- package/dist/renderable/codecs/taxonomy.js +0 -570
- package/dist/renderable/codecs/taxonomy.js.map +0 -1
- package/dist/renderable/codecs/timeline.d.ts +0 -14094
- package/dist/renderable/codecs/timeline.d.ts.map +0 -1
- package/dist/renderable/codecs/timeline.js +0 -906
- package/dist/renderable/codecs/timeline.js.map +0 -1
- package/dist/renderable/codecs/types/base.d.ts +0 -81
- package/dist/renderable/codecs/types/base.d.ts.map +0 -1
- package/dist/renderable/codecs/types/base.js +0 -56
- package/dist/renderable/codecs/types/base.js.map +0 -1
- package/dist/renderable/codecs/types/index.d.ts +0 -5
- package/dist/renderable/codecs/types/index.d.ts.map +0 -1
- package/dist/renderable/codecs/types/index.js +0 -5
- package/dist/renderable/codecs/types/index.js.map +0 -1
- package/dist/renderable/codecs/validation-rules.d.ts +0 -4773
- package/dist/renderable/codecs/validation-rules.d.ts.map +0 -1
- package/dist/renderable/codecs/validation-rules.js +0 -537
- package/dist/renderable/codecs/validation-rules.js.map +0 -1
- package/dist/renderable/generate.d.ts +0 -338
- package/dist/renderable/generate.d.ts.map +0 -1
- package/dist/renderable/generate.js +0 -437
- package/dist/renderable/generate.js.map +0 -1
- package/dist/renderable/index.d.ts +0 -36
- package/dist/renderable/index.d.ts.map +0 -1
- package/dist/renderable/index.js +0 -58
- package/dist/renderable/index.js.map +0 -1
- package/dist/renderable/load-preamble.d.ts +0 -56
- package/dist/renderable/load-preamble.d.ts.map +0 -1
- package/dist/renderable/load-preamble.js +0 -298
- package/dist/renderable/load-preamble.js.map +0 -1
- package/dist/renderable/render.d.ts +0 -61
- package/dist/renderable/render.d.ts.map +0 -1
- package/dist/renderable/render.js +0 -346
- package/dist/renderable/render.js.map +0 -1
- package/dist/renderable/schema.d.ts +0 -194
- package/dist/renderable/schema.d.ts.map +0 -1
- package/dist/renderable/schema.js +0 -197
- package/dist/renderable/schema.js.map +0 -1
- package/dist/renderable/utils.d.ts +0 -146
- package/dist/renderable/utils.d.ts.map +0 -1
- package/dist/renderable/utils.js +0 -362
- package/dist/renderable/utils.js.map +0 -1
- package/dist/scanner/ast-parser.d.ts +0 -75
- package/dist/scanner/ast-parser.d.ts.map +0 -1
- package/dist/scanner/ast-parser.js +0 -835
- package/dist/scanner/ast-parser.js.map +0 -1
- package/dist/scanner/gherkin-ast-parser.d.ts +0 -166
- package/dist/scanner/gherkin-ast-parser.d.ts.map +0 -1
- package/dist/scanner/gherkin-ast-parser.js +0 -507
- package/dist/scanner/gherkin-ast-parser.js.map +0 -1
- package/dist/scanner/gherkin-scanner.d.ts +0 -106
- package/dist/scanner/gherkin-scanner.d.ts.map +0 -1
- package/dist/scanner/gherkin-scanner.js +0 -149
- package/dist/scanner/gherkin-scanner.js.map +0 -1
- package/dist/scanner/index.d.ts +0 -85
- package/dist/scanner/index.d.ts.map +0 -1
- package/dist/scanner/index.js +0 -102
- package/dist/scanner/index.js.map +0 -1
- package/dist/scanner/pattern-scanner.d.ts +0 -83
- package/dist/scanner/pattern-scanner.d.ts.map +0 -1
- package/dist/scanner/pattern-scanner.js +0 -110
- package/dist/scanner/pattern-scanner.js.map +0 -1
- package/dist/taxonomy/categories.d.ts +0 -47
- package/dist/taxonomy/categories.d.ts.map +0 -1
- package/dist/taxonomy/categories.js +0 -175
- package/dist/taxonomy/categories.js.map +0 -1
- package/dist/taxonomy/claude-section-values.d.ts +0 -12
- package/dist/taxonomy/claude-section-values.d.ts.map +0 -1
- package/dist/taxonomy/claude-section-values.js +0 -17
- package/dist/taxonomy/claude-section-values.js.map +0 -1
- package/dist/taxonomy/conventions.d.ts +0 -13
- package/dist/taxonomy/conventions.d.ts.map +0 -1
- package/dist/taxonomy/conventions.js +0 -27
- package/dist/taxonomy/conventions.js.map +0 -1
- package/dist/taxonomy/deliverable-status.d.ts +0 -99
- package/dist/taxonomy/deliverable-status.d.ts.map +0 -1
- package/dist/taxonomy/deliverable-status.js +0 -131
- package/dist/taxonomy/deliverable-status.js.map +0 -1
- package/dist/taxonomy/format-types.d.ts +0 -17
- package/dist/taxonomy/format-types.d.ts.map +0 -1
- package/dist/taxonomy/format-types.js +0 -23
- package/dist/taxonomy/format-types.js.map +0 -1
- package/dist/taxonomy/generator-options.d.ts +0 -67
- package/dist/taxonomy/generator-options.d.ts.map +0 -1
- package/dist/taxonomy/generator-options.js +0 -75
- package/dist/taxonomy/generator-options.js.map +0 -1
- package/dist/taxonomy/hierarchy-levels.d.ts +0 -23
- package/dist/taxonomy/hierarchy-levels.d.ts.map +0 -1
- package/dist/taxonomy/hierarchy-levels.js +0 -22
- package/dist/taxonomy/hierarchy-levels.js.map +0 -1
- package/dist/taxonomy/index.d.ts +0 -35
- package/dist/taxonomy/index.d.ts.map +0 -1
- package/dist/taxonomy/index.js +0 -56
- package/dist/taxonomy/index.js.map +0 -1
- package/dist/taxonomy/layer-types.d.ts +0 -22
- package/dist/taxonomy/layer-types.d.ts.map +0 -1
- package/dist/taxonomy/layer-types.js +0 -28
- package/dist/taxonomy/layer-types.js.map +0 -1
- package/dist/taxonomy/normalized-status.d.ts +0 -99
- package/dist/taxonomy/normalized-status.d.ts.map +0 -1
- package/dist/taxonomy/normalized-status.js +0 -113
- package/dist/taxonomy/normalized-status.js.map +0 -1
- package/dist/taxonomy/registry-builder.d.ts +0 -104
- package/dist/taxonomy/registry-builder.d.ts.map +0 -1
- package/dist/taxonomy/registry-builder.js +0 -561
- package/dist/taxonomy/registry-builder.js.map +0 -1
- package/dist/taxonomy/risk-levels.d.ts +0 -16
- package/dist/taxonomy/risk-levels.d.ts.map +0 -1
- package/dist/taxonomy/risk-levels.js +0 -15
- package/dist/taxonomy/risk-levels.js.map +0 -1
- package/dist/taxonomy/severity-types.d.ts +0 -6
- package/dist/taxonomy/severity-types.d.ts.map +0 -1
- package/dist/taxonomy/severity-types.js +0 -5
- package/dist/taxonomy/severity-types.js.map +0 -1
- package/dist/taxonomy/status-values.d.ts +0 -39
- package/dist/taxonomy/status-values.d.ts.map +0 -1
- package/dist/taxonomy/status-values.js +0 -42
- package/dist/taxonomy/status-values.js.map +0 -1
- package/dist/types/branded.d.ts +0 -89
- package/dist/types/branded.d.ts.map +0 -1
- package/dist/types/branded.js +0 -57
- package/dist/types/branded.js.map +0 -1
- package/dist/types/errors.d.ts +0 -342
- package/dist/types/errors.d.ts.map +0 -1
- package/dist/types/errors.js +0 -251
- package/dist/types/errors.js.map +0 -1
- package/dist/types/index.d.ts +0 -41
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -5
- package/dist/types/index.js.map +0 -1
- package/dist/types/result.d.ts +0 -78
- package/dist/types/result.d.ts.map +0 -1
- package/dist/types/result.js +0 -78
- package/dist/types/result.js.map +0 -1
- package/dist/utils/collection-utils.d.ts +0 -49
- package/dist/utils/collection-utils.d.ts.map +0 -1
- package/dist/utils/collection-utils.js +0 -58
- package/dist/utils/collection-utils.js.map +0 -1
- package/dist/utils/id-utils.d.ts +0 -46
- package/dist/utils/id-utils.d.ts.map +0 -1
- package/dist/utils/id-utils.js +0 -51
- package/dist/utils/id-utils.js.map +0 -1
- package/dist/utils/index.d.ts +0 -21
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -21
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/string-utils.d.ts +0 -150
- package/dist/utils/string-utils.d.ts.map +0 -1
- package/dist/utils/string-utils.js +0 -281
- package/dist/utils/string-utils.js.map +0 -1
- package/dist/validation/anti-patterns.d.ts +0 -134
- package/dist/validation/anti-patterns.d.ts.map +0 -1
- package/dist/validation/anti-patterns.js +0 -307
- package/dist/validation/anti-patterns.js.map +0 -1
- package/dist/validation/dod-validator.d.ts +0 -94
- package/dist/validation/dod-validator.d.ts.map +0 -1
- package/dist/validation/dod-validator.js +0 -198
- package/dist/validation/dod-validator.js.map +0 -1
- package/dist/validation/fsm/index.d.ts +0 -59
- package/dist/validation/fsm/index.d.ts.map +0 -1
- package/dist/validation/fsm/index.js +0 -64
- package/dist/validation/fsm/index.js.map +0 -1
- package/dist/validation/fsm/states.d.ts +0 -93
- package/dist/validation/fsm/states.d.ts.map +0 -1
- package/dist/validation/fsm/states.js +0 -98
- package/dist/validation/fsm/states.js.map +0 -1
- package/dist/validation/fsm/transitions.d.ts +0 -100
- package/dist/validation/fsm/transitions.d.ts.map +0 -1
- package/dist/validation/fsm/transitions.js +0 -122
- package/dist/validation/fsm/transitions.js.map +0 -1
- package/dist/validation/fsm/validator.d.ts +0 -163
- package/dist/validation/fsm/validator.d.ts.map +0 -1
- package/dist/validation/fsm/validator.js +0 -205
- package/dist/validation/fsm/validator.js.map +0 -1
- package/dist/validation/index.d.ts +0 -23
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -25
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/types.d.ts +0 -136
- package/dist/validation/types.d.ts.map +0 -1
- package/dist/validation/types.js +0 -56
- package/dist/validation/types.js.map +0 -1
- package/dist/validation-schemas/codec-utils.d.ts +0 -188
- package/dist/validation-schemas/codec-utils.d.ts.map +0 -1
- package/dist/validation-schemas/codec-utils.js +0 -258
- package/dist/validation-schemas/codec-utils.js.map +0 -1
- package/dist/validation-schemas/config.d.ts +0 -99
- package/dist/validation-schemas/config.d.ts.map +0 -1
- package/dist/validation-schemas/config.js +0 -178
- package/dist/validation-schemas/config.js.map +0 -1
- package/dist/validation-schemas/doc-directive.d.ts +0 -195
- package/dist/validation-schemas/doc-directive.d.ts.map +0 -1
- package/dist/validation-schemas/doc-directive.js +0 -239
- package/dist/validation-schemas/doc-directive.js.map +0 -1
- package/dist/validation-schemas/dual-source.d.ts +0 -167
- package/dist/validation-schemas/dual-source.d.ts.map +0 -1
- package/dist/validation-schemas/dual-source.js +0 -168
- package/dist/validation-schemas/dual-source.js.map +0 -1
- package/dist/validation-schemas/export-info.d.ts +0 -53
- package/dist/validation-schemas/export-info.d.ts.map +0 -1
- package/dist/validation-schemas/export-info.js +0 -101
- package/dist/validation-schemas/export-info.js.map +0 -1
- package/dist/validation-schemas/extracted-pattern.d.ts +0 -351
- package/dist/validation-schemas/extracted-pattern.d.ts.map +0 -1
- package/dist/validation-schemas/extracted-pattern.js +0 -459
- package/dist/validation-schemas/extracted-pattern.js.map +0 -1
- package/dist/validation-schemas/extracted-shape.d.ts +0 -200
- package/dist/validation-schemas/extracted-shape.d.ts.map +0 -1
- package/dist/validation-schemas/extracted-shape.js +0 -182
- package/dist/validation-schemas/extracted-shape.js.map +0 -1
- package/dist/validation-schemas/feature.d.ts +0 -554
- package/dist/validation-schemas/feature.d.ts.map +0 -1
- package/dist/validation-schemas/feature.js +0 -262
- package/dist/validation-schemas/feature.js.map +0 -1
- package/dist/validation-schemas/index.d.ts +0 -15
- package/dist/validation-schemas/index.d.ts.map +0 -1
- package/dist/validation-schemas/index.js +0 -32
- package/dist/validation-schemas/index.js.map +0 -1
- package/dist/validation-schemas/lint.d.ts +0 -46
- package/dist/validation-schemas/lint.d.ts.map +0 -1
- package/dist/validation-schemas/lint.js +0 -45
- package/dist/validation-schemas/lint.js.map +0 -1
- package/dist/validation-schemas/master-dataset.d.ts +0 -8299
- package/dist/validation-schemas/master-dataset.d.ts.map +0 -1
- package/dist/validation-schemas/master-dataset.js +0 -275
- package/dist/validation-schemas/master-dataset.js.map +0 -1
- package/dist/validation-schemas/output-schemas.d.ts +0 -183
- package/dist/validation-schemas/output-schemas.d.ts.map +0 -1
- package/dist/validation-schemas/output-schemas.js +0 -149
- package/dist/validation-schemas/output-schemas.js.map +0 -1
- package/dist/validation-schemas/scenario-ref.d.ts +0 -80
- package/dist/validation-schemas/scenario-ref.d.ts.map +0 -1
- package/dist/validation-schemas/scenario-ref.js +0 -73
- package/dist/validation-schemas/scenario-ref.js.map +0 -1
- package/dist/validation-schemas/tag-registry.d.ts +0 -210
- package/dist/validation-schemas/tag-registry.d.ts.map +0 -1
- package/dist/validation-schemas/tag-registry.js +0 -248
- package/dist/validation-schemas/tag-registry.js.map +0 -1
- package/dist/validation-schemas/workflow-config.d.ts +0 -125
- package/dist/validation-schemas/workflow-config.d.ts.map +0 -1
- package/dist/validation-schemas/workflow-config.js +0 -138
- package/dist/validation-schemas/workflow-config.js.map +0 -1
|
@@ -1,906 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @architect
|
|
3
|
-
* @architect-core
|
|
4
|
-
* @architect-pattern TimelineCodec
|
|
5
|
-
* @architect-status completed
|
|
6
|
-
* @architect-convention codec-registry
|
|
7
|
-
* @architect-product-area:Generation
|
|
8
|
-
*
|
|
9
|
-
* ## RoadmapDocumentCodec
|
|
10
|
-
*
|
|
11
|
-
* **Purpose:** Development roadmap organized by phase with progress tracking.
|
|
12
|
-
*
|
|
13
|
-
* **Output Files:** `ROADMAP.md` (main roadmap), `phases/phase-<N>-<name>.md` (phase details)
|
|
14
|
-
*
|
|
15
|
-
* | Option | Type | Default | Description |
|
|
16
|
-
* | --- | --- | --- | --- |
|
|
17
|
-
* | generateDetailFiles | boolean | true | Create phase detail files |
|
|
18
|
-
* | filterStatus | NormalizedStatusFilter[] | [] | Filter by status |
|
|
19
|
-
* | includeProcess | boolean | true | Show quarter, effort, team metadata |
|
|
20
|
-
* | includeDeliverables | boolean | true | List deliverables per phase |
|
|
21
|
-
* | filterPhases | number[] | [] | Filter to specific phases |
|
|
22
|
-
*
|
|
23
|
-
* ## CompletedMilestonesCodec
|
|
24
|
-
*
|
|
25
|
-
* **Purpose:** Historical record of completed work organized by quarter.
|
|
26
|
-
*
|
|
27
|
-
* **Output Files:** `COMPLETED-MILESTONES.md` (summary), `milestones/<quarter>.md` (quarter details)
|
|
28
|
-
*
|
|
29
|
-
* ### When to Use
|
|
30
|
-
*
|
|
31
|
-
* - When documenting project history and completed phases
|
|
32
|
-
* - When generating quarterly achievement summaries
|
|
33
|
-
* - When tracking velocity by quarter
|
|
34
|
-
*
|
|
35
|
-
* ## CurrentWorkCodec
|
|
36
|
-
*
|
|
37
|
-
* **Purpose:** Active development work currently in progress.
|
|
38
|
-
*
|
|
39
|
-
* **Output Files:** `CURRENT-WORK.md` (summary), `current/phase-<N>-<name>.md` (active phase details)
|
|
40
|
-
*
|
|
41
|
-
* ### When to Use
|
|
42
|
-
*
|
|
43
|
-
* - When monitoring active development across all in-progress phases
|
|
44
|
-
* - When generating sprint/session status dashboards
|
|
45
|
-
* - When checking which patterns are currently being worked on
|
|
46
|
-
*/
|
|
47
|
-
import { z } from 'zod';
|
|
48
|
-
import { MasterDatasetSchema, } from '../../validation-schemas/master-dataset.js';
|
|
49
|
-
import { heading, paragraph, separator, table, list, collapsible, linkOut, document, } from '../schema.js';
|
|
50
|
-
import { normalizeStatus, isPatternComplete, isPatternActive, isPatternPlanned, } from '../../taxonomy/index.js';
|
|
51
|
-
import { getDeliverableStatusEmoji } from '../../taxonomy/deliverable-status.js';
|
|
52
|
-
import { getPhaseStatusEmoji } from '../../validation/types.js';
|
|
53
|
-
import { getStatusEmoji, getDisplayName, extractSummary, completionPercentage, renderProgressBar, sortByPhaseAndName, formatBusinessValue, } from '../utils.js';
|
|
54
|
-
import { toKebabCase, groupBy } from '../../utils/index.js';
|
|
55
|
-
import { DEFAULT_BASE_OPTIONS, mergeOptions, } from './types/base.js';
|
|
56
|
-
/**
|
|
57
|
-
* Default options for RoadmapDocumentCodec
|
|
58
|
-
*/
|
|
59
|
-
export const DEFAULT_ROADMAP_OPTIONS = {
|
|
60
|
-
...DEFAULT_BASE_OPTIONS,
|
|
61
|
-
filterStatus: [],
|
|
62
|
-
includeProcess: true,
|
|
63
|
-
includeDeliverables: true,
|
|
64
|
-
filterPhases: [],
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Default options for CompletedMilestonesCodec
|
|
68
|
-
*/
|
|
69
|
-
export const DEFAULT_MILESTONES_OPTIONS = {
|
|
70
|
-
...DEFAULT_BASE_OPTIONS,
|
|
71
|
-
filterQuarters: [],
|
|
72
|
-
includeDeliverables: true,
|
|
73
|
-
includeLinks: true,
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Default options for CurrentWorkCodec
|
|
77
|
-
*/
|
|
78
|
-
export const DEFAULT_CURRENT_WORK_OPTIONS = {
|
|
79
|
-
...DEFAULT_BASE_OPTIONS,
|
|
80
|
-
includeDeliverables: true,
|
|
81
|
-
includeProcess: true,
|
|
82
|
-
};
|
|
83
|
-
import { RenderableDocumentOutputSchema } from './shared-schema.js';
|
|
84
|
-
import { renderAcceptanceCriteria, renderBusinessRulesSection } from './helpers.js';
|
|
85
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
86
|
-
// Roadmap Document Codec
|
|
87
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
88
|
-
/**
|
|
89
|
-
* Create a RoadmapDocumentCodec with custom options.
|
|
90
|
-
*
|
|
91
|
-
* @param options - Codec configuration options
|
|
92
|
-
* @returns Configured Zod codec
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```typescript
|
|
96
|
-
* // Disable detail files for summary output
|
|
97
|
-
* const codec = createRoadmapCodec({ generateDetailFiles: false });
|
|
98
|
-
*
|
|
99
|
-
* // Filter to specific phases
|
|
100
|
-
* const codec = createRoadmapCodec({ filterPhases: [1, 2, 3] });
|
|
101
|
-
* ```
|
|
102
|
-
*/
|
|
103
|
-
export function createRoadmapCodec(options) {
|
|
104
|
-
const opts = mergeOptions(DEFAULT_ROADMAP_OPTIONS, options);
|
|
105
|
-
return z.codec(MasterDatasetSchema, RenderableDocumentOutputSchema, {
|
|
106
|
-
decode: (dataset) => {
|
|
107
|
-
return buildRoadmapDocument(dataset, opts);
|
|
108
|
-
},
|
|
109
|
-
/** @throws Always - this codec is decode-only. See zod-codecs.md */
|
|
110
|
-
encode: () => {
|
|
111
|
-
throw new Error('RoadmapDocumentCodec is decode-only. See zod-codecs.md');
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Default Roadmap Document Codec
|
|
117
|
-
*
|
|
118
|
-
* Transforms MasterDataset → RenderableDocument for roadmap view.
|
|
119
|
-
* Shows phases with progress, patterns grouped by phase.
|
|
120
|
-
*/
|
|
121
|
-
export const RoadmapDocumentCodec = createRoadmapCodec();
|
|
122
|
-
/**
|
|
123
|
-
* Create a CompletedMilestonesCodec with custom options.
|
|
124
|
-
*
|
|
125
|
-
* @param options - Codec configuration options
|
|
126
|
-
* @returns Configured Zod codec
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* ```typescript
|
|
130
|
-
* // Filter to specific quarters
|
|
131
|
-
* const codec = createMilestonesCodec({ filterQuarters: ["Q1-2025"] });
|
|
132
|
-
* ```
|
|
133
|
-
*/
|
|
134
|
-
export function createMilestonesCodec(options) {
|
|
135
|
-
const opts = mergeOptions(DEFAULT_MILESTONES_OPTIONS, options);
|
|
136
|
-
return z.codec(MasterDatasetSchema, RenderableDocumentOutputSchema, {
|
|
137
|
-
decode: (dataset) => {
|
|
138
|
-
return buildCompletedMilestonesDocument(dataset, opts);
|
|
139
|
-
},
|
|
140
|
-
/** @throws Always - this codec is decode-only. See zod-codecs.md */
|
|
141
|
-
encode: () => {
|
|
142
|
-
throw new Error('CompletedMilestonesCodec is decode-only. See zod-codecs.md');
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Default Completed Milestones Document Codec
|
|
148
|
-
*
|
|
149
|
-
* Transforms MasterDataset → RenderableDocument for completed milestones.
|
|
150
|
-
* Shows historical completed phases and patterns.
|
|
151
|
-
*/
|
|
152
|
-
export const CompletedMilestonesCodec = createMilestonesCodec();
|
|
153
|
-
/**
|
|
154
|
-
* Create a CurrentWorkCodec with custom options.
|
|
155
|
-
*
|
|
156
|
-
* @param options - Codec configuration options
|
|
157
|
-
* @returns Configured Zod codec
|
|
158
|
-
*
|
|
159
|
-
* @example
|
|
160
|
-
* ```typescript
|
|
161
|
-
* // Disable deliverables in output
|
|
162
|
-
* const codec = createCurrentWorkCodec({ includeDeliverables: false });
|
|
163
|
-
*
|
|
164
|
-
* // Compact output without detail files
|
|
165
|
-
* const codec = createCurrentWorkCodec({ generateDetailFiles: false });
|
|
166
|
-
* ```
|
|
167
|
-
*/
|
|
168
|
-
export function createCurrentWorkCodec(options) {
|
|
169
|
-
const opts = mergeOptions(DEFAULT_CURRENT_WORK_OPTIONS, options);
|
|
170
|
-
return z.codec(MasterDatasetSchema, RenderableDocumentOutputSchema, {
|
|
171
|
-
decode: (dataset) => {
|
|
172
|
-
return buildCurrentWorkDocument(dataset, opts);
|
|
173
|
-
},
|
|
174
|
-
/** @throws Always - this codec is decode-only. See zod-codecs.md */
|
|
175
|
-
encode: () => {
|
|
176
|
-
throw new Error('CurrentWorkCodec is decode-only. See zod-codecs.md');
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Default Current Work Document Codec
|
|
182
|
-
*
|
|
183
|
-
* Transforms MasterDataset → RenderableDocument for current work.
|
|
184
|
-
* Shows active phases with deliverables and progress tracking.
|
|
185
|
-
*/
|
|
186
|
-
export const CurrentWorkCodec = createCurrentWorkCodec();
|
|
187
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
188
|
-
// Roadmap Document Builder
|
|
189
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
190
|
-
/**
|
|
191
|
-
* Build roadmap document
|
|
192
|
-
*/
|
|
193
|
-
function buildRoadmapDocument(dataset, options) {
|
|
194
|
-
const sections = [];
|
|
195
|
-
// 1. Overall progress summary
|
|
196
|
-
sections.push(...buildOverallProgress(dataset));
|
|
197
|
-
// 2. Phase navigation table (links to detail files)
|
|
198
|
-
sections.push(...buildPhaseNavigationTable(dataset, options));
|
|
199
|
-
// 3. Phase summaries (inline)
|
|
200
|
-
sections.push(...buildPhaseBreakdown(dataset));
|
|
201
|
-
// 4. Quarterly timeline (if quarters exist)
|
|
202
|
-
if (Object.keys(dataset.byQuarter).length > 0) {
|
|
203
|
-
sections.push(...buildQuarterlyTimeline(dataset));
|
|
204
|
-
}
|
|
205
|
-
// Build phase detail files (if enabled)
|
|
206
|
-
const additionalFiles = options.generateDetailFiles
|
|
207
|
-
? buildPhaseDetailFiles(dataset, options)
|
|
208
|
-
: {};
|
|
209
|
-
const docOpts = {
|
|
210
|
-
purpose: 'Track implementation progress by phase',
|
|
211
|
-
detailLevel: options.generateDetailFiles
|
|
212
|
-
? 'Phase summaries with links to details'
|
|
213
|
-
: 'Compact summary',
|
|
214
|
-
};
|
|
215
|
-
if (Object.keys(additionalFiles).length > 0) {
|
|
216
|
-
docOpts.additionalFiles = additionalFiles;
|
|
217
|
-
}
|
|
218
|
-
return document('Development Roadmap', sections, docOpts);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Build overall progress section
|
|
222
|
-
*/
|
|
223
|
-
function buildOverallProgress(dataset) {
|
|
224
|
-
const { counts, phaseCount } = dataset;
|
|
225
|
-
const progress = completionPercentage(counts);
|
|
226
|
-
const progressBar = renderProgressBar(counts.completed, counts.total, 20);
|
|
227
|
-
// Count completed phases
|
|
228
|
-
const completedPhases = dataset.byPhase.filter((p) => p.counts.total > 0 && p.counts.completed === p.counts.total).length;
|
|
229
|
-
return [
|
|
230
|
-
heading(2, 'Overall Progress'),
|
|
231
|
-
paragraph(`**Patterns:** ${progressBar} (${progress}%)`),
|
|
232
|
-
paragraph(`**Phases:** ${completedPhases}/${phaseCount} complete`),
|
|
233
|
-
table(['Metric', 'Value'], [
|
|
234
|
-
['Total Patterns', String(counts.total)],
|
|
235
|
-
['Completed', String(counts.completed)],
|
|
236
|
-
['Active', String(counts.active)],
|
|
237
|
-
['Planned', String(counts.planned)],
|
|
238
|
-
]),
|
|
239
|
-
separator(),
|
|
240
|
-
];
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Build phase breakdown section
|
|
244
|
-
*/
|
|
245
|
-
function buildPhaseBreakdown(dataset) {
|
|
246
|
-
const sections = [];
|
|
247
|
-
sections.push(heading(2, 'Phases'));
|
|
248
|
-
// Sort phases by number
|
|
249
|
-
const sortedPhases = [...dataset.byPhase].sort((a, b) => a.phaseNumber - b.phaseNumber);
|
|
250
|
-
for (const phase of sortedPhases) {
|
|
251
|
-
sections.push(...buildPhaseSection(phase));
|
|
252
|
-
}
|
|
253
|
-
return sections;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Build a single phase section
|
|
257
|
-
*/
|
|
258
|
-
function buildPhaseSection(phase) {
|
|
259
|
-
const sections = [];
|
|
260
|
-
const { phaseNumber, phaseName, patterns, counts } = phase;
|
|
261
|
-
const displayName = phaseName ?? `Phase ${phaseNumber}`;
|
|
262
|
-
const progress = completionPercentage(counts);
|
|
263
|
-
const progressBar = renderProgressBar(counts.completed, counts.total, 15);
|
|
264
|
-
const isComplete = counts.total > 0 && counts.completed === counts.total;
|
|
265
|
-
// Phase header with progress
|
|
266
|
-
const statusEmoji = getPhaseStatusEmoji(isComplete, counts.active > 0);
|
|
267
|
-
sections.push(heading(3, `${statusEmoji} ${displayName}`));
|
|
268
|
-
sections.push(paragraph(`${progressBar} ${progress}% complete`));
|
|
269
|
-
// Pattern table for this phase
|
|
270
|
-
const sortedPatterns = sortByPhaseAndName([...patterns]);
|
|
271
|
-
const rows = sortedPatterns.map((p) => {
|
|
272
|
-
const emoji = getStatusEmoji(p.status);
|
|
273
|
-
const name = getDisplayName(p);
|
|
274
|
-
const status = normalizeStatus(p.status);
|
|
275
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
276
|
-
return [`${emoji} ${name}`, status, summary || '-'];
|
|
277
|
-
});
|
|
278
|
-
sections.push(table(['Pattern', 'Status', 'Description'], rows), separator());
|
|
279
|
-
return sections;
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Build quarterly timeline section
|
|
283
|
-
*/
|
|
284
|
-
function buildQuarterlyTimeline(dataset) {
|
|
285
|
-
const sections = [];
|
|
286
|
-
const quarters = Object.keys(dataset.byQuarter).sort();
|
|
287
|
-
if (quarters.length === 0) {
|
|
288
|
-
return [];
|
|
289
|
-
}
|
|
290
|
-
sections.push(heading(2, 'Quarterly Timeline'));
|
|
291
|
-
// Current quarter detection
|
|
292
|
-
const now = new Date();
|
|
293
|
-
const currentQuarter = `Q${Math.ceil((now.getMonth() + 1) / 3)}-${now.getFullYear()}`;
|
|
294
|
-
const rows = quarters.map((quarter) => {
|
|
295
|
-
const patterns = dataset.byQuarter[quarter] ?? [];
|
|
296
|
-
const completed = patterns.filter((p) => isPatternComplete(p.status)).length;
|
|
297
|
-
const isCurrent = quarter === currentQuarter;
|
|
298
|
-
const marker = isCurrent ? ' ← Current' : '';
|
|
299
|
-
return [quarter + marker, String(patterns.length), String(completed)];
|
|
300
|
-
});
|
|
301
|
-
sections.push(table(['Quarter', 'Total', 'Completed'], rows), separator());
|
|
302
|
-
return sections;
|
|
303
|
-
}
|
|
304
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
305
|
-
// Roadmap Progressive Disclosure
|
|
306
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
307
|
-
/**
|
|
308
|
-
* Build phase navigation table with links to detail files
|
|
309
|
-
*/
|
|
310
|
-
function buildPhaseNavigationTable(dataset, options) {
|
|
311
|
-
const sections = [];
|
|
312
|
-
const sortedPhases = [...dataset.byPhase].sort((a, b) => a.phaseNumber - b.phaseNumber);
|
|
313
|
-
if (sortedPhases.length === 0) {
|
|
314
|
-
return [];
|
|
315
|
-
}
|
|
316
|
-
sections.push(heading(2, 'Phase Navigation'));
|
|
317
|
-
const rows = sortedPhases.map((phase) => {
|
|
318
|
-
const { phaseNumber, phaseName, counts } = phase;
|
|
319
|
-
const displayName = phaseName ?? `Phase ${phaseNumber}`;
|
|
320
|
-
const progress = completionPercentage(counts);
|
|
321
|
-
const isComplete = counts.total > 0 && counts.completed === counts.total;
|
|
322
|
-
const statusEmoji = getPhaseStatusEmoji(isComplete, counts.active > 0);
|
|
323
|
-
const slug = getPhaseSlug(phaseNumber, phaseName);
|
|
324
|
-
// Link to detail file if generating detail files, otherwise just display name
|
|
325
|
-
const nameCell = options.generateDetailFiles
|
|
326
|
-
? `${statusEmoji} [${displayName}](phases/${slug}.md)`
|
|
327
|
-
: `${statusEmoji} ${displayName}`;
|
|
328
|
-
return [nameCell, `${counts.completed}/${counts.total}`, `${progress}%`];
|
|
329
|
-
});
|
|
330
|
-
sections.push(table(['Phase', 'Progress', 'Complete'], rows), separator());
|
|
331
|
-
return sections;
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Generate slug for phase detail file
|
|
335
|
-
*
|
|
336
|
-
* Produces readable slugs with proper word separation:
|
|
337
|
-
* - Phase 14 "DeciderPattern" → "phase-14-decider-pattern"
|
|
338
|
-
* - Phase 19 "BddTestingInfrastructure" → "phase-19-bdd-testing-infrastructure"
|
|
339
|
-
* - Phase 5 (no name) → "phase-5-unnamed"
|
|
340
|
-
*
|
|
341
|
-
* @param phaseNumber - The phase number
|
|
342
|
-
* @param phaseName - Optional phase name (typically CamelCase)
|
|
343
|
-
* @returns URL-safe slug for the phase
|
|
344
|
-
*
|
|
345
|
-
* @internal Exported for testing - not part of public API
|
|
346
|
-
*/
|
|
347
|
-
export function getPhaseSlug(phaseNumber, phaseName) {
|
|
348
|
-
const paddedPhase = String(phaseNumber).padStart(2, '0');
|
|
349
|
-
const namePart = phaseName ? toKebabCase(phaseName) : 'unnamed';
|
|
350
|
-
return `phase-${paddedPhase}-${namePart}`;
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Build phase detail files (progressive disclosure)
|
|
354
|
-
*/
|
|
355
|
-
function buildPhaseDetailFiles(dataset, options) {
|
|
356
|
-
const files = {};
|
|
357
|
-
let sortedPhases = [...dataset.byPhase].sort((a, b) => a.phaseNumber - b.phaseNumber);
|
|
358
|
-
// Apply phase filter if specified
|
|
359
|
-
if (options.filterPhases.length > 0) {
|
|
360
|
-
sortedPhases = sortedPhases.filter((p) => options.filterPhases.includes(p.phaseNumber));
|
|
361
|
-
}
|
|
362
|
-
for (const phase of sortedPhases) {
|
|
363
|
-
if (phase.patterns.length === 0)
|
|
364
|
-
continue;
|
|
365
|
-
const slug = getPhaseSlug(phase.phaseNumber, phase.phaseName);
|
|
366
|
-
files[`phases/${slug}.md`] = buildPhaseDetailDocument(phase, options);
|
|
367
|
-
}
|
|
368
|
-
return files;
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Build a single phase detail document
|
|
372
|
-
*/
|
|
373
|
-
function buildPhaseDetailDocument(phase, _options) {
|
|
374
|
-
const sections = [];
|
|
375
|
-
const { phaseNumber, phaseName, patterns, counts } = phase;
|
|
376
|
-
const displayName = phaseName ?? `Phase ${phaseNumber}`;
|
|
377
|
-
// Summary
|
|
378
|
-
const progress = completionPercentage(counts);
|
|
379
|
-
const progressBar = renderProgressBar(counts.completed, counts.total, 20);
|
|
380
|
-
sections.push(heading(2, 'Summary'), paragraph(`**Progress:** ${progressBar} (${progress}%)`), table(['Status', 'Count'], [
|
|
381
|
-
['✅ Completed', String(counts.completed)],
|
|
382
|
-
['🚧 Active', String(counts.active)],
|
|
383
|
-
['📋 Planned', String(counts.planned)],
|
|
384
|
-
['**Total**', String(counts.total)],
|
|
385
|
-
]), separator());
|
|
386
|
-
// Patterns by status
|
|
387
|
-
const completed = patterns.filter((p) => isPatternComplete(p.status));
|
|
388
|
-
const active = patterns.filter((p) => isPatternActive(p.status));
|
|
389
|
-
const planned = patterns.filter((p) => isPatternPlanned(p.status));
|
|
390
|
-
if (active.length > 0) {
|
|
391
|
-
sections.push(heading(2, '🚧 Active Patterns'));
|
|
392
|
-
sections.push(...buildPatternDetailList(active));
|
|
393
|
-
}
|
|
394
|
-
if (planned.length > 0) {
|
|
395
|
-
sections.push(heading(2, '📋 Planned Patterns'));
|
|
396
|
-
sections.push(...buildPatternDetailList(planned));
|
|
397
|
-
}
|
|
398
|
-
if (completed.length > 0) {
|
|
399
|
-
sections.push(heading(2, '✅ Completed Patterns'));
|
|
400
|
-
sections.push(...buildPatternDetailList(completed));
|
|
401
|
-
}
|
|
402
|
-
// Back link
|
|
403
|
-
sections.push(linkOut('← Back to Roadmap', '../ROADMAP.md'));
|
|
404
|
-
return document(displayName, sections, {
|
|
405
|
-
purpose: `Detailed patterns for ${displayName}`,
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Build detailed pattern list for phase detail files
|
|
410
|
-
*/
|
|
411
|
-
function buildPatternDetailList(patterns) {
|
|
412
|
-
const sections = [];
|
|
413
|
-
const sorted = sortByPhaseAndName([...patterns]);
|
|
414
|
-
for (const pattern of sorted) {
|
|
415
|
-
const emoji = getStatusEmoji(pattern.status);
|
|
416
|
-
const name = getDisplayName(pattern);
|
|
417
|
-
sections.push(heading(3, `${emoji} ${name}`));
|
|
418
|
-
// Metadata table
|
|
419
|
-
const metaRows = [['Status', normalizeStatus(pattern.status)]];
|
|
420
|
-
if (pattern.effort) {
|
|
421
|
-
metaRows.push(['Effort', pattern.effort]);
|
|
422
|
-
}
|
|
423
|
-
if (pattern.quarter) {
|
|
424
|
-
metaRows.push(['Quarter', pattern.quarter]);
|
|
425
|
-
}
|
|
426
|
-
const businessValue = formatBusinessValue(pattern.businessValue);
|
|
427
|
-
if (businessValue) {
|
|
428
|
-
metaRows.push(['Business Value', businessValue]);
|
|
429
|
-
}
|
|
430
|
-
sections.push(table(['Property', 'Value'], metaRows));
|
|
431
|
-
// Description
|
|
432
|
-
if (pattern.directive.description) {
|
|
433
|
-
sections.push(paragraph(pattern.directive.description));
|
|
434
|
-
}
|
|
435
|
-
// Dependencies
|
|
436
|
-
if (pattern.dependsOn && pattern.dependsOn.length > 0) {
|
|
437
|
-
sections.push(heading(4, 'Dependencies'), list(pattern.dependsOn.map((d) => `Depends on: ${d}`)));
|
|
438
|
-
}
|
|
439
|
-
if (pattern.enables && pattern.enables.length > 0) {
|
|
440
|
-
sections.push(heading(4, 'Enables'), list(pattern.enables.map((e) => `Enables: ${e}`)));
|
|
441
|
-
}
|
|
442
|
-
// Use cases
|
|
443
|
-
if (pattern.useCases && pattern.useCases.length > 0) {
|
|
444
|
-
sections.push(heading(4, 'Use Cases'), list([...pattern.useCases]));
|
|
445
|
-
}
|
|
446
|
-
// Acceptance Criteria (scenarios with steps, DataTables, DocStrings)
|
|
447
|
-
sections.push(...renderAcceptanceCriteria(pattern.scenarios));
|
|
448
|
-
// Business Rules (from Gherkin Rule: keyword)
|
|
449
|
-
sections.push(...renderBusinessRulesSection(pattern.rules));
|
|
450
|
-
sections.push(separator());
|
|
451
|
-
}
|
|
452
|
-
return sections;
|
|
453
|
-
}
|
|
454
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
455
|
-
// Completed Milestones Document Builder
|
|
456
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
457
|
-
/**
|
|
458
|
-
* Build completed milestones document
|
|
459
|
-
*/
|
|
460
|
-
function buildCompletedMilestonesDocument(dataset, options) {
|
|
461
|
-
const sections = [];
|
|
462
|
-
// Get completed patterns
|
|
463
|
-
let completedPatterns = dataset.byStatus.completed;
|
|
464
|
-
// Apply quarter filter if specified
|
|
465
|
-
if (options.filterQuarters.length > 0) {
|
|
466
|
-
completedPatterns = completedPatterns.filter((p) => p.quarter !== undefined && options.filterQuarters.includes(p.quarter));
|
|
467
|
-
}
|
|
468
|
-
if (completedPatterns.length === 0) {
|
|
469
|
-
sections.push(heading(2, 'No Completed Milestones'), paragraph('No patterns have been completed yet.'));
|
|
470
|
-
return document('Completed Milestones', sections, {
|
|
471
|
-
purpose: 'Historical record of completed work',
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
// 1. Summary
|
|
475
|
-
sections.push(...buildCompletedSummary(dataset, completedPatterns));
|
|
476
|
-
// 2. Quarterly navigation table (links to detail files)
|
|
477
|
-
sections.push(...buildQuarterlyNavigationTable(dataset, completedPatterns, options));
|
|
478
|
-
// 3. Completed phases
|
|
479
|
-
sections.push(...buildCompletedPhases(dataset));
|
|
480
|
-
// 4. Recent completions (limit from options)
|
|
481
|
-
const recentLimit = options.limits.recentItems;
|
|
482
|
-
sections.push(...buildRecentCompletions(completedPatterns, recentLimit));
|
|
483
|
-
// Build quarterly detail files (if enabled)
|
|
484
|
-
const additionalFiles = options.generateDetailFiles
|
|
485
|
-
? buildQuarterlyMilestoneFiles(dataset, completedPatterns, options)
|
|
486
|
-
: {};
|
|
487
|
-
const docOpts = {
|
|
488
|
-
purpose: 'Historical record of completed work',
|
|
489
|
-
detailLevel: options.generateDetailFiles
|
|
490
|
-
? 'Quarterly summaries with links to details'
|
|
491
|
-
: 'Compact summary',
|
|
492
|
-
};
|
|
493
|
-
if (Object.keys(additionalFiles).length > 0) {
|
|
494
|
-
docOpts.additionalFiles = additionalFiles;
|
|
495
|
-
}
|
|
496
|
-
return document('Completed Milestones', sections, docOpts);
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Build completed summary section
|
|
500
|
-
*/
|
|
501
|
-
function buildCompletedSummary(dataset, completedPatterns) {
|
|
502
|
-
const completedPhases = dataset.byPhase.filter((p) => p.counts.total > 0 && p.counts.completed === p.counts.total).length;
|
|
503
|
-
return [
|
|
504
|
-
heading(2, 'Summary'),
|
|
505
|
-
table(['Metric', 'Value'], [
|
|
506
|
-
['Completed Patterns', String(completedPatterns.length)],
|
|
507
|
-
['Completed Phases', String(completedPhases)],
|
|
508
|
-
['Total Phases', String(dataset.phaseCount)],
|
|
509
|
-
]),
|
|
510
|
-
separator(),
|
|
511
|
-
];
|
|
512
|
-
}
|
|
513
|
-
/**
|
|
514
|
-
* Build completed phases section
|
|
515
|
-
*/
|
|
516
|
-
function buildCompletedPhases(dataset) {
|
|
517
|
-
const sections = [];
|
|
518
|
-
// Filter to fully completed phases
|
|
519
|
-
const completedPhases = dataset.byPhase.filter((p) => p.counts.total > 0 && p.counts.completed === p.counts.total);
|
|
520
|
-
if (completedPhases.length === 0) {
|
|
521
|
-
return [];
|
|
522
|
-
}
|
|
523
|
-
sections.push(heading(2, 'Completed Phases'));
|
|
524
|
-
for (const phase of completedPhases.sort((a, b) => a.phaseNumber - b.phaseNumber)) {
|
|
525
|
-
const displayName = phase.phaseName ?? `Phase ${phase.phaseNumber}`;
|
|
526
|
-
// Use collapsible for phase details
|
|
527
|
-
const phaseContent = [];
|
|
528
|
-
const rows = phase.patterns.map((p) => {
|
|
529
|
-
const name = getDisplayName(p);
|
|
530
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
531
|
-
return [name, summary || '-'];
|
|
532
|
-
});
|
|
533
|
-
phaseContent.push(table(['Pattern', 'Description'], rows));
|
|
534
|
-
sections.push(collapsible(`✅ ${displayName} (${phase.counts.total} patterns)`, phaseContent));
|
|
535
|
-
}
|
|
536
|
-
sections.push(separator());
|
|
537
|
-
return sections;
|
|
538
|
-
}
|
|
539
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
540
|
-
// Completed Milestones Progressive Disclosure
|
|
541
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
542
|
-
/**
|
|
543
|
-
* Build quarterly navigation table with links to detail files
|
|
544
|
-
*/
|
|
545
|
-
function buildQuarterlyNavigationTable(_dataset, completedPatterns, options) {
|
|
546
|
-
const sections = [];
|
|
547
|
-
// Group completed patterns by quarter
|
|
548
|
-
const byQuarter = groupBy(completedPatterns.filter((p) => p.quarter), (p) => p.quarter ?? '');
|
|
549
|
-
if (byQuarter.size === 0) {
|
|
550
|
-
return [];
|
|
551
|
-
}
|
|
552
|
-
sections.push(heading(2, 'Quarterly Navigation'));
|
|
553
|
-
const quarters = [...byQuarter.keys()].sort().reverse(); // Most recent first
|
|
554
|
-
const rows = quarters.map((quarter) => {
|
|
555
|
-
const patterns = byQuarter.get(quarter) ?? [];
|
|
556
|
-
// Link to detail file if generating detail files
|
|
557
|
-
const quarterCell = options.generateDetailFiles
|
|
558
|
-
? `[${quarter}](milestones/${quarter}.md)`
|
|
559
|
-
: quarter;
|
|
560
|
-
return [quarterCell, String(patterns.length)];
|
|
561
|
-
});
|
|
562
|
-
sections.push(table(['Quarter', 'Completed'], rows), separator());
|
|
563
|
-
return sections;
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Build recent completions section
|
|
567
|
-
*/
|
|
568
|
-
function buildRecentCompletions(patterns, limit = 10) {
|
|
569
|
-
const sections = [];
|
|
570
|
-
// Get most recent patterns (assume last added = most recent)
|
|
571
|
-
const recent = [...patterns].slice(-limit).reverse();
|
|
572
|
-
if (recent.length === 0) {
|
|
573
|
-
return [];
|
|
574
|
-
}
|
|
575
|
-
sections.push(heading(2, 'Recent Completions'));
|
|
576
|
-
const items = recent.map((p) => {
|
|
577
|
-
const name = getDisplayName(p);
|
|
578
|
-
const phase = p.phase !== undefined ? ` (Phase ${p.phase})` : '';
|
|
579
|
-
const quarter = p.quarter ? ` - ${p.quarter}` : '';
|
|
580
|
-
return `✅ ${name}${phase}${quarter}`;
|
|
581
|
-
});
|
|
582
|
-
sections.push(list(items));
|
|
583
|
-
if (patterns.length > limit) {
|
|
584
|
-
sections.push(paragraph(`Showing ${limit} of ${patterns.length} completed patterns. See quarterly files for full history.`));
|
|
585
|
-
}
|
|
586
|
-
sections.push(separator());
|
|
587
|
-
return sections;
|
|
588
|
-
}
|
|
589
|
-
/**
|
|
590
|
-
* Build quarterly milestone detail files (progressive disclosure)
|
|
591
|
-
*/
|
|
592
|
-
function buildQuarterlyMilestoneFiles(dataset, completedPatterns, _options) {
|
|
593
|
-
const files = {};
|
|
594
|
-
// Group completed patterns by quarter
|
|
595
|
-
const byQuarter = groupBy(completedPatterns.filter((p) => p.quarter), (p) => p.quarter ?? '');
|
|
596
|
-
for (const [quarter, patterns] of byQuarter.entries()) {
|
|
597
|
-
if (patterns.length === 0)
|
|
598
|
-
continue;
|
|
599
|
-
files[`milestones/${quarter}.md`] = buildQuarterDetailDocument(quarter, patterns, dataset);
|
|
600
|
-
}
|
|
601
|
-
return files;
|
|
602
|
-
}
|
|
603
|
-
/**
|
|
604
|
-
* Build a single quarterly detail document
|
|
605
|
-
*/
|
|
606
|
-
function buildQuarterDetailDocument(quarter, patterns, dataset) {
|
|
607
|
-
const sections = [];
|
|
608
|
-
// Summary
|
|
609
|
-
sections.push(heading(2, 'Summary'), table(['Metric', 'Value'], [
|
|
610
|
-
['Completed in Quarter', String(patterns.length)],
|
|
611
|
-
['Quarter', quarter],
|
|
612
|
-
]), separator());
|
|
613
|
-
// Group by phase
|
|
614
|
-
const byPhase = groupBy(patterns, (p) => p.phase ?? 0);
|
|
615
|
-
const sortedPhases = [...byPhase.keys()].sort((a, b) => a - b);
|
|
616
|
-
if (sortedPhases.length > 0) {
|
|
617
|
-
sections.push(heading(2, 'By Phase'));
|
|
618
|
-
for (const phaseNum of sortedPhases) {
|
|
619
|
-
const phasePatterns = byPhase.get(phaseNum) ?? [];
|
|
620
|
-
const phaseGroup = dataset.byPhase.find((p) => p.phaseNumber === phaseNum);
|
|
621
|
-
const displayName = phaseGroup?.phaseName ?? `Phase ${phaseNum}`;
|
|
622
|
-
const phaseContent = [];
|
|
623
|
-
const rows = sortByPhaseAndName([...phasePatterns]).map((p) => {
|
|
624
|
-
const name = getDisplayName(p);
|
|
625
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
626
|
-
const businessValue = formatBusinessValue(p.businessValue);
|
|
627
|
-
return [name, summary || '-', businessValue || '-'];
|
|
628
|
-
});
|
|
629
|
-
phaseContent.push(table(['Pattern', 'Description', 'Business Value'], rows));
|
|
630
|
-
sections.push(collapsible(`✅ ${displayName} (${phasePatterns.length})`, phaseContent));
|
|
631
|
-
}
|
|
632
|
-
sections.push(separator());
|
|
633
|
-
}
|
|
634
|
-
// All patterns in quarter
|
|
635
|
-
sections.push(heading(2, 'All Patterns'));
|
|
636
|
-
const rows = sortByPhaseAndName([...patterns]).map((p) => {
|
|
637
|
-
const name = getDisplayName(p);
|
|
638
|
-
const phase = p.phase !== undefined ? `Phase ${p.phase}` : '-';
|
|
639
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
640
|
-
return [`✅ ${name}`, phase, summary || '-'];
|
|
641
|
-
});
|
|
642
|
-
sections.push(table(['Pattern', 'Phase', 'Description'], rows), separator());
|
|
643
|
-
// Back link
|
|
644
|
-
sections.push(linkOut('← Back to Completed Milestones', '../COMPLETED-MILESTONES.md'));
|
|
645
|
-
return document(`${quarter} Milestones`, sections, {
|
|
646
|
-
purpose: `Completed patterns for ${quarter}`,
|
|
647
|
-
});
|
|
648
|
-
}
|
|
649
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
650
|
-
// Current Work Document Builder
|
|
651
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
652
|
-
/**
|
|
653
|
-
* Build current work document
|
|
654
|
-
*
|
|
655
|
-
* Filters to active patterns only and shows:
|
|
656
|
-
* - Progress summary for active work
|
|
657
|
-
* - Phases with active patterns
|
|
658
|
-
* - Deliverables (if configured)
|
|
659
|
-
*/
|
|
660
|
-
function buildCurrentWorkDocument(dataset, options) {
|
|
661
|
-
const sections = [];
|
|
662
|
-
// Get active patterns only
|
|
663
|
-
const activePatterns = dataset.byStatus.active;
|
|
664
|
-
if (activePatterns.length === 0) {
|
|
665
|
-
sections.push(heading(2, 'No Active Work'), paragraph('No patterns are currently in progress.'));
|
|
666
|
-
return document('Current Work', sections, {
|
|
667
|
-
purpose: 'Active development work currently in progress',
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
|
-
// 1. Summary of active work
|
|
671
|
-
sections.push(...buildCurrentWorkSummary(dataset, activePatterns));
|
|
672
|
-
// 2. Active phases with patterns
|
|
673
|
-
sections.push(...buildActivePhases(dataset, options));
|
|
674
|
-
// 3. All active patterns table
|
|
675
|
-
sections.push(...buildActivePatternsList(activePatterns, options));
|
|
676
|
-
// Build phase detail files (if enabled and phases have active work)
|
|
677
|
-
const additionalFiles = options.generateDetailFiles
|
|
678
|
-
? buildCurrentWorkDetailFiles(dataset, options)
|
|
679
|
-
: {};
|
|
680
|
-
const docOpts = {
|
|
681
|
-
purpose: 'Active development work currently in progress',
|
|
682
|
-
detailLevel: options.generateDetailFiles
|
|
683
|
-
? 'Phase summaries with links to details'
|
|
684
|
-
: 'Compact summary',
|
|
685
|
-
};
|
|
686
|
-
if (Object.keys(additionalFiles).length > 0) {
|
|
687
|
-
docOpts.additionalFiles = additionalFiles;
|
|
688
|
-
}
|
|
689
|
-
return document('Current Work', sections, docOpts);
|
|
690
|
-
}
|
|
691
|
-
/**
|
|
692
|
-
* Build current work summary section
|
|
693
|
-
*/
|
|
694
|
-
function buildCurrentWorkSummary(dataset, _activePatterns) {
|
|
695
|
-
// Count phases with active work
|
|
696
|
-
const activePhasesCount = dataset.byPhase.filter((p) => p.counts.active > 0).length;
|
|
697
|
-
// Calculate overall progress (from total dataset)
|
|
698
|
-
const { counts } = dataset;
|
|
699
|
-
const progress = completionPercentage(counts);
|
|
700
|
-
const progressBar = renderProgressBar(counts.completed, counts.total, 20);
|
|
701
|
-
return [
|
|
702
|
-
heading(2, 'Summary'),
|
|
703
|
-
paragraph(`**Overall Progress:** ${progressBar} (${progress}%)`),
|
|
704
|
-
table(['Metric', 'Value'], [
|
|
705
|
-
['Total Patterns', String(counts.total)],
|
|
706
|
-
['Completed', String(counts.completed)],
|
|
707
|
-
['Active', String(counts.active)],
|
|
708
|
-
['Planned', String(counts.planned)],
|
|
709
|
-
['Active Phases', String(activePhasesCount)],
|
|
710
|
-
]),
|
|
711
|
-
separator(),
|
|
712
|
-
];
|
|
713
|
-
}
|
|
714
|
-
/**
|
|
715
|
-
* Build active phases section
|
|
716
|
-
*/
|
|
717
|
-
function buildActivePhases(dataset, options) {
|
|
718
|
-
const sections = [];
|
|
719
|
-
// Filter to phases with active patterns
|
|
720
|
-
const activePhasesData = dataset.byPhase
|
|
721
|
-
.filter((p) => p.counts.active > 0)
|
|
722
|
-
.sort((a, b) => a.phaseNumber - b.phaseNumber);
|
|
723
|
-
if (activePhasesData.length === 0) {
|
|
724
|
-
return [];
|
|
725
|
-
}
|
|
726
|
-
sections.push(heading(2, 'Active Phases'));
|
|
727
|
-
for (const phase of activePhasesData) {
|
|
728
|
-
const { phaseNumber, phaseName, patterns, counts } = phase;
|
|
729
|
-
const displayName = phaseName ?? `Phase ${phaseNumber}`;
|
|
730
|
-
// Only show active patterns in this phase
|
|
731
|
-
const activeInPhase = patterns.filter((p) => isPatternActive(p.status));
|
|
732
|
-
const progress = completionPercentage(counts);
|
|
733
|
-
const progressBar = renderProgressBar(counts.completed, counts.total, 15);
|
|
734
|
-
sections.push(heading(3, `🚧 ${displayName}`));
|
|
735
|
-
// Build status breakdown with all non-zero categories
|
|
736
|
-
const statusParts = [`${counts.completed} done`, `${activeInPhase.length} active`];
|
|
737
|
-
if (counts.planned > 0)
|
|
738
|
-
statusParts.push(`${counts.planned} planned`);
|
|
739
|
-
const statusText = statusParts.join(', ');
|
|
740
|
-
sections.push(paragraph(`${progressBar} ${progress}% complete (${statusText})`));
|
|
741
|
-
// Pattern table for active patterns in this phase
|
|
742
|
-
const rows = sortByPhaseAndName([...activeInPhase]).map((p) => {
|
|
743
|
-
const name = getDisplayName(p);
|
|
744
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
745
|
-
return [`🚧 ${name}`, summary || '-'];
|
|
746
|
-
});
|
|
747
|
-
sections.push(table(['Pattern', 'Description'], rows));
|
|
748
|
-
// Deliverables for active patterns (if configured)
|
|
749
|
-
if (options.includeDeliverables) {
|
|
750
|
-
const allDeliverables = activeInPhase.flatMap((p) => p.deliverables ?? []);
|
|
751
|
-
if (allDeliverables.length > 0) {
|
|
752
|
-
const deliverableItems = allDeliverables.map((d) => {
|
|
753
|
-
const statusEmoji = getDeliverableStatusEmoji(d.status);
|
|
754
|
-
return `${statusEmoji} ${d.name}`;
|
|
755
|
-
});
|
|
756
|
-
sections.push(heading(4, 'Deliverables'), list(deliverableItems));
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
// Link to detail file
|
|
760
|
-
if (options.generateDetailFiles) {
|
|
761
|
-
const slug = getPhaseSlug(phaseNumber, phaseName);
|
|
762
|
-
sections.push(linkOut(`View ${displayName} details →`, `current/${slug}.md`));
|
|
763
|
-
}
|
|
764
|
-
sections.push(separator());
|
|
765
|
-
}
|
|
766
|
-
return sections;
|
|
767
|
-
}
|
|
768
|
-
/**
|
|
769
|
-
* Build all active patterns list
|
|
770
|
-
*/
|
|
771
|
-
function buildActivePatternsList(patterns, _options) {
|
|
772
|
-
const sorted = sortByPhaseAndName([...patterns]);
|
|
773
|
-
const rows = sorted.map((p) => {
|
|
774
|
-
const name = getDisplayName(p);
|
|
775
|
-
const phase = p.phase !== undefined ? `Phase ${p.phase}` : '-';
|
|
776
|
-
const effort = p.effort ?? '-';
|
|
777
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
778
|
-
return [`🚧 ${name}`, phase, effort, summary || '-'];
|
|
779
|
-
});
|
|
780
|
-
return [
|
|
781
|
-
heading(2, 'All Active Patterns'),
|
|
782
|
-
table(['Pattern', 'Phase', 'Effort', 'Description'], rows),
|
|
783
|
-
separator(),
|
|
784
|
-
];
|
|
785
|
-
}
|
|
786
|
-
/**
|
|
787
|
-
* Build current work detail files (progressive disclosure)
|
|
788
|
-
*/
|
|
789
|
-
function buildCurrentWorkDetailFiles(dataset, options) {
|
|
790
|
-
const files = {};
|
|
791
|
-
// Only create detail files for phases with active patterns
|
|
792
|
-
const activePhasesData = dataset.byPhase
|
|
793
|
-
.filter((p) => p.counts.active > 0)
|
|
794
|
-
.sort((a, b) => a.phaseNumber - b.phaseNumber);
|
|
795
|
-
for (const phase of activePhasesData) {
|
|
796
|
-
const slug = getPhaseSlug(phase.phaseNumber, phase.phaseName);
|
|
797
|
-
files[`current/${slug}.md`] = buildCurrentPhaseDetailDocument(phase, dataset, options);
|
|
798
|
-
}
|
|
799
|
-
return files;
|
|
800
|
-
}
|
|
801
|
-
/**
|
|
802
|
-
* Build detail document for an active phase
|
|
803
|
-
*/
|
|
804
|
-
function buildCurrentPhaseDetailDocument(phase, _dataset, options) {
|
|
805
|
-
const sections = [];
|
|
806
|
-
const { phaseNumber, phaseName, patterns, counts } = phase;
|
|
807
|
-
const displayName = phaseName ?? `Phase ${phaseNumber}`;
|
|
808
|
-
// Progress summary
|
|
809
|
-
const progress = completionPercentage(counts);
|
|
810
|
-
const progressBar = renderProgressBar(counts.completed, counts.total, 20);
|
|
811
|
-
sections.push(heading(2, 'Progress'), paragraph(`**Progress:** ${progressBar} (${progress}%)`), table(['Status', 'Count'], [
|
|
812
|
-
['✅ Completed', String(counts.completed)],
|
|
813
|
-
['🚧 Active', String(counts.active)],
|
|
814
|
-
['📋 Planned', String(counts.planned)],
|
|
815
|
-
['**Total**', String(counts.total)],
|
|
816
|
-
]), separator());
|
|
817
|
-
// Active patterns detail
|
|
818
|
-
const activePatterns = patterns.filter((p) => isPatternActive(p.status));
|
|
819
|
-
if (activePatterns.length > 0) {
|
|
820
|
-
sections.push(heading(2, '🚧 Active Work'));
|
|
821
|
-
for (const pattern of sortByPhaseAndName([...activePatterns])) {
|
|
822
|
-
sections.push(...buildCurrentWorkPatternDetail(pattern, options));
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
// Recently completed in this phase
|
|
826
|
-
const completedPatterns = patterns.filter((p) => isPatternComplete(p.status));
|
|
827
|
-
if (completedPatterns.length > 0) {
|
|
828
|
-
sections.push(heading(2, '✅ Recently Completed'));
|
|
829
|
-
const rows = sortByPhaseAndName([...completedPatterns]).map((p) => {
|
|
830
|
-
const name = getDisplayName(p);
|
|
831
|
-
const summary = extractSummary(p.directive.description, p.patternName);
|
|
832
|
-
return [`✅ ${name}`, summary || '-'];
|
|
833
|
-
});
|
|
834
|
-
sections.push(table(['Pattern', 'Description'], rows));
|
|
835
|
-
sections.push(separator());
|
|
836
|
-
}
|
|
837
|
-
// Upcoming in this phase
|
|
838
|
-
const plannedPatterns = patterns.filter((p) => isPatternPlanned(p.status));
|
|
839
|
-
if (plannedPatterns.length > 0) {
|
|
840
|
-
const plannedContent = [];
|
|
841
|
-
const rows = sortByPhaseAndName([...plannedPatterns]).map((p) => {
|
|
842
|
-
const name = getDisplayName(p);
|
|
843
|
-
const effort = p.effort ?? '-';
|
|
844
|
-
return [`📋 ${name}`, effort];
|
|
845
|
-
});
|
|
846
|
-
plannedContent.push(table(['Pattern', 'Effort'], rows));
|
|
847
|
-
sections.push(collapsible(`📋 Upcoming (${plannedPatterns.length})`, plannedContent));
|
|
848
|
-
sections.push(separator());
|
|
849
|
-
}
|
|
850
|
-
// Back link
|
|
851
|
-
sections.push(linkOut('← Back to Current Work', '../CURRENT-WORK.md'));
|
|
852
|
-
return document(displayName, sections, {
|
|
853
|
-
purpose: `Active work details for ${displayName}`,
|
|
854
|
-
});
|
|
855
|
-
}
|
|
856
|
-
/**
|
|
857
|
-
* Build detail section for a single active pattern
|
|
858
|
-
*/
|
|
859
|
-
function buildCurrentWorkPatternDetail(pattern, options) {
|
|
860
|
-
const sections = [];
|
|
861
|
-
const name = getDisplayName(pattern);
|
|
862
|
-
sections.push(heading(3, `🚧 ${name}`));
|
|
863
|
-
// Metadata table
|
|
864
|
-
const metaRows = [];
|
|
865
|
-
if (pattern.effort) {
|
|
866
|
-
metaRows.push(['Effort', pattern.effort]);
|
|
867
|
-
}
|
|
868
|
-
if (pattern.quarter) {
|
|
869
|
-
metaRows.push(['Quarter', pattern.quarter]);
|
|
870
|
-
}
|
|
871
|
-
const businessValue = formatBusinessValue(pattern.businessValue);
|
|
872
|
-
if (businessValue) {
|
|
873
|
-
metaRows.push(['Business Value', businessValue]);
|
|
874
|
-
}
|
|
875
|
-
if (metaRows.length > 0) {
|
|
876
|
-
sections.push(table(['Property', 'Value'], metaRows));
|
|
877
|
-
}
|
|
878
|
-
// Description
|
|
879
|
-
if (pattern.directive.description) {
|
|
880
|
-
sections.push(paragraph(pattern.directive.description));
|
|
881
|
-
}
|
|
882
|
-
// Deliverables (if configured)
|
|
883
|
-
if (options.includeDeliverables && pattern.deliverables && pattern.deliverables.length > 0) {
|
|
884
|
-
const deliverableItems = pattern.deliverables.map((d) => {
|
|
885
|
-
const statusEmoji = getDeliverableStatusEmoji(d.status);
|
|
886
|
-
const statusText = ` (${d.status})`;
|
|
887
|
-
return `${statusEmoji} ${d.name}${statusText}`;
|
|
888
|
-
});
|
|
889
|
-
sections.push(heading(4, 'Deliverables'), list(deliverableItems));
|
|
890
|
-
}
|
|
891
|
-
// Dependencies
|
|
892
|
-
if (pattern.dependsOn && pattern.dependsOn.length > 0) {
|
|
893
|
-
sections.push(heading(4, 'Dependencies'), list(pattern.dependsOn.map((d) => `Depends on: ${d}`)));
|
|
894
|
-
}
|
|
895
|
-
// Use cases
|
|
896
|
-
if (pattern.useCases && pattern.useCases.length > 0) {
|
|
897
|
-
sections.push(heading(4, 'Use Cases'), list([...pattern.useCases]));
|
|
898
|
-
}
|
|
899
|
-
// Acceptance Criteria (scenarios with steps, DataTables, DocStrings)
|
|
900
|
-
sections.push(...renderAcceptanceCriteria(pattern.scenarios));
|
|
901
|
-
// Business Rules (from Gherkin Rule: keyword)
|
|
902
|
-
sections.push(...renderBusinessRulesSection(pattern.rules));
|
|
903
|
-
sections.push(separator());
|
|
904
|
-
return sections;
|
|
905
|
-
}
|
|
906
|
-
//# sourceMappingURL=timeline.js.map
|