@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,31 +1,37 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Status Command
|
|
3
|
-
*
|
|
4
|
-
* Displays artifact completion status for a change.
|
|
5
|
-
*/
|
|
1
|
+
/** `tospec status` — artifact completion for one change, or for every change. */
|
|
6
2
|
import { getChangeDir } from '../../core/planning-home.js';
|
|
7
3
|
import { resolveRootForCommand, toPlanningHome, toRootOutput, } from '../../core/root-selection.js';
|
|
8
4
|
import { loadChangeContext, formatChangeStatus, } from '../../core/artifact-graph/index.js';
|
|
9
|
-
import { validateChangeExists, validateSchemaExists, getAvailableChanges, getStatusIndicator, } from './shared.js';
|
|
5
|
+
import { validateChangeExists, validateSchemaExists, assertChangeSchema, getAvailableChanges, getStatusIndicator, } from './shared.js';
|
|
10
6
|
import { emitSuccess, asStatus } from '../shared-output.js';
|
|
7
|
+
import { findTicketPath } from '../../utils/item-discovery.js';
|
|
8
|
+
import { printProjectConfigDiagnostics } from '../../core/project-config.js';
|
|
11
9
|
/**
|
|
12
10
|
* The `--all --json` failure null-shape. Root selection resolves inside this
|
|
13
11
|
* module while thrown errors are caught by the CLI wrapper, so both call sites
|
|
14
|
-
* reference this one constant
|
|
12
|
+
* reference this one constant.
|
|
13
|
+
*/
|
|
14
|
+
export const BATCH_STATUS_FAILURE_PAYLOAD = { changes: null, root: null };
|
|
15
|
+
/**
|
|
16
|
+
* The single-change `--json` failure null-shape. Flat payload, like
|
|
17
|
+
* `instructions` and `show`, so it nulls a key its success output really carries
|
|
18
|
+
* (`changeName`) — otherwise a caller cannot tell this envelope from an
|
|
19
|
+
* unrelated error document.
|
|
20
|
+
* decisions/20260917_155623-flat-json-payloads-null-a-real-success-key.md
|
|
15
21
|
*/
|
|
16
|
-
export const
|
|
17
|
-
// -----------------------------------------------------------------------------
|
|
18
|
-
// Command Implementation
|
|
19
|
-
// -----------------------------------------------------------------------------
|
|
22
|
+
export const STATUS_FAILURE_PAYLOAD = { changeName: null, root: null };
|
|
20
23
|
export async function statusCommand(options) {
|
|
21
24
|
if (options.all && options.change) {
|
|
22
25
|
throw new Error('The --all and --change options are mutually exclusive.');
|
|
23
26
|
}
|
|
24
|
-
//
|
|
25
|
-
//
|
|
27
|
+
// No implicit root: it resolves only when no ancestor holds a `tospec/` dir,
|
|
28
|
+
// and status would then answer "No active changes." with exit 0 about a
|
|
29
|
+
// directory that is not a project — the vacuous pass `validate`, `list` and
|
|
30
|
+
// `archive` also refuse.
|
|
26
31
|
const root = await resolveRootForCommand(options, {
|
|
27
32
|
json: options.json,
|
|
28
|
-
|
|
33
|
+
allowImplicitRoot: false,
|
|
34
|
+
failurePayload: options.all ? BATCH_STATUS_FAILURE_PAYLOAD : STATUS_FAILURE_PAYLOAD,
|
|
29
35
|
});
|
|
30
36
|
if (!root) {
|
|
31
37
|
return;
|
|
@@ -34,20 +40,33 @@ export async function statusCommand(options) {
|
|
|
34
40
|
const projectRoot = root.path;
|
|
35
41
|
const rootOutput = toRootOutput(root);
|
|
36
42
|
const newChangeHint = 'tospec new change <name>';
|
|
37
|
-
//
|
|
38
|
-
//
|
|
43
|
+
// One definition of "load a change's status", so the batch and single-change
|
|
44
|
+
// payloads cannot drift apart.
|
|
39
45
|
const loadStatus = (changeName) => formatChangeStatus(loadChangeContext(projectRoot, changeName, options.schema, {
|
|
40
46
|
changeDir: getChangeDir(planningHome, changeName),
|
|
41
47
|
planningHome,
|
|
42
48
|
}));
|
|
43
|
-
//
|
|
44
|
-
//
|
|
49
|
+
// The ticket lives outside the change dir under a CLI-generated timestamp, so
|
|
50
|
+
// it appears in no artifact path; without this an agent has to glob
|
|
51
|
+
// `tospec/tickets/` and match frontmatter by hand.
|
|
52
|
+
const loadStatusWithTicket = async (changeName) => ({
|
|
53
|
+
...loadStatus(changeName),
|
|
54
|
+
ticketPath: (await findTicketPath(projectRoot, changeName)) ?? null,
|
|
55
|
+
});
|
|
56
|
+
// `--schema` is judged on its own, before anything about changes is read: a
|
|
57
|
+
// wrong name is wrong whatever else was passed, and checking it later sends
|
|
58
|
+
// the caller to create a change first. `decision` is refused too, since it
|
|
59
|
+
// would plan an artifact at `tospec/changes/<change>/decision.md` — the orphan
|
|
60
|
+
// `instructions` and `new change` already refuse.
|
|
61
|
+
if (options.schema) {
|
|
62
|
+
validateSchemaExists(options.schema, projectRoot);
|
|
63
|
+
assertChangeSchema(options.schema);
|
|
64
|
+
}
|
|
65
|
+
// A change's schema falls back to the project config, so a config that no
|
|
66
|
+
// longer parses changes what this command reports — say so, once.
|
|
67
|
+
printProjectConfigDiagnostics(projectRoot);
|
|
68
|
+
// "No changes" is a valid state for an informational command, not an error.
|
|
45
69
|
if (!options.change) {
|
|
46
|
-
// Validated before the no-changes early return so a bogus --schema fails
|
|
47
|
-
// the same way whether or not any change exists yet.
|
|
48
|
-
if (options.all && options.schema) {
|
|
49
|
-
validateSchemaExists(options.schema, projectRoot);
|
|
50
|
-
}
|
|
51
70
|
const available = await getAvailableChanges(projectRoot, root.changesDir);
|
|
52
71
|
if (available.length === 0) {
|
|
53
72
|
if (options.json) {
|
|
@@ -58,15 +77,27 @@ export async function statusCommand(options) {
|
|
|
58
77
|
return;
|
|
59
78
|
}
|
|
60
79
|
if (options.all) {
|
|
61
|
-
// readdir order is platform-dependent;
|
|
62
|
-
// `validate --all` uses so both batch commands order a change set alike.
|
|
80
|
+
// readdir order is platform-dependent; the comparator is the one
|
|
81
|
+
// `validate --all` uses, so both batch commands order a change set alike.
|
|
63
82
|
const entries = [];
|
|
83
|
+
// Top-level copies of the per-entry failures, for the `status` array the
|
|
84
|
+
// partial envelope carries: `list --json` and `validate --all --json`
|
|
85
|
+
// report an unreadable change there too, so a caller reads one place.
|
|
86
|
+
const diagnostics = [];
|
|
64
87
|
for (const changeName of available.sort((a, b) => a.localeCompare(b))) {
|
|
65
88
|
try {
|
|
66
|
-
entries.push(
|
|
89
|
+
entries.push(await loadStatusWithTicket(changeName));
|
|
67
90
|
}
|
|
68
91
|
catch (error) {
|
|
69
|
-
|
|
92
|
+
const diagnostic = asStatus(error, 'change_error');
|
|
93
|
+
entries.push({ changeName, status: [diagnostic] });
|
|
94
|
+
diagnostics.push({
|
|
95
|
+
...diagnostic,
|
|
96
|
+
code: 'change_unreadable',
|
|
97
|
+
message: `Change '${changeName}' could not be read: ${diagnostic.message}`,
|
|
98
|
+
target: getChangeDir(planningHome, changeName),
|
|
99
|
+
fix: `Fix ${changeName}'s .tospec.yaml, or move the directory out of tospec/changes/.`,
|
|
100
|
+
});
|
|
70
101
|
}
|
|
71
102
|
}
|
|
72
103
|
// `artifacts` is what a loaded status has and a diagnostic entry does not.
|
|
@@ -74,8 +105,7 @@ export async function statusCommand(options) {
|
|
|
74
105
|
if (options.json) {
|
|
75
106
|
// The full envelope is emitted even on partial failure: dropping the
|
|
76
107
|
// report to report the failure would lose every change that did load.
|
|
77
|
-
|
|
78
|
-
emitSuccess({ changes: entries }, rootOutput);
|
|
108
|
+
emitSuccess({ changes: entries, ...(diagnostics.length ? { status: diagnostics } : {}) }, rootOutput);
|
|
79
109
|
}
|
|
80
110
|
else {
|
|
81
111
|
entries.forEach((entry, index) => {
|
|
@@ -96,33 +126,34 @@ export async function statusCommand(options) {
|
|
|
96
126
|
}
|
|
97
127
|
return;
|
|
98
128
|
}
|
|
99
|
-
// Changes exist but neither --change nor --all was given
|
|
100
|
-
//
|
|
101
|
-
// every change should not have to find it in --help.
|
|
129
|
+
// Changes exist but neither --change nor --all was given, so name both ways
|
|
130
|
+
// to answer this prompt.
|
|
102
131
|
throw new Error(`Missing required option --change (or --all for every active change). Available changes:\n ${available.join('\n ')}`);
|
|
103
132
|
}
|
|
104
133
|
const changeName = await validateChangeExists(options.change, projectRoot, root.changesDir, { newChangeHint });
|
|
105
|
-
//
|
|
106
|
-
if (options.schema) {
|
|
107
|
-
validateSchemaExists(options.schema, projectRoot);
|
|
108
|
-
}
|
|
109
|
-
// loadChangeContext will auto-detect schema from metadata if not provided
|
|
110
|
-
const status = loadStatus(changeName);
|
|
134
|
+
// The schema comes from the change's metadata when not given.
|
|
111
135
|
if (options.json) {
|
|
112
|
-
emitSuccess({ ...
|
|
136
|
+
emitSuccess({ ...(await loadStatusWithTicket(changeName)) }, rootOutput);
|
|
113
137
|
return;
|
|
114
138
|
}
|
|
139
|
+
const status = loadStatus(changeName);
|
|
115
140
|
printStatusText(status);
|
|
116
141
|
}
|
|
117
142
|
export function printStatusText(status) {
|
|
118
|
-
|
|
119
|
-
|
|
143
|
+
// Counted against the same definition `graph.isComplete` uses: an optional
|
|
144
|
+
// artifact nobody wrote and one the change declared away are not outstanding
|
|
145
|
+
// work, so counting them prints "Progress: 1/2" above "All artifacts
|
|
146
|
+
// complete!". One that *was* written reports `done` and counts.
|
|
147
|
+
const counted = status.artifacts.filter((a) => a.status !== 'optional' && a.status !== 'skipped');
|
|
148
|
+
const doneCount = counted.filter((a) => a.status === 'done').length;
|
|
149
|
+
const setAside = status.artifacts.length - counted.length;
|
|
120
150
|
console.log(`Change: ${status.changeName}`);
|
|
121
151
|
console.log(`Schema: ${status.schemaName}`);
|
|
122
152
|
if (status.changeRoot) {
|
|
123
153
|
console.log(`Change root: ${status.changeRoot}`);
|
|
124
154
|
}
|
|
125
|
-
|
|
155
|
+
const setAsideNote = setAside > 0 ? ` (${setAside} not required)` : '';
|
|
156
|
+
console.log(`Progress: ${doneCount}/${counted.length} artifacts complete${setAsideNote}`);
|
|
126
157
|
console.log();
|
|
127
158
|
for (const artifact of status.artifacts) {
|
|
128
159
|
const indicator = getStatusIndicator(artifact.status);
|
|
@@ -133,6 +164,14 @@ export function printStatusText(status) {
|
|
|
133
164
|
if (artifact.status === 'stub') {
|
|
134
165
|
line += ' (stub: file exists but is empty or template-identical — fill it in)';
|
|
135
166
|
}
|
|
167
|
+
// `optional` and `skipped` share a marker; the label says whether writing
|
|
168
|
+
// it is still on the table.
|
|
169
|
+
if (artifact.status === 'optional') {
|
|
170
|
+
line += ' (optional: not written — write it if this change needs it)';
|
|
171
|
+
}
|
|
172
|
+
if (artifact.status === 'skipped') {
|
|
173
|
+
line += ' (skipped: this change declared it away)';
|
|
174
|
+
}
|
|
136
175
|
console.log(line);
|
|
137
176
|
}
|
|
138
177
|
for (const diagnostic of status.status ?? []) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/workflow/status.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/workflow/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
/** `tospec templates` — resolved template paths for a schema's artifacts. */
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Shows resolved template paths for all artifacts in a schema.
|
|
3
|
+
* The `--json` null-shape. Exported so the commander-level shape table and this
|
|
4
|
+
* command's own catch block read one object rather than two literals that drift.
|
|
5
5
|
*/
|
|
6
|
+
export declare const TEMPLATES_FAILURE_PAYLOAD: Record<string, unknown>;
|
|
6
7
|
export interface TemplatesOptions {
|
|
7
8
|
schema?: string;
|
|
8
9
|
json?: boolean;
|
|
@@ -11,6 +12,12 @@ export interface TemplateInfo {
|
|
|
11
12
|
artifactId: string;
|
|
12
13
|
templatePath: string;
|
|
13
14
|
source: 'project' | 'user' | 'package';
|
|
15
|
+
/**
|
|
16
|
+
* False when the schema names a template file that is not on disk. Composing
|
|
17
|
+
* the path without checking reports success for a path that ENOENTs, while
|
|
18
|
+
* `instructions` for the same schema fails outright.
|
|
19
|
+
*/
|
|
20
|
+
exists: boolean;
|
|
14
21
|
}
|
|
15
22
|
export declare function templatesCommand(options: TemplatesOptions): Promise<void>;
|
|
16
23
|
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/workflow/templates.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/workflow/templates.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAc7E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAG7D,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D/E"}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Templates Command
|
|
3
|
-
*
|
|
4
|
-
* Shows resolved template paths for all artifacts in a schema.
|
|
5
|
-
*/
|
|
1
|
+
/** `tospec templates` — resolved template paths for a schema's artifacts. */
|
|
6
2
|
import path from 'path';
|
|
7
|
-
import
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { resolveSchema, getSchemaDirWithSource, ArtifactGraph, } from '../../core/artifact-graph/index.js';
|
|
8
5
|
import { FileSystemUtils } from '../../utils/file-system.js';
|
|
9
6
|
import { validateSchemaExists, DEFAULT_SCHEMA } from './shared.js';
|
|
10
7
|
import { emitSuccess } from '../shared-output.js';
|
|
11
8
|
import { resolveRootForCommand, toRootOutput } from '../../core/root-selection.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
/**
|
|
10
|
+
* The `--json` null-shape. Exported so the commander-level shape table and this
|
|
11
|
+
* command's own catch block read one object rather than two literals that drift.
|
|
12
|
+
*/
|
|
13
|
+
export const TEMPLATES_FAILURE_PAYLOAD = {
|
|
14
|
+
templates: null,
|
|
15
|
+
root: null,
|
|
16
|
+
};
|
|
15
17
|
export async function templatesCommand(options) {
|
|
16
|
-
// Same root resolution as every other command
|
|
17
|
-
//
|
|
18
|
+
// Same root resolution as every other command: a subdirectory of a project
|
|
19
|
+
// resolves the project root, not the bare cwd.
|
|
18
20
|
const root = await resolveRootForCommand(options, {
|
|
19
21
|
json: options.json,
|
|
20
|
-
failurePayload:
|
|
22
|
+
failurePayload: TEMPLATES_FAILURE_PAYLOAD,
|
|
21
23
|
});
|
|
22
24
|
if (!root) {
|
|
23
25
|
return;
|
|
@@ -26,46 +28,43 @@ export async function templatesCommand(options) {
|
|
|
26
28
|
const schemaName = validateSchemaExists(options.schema ?? DEFAULT_SCHEMA, projectRoot);
|
|
27
29
|
const schema = resolveSchema(schemaName, projectRoot);
|
|
28
30
|
const graph = ArtifactGraph.fromSchema(schema);
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
const {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
source = 'package';
|
|
49
|
-
}
|
|
50
|
-
const templates = graph.getAllArtifacts().map((artifact) => ({
|
|
51
|
-
artifactId: artifact.id,
|
|
52
|
-
templatePath: FileSystemUtils.canonicalizeExistingPath(path.join(schemaDir, 'templates', artifact.template)),
|
|
53
|
-
source,
|
|
31
|
+
// The layer comes from the resolver that picked the directory rather than
|
|
32
|
+
// being re-derived here, so there is only one answer to "which layer won".
|
|
33
|
+
const { dir: schemaDir, source } = getSchemaDirWithSource(schemaName, projectRoot);
|
|
34
|
+
const templates = graph.getAllArtifacts().map((artifact) => {
|
|
35
|
+
const templatePath = path.join(schemaDir, 'templates', artifact.template);
|
|
36
|
+
return {
|
|
37
|
+
artifactId: artifact.id,
|
|
38
|
+
templatePath: FileSystemUtils.canonicalizeExistingPath(templatePath),
|
|
39
|
+
source,
|
|
40
|
+
exists: fs.existsSync(templatePath),
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
const missing = templates.filter((t) => !t.exists);
|
|
44
|
+
// Reported, not thrown: the other artifacts' paths are still correct, and
|
|
45
|
+
// exit stays 0 because nothing the caller asked for failed.
|
|
46
|
+
const missingDiagnostics = missing.map((t) => ({
|
|
47
|
+
severity: 'warning',
|
|
48
|
+
code: 'template_file_missing',
|
|
49
|
+
message: `Schema '${schemaName}' declares template '${t.artifactId}' at ${t.templatePath}, but that file does not exist. tospec instructions ${t.artifactId} will fail until it is created.`,
|
|
54
50
|
}));
|
|
55
51
|
if (options.json) {
|
|
56
52
|
const output = {};
|
|
57
53
|
for (const t of templates) {
|
|
58
|
-
output[t.artifactId] = { path: t.templatePath, source: t.source };
|
|
54
|
+
output[t.artifactId] = { path: t.templatePath, source: t.source, exists: t.exists };
|
|
59
55
|
}
|
|
60
|
-
emitSuccess({ templates: output }, toRootOutput(root));
|
|
56
|
+
emitSuccess({ templates: output, ...(missingDiagnostics.length ? { status: missingDiagnostics } : {}) }, toRootOutput(root));
|
|
61
57
|
return;
|
|
62
58
|
}
|
|
59
|
+
for (const diagnostic of missingDiagnostics) {
|
|
60
|
+
console.error(`Warning: ${diagnostic.message}`);
|
|
61
|
+
}
|
|
63
62
|
console.log(`Schema: ${schemaName}`);
|
|
64
63
|
console.log(`Source: ${source}`);
|
|
65
64
|
console.log();
|
|
66
65
|
for (const t of templates) {
|
|
67
66
|
console.log(`${t.artifactId}:`);
|
|
68
|
-
console.log(` ${t.templatePath}`);
|
|
67
|
+
console.log(` ${t.templatePath}${t.exists ? '' : ' (missing)'}`);
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
70
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/workflow/templates.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/workflow/templates.ts"],"names":[],"mappings":"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"}
|
package/dist/core/archive.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { formatTimestamp } from '../utils/timestamp.js';
|
|
2
|
-
/**
|
|
3
|
-
* Archive directory names are always CLI-generated from this — agents must
|
|
4
|
-
* never assemble the timestamp themselves. Alias of the shared
|
|
5
|
-
* `formatTimestamp` (ticket filenames use the same helper).
|
|
6
|
-
*/
|
|
2
|
+
/** Alias of `formatTimestamp`: agents must never assemble archive stamps by hand. */
|
|
7
3
|
export declare const formatArchiveStamp: typeof formatTimestamp;
|
|
8
4
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
5
|
+
* Returns null when no conclusion is found, when the line is an unfilled
|
|
6
|
+
* template (`Conclusion: PASS | FAIL`), or when two conclusions disagree —
|
|
7
|
+
* each must leave the `--require-sync` gate shut.
|
|
8
|
+
*
|
|
9
|
+
* Fenced lines are masked because the `tospec-sync` skill documents this format
|
|
10
|
+
* *inside* a fence: a report quoting the template carries a `Conclusion: PASS`
|
|
11
|
+
* that was never a verdict.
|
|
12
12
|
*/
|
|
13
13
|
export declare function parseSyncReportConclusion(content: string): 'PASS' | 'FAIL' | null;
|
|
14
14
|
export interface ArchiveOptions {
|
|
@@ -20,10 +20,9 @@ export interface ArchiveOptions {
|
|
|
20
20
|
json?: boolean;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* with EPERM or EXDEV. Exported for migrate's two-phase promotion.
|
|
23
|
+
* On Windows fs.rename() often fails with EPERM when the directory is non-empty
|
|
24
|
+
* or another process has it open (IDE, watcher, antivirus), so EPERM/EXDEV fall
|
|
25
|
+
* back to copy-then-remove. Exported for migrate's two-phase promotion.
|
|
27
26
|
*/
|
|
28
27
|
export declare function moveDirectory(src: string, dest: string): Promise<void>;
|
|
29
28
|
/** Like moveDirectory but for a single file (copyFile fallback on Windows EPERM/EXDEV). */
|
|
@@ -32,18 +31,24 @@ export declare class ArchiveCommand {
|
|
|
32
31
|
execute(changeName?: string, options?: ArchiveOptions): Promise<void>;
|
|
33
32
|
private printJsonFailure;
|
|
34
33
|
/**
|
|
35
|
-
* One archive gate
|
|
36
|
-
* human mode prompts; `--yes` downgrades
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* The gates used to be written out longhand at each site and had to stay in
|
|
40
|
-
* step by hand for the "every blocked path throws in JSON mode" invariant.
|
|
34
|
+
* One archive gate, so the "every blocked path throws in JSON mode" invariant
|
|
35
|
+
* lives in one place. JSON mode throws; human mode prompts; `--yes` downgrades
|
|
36
|
+
* either to a warning. False means the user declined.
|
|
41
37
|
*/
|
|
42
38
|
private gate;
|
|
43
39
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
40
|
+
* Required artifacts the change never produced, in schema order. Reads the
|
|
41
|
+
* same graph `tospec status` does, so the two cannot disagree about what
|
|
42
|
+
* "required" means; `skipped` and `optional` are legitimate absences.
|
|
43
|
+
*
|
|
44
|
+
* An unloadable graph returns nothing rather than throwing: this gate must not
|
|
45
|
+
* become a second way for archive to fail. Whatever broke the load is
|
|
46
|
+
* validation's to report.
|
|
47
|
+
*/
|
|
48
|
+
private findMissingRequiredArtifacts;
|
|
49
|
+
/**
|
|
50
|
+
* Shared archive flow. Human mode prompts and returns null on cancellation;
|
|
51
|
+
* JSON mode keeps stdout clean and throws from every blocked path.
|
|
47
52
|
*/
|
|
48
53
|
private run;
|
|
49
54
|
private selectChange;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/core/archive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/core/archive.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,wBAAkB,CAAC;AAKlD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBjF;AASD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAwDD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc5E;AAuDD,2FAA2F;AAC3F,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvE;AASD,qBAAa,cAAc;IACnB,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC9E;IAED,OAAO,CAAC,gBAAgB;IAiBxB;;;;OAIG;YACW,IAAI;IAiClB;;;;;;;;OAQG;IACH,OAAO,CAAC,4BAA4B;IAqBpC;;;OAGG;YACW,GAAG;YA0fH,YAAY;CAoC3B"}
|