@seanmars/tospec 0.19.0-beta.1 → 0.19.0-beta.13
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 +530 -0
- package/README.md +71 -77
- package/assets/dashboard/app.js +14 -3
- package/assets/dashboard/style.css +7 -0
- package/assets/rules/tospec/decision.md +3 -0
- package/assets/rules/tospec/single-source-of-truth.md +19 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +254 -83
- 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 +374 -98
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dashboard.d.ts +64 -81
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +346 -230
- 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 +400 -70
- 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 +69 -85
- 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 +39 -8
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/validate.d.ts +47 -30
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +282 -108
- 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 +84 -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 +386 -205
- package/dist/core/archive.js.map +1 -1
- package/dist/core/artifact-graph/graph.d.ts +29 -36
- package/dist/core/artifact-graph/graph.d.ts.map +1 -1
- package/dist/core/artifact-graph/graph.js +50 -58
- 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 +105 -100
- package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +176 -110
- package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
- package/dist/core/artifact-graph/outputs.d.ts +11 -14
- package/dist/core/artifact-graph/outputs.d.ts.map +1 -1
- package/dist/core/artifact-graph/outputs.js +47 -29
- 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 +22 -0
- package/dist/core/codex-residue.d.ts.map +1 -0
- package/dist/core/codex-residue.js +61 -0
- package/dist/core/codex-residue.js.map +1 -0
- 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 +56 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +73 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/converters/json-converter.d.ts.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 +29 -11
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +232 -164
- 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 +60 -50
- package/dist/core/local-server.d.ts.map +1 -1
- package/dist/core/local-server.js +94 -66
- 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 +32 -15
- package/dist/core/migrate.d.ts.map +1 -1
- package/dist/core/migrate.js +220 -108
- 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 +169 -54
- 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/planning-home.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 +10 -18
- 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 +10 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +43 -0
- package/dist/core/rules.js.map +1 -0
- 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 +27 -8
- package/dist/core/shared/rules-generation.d.ts.map +1 -1
- package/dist/core/shared/rules-generation.js +151 -16
- package/dist/core/shared/rules-generation.js.map +1 -1
- package/dist/core/shared/skill-generation.d.ts +38 -53
- 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 +40 -62
- 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.d.ts.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/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 +9 -12
- 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 +7 -5
- 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 -0
- 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 +0 -1
- 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 +2 -2
- 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.map +1 -1
- package/dist/core/update.d.ts +26 -21
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +165 -116
- 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 +19 -25
- 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 +50 -51
- package/dist/core/validation/validator.d.ts.map +1 -1
- package/dist/core/validation/validator.js +478 -269
- 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 +31 -54
- package/dist/utils/change-utils.d.ts.map +1 -1
- package/dist/utils/change-utils.js +143 -100
- 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 +13 -4
- package/dist/utils/link.d.ts.map +1 -1
- package/dist/utils/link.js +13 -4
- package/dist/utils/link.js.map +1 -1
- package/dist/utils/match.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 +10 -11
- package/dist/utils/spec-files.d.ts.map +1 -1
- package/dist/utils/spec-files.js +31 -22
- 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 +9 -10
- package/schemas/decision/templates/decision.md +3 -1
- package/schemas/decision/templates/index.md +2 -2
- package/schemas/issue/schema.yaml +11 -2
- package/schemas/issue/templates/spec.md +37 -3
- package/schemas/sdd/schema.yaml +24 -1
- package/schemas/sdd/templates/spec.md +37 -3
package/dist/core/config.js
CHANGED
|
@@ -1,6 +1,77 @@
|
|
|
1
1
|
export const TOSPEC_DIR_NAME = 'tospec';
|
|
2
|
+
/**
|
|
3
|
+
* Where tospec writes its rule documents inside a tool dir, relative to
|
|
4
|
+
* `<tool.skillsDir>`: `<tool.skillsDir>/rules/tospec/`.
|
|
5
|
+
*/
|
|
6
|
+
export const TOOL_RULES_SUBDIR = ['rules', 'tospec'];
|
|
7
|
+
/**
|
|
8
|
+
* The workflow rule document: both the write target for rules-generation and the
|
|
9
|
+
* proof that tospec currently manages a tool dir (`isToolInstalled`). This file,
|
|
10
|
+
* not the `rules/tospec/` directory, whose other contents only prove tospec
|
|
11
|
+
* touched the dir once.
|
|
12
|
+
*/
|
|
13
|
+
export const WORKFLOW_RULE_FILENAME = 'single-source-of-truth.md';
|
|
14
|
+
/**
|
|
15
|
+
* The same document under its previous, misspelled name. Kept so init/update can
|
|
16
|
+
* retire an older copy instead of loading two rule files with the same body;
|
|
17
|
+
* detection accepts it, so a not-yet-updated project still reads as installed.
|
|
18
|
+
*/
|
|
19
|
+
export const LEGACY_WORKFLOW_RULE_FILENAME = 'single-sourc-of-truth.md';
|
|
20
|
+
/**
|
|
21
|
+
* Written beside the workflow rule, but not proof that tospec manages a tool
|
|
22
|
+
* dir: an older tospec wrote it from init only, so a project can hold an
|
|
23
|
+
* untouched copy. `isToolInstalled` reads WORKFLOW_RULE_FILENAME.
|
|
24
|
+
*/
|
|
25
|
+
export const DECISION_RULE_FILENAME = 'decision.md';
|
|
2
26
|
export const AI_TOOLS = [
|
|
3
|
-
|
|
4
|
-
|
|
27
|
+
// `.agents` holds the canonical copy every other target is built from, and is
|
|
28
|
+
// where Codex reads skills, so Codex has no row of its own: a `.codex` target
|
|
29
|
+
// would be a second copy nothing loads.
|
|
30
|
+
{ name: 'Agents', value: 'agents', available: true, successLabel: 'Agents', skillsDir: '.agents', fallback: true },
|
|
31
|
+
{ name: 'Claude Code', value: 'claude', available: true, successLabel: 'Claude Code', skillsDir: '.claude', requires: ['agents'] }
|
|
5
32
|
];
|
|
33
|
+
/**
|
|
34
|
+
* Expands a selection along `requires`, dependencies first. Order is part of the
|
|
35
|
+
* contract: callers write targets in the returned order, and the canonical
|
|
36
|
+
* directory must exist before anything is copied from it. Unknown ids pass
|
|
37
|
+
* through untouched so the caller's own "unknown tool" error still fires.
|
|
38
|
+
*
|
|
39
|
+
* A cycle throws rather than resolving: no ordering satisfies one, so the table
|
|
40
|
+
* is wrong and has to say so.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveToolSelection(toolIds) {
|
|
43
|
+
const resolved = [];
|
|
44
|
+
const visiting = new Set();
|
|
45
|
+
const visit = (id) => {
|
|
46
|
+
if (resolved.includes(id))
|
|
47
|
+
return;
|
|
48
|
+
if (visiting.has(id)) {
|
|
49
|
+
throw new Error(`Circular tool dependency in AI_TOOLS at '${id}': ${[...visiting, id].join(' -> ')}. ` +
|
|
50
|
+
'Dependencies must form a chain, because callers write targets in the returned order.');
|
|
51
|
+
}
|
|
52
|
+
visiting.add(id);
|
|
53
|
+
for (const dependency of AI_TOOLS.find((tool) => tool.value === id)?.requires ?? []) {
|
|
54
|
+
visit(dependency);
|
|
55
|
+
}
|
|
56
|
+
visiting.delete(id);
|
|
57
|
+
resolved.push(id);
|
|
58
|
+
};
|
|
59
|
+
for (const id of toolIds)
|
|
60
|
+
visit(id);
|
|
61
|
+
return resolved;
|
|
62
|
+
}
|
|
63
|
+
/** Ids at least one other target is built from, so refreshing them fans out. */
|
|
64
|
+
export function dependencyToolIds() {
|
|
65
|
+
return [...new Set(AI_TOOLS.flatMap((tool) => tool.requires ?? []))];
|
|
66
|
+
}
|
|
67
|
+
/** Ids used when a non-interactive run detects nothing and names nothing. */
|
|
68
|
+
export function fallbackToolIds() {
|
|
69
|
+
return AI_TOOLS.filter((tool) => tool.fallback && tool.skillsDir).map((tool) => tool.value);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The target Codex reads from. Named rather than derived: the predicates that
|
|
73
|
+
* select this row (dependency, fallback) match by coincidence, and would drift
|
|
74
|
+
* the Codex notice onto the wrong target once another row gained one.
|
|
75
|
+
*/
|
|
76
|
+
export const CODEX_TARGET_ID = 'agents';
|
|
6
77
|
//# sourceMappingURL=config.js.map
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAU,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAC;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AA2BpD,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,8EAA8E;IAC9E,8EAA8E;IAC9E,wCAAwC;IACxC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClH,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;CACnI,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAQ,EAAE;QACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO;QAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,4CAA4C,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;gBACpF,sFAAsF,CACzF,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;YACpF,KAAK,CAAC,UAAU,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,OAAO;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-converter.d.ts","sourceRoot":"","sources":["../../../src/core/converters/json-converter.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IACxB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"json-converter.d.ts","sourceRoot":"","sources":["../../../src/core/converters/json-converter.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IACxB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB1C;IAEK,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB3D;CAEF"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Dashboard git activity + health signals (ADR 001, D4-D7, D12, D16).
|
|
3
3
|
*
|
|
4
|
-
* Two `git log` runs produce a 30-day daily series: commits repo-wide vs
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* can exercise it without a repo.
|
|
4
|
+
* Two `git log` runs produce a 30-day daily series: commits repo-wide vs commits
|
|
5
|
+
* touching `tospec/`. The gap between the two is the spec-drift signal. Pure
|
|
6
|
+
* aggregation is split from the git-spawning wrapper so tests need no repo.
|
|
8
7
|
*/
|
|
9
8
|
export declare const DEFAULT_STALE_DAYS = 14;
|
|
10
9
|
/** Series window: trailing day count, or 'all' for the full git history. */
|
|
@@ -40,11 +39,10 @@ export declare function historySpanDays(repoDates: string[], tospecDates: string
|
|
|
40
39
|
/** Stale-change threshold from tospec/config.yaml, defaulting to 14 days. */
|
|
41
40
|
export declare function resolveStaleDays(projectRoot: string): number;
|
|
42
41
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* config, not git, so it is always populated.
|
|
42
|
+
* The activity payload. `changeName` narrows the tospec series to that change's
|
|
43
|
+
* directory; the repo series stays repo-wide. `window` is the trailing day count
|
|
44
|
+
* (default 30) or 'all'. Git being unavailable degrades to `{available: false}`
|
|
45
|
+
* (D6) — staleDays comes from config, so it is always populated.
|
|
48
46
|
*/
|
|
49
47
|
export declare function collectActivity(projectRoot: string, changeName?: string, window?: ActivityWindow): Promise<DashboardActivity>;
|
|
50
48
|
//# sourceMappingURL=dashboard-activity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-activity.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-activity.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dashboard-activity.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-activity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAIrC,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,GAAE,MAAsB,EAC5B,KAAK,GAAE,IAAiB,GACvB,WAAW,EAAE,CAaf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EAAE,EACnB,iBAAiB,EAAE,MAAM,EACzB,UAAU,GAAE,MAA0B,GACrC,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,MAAsB,EAC/B,KAAK,GAAE,IAAiB,GACvB,MAAM,CAWR;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM5D;AAsCD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,GAAE,cAA8B,GACrC,OAAO,CAAC,iBAAiB,CAAC,CA+B5B"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Dashboard git activity + health signals (ADR 001, D4-D7, D12, D16).
|
|
3
3
|
*
|
|
4
|
-
* Two `git log` runs produce a 30-day daily series: commits repo-wide vs
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* can exercise it without a repo.
|
|
4
|
+
* Two `git log` runs produce a 30-day daily series: commits repo-wide vs commits
|
|
5
|
+
* touching `tospec/`. The gap between the two is the spec-drift signal. Pure
|
|
6
|
+
* aggregation is split from the git-spawning wrapper so tests need no repo.
|
|
8
7
|
*/
|
|
9
8
|
import { execFile } from 'node:child_process';
|
|
10
9
|
import { promisify } from 'node:util';
|
|
@@ -15,9 +14,6 @@ const execFileAsync = promisify(execFile);
|
|
|
15
14
|
export const DEFAULT_STALE_DAYS = 14;
|
|
16
15
|
const ACTIVITY_DAYS = 30;
|
|
17
16
|
const DRIFT_WINDOW_DAYS = 7;
|
|
18
|
-
// -----------------------------------------------------------------------------
|
|
19
|
-
// Pure aggregation (unit-testable)
|
|
20
|
-
// -----------------------------------------------------------------------------
|
|
21
17
|
/**
|
|
22
18
|
* Buckets two lists of commit dates (yyyy-mm-dd, from `git log --date=short`)
|
|
23
19
|
* into a zero-filled daily series covering the last `days` days ending `today`.
|
|
@@ -77,9 +73,6 @@ export function resolveStaleDays(projectRoot) {
|
|
|
77
73
|
return DEFAULT_STALE_DAYS;
|
|
78
74
|
}
|
|
79
75
|
}
|
|
80
|
-
// -----------------------------------------------------------------------------
|
|
81
|
-
// Git wrapper
|
|
82
|
-
// -----------------------------------------------------------------------------
|
|
83
76
|
/** Commit dates (yyyy-mm-dd, one per commit), newest first. */
|
|
84
77
|
async function gitLogDates(projectRoot, window, pathFilters) {
|
|
85
78
|
const args = ['log', '--format=%cd', '--date=short'];
|
|
@@ -87,8 +80,8 @@ async function gitLogDates(projectRoot, window, pathFilters) {
|
|
|
87
80
|
args.splice(1, 0, `--since=${window} days ago`);
|
|
88
81
|
if (pathFilters)
|
|
89
82
|
args.push('--', ...pathFilters);
|
|
90
|
-
// windowsHide: git is a console app
|
|
91
|
-
//
|
|
83
|
+
// windowsHide: git is a console app, and the dashboard runs several of these
|
|
84
|
+
// per activity refresh — each would flash a window on Windows.
|
|
92
85
|
const { stdout } = await execFileAsync('git', args, { cwd: projectRoot, windowsHide: true });
|
|
93
86
|
return stdout.split(/\r?\n/).filter((line) => /^\d{4}-\d{2}-\d{2}$/.test(line));
|
|
94
87
|
}
|
|
@@ -96,19 +89,29 @@ async function gitLogDates(projectRoot, window, pathFilters) {
|
|
|
96
89
|
async function gitUnavailableReason(projectRoot) {
|
|
97
90
|
try {
|
|
98
91
|
await execFileAsync('git', ['rev-parse', '--is-inside-work-tree'], { cwd: projectRoot, windowsHide: true });
|
|
99
|
-
return null;
|
|
100
92
|
}
|
|
101
93
|
catch (err) {
|
|
102
94
|
const code = err.code;
|
|
103
95
|
return code === 'ENOENT' ? 'git not found' : 'not a git repository';
|
|
104
96
|
}
|
|
97
|
+
// A freshly `git init`ed repo passes the work-tree check but has no HEAD, and
|
|
98
|
+
// `git log` there exits non-zero ("does not have any commits yet") — which
|
|
99
|
+
// surfaced as a 500 from /api/activity on exactly the project a first-time
|
|
100
|
+
// dashboard user has. Unborn HEAD is the same "nothing to chart" case as no
|
|
101
|
+
// repo at all, so it degrades the same way.
|
|
102
|
+
try {
|
|
103
|
+
await execFileAsync('git', ['rev-parse', '--verify', '--quiet', 'HEAD'], { cwd: projectRoot, windowsHide: true });
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return 'no commits yet';
|
|
108
|
+
}
|
|
105
109
|
}
|
|
106
110
|
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* config, not git, so it is always populated.
|
|
111
|
+
* The activity payload. `changeName` narrows the tospec series to that change's
|
|
112
|
+
* directory; the repo series stays repo-wide. `window` is the trailing day count
|
|
113
|
+
* (default 30) or 'all'. Git being unavailable degrades to `{available: false}`
|
|
114
|
+
* (D6) — staleDays comes from config, so it is always populated.
|
|
112
115
|
*/
|
|
113
116
|
export async function collectActivity(projectRoot, changeName, window = ACTIVITY_DAYS) {
|
|
114
117
|
const staleDays = resolveStaleDays(projectRoot);
|
|
@@ -117,10 +120,9 @@ export async function collectActivity(projectRoot, changeName, window = ACTIVITY
|
|
|
117
120
|
return { available: false, reason, days: [], specDrift: false, staleDays };
|
|
118
121
|
}
|
|
119
122
|
// `tospec migrate` copies openspec/ into tospec/, so commit history for
|
|
120
|
-
// migrated changes lives under openspec/ paths. A pathspec
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
// migrate source dirs in config if anyone needs them counted.
|
|
123
|
+
// migrated changes lives under openspec/ paths. A pathspec matching nothing
|
|
124
|
+
// is harmless, so the legacy prefix is always included.
|
|
125
|
+
// Limitation: only the default `openspec` source dir.
|
|
124
126
|
const pathFilters = changeName
|
|
125
127
|
? [`tospec/changes/${changeName}/`, `openspec/changes/${changeName}/`]
|
|
126
128
|
: ['tospec/', 'openspec/'];
|
|
@@ -128,8 +130,8 @@ export async function collectActivity(projectRoot, changeName, window = ACTIVITY
|
|
|
128
130
|
gitLogDates(projectRoot, window),
|
|
129
131
|
gitLogDates(projectRoot, window, pathFilters),
|
|
130
132
|
]);
|
|
131
|
-
//
|
|
132
|
-
// decade-old repo
|
|
133
|
+
// Limitation: 'all' zero-fills one entry per day since the first commit, so a
|
|
134
|
+
// decade-old repo yields a few thousand points.
|
|
133
135
|
const spanDays = window === 'all' ? historySpanDays(repoDates, tospecDates) : window;
|
|
134
136
|
const days = aggregateDaily(repoDates, tospecDates, spanDays);
|
|
135
137
|
// Drift only makes sense repo-wide, not for a single change's series.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-activity.js","sourceRoot":"","sources":["../../src/core/dashboard-activity.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dashboard-activity.js","sourceRoot":"","sources":["../../src/core/dashboard-activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dashboard data aggregation
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* produce the shapes the dashboard API serves. Kept free of any server/http
|
|
6
|
-
* import so vitest can exercise it directly. Reuses existing core/utils rather
|
|
7
|
-
* than re-deriving list/status logic.
|
|
2
|
+
* Dashboard data aggregation. Kept free of any server/http import so vitest can
|
|
3
|
+
* exercise it directly, and built on existing core/utils rather than
|
|
4
|
+
* re-deriving list/status logic.
|
|
8
5
|
*/
|
|
9
6
|
export interface DashboardTicket {
|
|
7
|
+
/** Root-relative posix path. */
|
|
10
8
|
file: string;
|
|
11
9
|
title: string;
|
|
12
10
|
date: string;
|
|
13
11
|
type: string;
|
|
12
|
+
/** Workflow schema the change was created from; '' on a pre-0.19 ticket. */
|
|
13
|
+
schema: string;
|
|
14
14
|
change: string;
|
|
15
15
|
ref: string;
|
|
16
|
+
/** First block of text after `## Summary`. */
|
|
16
17
|
summary: string;
|
|
17
18
|
archived: boolean;
|
|
19
|
+
/** Set when frontmatter is malformed; other fields stay best-effort. */
|
|
18
20
|
parseError?: string;
|
|
19
21
|
}
|
|
20
22
|
/** One checkbox in a change's tracked task files, addressable for a write-back. */
|
|
21
23
|
export interface DashboardTask {
|
|
24
|
+
/** Root-relative posix path. */
|
|
22
25
|
file: string;
|
|
26
|
+
/** 1-based. */
|
|
23
27
|
line: number;
|
|
24
28
|
text: string;
|
|
25
29
|
done: boolean;
|
|
30
|
+
/** Nesting depth in spaces, for rendering only. */
|
|
26
31
|
indent: number;
|
|
27
32
|
}
|
|
28
33
|
/**
|
|
29
34
|
* A change's live lifecycle phase, derived at read time (no on-disk status):
|
|
30
35
|
* `applying` = planning done, tasks in progress, recently touched; `ready` =
|
|
31
|
-
* planning done and every task ticked; `archiving` = sync-certified
|
|
32
|
-
* archive. Mutually exclusive, so one field.
|
|
36
|
+
* planning done and every task ticked; `archiving` = sync-certified.
|
|
33
37
|
*
|
|
34
|
-
* `archiving`
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* widening `archiving` precisely so those two stay in agreement.
|
|
38
|
+
* `archiving` alone also means "locked": the browser derives checkbox
|
|
39
|
+
* editability from it while the server enforces the same rule from the sync
|
|
40
|
+
* report. `ready` exists rather than a wider `archiving` so the two agree.
|
|
38
41
|
*/
|
|
39
42
|
export type ChangePhase = 'applying' | 'ready' | 'archiving';
|
|
40
43
|
/** How recent a change's last edit must be to count as actively `applying`. */
|
|
@@ -45,7 +48,10 @@ export interface DashboardOverview {
|
|
|
45
48
|
changes: number;
|
|
46
49
|
tickets: number;
|
|
47
50
|
specs: number;
|
|
51
|
+
/** Archived changes. Counted alone; see the comment at the assignment. */
|
|
48
52
|
archived: number;
|
|
53
|
+
/** Archived tickets, reported separately rather than folded into `archived`. */
|
|
54
|
+
archivedTickets: number;
|
|
49
55
|
};
|
|
50
56
|
changes: Array<{
|
|
51
57
|
name: string;
|
|
@@ -63,8 +69,18 @@ export interface DashboardOverview {
|
|
|
63
69
|
blocked: number;
|
|
64
70
|
total: number;
|
|
65
71
|
};
|
|
72
|
+
/** ISO. */
|
|
66
73
|
lastModified: string;
|
|
74
|
+
/** Absent when neither applying nor archiving. */
|
|
67
75
|
phase?: ChangePhase;
|
|
76
|
+
/**
|
|
77
|
+
* Why the change's `.tospec.yaml` could not be read, on a broken change
|
|
78
|
+
* only. Same per-item degradation `list` reports as `status: "unreadable"`
|
|
79
|
+
* (tospec/decisions/20260917_234821-batch-commands-degrade-per-item.md);
|
|
80
|
+
* without it a change whose metadata does not parse renders exactly like one
|
|
81
|
+
* nobody has started.
|
|
82
|
+
*/
|
|
83
|
+
unreadable?: string;
|
|
68
84
|
}>;
|
|
69
85
|
tickets: DashboardTicket[];
|
|
70
86
|
specs: Array<{
|
|
@@ -90,16 +106,20 @@ export interface ChangeDetail {
|
|
|
90
106
|
completed: number;
|
|
91
107
|
total: number;
|
|
92
108
|
};
|
|
109
|
+
/** Root-relative posix paths. */
|
|
93
110
|
files: Array<{
|
|
94
111
|
path: string;
|
|
95
112
|
artifactId?: string;
|
|
96
113
|
}>;
|
|
97
114
|
}
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
115
|
+
/**
|
|
116
|
+
* A decision record with its raw markdown body, so the dashboard can filter
|
|
117
|
+
* client-side without a second round-trip.
|
|
118
|
+
*/
|
|
101
119
|
export interface DashboardDecision {
|
|
120
|
+
/** Filename, e.g. `20260722_161825-topic.md`. */
|
|
102
121
|
file: string;
|
|
122
|
+
/** Root-relative posix path, for /api/render. */
|
|
103
123
|
path: string;
|
|
104
124
|
date: string;
|
|
105
125
|
topic: string;
|
|
@@ -123,16 +143,14 @@ export interface ArchiveResult {
|
|
|
123
143
|
*/
|
|
124
144
|
export declare function scanTickets(projectRoot: string): Promise<DashboardTicket[]>;
|
|
125
145
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* `tospec archive --require-sync` trusts. Missing or unreadable report →
|
|
129
|
-
* null; the dashboard is a read-only view and must never 500 over one bad file.
|
|
146
|
+
* A change's sync gate, through the same parser `archive --require-sync` trusts.
|
|
147
|
+
* Missing or unreadable → null: the dashboard must never 500 over one bad file.
|
|
130
148
|
*/
|
|
131
149
|
export declare function readSyncConclusion(changeDir: string): Promise<'PASS' | 'FAIL' | null>;
|
|
132
150
|
/**
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
151
|
+
* A change's live phase, from already-computed signals. Pure (no fs), so it is
|
|
152
|
+
* testable with an injected `now`. A passing sync report outranks applying: the
|
|
153
|
+
* change is certified and on its way to archive.
|
|
136
154
|
*/
|
|
137
155
|
export declare function deriveChangePhase(input: {
|
|
138
156
|
artifactSummary: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-data.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-data.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dashboard-data.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-data.ts"],"names":[],"mappings":"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"}
|