@seanmars/tospec 0.19.0-beta.7 → 0.20.0
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 +60 -231
- package/README.md +69 -82
- package/assets/dashboard/app.js +14 -3
- package/assets/dashboard/style.css +7 -0
- package/assets/rules/tospec/decision.md +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +227 -86
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/config.d.ts +9 -17
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +366 -107
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dashboard.d.ts +57 -99
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +224 -282
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/decision.d.ts +41 -19
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +385 -79
- package/dist/commands/decision.js.map +1 -1
- package/dist/commands/metrics.d.ts +28 -51
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +62 -93
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/shared-output.d.ts +18 -21
- package/dist/commands/shared-output.d.ts.map +1 -1
- package/dist/commands/shared-output.js +49 -23
- package/dist/commands/shared-output.js.map +1 -1
- package/dist/commands/show.d.ts +7 -0
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +29 -7
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/validate.d.ts +43 -45
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +262 -129
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/workflow/index.d.ts +6 -10
- package/dist/commands/workflow/index.d.ts.map +1 -1
- package/dist/commands/workflow/index.js +6 -10
- package/dist/commands/workflow/index.js.map +1 -1
- package/dist/commands/workflow/instructions.d.ts +21 -8
- package/dist/commands/workflow/instructions.d.ts.map +1 -1
- package/dist/commands/workflow/instructions.js +254 -95
- package/dist/commands/workflow/instructions.js.map +1 -1
- package/dist/commands/workflow/new-change.d.ts +4 -5
- package/dist/commands/workflow/new-change.d.ts.map +1 -1
- package/dist/commands/workflow/new-change.js +90 -25
- package/dist/commands/workflow/new-change.js.map +1 -1
- package/dist/commands/workflow/schemas.d.ts +3 -5
- package/dist/commands/workflow/schemas.d.ts.map +1 -1
- package/dist/commands/workflow/schemas.js +37 -11
- package/dist/commands/workflow/schemas.js.map +1 -1
- package/dist/commands/workflow/shared.d.ts +48 -21
- package/dist/commands/workflow/shared.d.ts.map +1 -1
- package/dist/commands/workflow/shared.js +36 -33
- package/dist/commands/workflow/shared.js.map +1 -1
- package/dist/commands/workflow/status.d.ts +10 -6
- package/dist/commands/workflow/status.d.ts.map +1 -1
- package/dist/commands/workflow/status.js +81 -42
- package/dist/commands/workflow/status.js.map +1 -1
- package/dist/commands/workflow/templates.d.ts +10 -3
- package/dist/commands/workflow/templates.d.ts.map +1 -1
- package/dist/commands/workflow/templates.js +39 -40
- package/dist/commands/workflow/templates.js.map +1 -1
- package/dist/core/archive.d.ts +26 -21
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +378 -235
- package/dist/core/archive.js.map +1 -1
- package/dist/core/artifact-graph/graph.d.ts +25 -42
- package/dist/core/artifact-graph/graph.d.ts.map +1 -1
- package/dist/core/artifact-graph/graph.js +45 -63
- package/dist/core/artifact-graph/graph.js.map +1 -1
- package/dist/core/artifact-graph/index.d.ts +1 -1
- package/dist/core/artifact-graph/index.d.ts.map +1 -1
- package/dist/core/artifact-graph/index.js +1 -1
- package/dist/core/artifact-graph/index.js.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.d.ts +97 -103
- package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +146 -119
- package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
- package/dist/core/artifact-graph/outputs.d.ts +9 -23
- package/dist/core/artifact-graph/outputs.d.ts.map +1 -1
- package/dist/core/artifact-graph/outputs.js +45 -38
- package/dist/core/artifact-graph/outputs.js.map +1 -1
- package/dist/core/artifact-graph/resolver.d.ts +44 -63
- package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
- package/dist/core/artifact-graph/resolver.js +85 -86
- package/dist/core/artifact-graph/resolver.js.map +1 -1
- package/dist/core/artifact-graph/schema.d.ts +0 -6
- package/dist/core/artifact-graph/schema.d.ts.map +1 -1
- package/dist/core/artifact-graph/schema.js +7 -32
- package/dist/core/artifact-graph/schema.js.map +1 -1
- package/dist/core/artifact-graph/state.d.ts +1 -8
- package/dist/core/artifact-graph/state.d.ts.map +1 -1
- package/dist/core/artifact-graph/state.js +2 -17
- package/dist/core/artifact-graph/state.js.map +1 -1
- package/dist/core/artifact-graph/stub-detection.d.ts +12 -0
- package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -0
- package/dist/core/artifact-graph/stub-detection.js +39 -0
- package/dist/core/artifact-graph/stub-detection.js.map +1 -0
- package/dist/core/artifact-graph/types.d.ts +4 -0
- package/dist/core/artifact-graph/types.d.ts.map +1 -1
- package/dist/core/artifact-graph/types.js +30 -10
- package/dist/core/artifact-graph/types.js.map +1 -1
- package/dist/core/available-tools.d.ts +3 -12
- package/dist/core/available-tools.d.ts.map +1 -1
- package/dist/core/available-tools.js +4 -13
- package/dist/core/available-tools.js.map +1 -1
- package/dist/core/change-metadata/schema.d.ts +1 -1
- package/dist/core/change-metadata/schema.d.ts.map +1 -1
- package/dist/core/change-metadata/schema.js +10 -7
- package/dist/core/change-metadata/schema.js.map +1 -1
- package/dist/core/change-presenter.d.ts +23 -18
- package/dist/core/change-presenter.d.ts.map +1 -1
- package/dist/core/change-presenter.js +102 -43
- package/dist/core/change-presenter.js.map +1 -1
- package/dist/core/change-status-policy.d.ts +8 -1
- package/dist/core/change-status-policy.d.ts.map +1 -1
- package/dist/core/change-status-policy.js +25 -1
- package/dist/core/change-status-policy.js.map +1 -1
- package/dist/core/codex-metrics.d.ts +25 -45
- package/dist/core/codex-metrics.d.ts.map +1 -1
- package/dist/core/codex-metrics.js +44 -88
- package/dist/core/codex-metrics.js.map +1 -1
- package/dist/core/codex-residue.d.ts +14 -15
- package/dist/core/codex-residue.d.ts.map +1 -1
- package/dist/core/codex-residue.js +18 -22
- package/dist/core/codex-residue.js.map +1 -1
- package/dist/core/command-generation/adapters/claude.d.ts +2 -9
- package/dist/core/command-generation/adapters/claude.d.ts.map +1 -1
- package/dist/core/command-generation/adapters/claude.js +2 -12
- package/dist/core/command-generation/adapters/claude.js.map +1 -1
- package/dist/core/command-generation/adapters/index.d.ts +1 -9
- package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
- package/dist/core/command-generation/adapters/index.js +1 -9
- package/dist/core/command-generation/adapters/index.js.map +1 -1
- package/dist/core/command-generation/generator.d.ts +0 -17
- package/dist/core/command-generation/generator.d.ts.map +1 -1
- package/dist/core/command-generation/generator.js +0 -17
- package/dist/core/command-generation/generator.js.map +1 -1
- package/dist/core/command-generation/index.d.ts +2 -5
- package/dist/core/command-generation/index.d.ts.map +1 -1
- package/dist/core/command-generation/index.js +0 -9
- package/dist/core/command-generation/index.js.map +1 -1
- package/dist/core/command-generation/types.d.ts +10 -36
- package/dist/core/command-generation/types.d.ts.map +1 -1
- package/dist/core/command-generation/types.js +0 -6
- package/dist/core/command-generation/types.js.map +1 -1
- package/dist/core/command-generation/yaml.d.ts +3 -18
- package/dist/core/command-generation/yaml.d.ts.map +1 -1
- package/dist/core/command-generation/yaml.js +5 -23
- package/dist/core/command-generation/yaml.js.map +1 -1
- package/dist/core/config-prompts.d.ts +2 -4
- package/dist/core/config-prompts.d.ts.map +1 -1
- package/dist/core/config-prompts.js +2 -7
- package/dist/core/config-prompts.js.map +1 -1
- package/dist/core/config-schema.d.ts +8 -53
- package/dist/core/config-schema.d.ts.map +1 -1
- package/dist/core/config-schema.js +49 -62
- package/dist/core/config-schema.js.map +1 -1
- package/dist/core/config.d.ts +39 -26
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +36 -22
- package/dist/core/config.js.map +1 -1
- package/dist/core/dashboard-activity.d.ts +7 -9
- package/dist/core/dashboard-activity.d.ts.map +1 -1
- package/dist/core/dashboard-activity.js +26 -24
- package/dist/core/dashboard-activity.js.map +1 -1
- package/dist/core/dashboard-data.d.ts +40 -22
- package/dist/core/dashboard-data.d.ts.map +1 -1
- package/dist/core/dashboard-data.js +62 -70
- package/dist/core/dashboard-data.js.map +1 -1
- package/dist/core/global-config.d.ts +24 -53
- package/dist/core/global-config.d.ts.map +1 -1
- package/dist/core/global-config.js +38 -67
- package/dist/core/global-config.js.map +1 -1
- package/dist/core/init.d.ts +25 -19
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +168 -181
- package/dist/core/init.js.map +1 -1
- package/dist/core/list.d.ts +1 -1
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +121 -28
- package/dist/core/list.js.map +1 -1
- package/dist/core/local-server.d.ts +41 -83
- package/dist/core/local-server.d.ts.map +1 -1
- package/dist/core/local-server.js +53 -98
- package/dist/core/local-server.js.map +1 -1
- package/dist/core/markdown-render.d.ts +25 -0
- package/dist/core/markdown-render.d.ts.map +1 -0
- package/dist/core/markdown-render.js +94 -0
- package/dist/core/markdown-render.js.map +1 -0
- package/dist/core/migrate.d.ts +29 -14
- package/dist/core/migrate.d.ts.map +1 -1
- package/dist/core/migrate.js +184 -122
- package/dist/core/migrate.js.map +1 -1
- package/dist/core/parsers/change-parser.d.ts +7 -10
- package/dist/core/parsers/change-parser.d.ts.map +1 -1
- package/dist/core/parsers/change-parser.js +48 -56
- package/dist/core/parsers/change-parser.js.map +1 -1
- package/dist/core/parsers/markdown-parser.d.ts +8 -9
- package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
- package/dist/core/parsers/markdown-parser.js +31 -22
- package/dist/core/parsers/markdown-parser.js.map +1 -1
- package/dist/core/parsers/requirement-blocks.d.ts +43 -15
- package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
- package/dist/core/parsers/requirement-blocks.js +142 -70
- package/dist/core/parsers/requirement-blocks.js.map +1 -1
- package/dist/core/parsers/requirement-text.d.ts +73 -79
- package/dist/core/parsers/requirement-text.d.ts.map +1 -1
- package/dist/core/parsers/requirement-text.js +137 -79
- package/dist/core/parsers/requirement-text.js.map +1 -1
- package/dist/core/parsers/spec-structure.d.ts.map +1 -1
- package/dist/core/parsers/spec-structure.js +10 -6
- package/dist/core/parsers/spec-structure.js.map +1 -1
- package/dist/core/profiles.d.ts +3 -10
- package/dist/core/profiles.d.ts.map +1 -1
- package/dist/core/profiles.js +5 -12
- package/dist/core/profiles.js.map +1 -1
- package/dist/core/project-config.d.ts +43 -44
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +107 -82
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/project-layout.d.ts +9 -17
- package/dist/core/project-layout.d.ts.map +1 -1
- package/dist/core/project-layout.js +16 -26
- package/dist/core/project-layout.js.map +1 -1
- package/dist/core/root-selection.d.ts +11 -7
- package/dist/core/root-selection.d.ts.map +1 -1
- package/dist/core/root-selection.js +7 -8
- package/dist/core/root-selection.js.map +1 -1
- package/dist/core/rules.d.ts +6 -1
- package/dist/core/rules.d.ts.map +1 -1
- package/dist/core/rules.js +23 -2
- package/dist/core/rules.js.map +1 -1
- package/dist/core/schema-names.d.ts +16 -0
- package/dist/core/schema-names.d.ts.map +1 -0
- package/dist/core/schema-names.js +16 -0
- package/dist/core/schema-names.js.map +1 -0
- package/dist/core/schemas/base.schema.d.ts +3 -0
- package/dist/core/schemas/base.schema.d.ts.map +1 -1
- package/dist/core/schemas/base.schema.js +22 -6
- package/dist/core/schemas/base.schema.js.map +1 -1
- package/dist/core/schemas/change.schema.d.ts +16 -0
- package/dist/core/schemas/change.schema.d.ts.map +1 -1
- package/dist/core/schemas/change.schema.js +41 -10
- package/dist/core/schemas/change.schema.js.map +1 -1
- package/dist/core/schemas/spec.schema.d.ts +2 -0
- package/dist/core/schemas/spec.schema.d.ts.map +1 -1
- package/dist/core/shared/index.d.ts +3 -8
- package/dist/core/shared/index.d.ts.map +1 -1
- package/dist/core/shared/index.js +3 -8
- package/dist/core/shared/index.js.map +1 -1
- package/dist/core/shared/rules-generation.d.ts +19 -8
- package/dist/core/shared/rules-generation.d.ts.map +1 -1
- package/dist/core/shared/rules-generation.js +117 -50
- package/dist/core/shared/rules-generation.js.map +1 -1
- package/dist/core/shared/skill-generation.d.ts +28 -43
- package/dist/core/shared/skill-generation.d.ts.map +1 -1
- package/dist/core/shared/skill-generation.js +82 -51
- package/dist/core/shared/skill-generation.js.map +1 -1
- package/dist/core/shared/tool-detection.d.ts +39 -61
- package/dist/core/shared/tool-detection.d.ts.map +1 -1
- package/dist/core/shared/tool-detection.js +88 -80
- package/dist/core/shared/tool-detection.js.map +1 -1
- package/dist/core/skill-metrics.d.ts +36 -63
- package/dist/core/skill-metrics.d.ts.map +1 -1
- package/dist/core/skill-metrics.js +34 -73
- package/dist/core/skill-metrics.js.map +1 -1
- package/dist/core/spec-presenter.js +6 -6
- package/dist/core/spec-presenter.js.map +1 -1
- package/dist/core/specs-apply.d.ts +22 -23
- package/dist/core/specs-apply.d.ts.map +1 -1
- package/dist/core/specs-apply.js +166 -193
- package/dist/core/specs-apply.js.map +1 -1
- package/dist/core/templates/fragments/interview.d.ts +2 -6
- package/dist/core/templates/fragments/interview.d.ts.map +1 -1
- package/dist/core/templates/fragments/interview.js +2 -6
- package/dist/core/templates/fragments/interview.js.map +1 -1
- package/dist/core/templates/fragments/next-step.d.ts +4 -8
- package/dist/core/templates/fragments/next-step.d.ts.map +1 -1
- package/dist/core/templates/fragments/next-step.js +4 -8
- package/dist/core/templates/fragments/next-step.js.map +1 -1
- package/dist/core/templates/fragments/validate.d.ts +13 -0
- package/dist/core/templates/fragments/validate.d.ts.map +1 -0
- package/dist/core/templates/fragments/validate.js +13 -0
- package/dist/core/templates/fragments/validate.js.map +1 -0
- package/dist/core/templates/fragments/verify.d.ts +9 -12
- package/dist/core/templates/fragments/verify.d.ts.map +1 -1
- package/dist/core/templates/fragments/verify.js +9 -12
- package/dist/core/templates/fragments/verify.js.map +1 -1
- package/dist/core/templates/index.d.ts +0 -6
- package/dist/core/templates/index.d.ts.map +1 -1
- package/dist/core/templates/index.js +0 -7
- package/dist/core/templates/index.js.map +1 -1
- package/dist/core/templates/skill-templates.d.ts +1 -5
- package/dist/core/templates/skill-templates.d.ts.map +1 -1
- package/dist/core/templates/skill-templates.js +0 -5
- package/dist/core/templates/skill-templates.js.map +1 -1
- package/dist/core/templates/types.d.ts +3 -7
- package/dist/core/templates/types.d.ts.map +1 -1
- package/dist/core/templates/types.js +0 -3
- package/dist/core/templates/types.js.map +1 -1
- package/dist/core/templates/workflows/apply.d.ts +3 -9
- package/dist/core/templates/workflows/apply.d.ts.map +1 -1
- package/dist/core/templates/workflows/apply.js +11 -13
- package/dist/core/templates/workflows/apply.js.map +1 -1
- package/dist/core/templates/workflows/archive.d.ts +0 -6
- package/dist/core/templates/workflows/archive.d.ts.map +1 -1
- package/dist/core/templates/workflows/archive.js +19 -6
- package/dist/core/templates/workflows/archive.js.map +1 -1
- package/dist/core/templates/workflows/decision.js +4 -4
- package/dist/core/templates/workflows/decision.js.map +1 -1
- package/dist/core/templates/workflows/explore.js +1 -1
- package/dist/core/templates/workflows/grill.d.ts.map +1 -1
- package/dist/core/templates/workflows/grill.js +0 -2
- package/dist/core/templates/workflows/grill.js.map +1 -1
- package/dist/core/templates/workflows/issue.d.ts +0 -6
- package/dist/core/templates/workflows/issue.d.ts.map +1 -1
- package/dist/core/templates/workflows/issue.js +3 -2
- package/dist/core/templates/workflows/issue.js.map +1 -1
- package/dist/core/templates/workflows/propose.d.ts +0 -6
- package/dist/core/templates/workflows/propose.d.ts.map +1 -1
- package/dist/core/templates/workflows/propose.js +2 -2
- package/dist/core/templates/workflows/propose.js.map +1 -1
- package/dist/core/templates/workflows/sync.d.ts +2 -8
- package/dist/core/templates/workflows/sync.d.ts.map +1 -1
- package/dist/core/templates/workflows/sync.js +4 -3
- package/dist/core/templates/workflows/sync.js.map +1 -1
- package/dist/core/templates/workflows/update.d.ts +0 -6
- package/dist/core/templates/workflows/update.d.ts.map +1 -1
- package/dist/core/templates/workflows/update.js +9 -2
- package/dist/core/templates/workflows/update.js.map +1 -1
- package/dist/core/update.d.ts +23 -23
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +139 -118
- package/dist/core/update.js.map +1 -1
- package/dist/core/user-state-migration.d.ts +13 -15
- package/dist/core/user-state-migration.d.ts.map +1 -1
- package/dist/core/user-state-migration.js +16 -20
- package/dist/core/user-state-migration.js.map +1 -1
- package/dist/core/validation/constants.d.ts +4 -10
- package/dist/core/validation/constants.d.ts.map +1 -1
- package/dist/core/validation/constants.js +25 -20
- package/dist/core/validation/constants.js.map +1 -1
- package/dist/core/validation/prose-length.d.ts +15 -0
- package/dist/core/validation/prose-length.d.ts.map +1 -0
- package/dist/core/validation/prose-length.js +29 -0
- package/dist/core/validation/prose-length.js.map +1 -0
- package/dist/core/validation/purpose-placeholder.d.ts +9 -16
- package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
- package/dist/core/validation/purpose-placeholder.js +30 -44
- package/dist/core/validation/purpose-placeholder.js.map +1 -1
- package/dist/core/validation/section-validator.d.ts +4 -4
- package/dist/core/validation/section-validator.d.ts.map +1 -1
- package/dist/core/validation/section-validator.js +43 -7
- package/dist/core/validation/section-validator.js.map +1 -1
- package/dist/core/validation/task-numbering.d.ts +6 -3
- package/dist/core/validation/task-numbering.d.ts.map +1 -1
- package/dist/core/validation/task-numbering.js +23 -11
- package/dist/core/validation/task-numbering.js.map +1 -1
- package/dist/core/validation/types.d.ts +18 -0
- package/dist/core/validation/types.d.ts.map +1 -1
- package/dist/core/validation/types.js +12 -1
- package/dist/core/validation/types.js.map +1 -1
- package/dist/core/validation/validator.d.ts +43 -63
- package/dist/core/validation/validator.d.ts.map +1 -1
- package/dist/core/validation/validator.js +500 -267
- package/dist/core/validation/validator.js.map +1 -1
- package/dist/prompts/searchable-multi-select.d.ts +3 -8
- package/dist/prompts/searchable-multi-select.d.ts.map +1 -1
- package/dist/prompts/searchable-multi-select.js +16 -39
- package/dist/prompts/searchable-multi-select.js.map +1 -1
- package/dist/utils/change-metadata.d.ts +11 -50
- package/dist/utils/change-metadata.d.ts.map +1 -1
- package/dist/utils/change-metadata.js +48 -67
- package/dist/utils/change-metadata.js.map +1 -1
- package/dist/utils/change-utils.d.ts +30 -54
- package/dist/utils/change-utils.d.ts.map +1 -1
- package/dist/utils/change-utils.js +133 -91
- package/dist/utils/change-utils.js.map +1 -1
- package/dist/utils/file-lock.d.ts +39 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +149 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/file-system.d.ts +12 -32
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +16 -40
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +7 -11
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +11 -11
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/interactive.d.ts +4 -9
- package/dist/utils/interactive.d.ts.map +1 -1
- package/dist/utils/interactive.js +2 -4
- package/dist/utils/interactive.js.map +1 -1
- package/dist/utils/item-discovery.d.ts +15 -10
- package/dist/utils/item-discovery.d.ts.map +1 -1
- package/dist/utils/item-discovery.js +42 -47
- package/dist/utils/item-discovery.js.map +1 -1
- package/dist/utils/link.d.ts +9 -18
- package/dist/utils/link.d.ts.map +1 -1
- package/dist/utils/link.js +9 -18
- package/dist/utils/link.js.map +1 -1
- package/dist/utils/requirement-diff.d.ts +13 -23
- package/dist/utils/requirement-diff.d.ts.map +1 -1
- package/dist/utils/requirement-diff.js +13 -23
- package/dist/utils/requirement-diff.js.map +1 -1
- package/dist/utils/spec-files.d.ts +7 -20
- package/dist/utils/spec-files.d.ts.map +1 -1
- package/dist/utils/spec-files.js +26 -51
- package/dist/utils/spec-files.js.map +1 -1
- package/dist/utils/task-progress.d.ts +11 -9
- package/dist/utils/task-progress.d.ts.map +1 -1
- package/dist/utils/task-progress.js +53 -32
- package/dist/utils/task-progress.js.map +1 -1
- package/dist/utils/timestamp.d.ts +5 -8
- package/dist/utils/timestamp.d.ts.map +1 -1
- package/dist/utils/timestamp.js +5 -8
- package/dist/utils/timestamp.js.map +1 -1
- package/package.json +2 -3
- package/schemas/decision/templates/decision.md +3 -1
- package/schemas/decision/templates/index.md +2 -2
- package/schemas/issue/schema.yaml +8 -1
- package/schemas/issue/templates/spec.md +27 -2
- package/schemas/sdd/schema.yaml +20 -1
- package/schemas/sdd/templates/spec.md +27 -2
- /package/assets/rules/tospec/{single-sourc-of-truth.md → single-source-of-truth.md} +0 -0
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* agent-facing JSON envelope:
|
|
2
|
+
* The one definition of the CLI's agent-facing JSON envelope:
|
|
4
3
|
*
|
|
5
4
|
* success: { version, root?, <data...> }
|
|
6
5
|
* failure: { version, root?, <dataKey>: null, status: [{severity, code, message, fix?}] }
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* (Ctrl-C in a prompt → `Cancelled.` + 130).
|
|
7
|
+
* `root` is included whenever one was resolved before the output point. Human
|
|
8
|
+
* mode instead prints `Error:` / `Fix:` on stderr with exit code 1 (Ctrl-C in a
|
|
9
|
+
* prompt → `Cancelled.` + 130).
|
|
12
10
|
*/
|
|
13
11
|
export interface CommandDiagnostic {
|
|
14
12
|
severity: 'error' | 'warning' | 'info';
|
|
@@ -26,24 +24,18 @@ export declare function emitSuccess(payload: Record<string, unknown>, root?: unk
|
|
|
26
24
|
* translate their own error types, e.g. archive). Sets exitCode 1.
|
|
27
25
|
*/
|
|
28
26
|
export declare function emitFailureStatus(payload: Record<string, unknown>, status: CommandDiagnostic): void;
|
|
27
|
+
export declare function recordResolvedRoot(root: unknown): void;
|
|
28
|
+
/** Test seam: forget the recorded root so one case cannot leak into the next. */
|
|
29
|
+
export declare function clearResolvedRoot(): void;
|
|
29
30
|
export declare function asErrorMessage(error: unknown): string;
|
|
30
|
-
/**
|
|
31
|
-
* @inquirer prompts reject with ExitPromptError on Ctrl-C; commands
|
|
32
|
-
* translate that to `Cancelled.` + exit 130 (third caller extracted
|
|
33
|
-
* this here in slice 7.1).
|
|
34
|
-
*/
|
|
31
|
+
/** @inquirer rejects with ExitPromptError on Ctrl-C → `Cancelled.` + exit 130. */
|
|
35
32
|
export declare function isPromptCancellationError(error: unknown): boolean;
|
|
36
33
|
/**
|
|
37
|
-
* Aborts the CLI from a place that cannot simply return
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* pending stdout/stderr writes have necessarily flushed (a documented
|
|
43
|
-
* truncation source on Windows pipes), in a CLI whose `--json` contract
|
|
44
|
-
* requires exactly one whole JSON document to reach stdout. `runCli` catches
|
|
45
|
-
* this, sets `process.exitCode`, and returns, so the process ends the way every
|
|
46
|
-
* other failure path ends.
|
|
34
|
+
* Aborts the CLI from a place that cannot simply return — returning from a
|
|
35
|
+
* commander `preAction` hook does not stop the action. `process.exit` is not an
|
|
36
|
+
* option: it terminates before pending stdout writes have necessarily flushed
|
|
37
|
+
* (a documented truncation source on Windows pipes), and `--json` requires one
|
|
38
|
+
* whole document. `runCli` catches this and sets `process.exitCode` instead.
|
|
47
39
|
*/
|
|
48
40
|
export declare class CliAbortError extends Error {
|
|
49
41
|
readonly isCliAbort = true;
|
|
@@ -51,5 +43,10 @@ export declare class CliAbortError extends Error {
|
|
|
51
43
|
}
|
|
52
44
|
export declare function isCliAbort(error: unknown): boolean;
|
|
53
45
|
export declare function asStatus(error: unknown, fallbackCode: string): CommandDiagnostic;
|
|
46
|
+
/**
|
|
47
|
+
* `commander.invalidArgument` -> `invalid_argument`, so an agent matching on
|
|
48
|
+
* `status[].code` needs no second spelling for a parse-time failure.
|
|
49
|
+
*/
|
|
50
|
+
export declare function normalizeCommanderCode(code: string | undefined): string;
|
|
54
51
|
export declare function emitFailure(json: boolean | undefined, payload: Record<string, unknown>, error: unknown, fallbackCode: string): void;
|
|
55
52
|
//# sourceMappingURL=shared-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-output.d.ts","sourceRoot":"","sources":["../../src/commands/shared-output.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shared-output.d.ts","sourceRoot":"","sources":["../../src/commands/shared-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEhD;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAElF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAKN;AAgBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEtD;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED,kFAAkF;AAClF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMjE;AAED;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,UAAU,QAAQ;IAE3B,YAAY,OAAO,SAAgB,EAGlC;CACF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,iBAAiB,CAchF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMvE;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,GACnB,IAAI,CAwBN"}
|
|
@@ -16,30 +16,41 @@ export function emitFailureStatus(payload, status) {
|
|
|
16
16
|
printJson({ version: ENVELOPE_VERSION, ...rest, status: [...priorStatuses, status] });
|
|
17
17
|
process.exitCode = 1;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* The root the current command resolved, if it got that far.
|
|
21
|
+
*
|
|
22
|
+
* Null-shapes spell `root: null`, which is wrong for the commoner failure where
|
|
23
|
+
* resolution succeeded and the command then failed at something else — a caller
|
|
24
|
+
* could not tell "not a project" from "no such change".
|
|
25
|
+
*
|
|
26
|
+
* Set by `resolveRootForCommand`, read only by `emitFailure`.
|
|
27
|
+
* `emitFailureStatus` does not consult it: its other callers are root resolution
|
|
28
|
+
* itself and the commander layer, neither of which has resolved a root for the
|
|
29
|
+
* run being reported. Module state is safe: one command per process.
|
|
30
|
+
*/
|
|
31
|
+
let lastResolvedRoot = null;
|
|
32
|
+
export function recordResolvedRoot(root) {
|
|
33
|
+
lastResolvedRoot = root;
|
|
34
|
+
}
|
|
35
|
+
/** Test seam: forget the recorded root so one case cannot leak into the next. */
|
|
36
|
+
export function clearResolvedRoot() {
|
|
37
|
+
lastResolvedRoot = null;
|
|
38
|
+
}
|
|
19
39
|
export function asErrorMessage(error) {
|
|
20
40
|
return error instanceof Error ? error.message : String(error);
|
|
21
41
|
}
|
|
22
|
-
/**
|
|
23
|
-
* @inquirer prompts reject with ExitPromptError on Ctrl-C; commands
|
|
24
|
-
* translate that to `Cancelled.` + exit 130 (third caller extracted
|
|
25
|
-
* this here in slice 7.1).
|
|
26
|
-
*/
|
|
42
|
+
/** @inquirer rejects with ExitPromptError on Ctrl-C → `Cancelled.` + exit 130. */
|
|
27
43
|
export function isPromptCancellationError(error) {
|
|
28
44
|
return (error instanceof Error &&
|
|
29
45
|
(error.name === 'ExitPromptError' ||
|
|
30
46
|
error.message.includes('force closed the prompt with SIGINT')));
|
|
31
47
|
}
|
|
32
48
|
/**
|
|
33
|
-
* Aborts the CLI from a place that cannot simply return
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* pending stdout/stderr writes have necessarily flushed (a documented
|
|
39
|
-
* truncation source on Windows pipes), in a CLI whose `--json` contract
|
|
40
|
-
* requires exactly one whole JSON document to reach stdout. `runCli` catches
|
|
41
|
-
* this, sets `process.exitCode`, and returns, so the process ends the way every
|
|
42
|
-
* other failure path ends.
|
|
49
|
+
* Aborts the CLI from a place that cannot simply return — returning from a
|
|
50
|
+
* commander `preAction` hook does not stop the action. `process.exit` is not an
|
|
51
|
+
* option: it terminates before pending stdout writes have necessarily flushed
|
|
52
|
+
* (a documented truncation source on Windows pipes), and `--json` requires one
|
|
53
|
+
* whole document. `runCli` catches this and sets `process.exitCode` instead.
|
|
43
54
|
*/
|
|
44
55
|
export class CliAbortError extends Error {
|
|
45
56
|
isCliAbort = true;
|
|
@@ -52,11 +63,10 @@ export function isCliAbort(error) {
|
|
|
52
63
|
return Boolean(error?.isCliAbort);
|
|
53
64
|
}
|
|
54
65
|
export function asStatus(error, fallbackCode) {
|
|
55
|
-
// RootSelectionError
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
// the real cause with a TypeError and suppressing the JSON envelope entirely.
|
|
66
|
+
// RootSelectionError and siblings carry the same envelope without sharing a
|
|
67
|
+
// class hierarchy, so duck-type it once here. Optional chaining because a
|
|
68
|
+
// `throw null` would make the property access itself throw, replacing the
|
|
69
|
+
// real cause.
|
|
60
70
|
const diagnostic = error?.diagnostic;
|
|
61
71
|
if (diagnostic && typeof diagnostic.code === 'string') {
|
|
62
72
|
return diagnostic;
|
|
@@ -67,9 +77,20 @@ export function asStatus(error, fallbackCode) {
|
|
|
67
77
|
message: asErrorMessage(error),
|
|
68
78
|
};
|
|
69
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* `commander.invalidArgument` -> `invalid_argument`, so an agent matching on
|
|
82
|
+
* `status[].code` needs no second spelling for a parse-time failure.
|
|
83
|
+
*/
|
|
84
|
+
export function normalizeCommanderCode(code) {
|
|
85
|
+
if (!code)
|
|
86
|
+
return 'argument_error';
|
|
87
|
+
return code
|
|
88
|
+
.replace(/^commander\./, '')
|
|
89
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
90
|
+
.toLowerCase();
|
|
91
|
+
}
|
|
70
92
|
export function emitFailure(json, payload, error, fallbackCode) {
|
|
71
|
-
// Ctrl-C in a prompt is the user's choice, not an error
|
|
72
|
-
// command group gets the Cancelled./130 convention through here.
|
|
93
|
+
// Ctrl-C in a prompt is the user's choice, not an error.
|
|
73
94
|
if (!json && isPromptCancellationError(error)) {
|
|
74
95
|
console.error('Cancelled.');
|
|
75
96
|
process.exitCode = 130;
|
|
@@ -77,7 +98,12 @@ export function emitFailure(json, payload, error, fallbackCode) {
|
|
|
77
98
|
}
|
|
78
99
|
const status = asStatus(error, fallbackCode);
|
|
79
100
|
if (json) {
|
|
80
|
-
|
|
101
|
+
// Report the root a failing command did resolve, not the null-shape's
|
|
102
|
+
// placeholder — only when the payload declares `root` at all.
|
|
103
|
+
const withRoot = 'root' in payload && payload.root === null && lastResolvedRoot !== null
|
|
104
|
+
? { ...payload, root: lastResolvedRoot }
|
|
105
|
+
: payload;
|
|
106
|
+
emitFailureStatus(withRoot, status);
|
|
81
107
|
return;
|
|
82
108
|
}
|
|
83
109
|
console.error(`Error: ${status.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-output.js","sourceRoot":"","sources":["../../src/commands/shared-output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared-output.js","sourceRoot":"","sources":["../../src/commands/shared-output.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/show.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `--json` null-shape. Like `instructions`, the success payload is flat and
|
|
3
|
+
* differs between a change and a spec; `id` is the key both carry, so it is the
|
|
4
|
+
* one a failure can null. The previous `item: null` named a key neither success
|
|
5
|
+
* shape has, which left the mirroring rule unverifiable.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SHOW_FAILURE_PAYLOAD: Record<string, unknown>;
|
|
1
8
|
interface ShowExecuteOptions {
|
|
2
9
|
json?: boolean;
|
|
3
10
|
type?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAkBA,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,qBAAa,WAAW;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAA4B,CAAC;AAEtF,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,qBAAa,WAAW;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChF;IAED,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,eAAe;YAOT,oBAAoB;YA8BpB,UAAU;IA6ExB,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,mBAAmB;CAa5B"}
|
package/dist/commands/show.js
CHANGED
|
@@ -7,9 +7,22 @@ import { nearestMatches } from '../utils/match.js';
|
|
|
7
7
|
import { emitFailureStatus } from './shared-output.js';
|
|
8
8
|
const CHANGE_FLAG_KEYS = new Set(['deltasOnly', 'requirementsOnly', 'diff']);
|
|
9
9
|
const SPEC_FLAG_KEYS = new Set(['requirements', 'scenarios', 'requirement']);
|
|
10
|
+
/**
|
|
11
|
+
* The `--json` null-shape. Like `instructions`, the success payload is flat and
|
|
12
|
+
* differs between a change and a spec; `id` is the key both carry, so it is the
|
|
13
|
+
* one a failure can null. The previous `item: null` named a key neither success
|
|
14
|
+
* shape has, which left the mirroring rule unverifiable.
|
|
15
|
+
*/
|
|
16
|
+
export const SHOW_FAILURE_PAYLOAD = { id: null, root: null };
|
|
10
17
|
export class ShowCommand {
|
|
11
18
|
async execute(itemName, options = {}) {
|
|
12
|
-
|
|
19
|
+
// No implicit root, as `list` and `status`: on the fallback, an unknown item
|
|
20
|
+
// reads as a typo when the real problem is that this directory is no project.
|
|
21
|
+
const root = await resolveRootForCommand(options, {
|
|
22
|
+
json: options.json,
|
|
23
|
+
allowImplicitRoot: false,
|
|
24
|
+
failurePayload: SHOW_FAILURE_PAYLOAD,
|
|
25
|
+
});
|
|
13
26
|
if (!root) {
|
|
14
27
|
return;
|
|
15
28
|
}
|
|
@@ -74,7 +87,8 @@ export class ShowCommand {
|
|
|
74
87
|
}
|
|
75
88
|
async showDirect(itemName, params) {
|
|
76
89
|
const root = params.root;
|
|
77
|
-
//
|
|
90
|
+
// A known type needs only its own listing; without one, both are needed
|
|
91
|
+
// anyway, so they are fetched together.
|
|
78
92
|
let isChange = false;
|
|
79
93
|
let isSpec = false;
|
|
80
94
|
let changes = [];
|
|
@@ -92,14 +106,22 @@ export class ShowCommand {
|
|
|
92
106
|
isChange = changes.includes(itemName);
|
|
93
107
|
isSpec = specs.includes(itemName);
|
|
94
108
|
}
|
|
95
|
-
|
|
109
|
+
let resolvedType = params.typeOverride;
|
|
96
110
|
if (!resolvedType) {
|
|
97
|
-
|
|
111
|
+
if (isChange)
|
|
112
|
+
resolvedType = 'change';
|
|
113
|
+
else if (isSpec)
|
|
114
|
+
resolvedType = 'spec';
|
|
115
|
+
}
|
|
116
|
+
if (!resolvedType) {
|
|
117
|
+
// Deduplicated: a name that is both a change and a spec would otherwise
|
|
118
|
+
// be suggested twice, reading as a typo in the suggestion itself.
|
|
119
|
+
const suggestions = nearestMatches(itemName, [...new Set([...changes, ...specs])]);
|
|
98
120
|
const message = suggestions.length
|
|
99
121
|
? `Unknown item '${itemName}'. Did you mean: ${suggestions.join(', ')}?`
|
|
100
122
|
: `Unknown item '${itemName}'.`;
|
|
101
123
|
if (params.options.json) {
|
|
102
|
-
emitFailureStatus({
|
|
124
|
+
emitFailureStatus({ ...SHOW_FAILURE_PAYLOAD, root: toRootOutput(root) }, { severity: 'error', code: 'unknown_item', message });
|
|
103
125
|
}
|
|
104
126
|
else {
|
|
105
127
|
console.error(message);
|
|
@@ -109,7 +131,7 @@ export class ShowCommand {
|
|
|
109
131
|
}
|
|
110
132
|
if (!params.typeOverride && isChange && isSpec) {
|
|
111
133
|
if (params.options.json) {
|
|
112
|
-
emitFailureStatus({
|
|
134
|
+
emitFailureStatus({ ...SHOW_FAILURE_PAYLOAD, root: toRootOutput(root) }, {
|
|
113
135
|
severity: 'error',
|
|
114
136
|
code: 'ambiguous_item',
|
|
115
137
|
message: `Ambiguous item '${itemName}' matches both a change and a spec.`,
|
|
@@ -133,7 +155,7 @@ export class ShowCommand {
|
|
|
133
155
|
}
|
|
134
156
|
printNonInteractiveHint(root, options) {
|
|
135
157
|
if (options.json) {
|
|
136
|
-
emitFailureStatus({
|
|
158
|
+
emitFailureStatus({ ...SHOW_FAILURE_PAYLOAD, root: toRootOutput(root) }, {
|
|
137
159
|
severity: 'error',
|
|
138
160
|
code: 'no_item_specified',
|
|
139
161
|
message: 'Nothing to show.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,YAAY,GAGb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ValidationIssue, type ValidationReport } from '../core/validation/types.js';
|
|
2
2
|
interface ExecuteOptions {
|
|
3
3
|
all?: boolean;
|
|
4
4
|
changes?: boolean;
|
|
@@ -7,60 +7,66 @@ interface ExecuteOptions {
|
|
|
7
7
|
strict?: boolean;
|
|
8
8
|
json?: boolean;
|
|
9
9
|
noInteractive?: boolean;
|
|
10
|
+
/** Commander sets this to false for --no-interactive. */
|
|
10
11
|
interactive?: boolean;
|
|
11
12
|
concurrency?: string;
|
|
12
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* The one null-shape every `validate --json` failure carries, so a caller
|
|
16
|
+
* reading `result.summary.totals` never gets `undefined` from one failure path
|
|
17
|
+
* and `null` from another.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* The `--json` null-shape, `root` included: a root-resolution failure has none,
|
|
21
|
+
* and the sites that do resolve one spread their own over it.
|
|
22
|
+
*/
|
|
23
|
+
export declare const VALIDATE_FAILURE_PAYLOAD: {
|
|
24
|
+
readonly items: null;
|
|
25
|
+
readonly summary: null;
|
|
26
|
+
readonly root: null;
|
|
27
|
+
};
|
|
13
28
|
export declare class ValidateCommand {
|
|
14
29
|
execute(itemName: string | undefined, options?: ExecuteOptions): Promise<void>;
|
|
15
30
|
private normalizeType;
|
|
16
31
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* scaffolded or still-authoring change that the sibling commands already
|
|
21
|
-
* resolve (#1182). Sorted to preserve the prior `getActiveChangeIds` ordering.
|
|
32
|
+
* Change IDs by directory existence — the same rule `status` and
|
|
33
|
+
* `instructions` use — rather than by `proposal.md`, so a scaffolded change
|
|
34
|
+
* resolves here too.
|
|
22
35
|
*/
|
|
23
36
|
private listChangeIds;
|
|
24
37
|
private runInteractiveSelector;
|
|
25
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Nothing named and no terminal to ask in. `no_item_specified` is the code
|
|
40
|
+
* `show` uses for the same situation.
|
|
41
|
+
*/
|
|
42
|
+
private reportNothingToValidate;
|
|
26
43
|
private validateDirectItem;
|
|
27
44
|
private validateByType;
|
|
28
45
|
private printReport;
|
|
29
46
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* its delta headers instead.
|
|
47
|
+
* Hints derived from what actually failed, not from the item type, so a
|
|
48
|
+
* change whose only problem is a missing design.md section is not told to
|
|
49
|
+
* check delta headers.
|
|
34
50
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* - a misnamed file in a capability folder (`auth/extra.md`) and a delta at
|
|
41
|
-
* the specs/ root (`spec.md`) are placement errors; each message already
|
|
42
|
-
* names the exact path to rename to, so the generic bullets would be
|
|
43
|
-
* advice for a different failure;
|
|
44
|
-
* - the whole-change `file` sentinel ("No deltas found") already embeds
|
|
45
|
-
* these same three tips via `enrichTopLevelError`.
|
|
51
|
+
* The delta hints are about delta *content*, so they match only an issue
|
|
52
|
+
* reported under `<capability>/spec.md`. The leading slash excludes a misnamed
|
|
53
|
+
* file and a delta at the specs/ root — placement errors whose messages
|
|
54
|
+
* already name the path to rename to — and the whole-change `file` sentinel,
|
|
55
|
+
* which `enrichTopLevelError` already covers.
|
|
46
56
|
*/
|
|
47
57
|
private printNextSteps;
|
|
48
58
|
private runBulkValidation;
|
|
49
59
|
}
|
|
50
60
|
/**
|
|
51
|
-
* Validates schema-declared `requiredSections` for
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* not validate's.
|
|
61
|
+
* Validates schema-declared `requiredSections` for artifacts with no Requirement
|
|
62
|
+
* grammar of their own. Only artifacts that declare a `validation` block and
|
|
63
|
+
* already have an output file are checked — one not yet produced is `status`'s
|
|
64
|
+
* concern, not validate's.
|
|
56
65
|
*/
|
|
57
66
|
export declare function validateArtifactSections(projectRoot: string, changeDir: string): Promise<ValidationIssue[]>;
|
|
58
67
|
/**
|
|
59
|
-
* The single validation pipeline for a change
|
|
60
|
-
* `
|
|
61
|
-
* can never disagree ("validate green but archive blocked" is structurally
|
|
62
|
-
* impossible). Runs delta-spec validation (when the schema requires deltas
|
|
63
|
-
* or the change produced any) plus schema-declared section validation.
|
|
68
|
+
* The single validation pipeline for a change, used verbatim by `validate` and
|
|
69
|
+
* `archive`, so "validate green but archive blocked" is structurally impossible.
|
|
64
70
|
*/
|
|
65
71
|
export declare function validateChangeArtifacts(projectRoot: string, changeDir: string, options?: {
|
|
66
72
|
strict?: boolean;
|
|
@@ -68,23 +74,15 @@ export declare function validateChangeArtifacts(projectRoot: string, changeDir:
|
|
|
68
74
|
}): Promise<ValidationReport>;
|
|
69
75
|
/**
|
|
70
76
|
* Whether a change's schema requires at least one delta spec — a property of the
|
|
71
|
-
* schema, not of the change.
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* `optional` and this change produced none. A pure fix with no behavioral change
|
|
75
|
-
* (e.g. an issue schema change) is a legitimate, complete change, not a
|
|
76
|
-
* validation failure. Falls back to requiring deltas (the stricter, pre-existing
|
|
77
|
-
* behavior) when the schema can't be resolved.
|
|
77
|
+
* schema, not of the change. False when the schema declares no `specs` artifact,
|
|
78
|
+
* or declares it `optional` and this change produced none: a pure fix with no
|
|
79
|
+
* behavioral change is a complete change, not a validation failure.
|
|
78
80
|
*/
|
|
79
81
|
export declare function deltaSpecsRequired(projectRoot: string, changeDir: string): Promise<boolean>;
|
|
80
82
|
export declare function mergeSectionIssues(report: ValidationReport, extra: ValidationIssue[], strict: boolean): ValidationReport;
|
|
81
83
|
/**
|
|
82
|
-
* One rendering of a finding for every human surface.
|
|
83
|
-
*
|
|
84
|
-
* The named-item and bulk paths print the same three fields and differ only by
|
|
85
|
-
* indentation. This change exists because two renderings of the same data were
|
|
86
|
-
* allowed to disagree; leaving the line format duplicated would reproduce that
|
|
87
|
-
* the next time a field is added.
|
|
84
|
+
* One rendering of a finding for every human surface. The named-item and bulk
|
|
85
|
+
* paths print the same three fields and differ only by indentation.
|
|
88
86
|
*/
|
|
89
87
|
export declare function formatIssueLine(issue: ValidationIssue, indent?: string): string;
|
|
90
88
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AA8BvG,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH;;;GAGG;AACH,eAAO,MAAM,wBAAwB;aAAK,KAAK;aAAQ,OAAO;aAAQ,IAAI;CAAiB,CAAC;AAY5F,qBAAa,eAAe;IACpB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCvF;IAED,OAAO,CAAC,aAAa;IAOrB;;;;OAIG;YACW,aAAa;YAKb,sBAAsB;IA6BpC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;YAyBjB,kBAAkB;YA2ElB,cAAc;IAmB5B,OAAO,CAAC,WAAW;IA2CnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;YAiDR,iBAAiB;CAwJhC;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAqDjH;AAiCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7D,OAAO,CAAC,gBAAgB,CAAC,CAwC3B;AAsED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBjG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAQxH;AAgBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,SAAK,GAAG,MAAM,CAG3E"}
|