@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
package/dist/core/sdd/lenses.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { parseGovernanceFile } from './governance-parser.js';
|
|
2
|
+
import { adrFrontmatterSchema, debateFrontmatterSchema, epicFrontmatterSchema, insightFrontmatterSchema, } from './governance-schemas.js';
|
|
1
3
|
export const LENSES = {
|
|
2
4
|
insight: {
|
|
3
5
|
artifact_type: 'INS',
|
|
4
6
|
name: 'Insight Lens',
|
|
5
7
|
required_sections: ['## Title', '## Description'],
|
|
8
|
+
frontmatter_optional_sections: ['## Title'],
|
|
6
9
|
section_rules: {
|
|
7
10
|
'## Description': { min_length: 100 },
|
|
8
11
|
},
|
|
@@ -23,12 +26,14 @@ export const LENSES = {
|
|
|
23
26
|
'## 8) Quality Contract (Required)',
|
|
24
27
|
'## 9) Output',
|
|
25
28
|
],
|
|
29
|
+
frontmatter_optional_sections: ['- Choice (A/B/C):'],
|
|
26
30
|
forbidden_phrases: ['(fill in', 'Describe the result'],
|
|
27
31
|
},
|
|
28
32
|
epic: {
|
|
29
33
|
artifact_type: 'EPIC',
|
|
30
34
|
name: 'Epic Lens',
|
|
31
35
|
required_sections: ['## Origin', '## Approved Summary', '## Status'],
|
|
36
|
+
frontmatter_optional_sections: ['## Origin', '## Status'],
|
|
32
37
|
forbidden_phrases: ['(fill in approved summary)'],
|
|
33
38
|
},
|
|
34
39
|
adr: {
|
|
@@ -61,8 +66,31 @@ function extractFromLines(lines, startIndex) {
|
|
|
61
66
|
return contentLines.join('\n').trim();
|
|
62
67
|
}
|
|
63
68
|
export function validateDocumentAgainstLens(content, lens) {
|
|
64
|
-
const
|
|
69
|
+
const hasFrontmatter = /^---\r?\n[\s\S]*?\r?\n---\r?\n/.test(content);
|
|
70
|
+
const effectiveSections = hasFrontmatter && lens.frontmatter_optional_sections
|
|
71
|
+
? lens.required_sections.filter((section) => !lens.frontmatter_optional_sections?.includes(section))
|
|
72
|
+
: lens.required_sections;
|
|
73
|
+
const missing = effectiveSections.filter((section) => !content.includes(section));
|
|
65
74
|
const violations = [...missing];
|
|
75
|
+
if (hasFrontmatter) {
|
|
76
|
+
try {
|
|
77
|
+
if (lens.artifact_type === 'INS') {
|
|
78
|
+
parseGovernanceFile('lens-inline-content', content, insightFrontmatterSchema);
|
|
79
|
+
}
|
|
80
|
+
else if (lens.artifact_type === 'DEB') {
|
|
81
|
+
parseGovernanceFile('lens-inline-content', content, debateFrontmatterSchema);
|
|
82
|
+
}
|
|
83
|
+
else if (lens.artifact_type === 'EPIC') {
|
|
84
|
+
parseGovernanceFile('lens-inline-content', content, epicFrontmatterSchema);
|
|
85
|
+
}
|
|
86
|
+
else if (lens.artifact_type === 'ADR') {
|
|
87
|
+
parseGovernanceFile('lens-inline-content', content, adrFrontmatterSchema);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
violations.push(error instanceof Error ? error.message : String(error));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
66
94
|
if (lens.forbidden_phrases) {
|
|
67
95
|
for (const phrase of lens.forbidden_phrases) {
|
|
68
96
|
if (content.includes(phrase)) {
|
|
@@ -2,6 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import { existsSync, promises as fs } from 'node:fs';
|
|
3
3
|
import { stringify as stringifyYaml } from 'yaml';
|
|
4
4
|
import { loadProjectSddConfig, resolveSddPaths } from './state.js';
|
|
5
|
+
import { normalizeFeatRef } from './entity-reference.js';
|
|
5
6
|
import { workspaceChangelogSchema, workspacePlanSchema, workspaceQualitySchema, workspaceSpecSchema, workspaceTasksSchema, } from './workspace-schemas.js';
|
|
6
7
|
const MIGRATION_MARKER = '# MIGRATION: field required but source had no content';
|
|
7
8
|
const CANONICAL_DOCS = [
|
|
@@ -18,9 +19,10 @@ const CANONICAL_DOCS = [
|
|
|
18
19
|
export async function findMarkdownWorkspaceFiles(projectRoot, feat) {
|
|
19
20
|
const config = await loadProjectSddConfig(projectRoot);
|
|
20
21
|
const paths = resolveSddPaths(projectRoot, config);
|
|
22
|
+
const featFilter = feat ? normalizeFeatRef(feat) ?? feat.trim() : undefined;
|
|
21
23
|
const files = [];
|
|
22
24
|
for (const root of [paths.plannedDir, paths.activeDir, paths.archivedDir]) {
|
|
23
|
-
for (const workspace of await listFeatureWorkspaces(root,
|
|
25
|
+
for (const workspace of await listFeatureWorkspaces(root, featFilter)) {
|
|
24
26
|
const entries = await fs.readdir(workspace.path, { withFileTypes: true }).catch(() => []);
|
|
25
27
|
for (const entry of entries) {
|
|
26
28
|
if (!entry.isFile() || path.extname(entry.name) !== '.md')
|
|
@@ -38,13 +40,14 @@ export class MigrateWorkspaceCommand {
|
|
|
38
40
|
const config = await loadProjectSddConfig(projectRoot);
|
|
39
41
|
const paths = resolveSddPaths(projectRoot, config);
|
|
40
42
|
const dryRun = Boolean(options?.dryRun);
|
|
43
|
+
const featFilter = options?.feat ? normalizeFeatRef(options.feat) ?? options.feat.trim() : undefined;
|
|
41
44
|
const features = [];
|
|
42
45
|
for (const [rootName, rootPath] of [
|
|
43
46
|
['planned', paths.plannedDir],
|
|
44
47
|
['active', paths.activeDir],
|
|
45
48
|
['archived', paths.archivedDir],
|
|
46
49
|
]) {
|
|
47
|
-
for (const workspace of await listFeatureWorkspaces(rootPath,
|
|
50
|
+
for (const workspace of await listFeatureWorkspaces(rootPath, featFilter)) {
|
|
48
51
|
const fileResults = [];
|
|
49
52
|
const entries = await fs.readdir(workspace.path, { withFileTypes: true }).catch(() => []);
|
|
50
53
|
for (const entry of entries) {
|
|
@@ -272,6 +275,7 @@ function migrateQuality(featureId, parsed) {
|
|
|
272
275
|
})),
|
|
273
276
|
skill_evidence: {
|
|
274
277
|
required_skill_ids: [],
|
|
278
|
+
policy_requirements: [],
|
|
275
279
|
evidence: [],
|
|
276
280
|
verification_rule: 'No skill evidence required for migrated legacy workspaces.',
|
|
277
281
|
},
|
|
@@ -282,6 +286,15 @@ function migrateQuality(featureId, parsed) {
|
|
|
282
286
|
evidence: evidence.join('; ') || `${MIGRATION_MARKER}: quality evidence`,
|
|
283
287
|
},
|
|
284
288
|
],
|
|
289
|
+
requirement_validation_evidence_risk_matrix: [
|
|
290
|
+
{
|
|
291
|
+
requirement_ref: `${featureId}-MIG-R1`,
|
|
292
|
+
validation_refs: ['Migrated validation'],
|
|
293
|
+
evidence_refs: evidence.length > 0 ? evidence : [`${MIGRATION_MARKER}: quality evidence`],
|
|
294
|
+
residual_risk: 'Residual risk migrated from legacy workspace and requires follow-up review.',
|
|
295
|
+
risk_status: 'open',
|
|
296
|
+
},
|
|
297
|
+
],
|
|
285
298
|
exceptions: [],
|
|
286
299
|
remediation_policy: { on_coverage_miss: 'block', max_rounds: 3 },
|
|
287
300
|
traceability: {
|
|
@@ -291,6 +304,47 @@ function migrateQuality(featureId, parsed) {
|
|
|
291
304
|
},
|
|
292
305
|
requirements: [],
|
|
293
306
|
},
|
|
307
|
+
q95_ledger: {
|
|
308
|
+
threshold: 95,
|
|
309
|
+
score: 0,
|
|
310
|
+
status: 'pending',
|
|
311
|
+
computed_at: '',
|
|
312
|
+
weights: {
|
|
313
|
+
coverage: 30,
|
|
314
|
+
traceability: 20,
|
|
315
|
+
integrity: 20,
|
|
316
|
+
naming: 10,
|
|
317
|
+
token: 20,
|
|
318
|
+
},
|
|
319
|
+
axes: {
|
|
320
|
+
coverage: {
|
|
321
|
+
raw_score: 0,
|
|
322
|
+
weighted_score: 0,
|
|
323
|
+
rationale: 'Computed during finalize.',
|
|
324
|
+
},
|
|
325
|
+
traceability: {
|
|
326
|
+
raw_score: 0,
|
|
327
|
+
weighted_score: 0,
|
|
328
|
+
rationale: 'Computed during finalize.',
|
|
329
|
+
},
|
|
330
|
+
integrity: {
|
|
331
|
+
raw_score: 0,
|
|
332
|
+
weighted_score: 0,
|
|
333
|
+
rationale: 'Computed during finalize.',
|
|
334
|
+
},
|
|
335
|
+
naming: {
|
|
336
|
+
raw_score: 0,
|
|
337
|
+
weighted_score: 0,
|
|
338
|
+
rationale: 'Computed during finalize.',
|
|
339
|
+
},
|
|
340
|
+
token: {
|
|
341
|
+
raw_score: 0,
|
|
342
|
+
weighted_score: 0,
|
|
343
|
+
rationale: 'Computed during finalize.',
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
next_best_action: 'Record missing evidence to raise the lowest weighted axis.',
|
|
347
|
+
},
|
|
294
348
|
};
|
|
295
349
|
return withValidation('5-quality.yaml', doc, missing, workspaceQualitySchema);
|
|
296
350
|
}
|
package/dist/core/sdd/migrate.js
CHANGED
|
@@ -2,10 +2,11 @@ import path from 'node:path';
|
|
|
2
2
|
import { promises as fs } from 'node:fs';
|
|
3
3
|
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
4
4
|
import { CLI_NAME, } from '../branding.js';
|
|
5
|
+
import { CURRENT_SDD_STATE_VERSION, buildSddContractConfig, sddContractMismatchReasons, } from './contract.js';
|
|
5
6
|
import { findMarkdownWorkspaceFiles, MigrateWorkspaceCommand } from './migrate-workspace.js';
|
|
6
7
|
import { loadProjectSddConfig, loadStateSnapshot, resolveSddPaths, saveBacklogState, saveDiscoveryIndexState, saveFinalizeQueueState, saveFrontendDecisionsState, saveFrontendGapsState, saveFrontendMapState, saveIntegrationContractsState, saveRepoMapState, saveServiceCatalogState, saveSourceIndexState, saveTechDebtState, saveTechStackState, saveUnblockEventsState, } from './state.js';
|
|
7
8
|
import { runLifecycleHooks } from './domain/lifecycle-hooks.js';
|
|
8
|
-
export
|
|
9
|
+
export { CURRENT_SDD_STATE_VERSION } from './contract.js';
|
|
9
10
|
const ID_PREFIXES = new Set(['INS', 'DEB', 'RAD', 'EPIC', 'FEAT', 'FGAP', 'TD', 'SRC']);
|
|
10
11
|
const REFERENCE_LIKE_VALUE = /\b(?:INS|DEB|RAD|EPIC|FEAT|FGAP|TD|SRC)-\d+\b/;
|
|
11
12
|
const MIGRATABLE_FILE_EXTENSIONS = new Set(['.md', '.yaml', '.yml', '.txt']);
|
|
@@ -83,6 +84,21 @@ async function readStateConfigVersion(configPath) {
|
|
|
83
84
|
return 1;
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
async function readStateConfig(configPath) {
|
|
88
|
+
try {
|
|
89
|
+
const parsed = parseYaml(await fs.readFile(configPath, 'utf-8'));
|
|
90
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const LEGACY_GENERATED_BY_PREFIXES = [`${'open'}sdd`, `${'open'}spec`];
|
|
97
|
+
function isLegacyGeneratedBy(value) {
|
|
98
|
+
if (typeof value !== 'string')
|
|
99
|
+
return false;
|
|
100
|
+
return LEGACY_GENERATED_BY_PREFIXES.some((prefix) => new RegExp(`^${prefix}\\s`, 'i').test(value));
|
|
101
|
+
}
|
|
86
102
|
async function writeStateConfigVersion(configPath) {
|
|
87
103
|
let payload = {};
|
|
88
104
|
try {
|
|
@@ -95,8 +111,12 @@ async function writeStateConfigVersion(configPath) {
|
|
|
95
111
|
payload = {};
|
|
96
112
|
}
|
|
97
113
|
payload.version = 1;
|
|
98
|
-
payload.generatedBy =
|
|
114
|
+
payload.generatedBy =
|
|
115
|
+
typeof payload.generatedBy === 'string' && !isLegacyGeneratedBy(payload.generatedBy)
|
|
116
|
+
? payload.generatedBy
|
|
117
|
+
: `${CLI_NAME} sdd migrate`;
|
|
99
118
|
payload.state_version = CURRENT_SDD_STATE_VERSION;
|
|
119
|
+
payload.sdd_contract = buildSddContractConfig();
|
|
100
120
|
payload.last_migrated_at = new Date().toISOString();
|
|
101
121
|
await fs.writeFile(configPath, stringifyYaml(payload), 'utf-8');
|
|
102
122
|
}
|
|
@@ -199,6 +219,7 @@ export async function assessSddMigration(projectRoot) {
|
|
|
199
219
|
const paths = resolveSddPaths(projectRoot, config);
|
|
200
220
|
const snapshot = await loadStateSnapshot(paths, config);
|
|
201
221
|
const currentVersion = await readStateConfigVersion(paths.configFile);
|
|
222
|
+
const rawConfig = await readStateConfig(paths.configFile);
|
|
202
223
|
const conversions = new Map();
|
|
203
224
|
collectReferenceConversions(snapshot.discoveryIndex, conversions);
|
|
204
225
|
collectReferenceConversions(snapshot.backlog, conversions);
|
|
@@ -223,6 +244,16 @@ export async function assessSddMigration(projectRoot) {
|
|
|
223
244
|
if (currentVersion < CURRENT_SDD_STATE_VERSION) {
|
|
224
245
|
reasons.push(`state_version=${currentVersion} esta abaixo da versao requerida ${CURRENT_SDD_STATE_VERSION}`);
|
|
225
246
|
}
|
|
247
|
+
if (currentVersion > CURRENT_SDD_STATE_VERSION) {
|
|
248
|
+
reasons.push(`state_version=${currentVersion} esta acima da versao suportada ${CURRENT_SDD_STATE_VERSION}`);
|
|
249
|
+
}
|
|
250
|
+
const contractReasons = sddContractMismatchReasons(rawConfig.sdd_contract);
|
|
251
|
+
if (contractReasons.length > 0) {
|
|
252
|
+
reasons.push(`sdd_contract desalinhado: ${contractReasons.join(', ')}`);
|
|
253
|
+
}
|
|
254
|
+
if (isLegacyGeneratedBy(rawConfig.generatedBy)) {
|
|
255
|
+
reasons.push('generatedBy ainda usa identidade legacy pre-CodeSDD');
|
|
256
|
+
}
|
|
226
257
|
if (legacyRecords.length > 0) {
|
|
227
258
|
reasons.push(`registros legacy detectados: ${legacyRecords.join(', ')}`);
|
|
228
259
|
}
|
|
@@ -260,6 +291,9 @@ export class SddMigrateCommand {
|
|
|
260
291
|
messages.push(`Estado SDD ja esta na versao ${assessment.targetVersion}. Nenhuma migracao necessaria.`);
|
|
261
292
|
return { converted: 0, messages, assessment };
|
|
262
293
|
}
|
|
294
|
+
if (assessment.currentVersion > assessment.targetVersion) {
|
|
295
|
+
throw new Error(`Estado SDD state_version=${assessment.currentVersion} esta acima da versao suportada ${assessment.targetVersion}. Atualize o CodeSDD antes de executar migracao ou comandos SDD.`);
|
|
296
|
+
}
|
|
263
297
|
if (options?.radToEpic === false) {
|
|
264
298
|
throw new Error('Migracao SDD mandatória nao pode ser desabilitada.');
|
|
265
299
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const DerivationProfileSchema: z.ZodEnum<{
|
|
3
|
+
prototype: "prototype";
|
|
4
|
+
"foundation-compatible": "foundation-compatible";
|
|
5
|
+
"enterprise-strict": "enterprise-strict";
|
|
6
|
+
}>;
|
|
7
|
+
export declare const PreviewGateStatusSchema: z.ZodEnum<{
|
|
8
|
+
pending: "pending";
|
|
9
|
+
approved: "approved";
|
|
10
|
+
corrected: "corrected";
|
|
11
|
+
rejected: "rejected";
|
|
12
|
+
}>;
|
|
13
|
+
export declare const PackageStructureNodeKindSchema: z.ZodEnum<{
|
|
14
|
+
file: "file";
|
|
15
|
+
dir: "dir";
|
|
16
|
+
}>;
|
|
17
|
+
export declare const PackageStructureNodeSchema: z.ZodSchema<PackageStructureNode>;
|
|
18
|
+
export declare const PackageStructurePreviewSchema: z.ZodObject<{
|
|
19
|
+
schema_version: z.ZodLiteral<1>;
|
|
20
|
+
generated_at: z.ZodString;
|
|
21
|
+
project_name: z.ZodString;
|
|
22
|
+
profile: z.ZodEnum<{
|
|
23
|
+
prototype: "prototype";
|
|
24
|
+
"foundation-compatible": "foundation-compatible";
|
|
25
|
+
"enterprise-strict": "enterprise-strict";
|
|
26
|
+
}>;
|
|
27
|
+
contexts: z.ZodArray<z.ZodString>;
|
|
28
|
+
subsystems: z.ZodArray<z.ZodString>;
|
|
29
|
+
transports: z.ZodArray<z.ZodString>;
|
|
30
|
+
tree: z.ZodType<PackageStructureNode, unknown, z.core.$ZodTypeInternals<PackageStructureNode, unknown>>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export declare const HumanValidationGateSchema: z.ZodObject<{
|
|
33
|
+
gate_id: z.ZodString;
|
|
34
|
+
rule_ref: z.ZodLiteral<"DTAPI-P0-PREVIEW-001">;
|
|
35
|
+
status: z.ZodEnum<{
|
|
36
|
+
pending: "pending";
|
|
37
|
+
approved: "approved";
|
|
38
|
+
corrected: "corrected";
|
|
39
|
+
rejected: "rejected";
|
|
40
|
+
}>;
|
|
41
|
+
preview_ref: z.ZodString;
|
|
42
|
+
approved_at: z.ZodOptional<z.ZodString>;
|
|
43
|
+
approved_by: z.ZodOptional<z.ZodString>;
|
|
44
|
+
correction_notes: z.ZodOptional<z.ZodString>;
|
|
45
|
+
exception_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
export interface HumanValidationGateData {
|
|
48
|
+
selected_profile: z.infer<typeof DerivationProfileSchema>;
|
|
49
|
+
package_preview: z.infer<typeof PackageStructurePreviewSchema>;
|
|
50
|
+
human_validation_gate: z.infer<typeof HumanValidationGateSchema>;
|
|
51
|
+
exception_list: Array<{
|
|
52
|
+
adr_ref: string;
|
|
53
|
+
reason: string;
|
|
54
|
+
severity: string;
|
|
55
|
+
}>;
|
|
56
|
+
policy_pool_seed: string[];
|
|
57
|
+
}
|
|
58
|
+
export interface DebGateInput {
|
|
59
|
+
project_name: string;
|
|
60
|
+
profile?: z.infer<typeof DerivationProfileSchema>;
|
|
61
|
+
contexts?: string[];
|
|
62
|
+
subsystems?: string[];
|
|
63
|
+
transports?: string[];
|
|
64
|
+
generated_at?: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function generatePackageStructurePreview(input: DebGateInput): z.infer<typeof PackageStructurePreviewSchema>;
|
|
67
|
+
export declare function formatPreviewAsTree(node: z.infer<typeof PackageStructureNodeSchema>, prefix?: string): string;
|
|
68
|
+
export declare function buildHumanValidationGate(preview: z.infer<typeof PackageStructurePreviewSchema>): z.infer<typeof HumanValidationGateSchema>;
|
|
69
|
+
export declare function generateDevtrackApiDebGate(input: DebGateInput): HumanValidationGateData;
|
|
70
|
+
export declare function isGatePending(gate: z.infer<typeof HumanValidationGateSchema>): boolean;
|
|
71
|
+
export declare function isGateApproved(gate: z.infer<typeof HumanValidationGateSchema>): boolean;
|
|
72
|
+
export type DerivationProfile = z.infer<typeof DerivationProfileSchema>;
|
|
73
|
+
export type PreviewGateStatus = z.infer<typeof PreviewGateStatusSchema>;
|
|
74
|
+
export type PackageStructureNodeKind = z.infer<typeof PackageStructureNodeKindSchema>;
|
|
75
|
+
export type PackageStructureNode = {
|
|
76
|
+
name: string;
|
|
77
|
+
kind: PackageStructureNodeKind;
|
|
78
|
+
description?: string;
|
|
79
|
+
children?: PackageStructureNode[];
|
|
80
|
+
};
|
|
81
|
+
export type PackageStructurePreview = z.infer<typeof PackageStructurePreviewSchema>;
|
|
82
|
+
export type HumanValidationGate = z.infer<typeof HumanValidationGateSchema>;
|
|
83
|
+
//# sourceMappingURL=package-structure-gate.d.ts.map
|