@devtrack-solution/codesdd 1.2.2 → 1.2.4-rc3
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/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
- package/.sdd/skills/curated/devtrack-api/SKILL.md +170 -31
- package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -2
- package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +2 -2
- package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
- package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
- package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +372 -0
- package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +13 -13
- package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
- package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +294 -0
- package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +5 -5
- package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
- package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +41 -0
- package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
- package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +7 -9
- package/LICENSE +1 -1
- package/README.md +399 -53
- package/bin/codesdd.js +3 -2
- package/dist/applications/sdd/index.d.ts +16 -0
- package/dist/applications/sdd/index.js +16 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +11 -558
- package/dist/cli/program.d.ts +14 -0
- package/dist/cli/program.js +645 -0
- package/dist/commands/change.js +5 -5
- package/dist/commands/completion.d.ts +1 -1
- package/dist/commands/completion.js +9 -2
- package/dist/commands/config.js +320 -20
- package/dist/commands/feedback.js +1 -1
- package/dist/commands/schema.d.ts +63 -0
- package/dist/commands/schema.js +12 -12
- package/dist/commands/sdd/backlog.d.ts +3 -0
- package/dist/commands/sdd/backlog.js +54 -0
- package/dist/commands/sdd/execution.js +489 -28
- package/dist/commands/sdd/plugin.d.ts +3 -0
- package/dist/commands/sdd/plugin.js +158 -0
- package/dist/commands/sdd/shared.d.ts +1 -0
- package/dist/commands/sdd/shared.js +11 -22
- package/dist/commands/sdd/skills.js +7 -0
- package/dist/commands/sdd.js +107 -15
- package/dist/commands/spec.js +9 -9
- package/dist/commands/validate.js +6 -6
- package/dist/commands/workflow/instructions.js +6 -6
- package/dist/commands/workflow/new-change.js +3 -3
- package/dist/commands/workflow/shared.d.ts +1 -1
- package/dist/commands/workflow/shared.js +4 -4
- package/dist/core/archive.js +15 -5
- package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +3 -3
- package/dist/core/artifact-graph/resolver.d.ts +4 -4
- package/dist/core/artifact-graph/resolver.js +6 -6
- package/dist/core/branding.js +3 -3
- package/dist/core/cli/command-matrix.js +19 -1
- package/dist/core/cli-command-quality.d.ts +27 -0
- package/dist/core/cli-command-quality.js +180 -0
- package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
- package/dist/core/command-generation/adapters/costrict.js +2 -2
- package/dist/core/command-generation/types.d.ts +1 -1
- package/dist/core/completions/command-registry.d.ts +1 -1
- package/dist/core/completions/command-registry.js +200 -12
- package/dist/core/completions/completion-provider.d.ts +14 -1
- package/dist/core/completions/completion-provider.js +29 -1
- package/dist/core/completions/generators/bash-generator.d.ts +1 -1
- package/dist/core/completions/generators/bash-generator.js +20 -12
- package/dist/core/completions/generators/fish-generator.d.ts +9 -1
- package/dist/core/completions/generators/fish-generator.js +39 -25
- package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
- package/dist/core/completions/generators/powershell-generator.js +21 -11
- package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
- package/dist/core/completions/generators/zsh-generator.js +21 -42
- package/dist/core/completions/installers/bash-installer.js +6 -6
- package/dist/core/completions/installers/fish-installer.js +1 -1
- package/dist/core/completions/installers/powershell-installer.js +14 -14
- package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
- package/dist/core/completions/installers/zsh-installer.js +36 -8
- package/dist/core/completions/templates/bash-templates.d.ts +1 -1
- package/dist/core/completions/templates/bash-templates.js +12 -6
- package/dist/core/completions/templates/fish-templates.d.ts +2 -2
- package/dist/core/completions/templates/fish-templates.js +20 -9
- package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
- package/dist/core/completions/templates/powershell-templates.js +13 -4
- package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
- package/dist/core/completions/templates/zsh-templates.js +18 -9
- package/dist/core/config-schema.d.ts +20 -1
- package/dist/core/config-schema.js +70 -2
- package/dist/core/config.d.ts +3 -3
- package/dist/core/config.js +4 -4
- package/dist/core/global-config.d.ts +57 -12
- package/dist/core/global-config.js +344 -27
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/init.d.ts +6 -1
- package/dist/core/init.js +99 -77
- package/dist/core/legacy-cleanup.d.ts +17 -17
- package/dist/core/legacy-cleanup.js +96 -79
- package/dist/core/list.js +18 -4
- package/dist/core/migration.d.ts +3 -1
- package/dist/core/migration.js +7 -8
- package/dist/core/parsers/change-parser.js +1 -1
- package/dist/core/parsers/markdown-parser.js +2 -2
- package/dist/core/profile-sync-drift.d.ts +1 -1
- package/dist/core/profile-sync-drift.js +13 -13
- package/dist/core/project-config.d.ts +4 -4
- package/dist/core/project-config.js +11 -11
- package/dist/core/schemas/change.schema.d.ts +1 -1
- package/dist/core/schemas/change.schema.js +1 -1
- package/dist/core/schemas/spec.schema.d.ts +1 -1
- package/dist/core/schemas/spec.schema.js +1 -1
- package/dist/core/sdd/adr.js +23 -1
- package/dist/core/sdd/agent-binding.d.ts +346 -0
- package/dist/core/sdd/agent-binding.js +343 -0
- package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
- package/dist/core/sdd/agent-runtime-contract.js +200 -0
- package/dist/core/sdd/backlog-cli.d.ts +16 -0
- package/dist/core/sdd/backlog-cli.js +146 -0
- package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
- package/dist/core/sdd/backlog-conflict-policy.js +230 -0
- package/dist/core/sdd/backlog-projection.d.ts +8 -0
- package/dist/core/sdd/backlog-projection.js +89 -0
- package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
- package/dist/core/sdd/backlog-provider-contract.js +158 -0
- package/dist/core/sdd/bootstrap.js +2 -2
- package/dist/core/sdd/check.d.ts +44 -0
- package/dist/core/sdd/check.js +62 -24
- package/dist/core/sdd/contract.d.ts +13 -0
- package/dist/core/sdd/contract.js +36 -0
- package/dist/core/sdd/coordination/coordination-adapters.d.ts +53 -8
- package/dist/core/sdd/coordination/coordination-adapters.js +182 -16
- package/dist/core/sdd/coordination/index.d.ts +1 -0
- package/dist/core/sdd/coordination/index.js +1 -0
- package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
- package/dist/core/sdd/coordination/redis-runtime.js +698 -0
- package/dist/core/sdd/deepagent-contracts.d.ts +370 -0
- package/dist/core/sdd/deepagent-contracts.js +235 -0
- package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
- package/dist/core/sdd/deepagents/adr-governor.js +30 -0
- package/dist/core/sdd/deepagents/backend.d.ts +63 -0
- package/dist/core/sdd/deepagents/backend.js +174 -0
- package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
- package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
- package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
- package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
- package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
- package/dist/core/sdd/deepagents/model-provider.js +379 -0
- package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
- package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
- package/dist/core/sdd/deepagents/policy.d.ts +75 -0
- package/dist/core/sdd/deepagents/policy.js +358 -0
- package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
- package/dist/core/sdd/deepagents/quality-witness.js +77 -0
- package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
- package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
- package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
- package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
- package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
- package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
- package/dist/core/sdd/default-bootstrap-files.d.ts +3 -3
- package/dist/core/sdd/default-bootstrap-files.js +50 -10
- package/dist/core/sdd/default-skills.d.ts +30 -0
- package/dist/core/sdd/default-skills.js +288 -8
- package/dist/core/sdd/devtrack-api-appliance.d.ts +91 -0
- package/dist/core/sdd/devtrack-api-appliance.js +280 -0
- package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
- package/dist/core/sdd/devtrack-api-architecture.js +608 -0
- package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
- package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
- package/dist/core/sdd/diagnose.d.ts +59 -0
- package/dist/core/sdd/diagnose.js +37 -37
- package/dist/core/sdd/docs-sync.js +54 -20
- package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
- package/dist/core/sdd/domain/capability-diff.js +200 -0
- package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
- package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
- package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
- package/dist/core/sdd/domain/post-active-validation.js +61 -0
- package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
- package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
- package/dist/core/sdd/domain/transition-engine.js +1 -0
- package/dist/core/sdd/entity-reference.d.ts +5 -0
- package/dist/core/sdd/entity-reference.js +22 -0
- package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
- package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
- package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
- package/dist/core/sdd/foundation-layer-manifest.js +117 -0
- package/dist/core/sdd/governance-backfill.d.ts +31 -0
- package/dist/core/sdd/governance-backfill.js +359 -0
- package/dist/core/sdd/governance-parser.d.ts +21 -0
- package/dist/core/sdd/governance-parser.js +91 -0
- package/dist/core/sdd/governance-schemas.d.ts +245 -0
- package/dist/core/sdd/governance-schemas.js +143 -0
- package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
- package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
- package/dist/core/sdd/init.d.ts +3 -0
- package/dist/core/sdd/init.js +6 -3
- package/dist/core/sdd/intent-guard.d.ts +22 -0
- package/dist/core/sdd/intent-guard.js +67 -0
- package/dist/core/sdd/json-schema.js +108 -6
- package/dist/core/sdd/knowledge-graph.d.ts +45 -0
- package/dist/core/sdd/knowledge-graph.js +288 -0
- package/dist/core/sdd/legacy-operations.js +507 -44
- package/dist/core/sdd/lenses.d.ts +1 -0
- package/dist/core/sdd/lenses.js +29 -1
- package/dist/core/sdd/migrate-workspace.js +95 -2
- package/dist/core/sdd/migrate.d.ts +1 -1
- package/dist/core/sdd/migrate.js +36 -2
- package/dist/core/sdd/package-security-gates.d.ts +21 -0
- package/dist/core/sdd/package-security-gates.js +119 -0
- package/dist/core/sdd/package-structure-gate.d.ts +83 -0
- package/dist/core/sdd/package-structure-gate.js +357 -0
- package/dist/core/sdd/parallel-feat-automation.d.ts +330 -0
- package/dist/core/sdd/parallel-feat-automation.js +424 -0
- package/dist/core/sdd/plugin-broker.d.ts +777 -0
- package/dist/core/sdd/plugin-broker.js +492 -0
- package/dist/core/sdd/plugin-certification.d.ts +79 -0
- package/dist/core/sdd/plugin-certification.js +453 -0
- package/dist/core/sdd/plugin-cli.d.ts +139 -0
- package/dist/core/sdd/plugin-cli.js +265 -0
- package/dist/core/sdd/plugin-evidence.d.ts +348 -0
- package/dist/core/sdd/plugin-evidence.js +307 -0
- package/dist/core/sdd/plugin-manifest.d.ts +232 -0
- package/dist/core/sdd/plugin-manifest.js +225 -0
- package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
- package/dist/core/sdd/plugin-policy-pack.js +236 -0
- package/dist/core/sdd/plugin-policy.d.ts +68 -0
- package/dist/core/sdd/plugin-policy.js +212 -0
- package/dist/core/sdd/plugin-registry.d.ts +447 -0
- package/dist/core/sdd/plugin-registry.js +138 -0
- package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
- package/dist/core/sdd/plugin-sdk-contract.js +268 -0
- package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
- package/dist/core/sdd/plugin-skill-binding.js +339 -0
- package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
- package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
- package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
- package/dist/core/sdd/quality-evidence-renderer.js +218 -0
- package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
- package/dist/core/sdd/quality-scenario-runner.js +613 -0
- package/dist/core/sdd/quality-validation.d.ts +620 -0
- package/dist/core/sdd/quality-validation.js +239 -0
- package/dist/core/sdd/release-readiness.d.ts +19 -0
- package/dist/core/sdd/release-readiness.js +472 -0
- package/dist/core/sdd/resolve-project-root.d.ts +2 -2
- package/dist/core/sdd/resolve-project-root.js +11 -5
- package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
- package/dist/core/sdd/runtime-boundary-contract.js +90 -0
- package/dist/core/sdd/sanitize.d.ts +30 -1
- package/dist/core/sdd/sanitize.js +23 -23
- package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
- package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
- package/dist/core/sdd/services/agent-run.service.d.ts +97 -0
- package/dist/core/sdd/services/agent-run.service.js +261 -0
- package/dist/core/sdd/services/breakdown.service.js +2 -1
- package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
- package/dist/core/sdd/services/capability-diff.service.js +26 -0
- package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
- package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
- package/dist/core/sdd/services/context.service.d.ts +43 -340
- package/dist/core/sdd/services/context.service.js +341 -25
- package/dist/core/sdd/services/debate.service.js +15 -2
- package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
- package/dist/core/sdd/services/feature-lint.service.js +105 -5
- package/dist/core/sdd/services/finalize.service.d.ts +105 -0
- package/dist/core/sdd/services/finalize.service.js +499 -38
- package/dist/core/sdd/services/frontend-gap.service.js +22 -7
- package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
- package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
- package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
- package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
- package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
- package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
- package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
- package/dist/core/sdd/services/legacy-capability.service.js +38 -21
- package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
- package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
- package/dist/core/sdd/services/onboard.service.js +2 -1
- package/dist/core/sdd/services/rebuild.service.js +6 -1
- package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
- package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
- package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
- package/dist/core/sdd/services/skills-sync.service.js +55 -2
- package/dist/core/sdd/services/start.service.js +6 -4
- package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
- package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
- package/dist/core/sdd/skill-evidence.d.ts +19 -0
- package/dist/core/sdd/skill-evidence.js +38 -0
- package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
- package/dist/core/sdd/skill-policy-pool.js +185 -0
- package/dist/core/sdd/state.d.ts +23 -0
- package/dist/core/sdd/state.js +313 -66
- package/dist/core/sdd/store/sdd-stores.js +2 -2
- package/dist/core/sdd/structural-health.d.ts +55 -55
- package/dist/core/sdd/types.d.ts +60 -19
- package/dist/core/sdd/types.js +21 -0
- package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
- package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
- package/dist/core/sdd/views.js +17 -0
- package/dist/core/sdd/workspace-schemas.d.ts +670 -19
- package/dist/core/sdd/workspace-schemas.js +285 -5
- package/dist/core/sdd/write-manifest.js +22 -4
- package/dist/core/shared/skill-generation.d.ts +1 -1
- package/dist/core/shared/skill-generation.js +15 -15
- package/dist/core/shared/tool-detection.d.ts +3 -3
- package/dist/core/shared/tool-detection.js +14 -14
- package/dist/core/specs-apply.js +6 -6
- package/dist/core/templates/index.d.ts +1 -1
- package/dist/core/templates/index.js +1 -1
- package/dist/core/templates/workflows/apply-change.js +14 -14
- package/dist/core/templates/workflows/archive-change.js +32 -32
- package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
- package/dist/core/templates/workflows/continue-change.js +12 -12
- package/dist/core/templates/workflows/explore.js +29 -29
- package/dist/core/templates/workflows/feedback.js +6 -6
- package/dist/core/templates/workflows/ff-change.js +24 -24
- package/dist/core/templates/workflows/new-change.js +20 -20
- package/dist/core/templates/workflows/onboard.js +33 -33
- package/dist/core/templates/workflows/propose.js +23 -23
- package/dist/core/templates/workflows/sdd.js +8 -8
- package/dist/core/templates/workflows/sync-specs.js +19 -19
- package/dist/core/templates/workflows/verify-change.js +17 -17
- package/dist/core/update.d.ts +2 -2
- package/dist/core/update.js +16 -15
- package/dist/core/validation/constants.d.ts +1 -1
- package/dist/core/validation/constants.js +1 -1
- package/dist/core/view.js +11 -11
- package/dist/domains/sdd/index.d.ts +6 -0
- package/dist/domains/sdd/index.js +6 -0
- package/dist/infrastructures/sdd/index.d.ts +7 -0
- package/dist/infrastructures/sdd/index.js +6 -0
- package/dist/presentations/cli/sdd/index.d.ts +3 -0
- package/dist/presentations/cli/sdd/index.js +3 -0
- package/dist/shared/sdd/index.d.ts +3 -0
- package/dist/shared/sdd/index.js +2 -0
- package/dist/telemetry/config.d.ts +2 -1
- package/dist/telemetry/config.js +17 -8
- package/dist/telemetry/index.d.ts +10 -2
- package/dist/telemetry/index.js +40 -7
- package/dist/ui/ascii-patterns.d.ts +2 -2
- package/dist/ui/ascii-patterns.js +2 -2
- package/dist/ui/welcome-screen.js +2 -2
- package/dist/utils/change-metadata.d.ts +4 -4
- package/dist/utils/change-metadata.js +6 -6
- package/dist/utils/change-utils.d.ts +3 -3
- package/dist/utils/change-utils.js +5 -5
- package/dist/utils/file-system.js +1 -1
- package/dist/utils/interactive.js +1 -1
- package/dist/utils/item-discovery.js +4 -4
- package/dist/utils/legacy-spec-compat.d.ts +2 -0
- package/dist/utils/legacy-spec-compat.js +2 -0
- package/dist/utils/shell-detection.d.ts +1 -0
- package/dist/utils/shell-detection.js +16 -0
- package/package.json +34 -21
- package/schemas/sdd/1-spec.schema.json +1 -1
- package/schemas/sdd/2-plan.schema.json +280 -3
- package/schemas/sdd/3-tasks.schema.json +73 -1
- package/schemas/sdd/4-changelog.schema.json +1 -1
- package/schemas/sdd/5-quality.schema.json +701 -5
- package/schemas/sdd/adr.schema.json +148 -0
- package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
- package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
- package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
- package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
- package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
- package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
- package/schemas/sdd/codesdd-plugin.schema.json +645 -0
- package/schemas/sdd/debate.schema.json +244 -0
- package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
- package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
- package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
- package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
- package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
- package/schemas/sdd/deepagent-run-request.schema.json +637 -0
- package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
- package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
- package/schemas/sdd/discarded.schema.json +127 -0
- package/schemas/sdd/epic.schema.json +147 -0
- package/schemas/sdd/insight.schema.json +136 -0
- package/schemas/sdd/parallel-feat-automation-plan.schema.json +304 -0
- package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
- package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
- package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
- package/schemas/sdd/plugin-artifact-manifest.schema.json +259 -0
- package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
- package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
- package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
- package/schemas/sdd/plugin-evidence-manifest.schema.json +678 -0
- package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
- package/schemas/sdd/plugin-package-governance.schema.json +74 -0
- package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
- package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
- package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
- package/schemas/sdd/plugin-registry.schema.json +729 -0
- package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
- package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +954 -0
- package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
- package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
- package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
- package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
- package/schemas/sdd/quality-evidence-bundle.schema.json +1337 -0
- package/schemas/sdd/quality-run.schema.json +197 -0
- package/schemas/sdd/quality-scenario.schema.json +252 -0
- package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
- package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
- package/schemas/sdd/workspace-catalog.schema.json +13232 -35
- package/schemas/spec-driven/schema.yaml +4 -4
- package/schemas/spec-driven/templates/proposal.md +1 -1
- package/dist/utils/openspec-compat.d.ts +0 -2
- package/dist/utils/openspec-compat.js +0 -2
|
@@ -7,7 +7,7 @@ import ora from 'ora';
|
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import { createChange, validateChangeName } from '../../utils/change-utils.js';
|
|
9
9
|
import { validateSchemaExists } from './shared.js';
|
|
10
|
-
import {
|
|
10
|
+
import { displayLegacySpecPath, resolveLegacySpecLiveSubpath } from '../../core/sdd/services/legacy-capability.service.js';
|
|
11
11
|
// -----------------------------------------------------------------------------
|
|
12
12
|
// Command Implementation
|
|
13
13
|
// -----------------------------------------------------------------------------
|
|
@@ -31,11 +31,11 @@ export async function newChangeCommand(name, options) {
|
|
|
31
31
|
// If description provided, create README.md with description
|
|
32
32
|
if (options.description) {
|
|
33
33
|
const { promises: fs } = await import('fs');
|
|
34
|
-
const changeDir =
|
|
34
|
+
const changeDir = resolveLegacySpecLiveSubpath(projectRoot, 'changes', name);
|
|
35
35
|
const readmePath = path.join(changeDir, 'README.md');
|
|
36
36
|
await fs.writeFile(readmePath, `# ${name}\n\n${options.description}\n`, 'utf-8');
|
|
37
37
|
}
|
|
38
|
-
spinner.succeed(`Created change '${name}' at ${
|
|
38
|
+
spinner.succeed(`Created change '${name}' at ${displayLegacySpecPath('changes', name)}/ (schema: ${result.schema})`);
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
41
41
|
spinner.fail(`Failed to create change '${name}'`);
|
|
@@ -38,7 +38,7 @@ export declare function getStatusColor(status: 'done' | 'ready' | 'blocked'): (t
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function getStatusIndicator(status: 'done' | 'ready' | 'blocked'): string;
|
|
40
40
|
/**
|
|
41
|
-
* Returns the list of available change directory names under
|
|
41
|
+
* Returns the list of available legacy change directory names under legacy-spec/changes/.
|
|
42
42
|
* Excludes the archive directory and hidden directories.
|
|
43
43
|
*/
|
|
44
44
|
export declare function getAvailableChanges(projectRoot: string): Promise<string[]>;
|
|
@@ -9,7 +9,7 @@ import * as fs from 'fs';
|
|
|
9
9
|
import { getSchemaDir, listSchemas } from '../../core/artifact-graph/index.js';
|
|
10
10
|
import { validateChangeName } from '../../utils/change-utils.js';
|
|
11
11
|
import { CLI_NAME } from '../../core/branding.js';
|
|
12
|
-
import {
|
|
12
|
+
import { resolveLegacySpecSubpath } from '../../core/sdd/services/legacy-capability.service.js';
|
|
13
13
|
// -----------------------------------------------------------------------------
|
|
14
14
|
// Constants
|
|
15
15
|
// -----------------------------------------------------------------------------
|
|
@@ -54,11 +54,11 @@ export function getStatusIndicator(status) {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
* Returns the list of available change directory names under
|
|
57
|
+
* Returns the list of available legacy change directory names under legacy-spec/changes/.
|
|
58
58
|
* Excludes the archive directory and hidden directories.
|
|
59
59
|
*/
|
|
60
60
|
export async function getAvailableChanges(projectRoot) {
|
|
61
|
-
const changesPath =
|
|
61
|
+
const changesPath = resolveLegacySpecSubpath(projectRoot, 'changes');
|
|
62
62
|
try {
|
|
63
63
|
const entries = await fs.promises.readdir(changesPath, { withFileTypes: true });
|
|
64
64
|
return entries
|
|
@@ -89,7 +89,7 @@ export async function validateChangeExists(changeName, projectRoot) {
|
|
|
89
89
|
throw new Error(`Invalid change name '${changeName}': ${nameValidation.error}`);
|
|
90
90
|
}
|
|
91
91
|
// Check directory existence directly
|
|
92
|
-
const changePath =
|
|
92
|
+
const changePath = resolveLegacySpecSubpath(projectRoot, 'changes', changeName);
|
|
93
93
|
const exists = fs.existsSync(changePath) && fs.statSync(changePath).isDirectory();
|
|
94
94
|
if (!exists) {
|
|
95
95
|
const available = await getAvailableChanges(projectRoot);
|
package/dist/core/archive.js
CHANGED
|
@@ -10,7 +10,7 @@ import { computeRequirementHash, readMeta, captureFingerprintsForChange, writeMe
|
|
|
10
10
|
import { extractRequirementsSection, normalizeRequirementName, parseDeltaSpec, } from './parsers/requirement-blocks.js';
|
|
11
11
|
import { CLI_NAME } from './branding.js';
|
|
12
12
|
import { trackFingerprintMismatch } from '../telemetry/index.js';
|
|
13
|
-
import {
|
|
13
|
+
import { resolveLegacySpecLiveSubpath } from './sdd/services/legacy-capability.service.js';
|
|
14
14
|
const execFileAsync = promisify(execFile);
|
|
15
15
|
function buildRequirementKey(capability, name) {
|
|
16
16
|
return `${capability}::${normalizeRequirementName(name)}`;
|
|
@@ -56,15 +56,25 @@ async function moveDirectory(src, dest) {
|
|
|
56
56
|
export class ArchiveCommand {
|
|
57
57
|
async execute(changeName, options = {}) {
|
|
58
58
|
const targetPath = '.';
|
|
59
|
-
const changesDir =
|
|
59
|
+
const changesDir = resolveLegacySpecLiveSubpath(targetPath, 'changes');
|
|
60
60
|
const archiveDir = path.join(changesDir, 'archive');
|
|
61
|
-
const mainSpecsDir =
|
|
61
|
+
const mainSpecsDir = resolveLegacySpecLiveSubpath(targetPath, 'specs');
|
|
62
62
|
// Check if changes directory exists
|
|
63
63
|
try {
|
|
64
64
|
await fs.access(changesDir);
|
|
65
65
|
}
|
|
66
66
|
catch {
|
|
67
|
-
|
|
67
|
+
const sddStatePath = path.join(targetPath, '.sdd', 'state', 'backlog.yaml');
|
|
68
|
+
try {
|
|
69
|
+
await fs.access(sddStatePath);
|
|
70
|
+
throw new Error(`This repository uses SDD canonical state. The legacy '${CLI_NAME} archive' command does not apply here.\nUse '${CLI_NAME} sdd finalize --ref <FEAT-ID>' to consolidate a completed FEAT.`);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof Error && err.message.startsWith('This repository uses SDD canonical state')) {
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`No CodeSDD changes directory found. Run '${CLI_NAME} init' first.`);
|
|
77
|
+
}
|
|
68
78
|
}
|
|
69
79
|
// Get change name interactively if not provided
|
|
70
80
|
if (!changeName) {
|
|
@@ -336,7 +346,7 @@ export class ArchiveCommand {
|
|
|
336
346
|
return new Date().toISOString().split('T')[0];
|
|
337
347
|
}
|
|
338
348
|
async validateFingerprintsAgainstLiveSpec(changeName, changeDir, specUpdates) {
|
|
339
|
-
const mainSpecsDir =
|
|
349
|
+
const mainSpecsDir = resolveLegacySpecLiveSubpath('.', 'specs');
|
|
340
350
|
let meta = await readMeta(changeDir);
|
|
341
351
|
if (!meta) {
|
|
342
352
|
meta = await captureFingerprintsForChange(changeDir, mainSpecsDir, {
|
|
@@ -109,7 +109,7 @@ export declare function loadTemplate(schemaName: string, templatePath: string, p
|
|
|
109
109
|
*
|
|
110
110
|
* Schema resolution order:
|
|
111
111
|
* 1. Explicit schemaName parameter (if provided)
|
|
112
|
-
* 2. Schema from .
|
|
112
|
+
* 2. Schema from .sdd.yaml metadata (if exists in change directory)
|
|
113
113
|
* 3. Default 'spec-driven'
|
|
114
114
|
*
|
|
115
115
|
* @param projectRoot - Project root directory
|
|
@@ -5,7 +5,7 @@ import { ArtifactGraph } from './graph.js';
|
|
|
5
5
|
import { detectCompleted } from './state.js';
|
|
6
6
|
import { resolveSchemaForChange } from '../../utils/change-metadata.js';
|
|
7
7
|
import { readProjectConfig, validateConfigRules } from '../project-config.js';
|
|
8
|
-
import {
|
|
8
|
+
import { resolveLegacySpecSubpath } from '../sdd/services/legacy-capability.service.js';
|
|
9
9
|
// Session-level cache for validation warnings (avoid repeating same warnings)
|
|
10
10
|
const shownWarnings = new Set();
|
|
11
11
|
/**
|
|
@@ -50,7 +50,7 @@ export function loadTemplate(schemaName, templatePath, projectRoot) {
|
|
|
50
50
|
*
|
|
51
51
|
* Schema resolution order:
|
|
52
52
|
* 1. Explicit schemaName parameter (if provided)
|
|
53
|
-
* 2. Schema from .
|
|
53
|
+
* 2. Schema from .sdd.yaml metadata (if exists in change directory)
|
|
54
54
|
* 3. Default 'spec-driven'
|
|
55
55
|
*
|
|
56
56
|
* @param projectRoot - Project root directory
|
|
@@ -59,7 +59,7 @@ export function loadTemplate(schemaName, templatePath, projectRoot) {
|
|
|
59
59
|
* @returns Change context with graph, completed set, and metadata
|
|
60
60
|
*/
|
|
61
61
|
export function loadChangeContext(projectRoot, changeName, schemaName) {
|
|
62
|
-
const changeDir =
|
|
62
|
+
const changeDir = resolveLegacySpecSubpath(projectRoot, 'changes', changeName);
|
|
63
63
|
// Resolve schema: explicit > metadata > default
|
|
64
64
|
const resolvedSchemaName = resolveSchemaForChange(changeDir, schemaName);
|
|
65
65
|
const schema = resolveSchema(resolvedSchemaName, projectRoot);
|
|
@@ -26,8 +26,8 @@ export declare function getProjectSchemasDir(projectRoot: string): string;
|
|
|
26
26
|
* Resolves a schema name to its directory path.
|
|
27
27
|
*
|
|
28
28
|
* Resolution order (when projectRoot is provided):
|
|
29
|
-
* 1. Project-local: <projectRoot>/
|
|
30
|
-
* 2. User override: ${XDG_DATA_HOME}/
|
|
29
|
+
* 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
|
|
30
|
+
* 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
|
|
31
31
|
* 3. Package built-in: <package>/schemas/<name>/schema.yaml
|
|
32
32
|
*
|
|
33
33
|
* When projectRoot is not provided, only user override and package built-in are checked
|
|
@@ -42,8 +42,8 @@ export declare function getSchemaDir(name: string, projectRoot?: string): string
|
|
|
42
42
|
* Resolves a schema name to a SchemaYaml object.
|
|
43
43
|
*
|
|
44
44
|
* Resolution order (when projectRoot is provided):
|
|
45
|
-
* 1. Project-local: <projectRoot>/
|
|
46
|
-
* 2. User override: ${XDG_DATA_HOME}/
|
|
45
|
+
* 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
|
|
46
|
+
* 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
|
|
47
47
|
* 3. Package built-in: <package>/schemas/<name>/schema.yaml
|
|
48
48
|
*
|
|
49
49
|
* When projectRoot is not provided, only user override and package built-in are checked
|
|
@@ -2,7 +2,7 @@ import * as fs from 'node:fs';
|
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { getGlobalDataDir } from '../global-config.js';
|
|
5
|
-
import {
|
|
5
|
+
import { resolveLegacySpecSubpath } from '../sdd/services/legacy-capability.service.js';
|
|
6
6
|
import { parseSchema, SchemaValidationError } from './schema.js';
|
|
7
7
|
/**
|
|
8
8
|
* Error thrown when loading a schema fails.
|
|
@@ -38,14 +38,14 @@ export function getUserSchemasDir() {
|
|
|
38
38
|
* @returns The path to the project's schemas directory
|
|
39
39
|
*/
|
|
40
40
|
export function getProjectSchemasDir(projectRoot) {
|
|
41
|
-
return
|
|
41
|
+
return resolveLegacySpecSubpath(projectRoot, 'schemas');
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Resolves a schema name to its directory path.
|
|
45
45
|
*
|
|
46
46
|
* Resolution order (when projectRoot is provided):
|
|
47
|
-
* 1. Project-local: <projectRoot>/
|
|
48
|
-
* 2. User override: ${XDG_DATA_HOME}/
|
|
47
|
+
* 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
|
|
48
|
+
* 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
|
|
49
49
|
* 3. Package built-in: <package>/schemas/<name>/schema.yaml
|
|
50
50
|
*
|
|
51
51
|
* When projectRoot is not provided, only user override and package built-in are checked
|
|
@@ -82,8 +82,8 @@ export function getSchemaDir(name, projectRoot) {
|
|
|
82
82
|
* Resolves a schema name to a SchemaYaml object.
|
|
83
83
|
*
|
|
84
84
|
* Resolution order (when projectRoot is provided):
|
|
85
|
-
* 1. Project-local: <projectRoot>/
|
|
86
|
-
* 2. User override: ${XDG_DATA_HOME}/
|
|
85
|
+
* 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
|
|
86
|
+
* 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
|
|
87
87
|
* 3. Package built-in: <package>/schemas/<name>/schema.yaml
|
|
88
88
|
*
|
|
89
89
|
* When projectRoot is not provided, only user override and package built-in are checked
|
package/dist/core/branding.js
CHANGED
|
@@ -6,7 +6,7 @@ export const CLI_NAME = envOrDefault('CODESDD_CLI_NAME', 'codesdd');
|
|
|
6
6
|
export const CLI_PACKAGE_NAME = envOrDefault('CODESDD_CLI_PACKAGE_NAME', '@devtrack-solution/codesdd');
|
|
7
7
|
export const CLI_ENTRYPOINT = envOrDefault('CODESDD_CLI_ENTRYPOINT', 'bin/codesdd.js');
|
|
8
8
|
export const CLI_PRODUCT_NAME = envOrDefault('CODESDD_CLI_PRODUCT_NAME', 'CodeSDD');
|
|
9
|
-
export const CLI_REPOSITORY_SLUG = envOrDefault('CODESDD_REPOSITORY_SLUG', 'devtrack-solution/
|
|
10
|
-
export const CLI_REPOSITORY_URL = envOrDefault('CODESDD_REPOSITORY_URL', 'https://github.com/devtrack-solution/
|
|
11
|
-
export const CLI_ISSUES_URL = envOrDefault('CODESDD_ISSUES_URL', 'https://github.com/devtrack-solution/
|
|
9
|
+
export const CLI_REPOSITORY_SLUG = envOrDefault('CODESDD_REPOSITORY_SLUG', 'devtrack-solution/codesdd');
|
|
10
|
+
export const CLI_REPOSITORY_URL = envOrDefault('CODESDD_REPOSITORY_URL', 'https://github.com/devtrack-solution/codesdd');
|
|
11
|
+
export const CLI_ISSUES_URL = envOrDefault('CODESDD_ISSUES_URL', 'https://github.com/devtrack-solution/codesdd/issues');
|
|
12
12
|
//# sourceMappingURL=branding.js.map
|
|
@@ -23,6 +23,7 @@ export function collectCliLeafCommands(command, prefix = []) {
|
|
|
23
23
|
}
|
|
24
24
|
export const CLI_COMMAND_MATRIX = [
|
|
25
25
|
{ commandPath: 'init', strategy: 'contract', rationale: 'Project bootstrap is deterministic and already decomposes into testable setup services.' },
|
|
26
|
+
{ commandPath: 'reload', strategy: 'spawned-e2e', rationale: 'Reload reapplies base setup plus SDD bootstrap with the installed CLI version and needs real-bin smoke coverage.' },
|
|
26
27
|
{ commandPath: 'install', strategy: 'spawned-e2e', rationale: 'Full installation composes base bootstrap plus SDD initialization and should keep a spawned smoke path.' },
|
|
27
28
|
{ commandPath: 'experimental', strategy: 'exception', rationale: 'Deprecated compatibility alias inherits init behavior and only needs lightweight regression coverage.' },
|
|
28
29
|
{ commandPath: 'update', strategy: 'contract', rationale: 'Update flow is deterministic and validated through targeted service and CLI contract tests.' },
|
|
@@ -36,6 +37,8 @@ export const CLI_COMMAND_MATRIX = [
|
|
|
36
37
|
{ commandPath: 'spec:list', strategy: 'contract', rationale: 'Spec listing is read-only and easy to validate with direct CLI assertions.' },
|
|
37
38
|
{ commandPath: 'spec:validate', strategy: 'contract', rationale: 'Spec validation is a deterministic contract surface with fixture-driven expectations.' },
|
|
38
39
|
{ commandPath: 'config:path', strategy: 'contract', rationale: 'Config path output is deterministic and scriptable.' },
|
|
40
|
+
{ commandPath: 'config:init', strategy: 'contract', rationale: 'Global runtime bootstrap is deterministic and should be covered with fixture-backed contract tests.' },
|
|
41
|
+
{ commandPath: 'config:doctor', strategy: 'contract', rationale: 'Doctor emits deterministic readiness diagnostics for DeepAgents, cache, and Redis boundary.' },
|
|
39
42
|
{ commandPath: 'config:list', strategy: 'contract', rationale: 'Config listing is a stable read-only contract.' },
|
|
40
43
|
{ commandPath: 'config:get', strategy: 'contract', rationale: 'Config key retrieval is a stable scriptable surface.' },
|
|
41
44
|
{ commandPath: 'config:set', strategy: 'contract', rationale: 'Config writes can be asserted directly against temporary config fixtures.' },
|
|
@@ -43,12 +46,17 @@ export const CLI_COMMAND_MATRIX = [
|
|
|
43
46
|
{ commandPath: 'config:reset', strategy: 'contract', rationale: 'Reset behavior is deterministic once prompts are bypassed in tests.' },
|
|
44
47
|
{ commandPath: 'config:edit', strategy: 'exception', rationale: 'This command delegates to an external editor process and only needs focused environment-sensitive coverage.' },
|
|
45
48
|
{ commandPath: 'config:profile', strategy: 'contract', rationale: 'Profile inspection is scriptable and deterministic.' },
|
|
49
|
+
{ commandPath: 'config:redis:status', strategy: 'contract', rationale: 'Redis status reports the governed runtime backend without exposing secrets.' },
|
|
50
|
+
{ commandPath: 'config:redis:ping', strategy: 'contract', rationale: 'Redis ping is a deterministic readiness contract with mocked and unavailable paths.' },
|
|
51
|
+
{ commandPath: 'config:redis:bench', strategy: 'contract', rationale: 'Redis benchmark output is bounded, redacted, and suitable for direct contract assertions.' },
|
|
52
|
+
{ commandPath: 'config:redis:flush-namespace', strategy: 'contract', rationale: 'Redis namespace cleanup is explicitly scoped and guarded by confirmation.' },
|
|
46
53
|
{ commandPath: 'schema:which', strategy: 'contract', rationale: 'Schema resolution is deterministic with fixture directories.' },
|
|
47
54
|
{ commandPath: 'schema:validate', strategy: 'contract', rationale: 'Schema validation produces deterministic reports from fixture inputs.' },
|
|
48
55
|
{ commandPath: 'schema:fork', strategy: 'contract', rationale: 'Schema fork output is a filesystem contract that can be asserted directly.' },
|
|
49
56
|
{ commandPath: 'schema:init', strategy: 'contract', rationale: 'Schema initialization is deterministic over temporary workspaces.' },
|
|
50
57
|
{ commandPath: 'sdd:init', strategy: 'spawned-e2e', rationale: 'SDD init seeds canonical state and generated views, so it should keep lifecycle smoke coverage.' },
|
|
51
58
|
{ commandPath: 'sdd:init-context', strategy: 'spawned-e2e', rationale: 'Context bootstrap reads repository structure and writes canonical state, which benefits from spawned smoke coverage.' },
|
|
59
|
+
{ commandPath: 'sdd:intent-guard', strategy: 'contract', rationale: 'Intent guard classification is deterministic and should stay covered with direct contract tests.' },
|
|
52
60
|
{ commandPath: 'sdd:fingerprint', strategy: 'contract', rationale: 'Fingerprint backfill is a deterministic batch operation over change fixtures.' },
|
|
53
61
|
{ commandPath: 'sdd:insight', strategy: 'spawned-e2e', rationale: 'Insight creation is the first discovery lifecycle write and should stay covered in spawned flow tests.' },
|
|
54
62
|
{ commandPath: 'sdd:ingest-deposito', strategy: 'spawned-e2e', rationale: 'Ingestion coordinates discovery inputs, indexing, and trail generation across filesystem boundaries.' },
|
|
@@ -57,6 +65,9 @@ export const CLI_COMMAND_MATRIX = [
|
|
|
57
65
|
{ commandPath: 'sdd:breakdown', strategy: 'spawned-e2e', rationale: 'Breakdown materializes executable FEAT workspaces and needs lifecycle smoke coverage.' },
|
|
58
66
|
{ commandPath: 'sdd:mcp-manifest', strategy: 'contract', rationale: 'Manifest rendering is deterministic and provider-profile driven.' },
|
|
59
67
|
{ commandPath: 'sdd:mcp-call', strategy: 'contract', rationale: 'The MCP bridge reuses canonical services and is best guarded with direct contract assertions.' },
|
|
68
|
+
{ commandPath: 'sdd:preflight', strategy: 'contract', rationale: 'Preflight reuses deterministic mutation guardrails without invoking agent runtime.' },
|
|
69
|
+
{ commandPath: 'sdd:agent:run', strategy: 'contract', rationale: 'DeepAgents run gating is a deterministic fail-closed policy contract with no direct state writes.' },
|
|
70
|
+
{ commandPath: 'sdd:release-readiness', strategy: 'contract', rationale: 'Release readiness aggregates static gates and CI parity commands without publishing or mutating release state.' },
|
|
60
71
|
{ commandPath: 'sdd:start', strategy: 'spawned-e2e', rationale: 'Start transitions planned work into active execution and is a core lifecycle boundary.' },
|
|
61
72
|
{ commandPath: 'sdd:frontend-impact', strategy: 'spawned-e2e', rationale: 'Frontend impact is a required lifecycle declaration that should remain part of spawned finalize-path smoke.' },
|
|
62
73
|
{ commandPath: 'sdd:finalize', strategy: 'spawned-e2e', rationale: 'Finalize is the highest-risk lifecycle transition and must keep spawned smoke coverage.' },
|
|
@@ -64,15 +75,22 @@ export const CLI_COMMAND_MATRIX = [
|
|
|
64
75
|
{ commandPath: 'sdd:onboard', strategy: 'contract', rationale: 'Onboard is a read-oriented guidance surface with deterministic ranking output.' },
|
|
65
76
|
{ commandPath: 'sdd:aprovar', strategy: 'contract', rationale: 'Approval transitions are deterministic and fit fixture-driven lifecycle assertions.' },
|
|
66
77
|
{ commandPath: 'sdd:next', strategy: 'contract', rationale: 'Next is ranking logic over canonical state and is naturally contract-testable.' },
|
|
78
|
+
{ commandPath: 'sdd:plan-status', strategy: 'contract', rationale: 'Plan status aggregates active and ready work without mutating state.' },
|
|
79
|
+
{ commandPath: 'sdd:execute-next', strategy: 'spawned-e2e', rationale: 'Execute next bridges ranking into start and must preserve lifecycle guardrails.' },
|
|
67
80
|
{ commandPath: 'sdd:audit', strategy: 'contract', rationale: 'Audit is a deterministic report over canonical state.' },
|
|
81
|
+
{ commandPath: 'sdd:plugin:inspect', strategy: 'contract', rationale: 'Plugin inspect is a read-only manifest parser surface.' },
|
|
82
|
+
{ commandPath: 'sdd:plugin:plan', strategy: 'contract', rationale: 'Plugin plan builds a non-executing runtime envelope from a manifest fixture.' },
|
|
83
|
+
{ commandPath: 'sdd:plugin:devtrack-api:scaffold-dry-run', strategy: 'contract', rationale: 'DevTrack API scaffold dry-run plans appliance artifacts without executing a generator.' },
|
|
84
|
+
{ commandPath: 'sdd:backlog:project', strategy: 'contract', rationale: 'Backlog projection is a read-only dry-run plan over canonical SDD refs with no provider I/O.' },
|
|
68
85
|
{ commandPath: 'sdd:check', strategy: 'contract', rationale: 'Check is a deterministic health summary with strict output contracts.' },
|
|
69
86
|
{ commandPath: 'sdd:rebuild', strategy: 'spawned-e2e', rationale: 'Rebuild reconstructs canonical state from filesystem artifacts and needs real-bin recovery smoke coverage.' },
|
|
70
87
|
{ commandPath: 'sdd:metrics', strategy: 'spawned-e2e', rationale: 'Metrics aggregate transition-log lifecycle data and should keep real-bin smoke coverage for reporting windows.' },
|
|
71
88
|
{ commandPath: 'sdd:dedup', strategy: 'spawned-e2e', rationale: 'Dedup apply reconciles historical warning_links across canonical state and needs real-bin mutation smoke coverage.' },
|
|
72
89
|
{ commandPath: 'sdd:lint:feature', strategy: 'spawned-e2e', rationale: 'Feature lint evaluates workspace scope heuristics and should keep real-bin smoke coverage for strict/non-strict behavior.' },
|
|
73
90
|
{ commandPath: 'sdd:migrate', strategy: 'contract', rationale: 'Migration planning and reporting are deterministic over fixture state.' },
|
|
91
|
+
{ commandPath: 'sdd:upgrade-to-codesdd', strategy: 'contract', rationale: 'Transactional upgrade readiness, apply manifest, and rollback behavior are deterministic over fixture SDD state.' },
|
|
74
92
|
{ commandPath: 'sdd:migrate-workspace', strategy: 'contract', rationale: 'Workspace migration is deterministic and already aligns with fixture-based validation.' },
|
|
75
|
-
{ commandPath: 'sdd:import-
|
|
93
|
+
{ commandPath: 'sdd:import-legacy-spec', strategy: 'spawned-e2e', rationale: 'Legacy import crosses filesystem and generated-state boundaries, so a spawned smoke path is valuable.' },
|
|
76
94
|
{ commandPath: 'sdd:skills:bundles', strategy: 'contract', rationale: 'Bundle listing is a stable read-only catalog contract.' },
|
|
77
95
|
{ commandPath: 'sdd:skills:sync', strategy: 'contract', rationale: 'Skill sync can be asserted directly against temporary memory roots and tool targets.' },
|
|
78
96
|
{ commandPath: 'sdd:skills:suggest', strategy: 'contract', rationale: 'Suggestion ranking is deterministic over the catalog state.' },
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type CliCommandEvidenceMode = 'contract' | 'in_process' | 'spawned_e2e' | 'exception';
|
|
2
|
+
export interface CliCommandQualityException {
|
|
3
|
+
reason: string;
|
|
4
|
+
accepted_risk: string;
|
|
5
|
+
compensating_control: string;
|
|
6
|
+
review_deadline: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CliCommandQualityEntry {
|
|
9
|
+
path: string;
|
|
10
|
+
evidence_mode: CliCommandEvidenceMode;
|
|
11
|
+
owner: string;
|
|
12
|
+
rationale: string;
|
|
13
|
+
validation_refs: string[];
|
|
14
|
+
interactive: boolean;
|
|
15
|
+
exception?: CliCommandQualityException;
|
|
16
|
+
}
|
|
17
|
+
export interface CliCommandQualityValidation {
|
|
18
|
+
missing: string[];
|
|
19
|
+
extra: string[];
|
|
20
|
+
duplicate_paths: string[];
|
|
21
|
+
invalid_entries: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare const UNIVERSAL_SPAWNED_HELP_SMOKE_REF = "test/cli-e2e/all-commands-smoke.test.ts";
|
|
24
|
+
export declare const CLI_COMMAND_QUALITY_MATRIX: CliCommandQualityEntry[];
|
|
25
|
+
export declare function commandQualityMatrixByPath(matrix?: CliCommandQualityEntry[]): Map<string, CliCommandQualityEntry>;
|
|
26
|
+
export declare function validateCliCommandQualityMatrix(registeredLeafCommandPaths: string[], matrix?: CliCommandQualityEntry[]): CliCommandQualityValidation;
|
|
27
|
+
//# sourceMappingURL=cli-command-quality.d.ts.map
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
const OWNER = 'CodeSDD maintainers';
|
|
2
|
+
const REVIEW_DEADLINE = '2026-11-09';
|
|
3
|
+
export const UNIVERSAL_SPAWNED_HELP_SMOKE_REF = 'test/cli-e2e/all-commands-smoke.test.ts';
|
|
4
|
+
function withUniversalSpawnedHelpSmoke(validationRefs) {
|
|
5
|
+
return Array.from(new Set([UNIVERSAL_SPAWNED_HELP_SMOKE_REF, ...validationRefs]));
|
|
6
|
+
}
|
|
7
|
+
function entry(path, evidenceMode, rationale, validationRefs, options = {}) {
|
|
8
|
+
return {
|
|
9
|
+
path,
|
|
10
|
+
evidence_mode: evidenceMode,
|
|
11
|
+
owner: OWNER,
|
|
12
|
+
rationale,
|
|
13
|
+
validation_refs: withUniversalSpawnedHelpSmoke(validationRefs),
|
|
14
|
+
interactive: options.interactive ?? false,
|
|
15
|
+
exception: options.exception,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function entries(paths, evidenceMode, rationale, validationRefs) {
|
|
19
|
+
return paths.map((path) => entry(path, evidenceMode, rationale, validationRefs));
|
|
20
|
+
}
|
|
21
|
+
function exceptionEntry(path, reason, acceptedRisk, compensatingControl, validationRefs) {
|
|
22
|
+
return entry(path, 'exception', 'Interactive, deprecated, or local-environment-sensitive command that needs compensating contract evidence.', validationRefs, {
|
|
23
|
+
interactive: true,
|
|
24
|
+
exception: {
|
|
25
|
+
reason,
|
|
26
|
+
accepted_risk: acceptedRisk,
|
|
27
|
+
compensating_control: compensatingControl,
|
|
28
|
+
review_deadline: REVIEW_DEADLINE,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export const CLI_COMMAND_QUALITY_MATRIX = [
|
|
33
|
+
...entries([
|
|
34
|
+
'init',
|
|
35
|
+
'reload',
|
|
36
|
+
'install',
|
|
37
|
+
'validate',
|
|
38
|
+
'sdd init',
|
|
39
|
+
'sdd insight',
|
|
40
|
+
'sdd debate',
|
|
41
|
+
'sdd decide',
|
|
42
|
+
'sdd breakdown',
|
|
43
|
+
'sdd aprovar',
|
|
44
|
+
'sdd start',
|
|
45
|
+
'sdd context',
|
|
46
|
+
'sdd execute-next',
|
|
47
|
+
'sdd frontend-impact',
|
|
48
|
+
'sdd finalize',
|
|
49
|
+
'sdd init-context',
|
|
50
|
+
'sdd rebuild',
|
|
51
|
+
'sdd metrics',
|
|
52
|
+
'sdd dedup',
|
|
53
|
+
'sdd lint feature',
|
|
54
|
+
], 'spawned_e2e', 'Critical user-facing lifecycle or package-entrypoint command with spawned CLI coverage.', [
|
|
55
|
+
'test/helpers/run-cli.test.ts',
|
|
56
|
+
'test/cli-e2e/basic.test.ts',
|
|
57
|
+
'test/cli-e2e/critical-smoke.test.ts',
|
|
58
|
+
'test/e2e/full-lifecycle.test.ts',
|
|
59
|
+
]),
|
|
60
|
+
...entries([
|
|
61
|
+
'archive',
|
|
62
|
+
'change list',
|
|
63
|
+
'change show',
|
|
64
|
+
'change validate',
|
|
65
|
+
'completion generate',
|
|
66
|
+
'completion install',
|
|
67
|
+
'completion uninstall',
|
|
68
|
+
'config doctor',
|
|
69
|
+
'config get',
|
|
70
|
+
'config init',
|
|
71
|
+
'config list',
|
|
72
|
+
'config path',
|
|
73
|
+
'config redis bench',
|
|
74
|
+
'config redis flush-namespace',
|
|
75
|
+
'config redis ping',
|
|
76
|
+
'config redis status',
|
|
77
|
+
'config reset',
|
|
78
|
+
'config set',
|
|
79
|
+
'config unset',
|
|
80
|
+
'feedback',
|
|
81
|
+
'list',
|
|
82
|
+
'new change',
|
|
83
|
+
'schema fork',
|
|
84
|
+
'schema init',
|
|
85
|
+
'schema validate',
|
|
86
|
+
'schema which',
|
|
87
|
+
'schemas',
|
|
88
|
+
'show',
|
|
89
|
+
'spec list',
|
|
90
|
+
'spec show',
|
|
91
|
+
'spec validate',
|
|
92
|
+
'status',
|
|
93
|
+
'templates',
|
|
94
|
+
'update',
|
|
95
|
+
], 'in_process', 'Command behavior is covered by focused command or core tests, with universal spawned help smoke covering the bin entrypoint.', ['test/commands', 'test/core']),
|
|
96
|
+
...entries([
|
|
97
|
+
'__complete',
|
|
98
|
+
'config profile',
|
|
99
|
+
'instructions',
|
|
100
|
+
'sdd audit',
|
|
101
|
+
'sdd check',
|
|
102
|
+
'sdd diagnose',
|
|
103
|
+
'sdd agent run',
|
|
104
|
+
'sdd fgap add',
|
|
105
|
+
'sdd fgap done',
|
|
106
|
+
'sdd fingerprint',
|
|
107
|
+
'sdd import-legacy-spec',
|
|
108
|
+
'sdd ingest-deposito',
|
|
109
|
+
'sdd mcp-call',
|
|
110
|
+
'sdd mcp-manifest',
|
|
111
|
+
'sdd migrate',
|
|
112
|
+
'sdd migrate-workspace',
|
|
113
|
+
'sdd next',
|
|
114
|
+
'sdd onboard',
|
|
115
|
+
'sdd plan-status',
|
|
116
|
+
'sdd preflight',
|
|
117
|
+
'sdd release-readiness',
|
|
118
|
+
'sdd intent-guard',
|
|
119
|
+
'sdd backlog project',
|
|
120
|
+
'sdd plugin devtrack-api scaffold-dry-run',
|
|
121
|
+
'sdd plugin inspect',
|
|
122
|
+
'sdd plugin plan',
|
|
123
|
+
'sdd sanitize rollback',
|
|
124
|
+
'sdd scan-naming',
|
|
125
|
+
'sdd skills bundles',
|
|
126
|
+
'sdd skills suggest',
|
|
127
|
+
'sdd skills sync',
|
|
128
|
+
'sdd skills usar',
|
|
129
|
+
'sdd upgrade-to-codesdd',
|
|
130
|
+
], 'contract', 'Command has registration, service, or workflow contract coverage, with universal spawned help smoke covering the bin entrypoint.', ['test/commands/sdd-command.test.ts', 'test/core/sdd-operations.test.ts']),
|
|
131
|
+
exceptionEntry('experimental', 'Hidden deprecated alias retained only for backwards compatibility.', 'A packaging regression in the hidden alias may not be caught by critical-path spawned smoke tests.', 'Registration inventory keeps the alias visible, and init command coverage protects the underlying implementation.', ['src/cli/index.ts', 'test/cli-e2e/basic.test.ts']),
|
|
132
|
+
exceptionEntry('view', 'Interactive dashboard command depends on terminal UI behavior and is unsuitable for deterministic spawned CI coverage.', 'Terminal rendering regressions may require manual or future TUI-specific verification.', 'Keep command registration visible and cover the underlying view module with focused tests.', ['src/core/view.ts', 'test/core/view.test.ts']),
|
|
133
|
+
exceptionEntry('config edit', 'Launches the user editor and depends on local EDITOR behavior.', 'Editor launch behavior can vary by machine and shell configuration.', 'Config schema read/write operations are covered by non-editor config command tests.', ['test/commands/config.test.ts', 'test/core/config-schema.test.ts']),
|
|
134
|
+
];
|
|
135
|
+
export function commandQualityMatrixByPath(matrix = CLI_COMMAND_QUALITY_MATRIX) {
|
|
136
|
+
return new Map(matrix.map((item) => [item.path, item]));
|
|
137
|
+
}
|
|
138
|
+
export function validateCliCommandQualityMatrix(registeredLeafCommandPaths, matrix = CLI_COMMAND_QUALITY_MATRIX) {
|
|
139
|
+
const registered = new Set(registeredLeafCommandPaths);
|
|
140
|
+
const matrixPaths = matrix.map((item) => item.path);
|
|
141
|
+
const matrixPathSet = new Set(matrixPaths);
|
|
142
|
+
const duplicatePaths = matrixPaths
|
|
143
|
+
.filter((path, index) => matrixPaths.indexOf(path) !== index)
|
|
144
|
+
.sort();
|
|
145
|
+
const invalidEntries = matrix.flatMap((item) => {
|
|
146
|
+
const errors = [];
|
|
147
|
+
if (!item.path.trim())
|
|
148
|
+
errors.push('path is required');
|
|
149
|
+
if (!item.owner.trim())
|
|
150
|
+
errors.push('owner is required');
|
|
151
|
+
if (!item.rationale.trim())
|
|
152
|
+
errors.push('rationale is required');
|
|
153
|
+
if (item.validation_refs.length === 0)
|
|
154
|
+
errors.push('validation_refs must not be empty');
|
|
155
|
+
if (item.evidence_mode === 'exception') {
|
|
156
|
+
if (!item.exception) {
|
|
157
|
+
errors.push('exception details are required');
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
if (!item.exception.reason.trim())
|
|
161
|
+
errors.push('exception.reason is required');
|
|
162
|
+
if (!item.exception.accepted_risk.trim())
|
|
163
|
+
errors.push('exception.accepted_risk is required');
|
|
164
|
+
if (!item.exception.compensating_control.trim()) {
|
|
165
|
+
errors.push('exception.compensating_control is required');
|
|
166
|
+
}
|
|
167
|
+
if (!item.exception.review_deadline.trim())
|
|
168
|
+
errors.push('exception.review_deadline is required');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return errors.map((error) => `${item.path}: ${error}`);
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
missing: registeredLeafCommandPaths.filter((path) => !matrixPathSet.has(path)).sort(),
|
|
175
|
+
extra: matrixPaths.filter((path) => !registered.has(path)).sort(),
|
|
176
|
+
duplicate_paths: Array.from(new Set(duplicatePaths)),
|
|
177
|
+
invalid_entries: invalidEntries.sort(),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=cli-command-quality.js.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import type { ToolCommandAdapter } from '../types.js';
|
|
7
7
|
/**
|
|
8
8
|
* CoStrict adapter for command generation.
|
|
9
|
-
* File path: .cospec/
|
|
9
|
+
* File path: .cospec/legacy-spec/commands/opsx-<id>.md
|
|
10
10
|
* Frontmatter: description, argument-hint
|
|
11
11
|
*/
|
|
12
12
|
export declare const costrictAdapter: ToolCommandAdapter;
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
/**
|
|
8
8
|
* CoStrict adapter for command generation.
|
|
9
|
-
* File path: .cospec/
|
|
9
|
+
* File path: .cospec/legacy-spec/commands/opsx-<id>.md
|
|
10
10
|
* Frontmatter: description, argument-hint
|
|
11
11
|
*/
|
|
12
12
|
export const costrictAdapter = {
|
|
13
13
|
toolId: 'costrict',
|
|
14
14
|
getFilePath(commandId) {
|
|
15
|
-
return path.join('.cospec', '
|
|
15
|
+
return path.join('.cospec', 'codesdd', 'commands', `opsx-${commandId}.md`);
|
|
16
16
|
},
|
|
17
17
|
formatFile(content) {
|
|
18
18
|
return `---
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
export interface CommandContent {
|
|
12
12
|
/** Command identifier (e.g., 'explore', 'apply', 'new') */
|
|
13
13
|
id: string;
|
|
14
|
-
/** Human-readable name (e.g., '
|
|
14
|
+
/** Human-readable name (e.g., 'CodeSDD Explore') */
|
|
15
15
|
name: string;
|
|
16
16
|
/** Brief description of command purpose */
|
|
17
17
|
description: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CommandDefinition } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Registry of all
|
|
3
|
+
* Registry of all visible CodeSDD CLI commands with their flags and metadata.
|
|
4
4
|
* This registry is used to generate shell completion scripts.
|
|
5
5
|
*/
|
|
6
6
|
export declare const COMMAND_REGISTRY: CommandDefinition[];
|