@devtrack-solution/codesdd 1.2.2 → 1.2.3
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 +160 -28
- package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +1 -1
- 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 +317 -0
- package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
- package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +295 -0
- package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +4 -4
- package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
- package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
- package/LICENSE +1 -1
- package/README.md +243 -51
- package/bin/codesdd.js +3 -2
- 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 +159 -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 +147 -16
- package/dist/commands/sdd/plugin.d.ts +3 -0
- package/dist/commands/sdd/plugin.js +153 -0
- package/dist/commands/sdd/shared.js +2 -23
- package/dist/commands/sdd/skills.js +7 -0
- package/dist/commands/sdd.js +69 -12
- 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 +10 -1
- package/dist/core/cli-command-quality.d.ts +27 -0
- package/dist/core/cli-command-quality.js +171 -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 +155 -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 +3 -1
- package/dist/core/config-schema.js +26 -1
- package/dist/core/config.d.ts +3 -3
- package/dist/core/config.js +4 -4
- package/dist/core/global-config.d.ts +41 -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/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 +42 -0
- package/dist/core/sdd/check.js +22 -22
- 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 +38 -0
- package/dist/core/sdd/coordination/coordination-adapters.js +139 -1
- package/dist/core/sdd/deepagent-contracts.d.ts +276 -0
- package/dist/core/sdd/deepagent-contracts.js +173 -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 +2 -2
- package/dist/core/sdd/default-bootstrap-files.js +36 -2
- package/dist/core/sdd/default-skills.d.ts +30 -0
- package/dist/core/sdd/default-skills.js +181 -5
- package/dist/core/sdd/devtrack-api-appliance.d.ts +84 -0
- package/dist/core/sdd/devtrack-api-appliance.js +257 -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 +33 -5
- 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/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/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/json-schema.js +100 -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 +431 -43
- package/dist/core/sdd/lenses.d.ts +1 -0
- package/dist/core/sdd/lenses.js +29 -1
- package/dist/core/sdd/migrate-workspace.js +56 -2
- package/dist/core/sdd/migrate.d.ts +1 -1
- package/dist/core/sdd/migrate.js +36 -2
- package/dist/core/sdd/package-structure-gate.d.ts +83 -0
- package/dist/core/sdd/package-structure-gate.js +362 -0
- package/dist/core/sdd/parallel-feat-automation.d.ts +152 -0
- package/dist/core/sdd/parallel-feat-automation.js +212 -0
- package/dist/core/sdd/plugin-broker.d.ts +558 -0
- package/dist/core/sdd/plugin-broker.js +482 -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 +109 -0
- package/dist/core/sdd/plugin-cli.js +198 -0
- package/dist/core/sdd/plugin-evidence.d.ts +275 -0
- package/dist/core/sdd/plugin-evidence.js +307 -0
- package/dist/core/sdd/plugin-manifest.d.ts +164 -0
- package/dist/core/sdd/plugin-manifest.js +215 -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 +311 -0
- package/dist/core/sdd/plugin-registry.js +138 -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 +547 -0
- package/dist/core/sdd/quality-validation.js +239 -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/sanitize.d.ts +30 -1
- package/dist/core/sdd/sanitize.js +23 -23
- package/dist/core/sdd/services/agent-run.service.d.ts +65 -0
- package/dist/core/sdd/services/agent-run.service.js +189 -0
- package/dist/core/sdd/services/breakdown.service.js +2 -1
- package/dist/core/sdd/services/context.service.js +18 -16
- 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 +80 -0
- package/dist/core/sdd/services/finalize.service.js +323 -24
- package/dist/core/sdd/services/frontend-gap.service.js +22 -7
- 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/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 +22 -0
- package/dist/core/sdd/state.js +66 -41
- package/dist/core/sdd/structural-health.d.ts +42 -42
- package/dist/core/sdd/types.d.ts +33 -7
- package/dist/core/sdd/types.js +17 -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/workspace-schemas.d.ts +285 -14
- package/dist/core/sdd/workspace-schemas.js +148 -0
- 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/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 +27 -17
- package/schemas/sdd/1-spec.schema.json +1 -1
- package/schemas/sdd/2-plan.schema.json +73 -1
- 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 +442 -2
- 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/backlog-projection-plan.schema.json +180 -0
- package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
- package/schemas/sdd/codesdd-plugin.schema.json +474 -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 +321 -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 +215 -0
- package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
- package/schemas/sdd/plugin-artifact-manifest.schema.json +150 -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 +569 -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 +558 -0
- package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
- package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +845 -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 +1228 -0
- package/schemas/sdd/quality-run.schema.json +197 -0
- package/schemas/sdd/quality-scenario.schema.json +252 -0
- package/schemas/sdd/workspace-catalog.schema.json +9841 -22
- 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
|
@@ -2,7 +2,7 @@ import { promises as fs } from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { RootResolver } from './root-resolver.js';
|
|
4
4
|
import { loadProjectSddConfig, resolveSddPaths } from './state.js';
|
|
5
|
-
import { parseWorkspaceYamlDocument, workspaceSchemaForFile } from './workspace-schemas.js';
|
|
5
|
+
import { parsePromptAssetYamlDocument, parseWorkspaceYamlDocument, workspaceSchemaForFile } from './workspace-schemas.js';
|
|
6
6
|
export class SddWritePolicyError extends Error {
|
|
7
7
|
constructor(message) {
|
|
8
8
|
super(message);
|
|
@@ -276,10 +276,13 @@ function validateTemplatesPath(operation, policyPath, segments, label) {
|
|
|
276
276
|
return;
|
|
277
277
|
throw policyError(label, operation, policyPath, 'templates root may only be created as a directory');
|
|
278
278
|
}
|
|
279
|
-
if (segments.length === 2 &&
|
|
279
|
+
if (segments.length === 2 && operation.type === 'delete' && segments[1].endsWith('.md')) {
|
|
280
280
|
return;
|
|
281
281
|
}
|
|
282
|
-
|
|
282
|
+
if (segments.length === 2 && /\.ya?ml$/.test(segments[1]) && operation.type !== 'mkdir') {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
throw policyError(label, operation, policyPath, 'templates accepts YAML files directly under root; Markdown templates may only be deleted during cleanup');
|
|
283
286
|
}
|
|
284
287
|
function validateSkillsPath(operation, policyPath, segments, label) {
|
|
285
288
|
if (segments.length === 1) {
|
|
@@ -315,10 +318,16 @@ function validatePromptsPath(operation, policyPath, segments, label) {
|
|
|
315
318
|
return;
|
|
316
319
|
throw policyError(label, operation, policyPath, 'prompts root may only be created as a directory');
|
|
317
320
|
}
|
|
321
|
+
if (segments.length === 3 && segments[1] === 'assets' && segments[2].endsWith('.yaml') && operation.type !== 'mkdir') {
|
|
322
|
+
if (operation.type === 'write') {
|
|
323
|
+
validatePromptAssetYamlContent(operation.content, label, operation, policyPath);
|
|
324
|
+
}
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
318
327
|
if (segments.length === 2 && segments[1].endsWith('.md') && operation.type !== 'mkdir') {
|
|
319
328
|
return;
|
|
320
329
|
}
|
|
321
|
-
throw policyError(label, operation, policyPath, 'prompts accepts markdown files directly under root');
|
|
330
|
+
throw policyError(label, operation, policyPath, 'prompts accepts markdown files directly under root and YAML assets under prompts/assets/');
|
|
322
331
|
}
|
|
323
332
|
function validateSourcesPath(operation, policyPath, segments, label) {
|
|
324
333
|
if (segments.length === 1) {
|
|
@@ -350,4 +359,13 @@ function validateWorkspaceYamlContent(content, fileName, label, operation, polic
|
|
|
350
359
|
throw policyError(label, operation, policyPath, `workspace YAML schema validation failed: ${message}`);
|
|
351
360
|
}
|
|
352
361
|
}
|
|
362
|
+
function validatePromptAssetYamlContent(content, label, operation, policyPath) {
|
|
363
|
+
try {
|
|
364
|
+
parsePromptAssetYamlDocument(content);
|
|
365
|
+
}
|
|
366
|
+
catch (err) {
|
|
367
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
368
|
+
throw policyError(label, operation, policyPath, `prompt asset YAML schema validation failed: ${message}`);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
353
371
|
//# sourceMappingURL=write-manifest.js.map
|
|
@@ -42,7 +42,7 @@ export declare function getCommandContents(workflowFilter?: readonly string[]):
|
|
|
42
42
|
* Generates skill file content with YAML frontmatter.
|
|
43
43
|
*
|
|
44
44
|
* @param template - The skill template
|
|
45
|
-
* @param generatedByVersion - The
|
|
45
|
+
* @param generatedByVersion - The CodeSDD version to embed in the file
|
|
46
46
|
* @param transformInstructions - Optional callback to transform the instructions content
|
|
47
47
|
*/
|
|
48
48
|
export declare function generateSkillContent(template: SkillTemplate, generatedByVersion: string, transformInstructions?: (instructions: string) => string): string;
|
|
@@ -18,18 +18,18 @@ function ensurePtBrGuardrail(content) {
|
|
|
18
18
|
*/
|
|
19
19
|
export function getSkillTemplates(workflowFilter) {
|
|
20
20
|
const all = [
|
|
21
|
-
{ template: getExploreSkillTemplate(), dirName: '
|
|
22
|
-
{ template: getNewChangeSkillTemplate(), dirName: '
|
|
23
|
-
{ template: getContinueChangeSkillTemplate(), dirName: '
|
|
24
|
-
{ template: getApplyChangeSkillTemplate(), dirName: '
|
|
25
|
-
{ template: getFfChangeSkillTemplate(), dirName: '
|
|
26
|
-
{ template: getSyncSpecsSkillTemplate(), dirName: '
|
|
27
|
-
{ template: getArchiveChangeSkillTemplate(), dirName: '
|
|
28
|
-
{ template: getBulkArchiveChangeSkillTemplate(), dirName: '
|
|
29
|
-
{ template: getVerifyChangeSkillTemplate(), dirName: '
|
|
30
|
-
{ template: getOnboardSkillTemplate(), dirName: '
|
|
31
|
-
{ template: getOpsxProposeSkillTemplate(), dirName: '
|
|
32
|
-
{ template: getSddSkillTemplate(), dirName: '
|
|
21
|
+
{ template: getExploreSkillTemplate(), dirName: 'codesdd-explore', workflowId: 'explore' },
|
|
22
|
+
{ template: getNewChangeSkillTemplate(), dirName: 'codesdd-new-change', workflowId: 'new' },
|
|
23
|
+
{ template: getContinueChangeSkillTemplate(), dirName: 'codesdd-continue-change', workflowId: 'continue' },
|
|
24
|
+
{ template: getApplyChangeSkillTemplate(), dirName: 'codesdd-apply-change', workflowId: 'apply' },
|
|
25
|
+
{ template: getFfChangeSkillTemplate(), dirName: 'codesdd-ff-change', workflowId: 'ff' },
|
|
26
|
+
{ template: getSyncSpecsSkillTemplate(), dirName: 'codesdd-sync-specs', workflowId: 'sync' },
|
|
27
|
+
{ template: getArchiveChangeSkillTemplate(), dirName: 'codesdd-archive-change', workflowId: 'archive' },
|
|
28
|
+
{ template: getBulkArchiveChangeSkillTemplate(), dirName: 'codesdd-bulk-archive-change', workflowId: 'bulk-archive' },
|
|
29
|
+
{ template: getVerifyChangeSkillTemplate(), dirName: 'codesdd-verify-change', workflowId: 'verify' },
|
|
30
|
+
{ template: getOnboardSkillTemplate(), dirName: 'codesdd-onboard', workflowId: 'onboard' },
|
|
31
|
+
{ template: getOpsxProposeSkillTemplate(), dirName: 'codesdd-propose', workflowId: 'propose' },
|
|
32
|
+
{ template: getSddSkillTemplate(), dirName: 'codesdd-sdd', workflowId: 'sdd' },
|
|
33
33
|
];
|
|
34
34
|
if (!workflowFilter)
|
|
35
35
|
return all;
|
|
@@ -81,7 +81,7 @@ export function getCommandContents(workflowFilter) {
|
|
|
81
81
|
* Generates skill file content with YAML frontmatter.
|
|
82
82
|
*
|
|
83
83
|
* @param template - The skill template
|
|
84
|
-
* @param generatedByVersion - The
|
|
84
|
+
* @param generatedByVersion - The CodeSDD version to embed in the file
|
|
85
85
|
* @param transformInstructions - Optional callback to transform the instructions content
|
|
86
86
|
*/
|
|
87
87
|
export function generateSkillContent(template, generatedByVersion, transformInstructions) {
|
|
@@ -93,9 +93,9 @@ export function generateSkillContent(template, generatedByVersion, transformInst
|
|
|
93
93
|
name: ${template.name}
|
|
94
94
|
description: ${template.description}
|
|
95
95
|
license: ${template.license || 'MIT'}
|
|
96
|
-
compatibility: ${template.compatibility || 'Requires
|
|
96
|
+
compatibility: ${template.compatibility || 'Requires codesdd CLI.'}
|
|
97
97
|
metadata:
|
|
98
|
-
author: ${template.metadata?.author || '
|
|
98
|
+
author: ${template.metadata?.author || 'codesdd'}
|
|
99
99
|
version: "${template.metadata?.version || '1.0'}"
|
|
100
100
|
generatedBy: "${generatedByVersion}"
|
|
101
101
|
---
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* Shared utilities for detecting tool configurations and version status.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
* Names of skill directories created by
|
|
7
|
+
* Names of skill directories created by codesdd init.
|
|
8
8
|
*/
|
|
9
|
-
export declare const SKILL_NAMES: readonly ["
|
|
9
|
+
export declare const SKILL_NAMES: readonly ["codesdd-explore", "codesdd-new-change", "codesdd-continue-change", "codesdd-apply-change", "codesdd-ff-change", "codesdd-sync-specs", "codesdd-archive-change", "codesdd-bulk-archive-change", "codesdd-verify-change", "codesdd-onboard", "codesdd-propose"];
|
|
10
10
|
export type SkillName = (typeof SKILL_NAMES)[number];
|
|
11
11
|
/**
|
|
12
|
-
* IDs of command templates created by
|
|
12
|
+
* IDs of command templates created by codesdd init.
|
|
13
13
|
*/
|
|
14
14
|
export declare const COMMAND_IDS: readonly ["explore", "new", "continue", "apply", "ff", "sync", "archive", "bulk-archive", "verify", "onboard", "propose"];
|
|
15
15
|
export type CommandId = (typeof COMMAND_IDS)[number];
|
|
@@ -7,23 +7,23 @@ import path from 'path';
|
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import { AI_TOOLS } from '../config.js';
|
|
9
9
|
/**
|
|
10
|
-
* Names of skill directories created by
|
|
10
|
+
* Names of skill directories created by codesdd init.
|
|
11
11
|
*/
|
|
12
12
|
export const SKILL_NAMES = [
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'
|
|
13
|
+
'codesdd-explore',
|
|
14
|
+
'codesdd-new-change',
|
|
15
|
+
'codesdd-continue-change',
|
|
16
|
+
'codesdd-apply-change',
|
|
17
|
+
'codesdd-ff-change',
|
|
18
|
+
'codesdd-sync-specs',
|
|
19
|
+
'codesdd-archive-change',
|
|
20
|
+
'codesdd-bulk-archive-change',
|
|
21
|
+
'codesdd-verify-change',
|
|
22
|
+
'codesdd-onboard',
|
|
23
|
+
'codesdd-propose',
|
|
24
24
|
];
|
|
25
25
|
/**
|
|
26
|
-
* IDs of command templates created by
|
|
26
|
+
* IDs of command templates created by codesdd init.
|
|
27
27
|
*/
|
|
28
28
|
export const COMMAND_IDS = [
|
|
29
29
|
'explore',
|
|
@@ -92,7 +92,7 @@ export function extractGeneratedByVersion(skillFilePath) {
|
|
|
92
92
|
// ---
|
|
93
93
|
// ...
|
|
94
94
|
// metadata:
|
|
95
|
-
// author:
|
|
95
|
+
// author: codesdd
|
|
96
96
|
// version: "1.0"
|
|
97
97
|
// generatedBy: "0.23.0"
|
|
98
98
|
// ---
|
package/dist/core/specs-apply.js
CHANGED
|
@@ -9,7 +9,7 @@ import path from 'path';
|
|
|
9
9
|
import chalk from 'chalk';
|
|
10
10
|
import { extractRequirementsSection, parseDeltaSpec, normalizeRequirementName, } from './parsers/requirement-blocks.js';
|
|
11
11
|
import { Validator } from './validation/validator.js';
|
|
12
|
-
import {
|
|
12
|
+
import { resolveLegacySpecLiveSubpath } from './sdd/services/legacy-capability.service.js';
|
|
13
13
|
// -----------------------------------------------------------------------------
|
|
14
14
|
// Public API
|
|
15
15
|
// -----------------------------------------------------------------------------
|
|
@@ -264,7 +264,7 @@ export async function writeUpdatedSpec(update, rebuilt, counts) {
|
|
|
264
264
|
await fs.mkdir(targetDir, { recursive: true });
|
|
265
265
|
await fs.writeFile(update.target, rebuilt);
|
|
266
266
|
const specName = path.basename(path.dirname(update.target));
|
|
267
|
-
console.log(`Applying changes to
|
|
267
|
+
console.log(`Applying changes to legacy-spec/specs/${specName}/spec.md:`);
|
|
268
268
|
if (counts.added)
|
|
269
269
|
console.log(` + ${counts.added} added`);
|
|
270
270
|
if (counts.modified)
|
|
@@ -290,8 +290,8 @@ export function buildSpecSkeleton(specFolderName, changeName) {
|
|
|
290
290
|
* @returns Result of the operation with counts
|
|
291
291
|
*/
|
|
292
292
|
export async function applySpecs(projectRoot, changeName, options = {}) {
|
|
293
|
-
const changeDir =
|
|
294
|
-
const mainSpecsDir =
|
|
293
|
+
const changeDir = resolveLegacySpecLiveSubpath(projectRoot, 'changes', changeName);
|
|
294
|
+
const mainSpecsDir = resolveLegacySpecLiveSubpath(projectRoot, 'specs');
|
|
295
295
|
// Verify change exists
|
|
296
296
|
try {
|
|
297
297
|
const stat = await fs.stat(changeDir);
|
|
@@ -344,7 +344,7 @@ export async function applySpecs(projectRoot, changeName, options = {}) {
|
|
|
344
344
|
await fs.mkdir(targetDir, { recursive: true });
|
|
345
345
|
await fs.writeFile(p.update.target, p.rebuilt);
|
|
346
346
|
if (!options.silent) {
|
|
347
|
-
console.log(`Applying changes to
|
|
347
|
+
console.log(`Applying changes to legacy-spec/specs/${capability}/spec.md:`);
|
|
348
348
|
if (p.counts.added)
|
|
349
349
|
console.log(` + ${p.counts.added} added`);
|
|
350
350
|
if (p.counts.modified)
|
|
@@ -356,7 +356,7 @@ export async function applySpecs(projectRoot, changeName, options = {}) {
|
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
358
|
else if (!options.silent) {
|
|
359
|
-
console.log(`Would apply changes to
|
|
359
|
+
console.log(`Would apply changes to legacy-spec/specs/${capability}/spec.md:`);
|
|
360
360
|
if (p.counts.added)
|
|
361
361
|
console.log(` + ${p.counts.added} added`);
|
|
362
362
|
if (p.counts.modified)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export function getApplyChangeSkillTemplate() {
|
|
2
2
|
return {
|
|
3
|
-
name: '
|
|
4
|
-
description: 'Implement tasks from an
|
|
5
|
-
instructions: `Implement tasks from an
|
|
3
|
+
name: 'codesdd-apply-change',
|
|
4
|
+
description: 'Implement tasks from an CodeSDD change. Use when the user wants to start implementing, continue implementation, or work through tasks.',
|
|
5
|
+
instructions: `Implement tasks from an CodeSDD change.
|
|
6
6
|
|
|
7
7
|
**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
8
8
|
|
|
@@ -13,13 +13,13 @@ export function getApplyChangeSkillTemplate() {
|
|
|
13
13
|
If a name is provided, use it. Otherwise:
|
|
14
14
|
- Infer from conversation context if the user mentioned a change
|
|
15
15
|
- Auto-select if only one active change exists
|
|
16
|
-
- If ambiguous, run \`
|
|
16
|
+
- If ambiguous, run \`codesdd list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select
|
|
17
17
|
|
|
18
18
|
Always announce: "Using change: <name>" and how to override (e.g., \`/opsx:apply <other>\`).
|
|
19
19
|
|
|
20
20
|
2. **Check status to understand the schema**
|
|
21
21
|
\`\`\`bash
|
|
22
|
-
|
|
22
|
+
codesdd status --change "<name>" --json
|
|
23
23
|
\`\`\`
|
|
24
24
|
Parse the JSON to understand:
|
|
25
25
|
- \`schemaName\`: The workflow being used (e.g., "spec-driven")
|
|
@@ -28,7 +28,7 @@ export function getApplyChangeSkillTemplate() {
|
|
|
28
28
|
3. **Get apply instructions**
|
|
29
29
|
|
|
30
30
|
\`\`\`bash
|
|
31
|
-
|
|
31
|
+
codesdd instructions apply --change "<name>" --json
|
|
32
32
|
\`\`\`
|
|
33
33
|
|
|
34
34
|
This returns:
|
|
@@ -38,7 +38,7 @@ export function getApplyChangeSkillTemplate() {
|
|
|
38
38
|
- Dynamic instruction based on current state
|
|
39
39
|
|
|
40
40
|
**Handle states:**
|
|
41
|
-
- If \`state: "blocked"\` (missing artifacts): show message, suggest using
|
|
41
|
+
- If \`state: "blocked"\` (missing artifacts): show message, suggest using codesdd-continue-change
|
|
42
42
|
- If \`state: "all_done"\`: congratulate, suggest archive
|
|
43
43
|
- Otherwise: proceed to implementation
|
|
44
44
|
|
|
@@ -148,17 +148,17 @@ This skill supports the "actions on a change" model:
|
|
|
148
148
|
- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
|
|
149
149
|
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly`,
|
|
150
150
|
license: 'MIT',
|
|
151
|
-
compatibility: 'Requires
|
|
152
|
-
metadata: { author: '
|
|
151
|
+
compatibility: 'Requires codesdd CLI.',
|
|
152
|
+
metadata: { author: 'codesdd', version: '1.0' },
|
|
153
153
|
};
|
|
154
154
|
}
|
|
155
155
|
export function getOpsxApplyCommandTemplate() {
|
|
156
156
|
return {
|
|
157
157
|
name: 'OPSX: Apply',
|
|
158
|
-
description: 'Implement tasks from an
|
|
158
|
+
description: 'Implement tasks from an CodeSDD change (Experimental)',
|
|
159
159
|
category: 'Workflow',
|
|
160
160
|
tags: ['workflow', 'artifacts', 'experimental'],
|
|
161
|
-
content: `Implement tasks from an
|
|
161
|
+
content: `Implement tasks from an CodeSDD change.
|
|
162
162
|
|
|
163
163
|
**Input**: Optionally specify a change name (e.g., \`/opsx:apply add-auth\`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
164
164
|
|
|
@@ -169,13 +169,13 @@ export function getOpsxApplyCommandTemplate() {
|
|
|
169
169
|
If a name is provided, use it. Otherwise:
|
|
170
170
|
- Infer from conversation context if the user mentioned a change
|
|
171
171
|
- Auto-select if only one active change exists
|
|
172
|
-
- If ambiguous, run \`
|
|
172
|
+
- If ambiguous, run \`codesdd list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select
|
|
173
173
|
|
|
174
174
|
Always announce: "Using change: <name>" and how to override (e.g., \`/opsx:apply <other>\`).
|
|
175
175
|
|
|
176
176
|
2. **Check status to understand the schema**
|
|
177
177
|
\`\`\`bash
|
|
178
|
-
|
|
178
|
+
codesdd status --change "<name>" --json
|
|
179
179
|
\`\`\`
|
|
180
180
|
Parse the JSON to understand:
|
|
181
181
|
- \`schemaName\`: The workflow being used (e.g., "spec-driven")
|
|
@@ -184,7 +184,7 @@ export function getOpsxApplyCommandTemplate() {
|
|
|
184
184
|
3. **Get apply instructions**
|
|
185
185
|
|
|
186
186
|
\`\`\`bash
|
|
187
|
-
|
|
187
|
+
codesdd instructions apply --change "<name>" --json
|
|
188
188
|
\`\`\`
|
|
189
189
|
|
|
190
190
|
This returns:
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
export function getArchiveChangeSkillTemplate() {
|
|
2
2
|
return {
|
|
3
|
-
name: '
|
|
3
|
+
name: 'codesdd-archive-change',
|
|
4
4
|
description: 'Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.',
|
|
5
5
|
instructions: `Archive a completed change in the experimental workflow.
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**CodeSDD-native guardrail**
|
|
8
8
|
|
|
9
|
-
If this repository has a \`.sdd/\` directory, prefer \`
|
|
10
|
-
Do not create, move, or recreate \`
|
|
11
|
-
Use the archive flow below only for explicitly legacy
|
|
9
|
+
If this repository has a \`.sdd/\` directory, prefer \`codesdd sdd finalize --ref <FEAT-ID>\`.
|
|
10
|
+
Do not create, move, or recreate \`legacy-spec/changes\` in CodeSDD-native projects.
|
|
11
|
+
Use the archive flow below only for explicitly legacy CodeSDD compatibility artifacts.
|
|
12
12
|
|
|
13
13
|
**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ Use the archive flow below only for explicitly legacy OpenSpec compatibility art
|
|
|
16
16
|
|
|
17
17
|
1. **If no change name provided, prompt for selection**
|
|
18
18
|
|
|
19
|
-
Run \`
|
|
19
|
+
Run \`codesdd list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select.
|
|
20
20
|
|
|
21
21
|
Show only active changes (not already archived).
|
|
22
22
|
Include the schema used for each change if available.
|
|
@@ -25,7 +25,7 @@ Use the archive flow below only for explicitly legacy OpenSpec compatibility art
|
|
|
25
25
|
|
|
26
26
|
2. **Check artifact completion status**
|
|
27
27
|
|
|
28
|
-
Run \`
|
|
28
|
+
Run \`codesdd status --change "<name>" --json\` to check artifact completion.
|
|
29
29
|
|
|
30
30
|
Parse the JSON to understand:
|
|
31
31
|
- \`schemaName\`: The workflow being used
|
|
@@ -51,10 +51,10 @@ Use the archive flow below only for explicitly legacy OpenSpec compatibility art
|
|
|
51
51
|
|
|
52
52
|
4. **Assess delta spec sync state**
|
|
53
53
|
|
|
54
|
-
Check for delta specs at \`
|
|
54
|
+
Check for delta specs at \`legacy-spec/changes/<name>/specs/\`. If none exist, proceed without sync prompt.
|
|
55
55
|
|
|
56
56
|
**If delta specs exist:**
|
|
57
|
-
- Compare each delta spec with its corresponding main spec at \`
|
|
57
|
+
- Compare each delta spec with its corresponding main spec at \`legacy-spec/specs/<capability>/spec.md\`
|
|
58
58
|
- Determine what changes would be applied (adds, modifications, removals, renames)
|
|
59
59
|
- Show a combined summary before prompting
|
|
60
60
|
|
|
@@ -62,13 +62,13 @@ Use the archive flow below only for explicitly legacy OpenSpec compatibility art
|
|
|
62
62
|
- If changes needed: "Sync now (recommended)", "Archive without syncing"
|
|
63
63
|
- If already synced: "Archive now", "Sync anyway", "Cancel"
|
|
64
64
|
|
|
65
|
-
If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke
|
|
65
|
+
If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke codesdd-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.
|
|
66
66
|
|
|
67
67
|
5. **Perform the archive**
|
|
68
68
|
|
|
69
69
|
Create the archive directory if it doesn't exist:
|
|
70
70
|
\`\`\`bash
|
|
71
|
-
mkdir -p
|
|
71
|
+
mkdir -p legacy-spec/changes/archive
|
|
72
72
|
\`\`\`
|
|
73
73
|
|
|
74
74
|
Generate target name using current date: \`YYYY-MM-DD-<change-name>\`
|
|
@@ -78,7 +78,7 @@ Use the archive flow below only for explicitly legacy OpenSpec compatibility art
|
|
|
78
78
|
- If no: Move the change directory to archive
|
|
79
79
|
|
|
80
80
|
\`\`\`bash
|
|
81
|
-
mv
|
|
81
|
+
mv legacy-spec/changes/<name> legacy-spec/changes/archive/YYYY-MM-DD-<name>
|
|
82
82
|
\`\`\`
|
|
83
83
|
|
|
84
84
|
6. **Display summary**
|
|
@@ -97,7 +97,7 @@ Use the archive flow below only for explicitly legacy OpenSpec compatibility art
|
|
|
97
97
|
|
|
98
98
|
**Change:** <change-name>
|
|
99
99
|
**Schema:** <schema-name>
|
|
100
|
-
**Archived to:**
|
|
100
|
+
**Archived to:** legacy-spec/changes/archive/YYYY-MM-DD-<name>/
|
|
101
101
|
**Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")
|
|
102
102
|
|
|
103
103
|
All artifacts complete. All tasks complete.
|
|
@@ -105,15 +105,15 @@ All artifacts complete. All tasks complete.
|
|
|
105
105
|
|
|
106
106
|
**Guardrails**
|
|
107
107
|
- Always prompt for change selection if not provided
|
|
108
|
-
- Use artifact graph (
|
|
108
|
+
- Use artifact graph (codesdd status --json) for completion checking
|
|
109
109
|
- Don't block archive on warnings - just inform and confirm
|
|
110
|
-
- Preserve .
|
|
110
|
+
- Preserve .sdd.yaml when moving to archive (it moves with the directory)
|
|
111
111
|
- Show clear summary of what happened
|
|
112
|
-
- If sync is requested, use
|
|
112
|
+
- If sync is requested, use codesdd-sync-specs approach (agent-driven)
|
|
113
113
|
- If delta specs exist, always run the sync assessment and show the combined summary before prompting`,
|
|
114
114
|
license: 'MIT',
|
|
115
|
-
compatibility: 'Requires
|
|
116
|
-
metadata: { author: '
|
|
115
|
+
compatibility: 'Requires codesdd CLI.',
|
|
116
|
+
metadata: { author: 'codesdd', version: '1.0' },
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
119
|
export function getOpsxArchiveCommandTemplate() {
|
|
@@ -130,7 +130,7 @@ export function getOpsxArchiveCommandTemplate() {
|
|
|
130
130
|
|
|
131
131
|
1. **If no change name provided, prompt for selection**
|
|
132
132
|
|
|
133
|
-
Run \`
|
|
133
|
+
Run \`codesdd list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select.
|
|
134
134
|
|
|
135
135
|
Show only active changes (not already archived).
|
|
136
136
|
Include the schema used for each change if available.
|
|
@@ -139,7 +139,7 @@ export function getOpsxArchiveCommandTemplate() {
|
|
|
139
139
|
|
|
140
140
|
2. **Check artifact completion status**
|
|
141
141
|
|
|
142
|
-
Run \`
|
|
142
|
+
Run \`codesdd status --change "<name>" --json\` to check artifact completion.
|
|
143
143
|
|
|
144
144
|
Parse the JSON to understand:
|
|
145
145
|
- \`schemaName\`: The workflow being used
|
|
@@ -165,10 +165,10 @@ export function getOpsxArchiveCommandTemplate() {
|
|
|
165
165
|
|
|
166
166
|
4. **Assess delta spec sync state**
|
|
167
167
|
|
|
168
|
-
Check for delta specs at \`
|
|
168
|
+
Check for delta specs at \`legacy-spec/changes/<name>/specs/\`. If none exist, proceed without sync prompt.
|
|
169
169
|
|
|
170
170
|
**If delta specs exist:**
|
|
171
|
-
- Compare each delta spec with its corresponding main spec at \`
|
|
171
|
+
- Compare each delta spec with its corresponding main spec at \`legacy-spec/specs/<capability>/spec.md\`
|
|
172
172
|
- Determine what changes would be applied (adds, modifications, removals, renames)
|
|
173
173
|
- Show a combined summary before prompting
|
|
174
174
|
|
|
@@ -176,13 +176,13 @@ export function getOpsxArchiveCommandTemplate() {
|
|
|
176
176
|
- If changes needed: "Sync now (recommended)", "Archive without syncing"
|
|
177
177
|
- If already synced: "Archive now", "Sync anyway", "Cancel"
|
|
178
178
|
|
|
179
|
-
If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke
|
|
179
|
+
If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke codesdd-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.
|
|
180
180
|
|
|
181
181
|
5. **Perform the archive**
|
|
182
182
|
|
|
183
183
|
Create the archive directory if it doesn't exist:
|
|
184
184
|
\`\`\`bash
|
|
185
|
-
mkdir -p
|
|
185
|
+
mkdir -p legacy-spec/changes/archive
|
|
186
186
|
\`\`\`
|
|
187
187
|
|
|
188
188
|
Generate target name using current date: \`YYYY-MM-DD-<change-name>\`
|
|
@@ -192,7 +192,7 @@ export function getOpsxArchiveCommandTemplate() {
|
|
|
192
192
|
- If no: Move the change directory to archive
|
|
193
193
|
|
|
194
194
|
\`\`\`bash
|
|
195
|
-
mv
|
|
195
|
+
mv legacy-spec/changes/<name> legacy-spec/changes/archive/YYYY-MM-DD-<name>
|
|
196
196
|
\`\`\`
|
|
197
197
|
|
|
198
198
|
6. **Display summary**
|
|
@@ -211,7 +211,7 @@ export function getOpsxArchiveCommandTemplate() {
|
|
|
211
211
|
|
|
212
212
|
**Change:** <change-name>
|
|
213
213
|
**Schema:** <schema-name>
|
|
214
|
-
**Archived to:**
|
|
214
|
+
**Archived to:** legacy-spec/changes/archive/YYYY-MM-DD-<name>/
|
|
215
215
|
**Specs:** ✓ Synced to main specs
|
|
216
216
|
|
|
217
217
|
All artifacts complete. All tasks complete.
|
|
@@ -224,7 +224,7 @@ All artifacts complete. All tasks complete.
|
|
|
224
224
|
|
|
225
225
|
**Change:** <change-name>
|
|
226
226
|
**Schema:** <schema-name>
|
|
227
|
-
**Archived to:**
|
|
227
|
+
**Archived to:** legacy-spec/changes/archive/YYYY-MM-DD-<name>/
|
|
228
228
|
**Specs:** No delta specs
|
|
229
229
|
|
|
230
230
|
All artifacts complete. All tasks complete.
|
|
@@ -237,7 +237,7 @@ All artifacts complete. All tasks complete.
|
|
|
237
237
|
|
|
238
238
|
**Change:** <change-name>
|
|
239
239
|
**Schema:** <schema-name>
|
|
240
|
-
**Archived to:**
|
|
240
|
+
**Archived to:** legacy-spec/changes/archive/YYYY-MM-DD-<name>/
|
|
241
241
|
**Specs:** Sync skipped (user chose to skip)
|
|
242
242
|
|
|
243
243
|
**Warnings:**
|
|
@@ -254,7 +254,7 @@ Review the archive if this was not intentional.
|
|
|
254
254
|
## Archive Failed
|
|
255
255
|
|
|
256
256
|
**Change:** <change-name>
|
|
257
|
-
**Target:**
|
|
257
|
+
**Target:** legacy-spec/changes/archive/YYYY-MM-DD-<name>/
|
|
258
258
|
|
|
259
259
|
Target archive directory already exists.
|
|
260
260
|
|
|
@@ -266,11 +266,11 @@ Target archive directory already exists.
|
|
|
266
266
|
|
|
267
267
|
**Guardrails**
|
|
268
268
|
- Always prompt for change selection if not provided
|
|
269
|
-
- Use artifact graph (
|
|
269
|
+
- Use artifact graph (codesdd status --json) for completion checking
|
|
270
270
|
- Don't block archive on warnings - just inform and confirm
|
|
271
|
-
- Preserve .
|
|
271
|
+
- Preserve .sdd.yaml when moving to archive (it moves with the directory)
|
|
272
272
|
- Show clear summary of what happened
|
|
273
|
-
- If sync is requested, use the Skill tool to invoke \`
|
|
273
|
+
- If sync is requested, use the Skill tool to invoke \`codesdd-sync-specs\` (agent-driven)
|
|
274
274
|
- If delta specs exist, always run the sync assessment and show the combined summary before prompting`
|
|
275
275
|
};
|
|
276
276
|
}
|