@devtrack-solution/codesdd 1.2.3 → 1.2.4
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/devtrack-api/SKILL.md +98 -12
- package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +5 -3
- package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +12 -0
- package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +61 -5
- package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +15 -3
- package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +1951 -0
- package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +16 -14
- package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +40 -0
- package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +19 -2
- package/.sdd/skills/curated/devtrack-api/references/generated-artifact-invalidation.md +97 -0
- package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +30 -1
- package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +42 -0
- package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +22 -1
- package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +9 -7
- package/README.md +280 -29
- package/dist/applications/sdd/index.d.ts +16 -0
- package/dist/applications/sdd/index.js +16 -0
- package/dist/cli/program.js +180 -11
- package/dist/commands/config.js +197 -10
- package/dist/commands/sdd/execution.js +408 -16
- package/dist/commands/sdd/plugin.js +5 -0
- package/dist/commands/sdd/shared.d.ts +1 -0
- package/dist/commands/sdd/shared.js +10 -0
- package/dist/commands/sdd.js +157 -7
- package/dist/core/cli/command-matrix.d.ts +18 -0
- package/dist/core/cli/command-matrix.js +157 -0
- package/dist/core/cli-command-quality.js +11 -0
- package/dist/core/completions/command-registry.js +45 -0
- package/dist/core/config-schema.d.ts +31 -1
- package/dist/core/config-schema.js +79 -5
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.js +11 -0
- package/dist/core/global-config.d.ts +29 -0
- package/dist/core/init.d.ts +2 -2
- package/dist/core/init.js +13 -14
- package/dist/core/sdd/agent-binding.d.ts +19 -19
- 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/allocator-recovery.d.ts +14 -0
- package/dist/core/sdd/allocator-recovery.js +30 -0
- package/dist/core/sdd/allocator-security.d.ts +18 -0
- package/dist/core/sdd/allocator-security.js +36 -0
- package/dist/core/sdd/api-foundation-baseline.d.ts +111 -0
- package/dist/core/sdd/api-foundation-baseline.js +151 -0
- package/dist/core/sdd/api-foundation-parity.d.ts +114 -0
- package/dist/core/sdd/api-foundation-parity.js +131 -0
- package/dist/core/sdd/api-profile-catalog.d.ts +36 -0
- package/dist/core/sdd/api-profile-catalog.js +132 -0
- package/dist/core/sdd/api-profile-dry-run-projection.d.ts +93 -0
- package/dist/core/sdd/api-profile-dry-run-projection.js +370 -0
- package/dist/core/sdd/api-profile-recipes.d.ts +82 -0
- package/dist/core/sdd/api-profile-recipes.js +484 -0
- package/dist/core/sdd/artifact-id-allocator.d.ts +368 -0
- package/dist/core/sdd/artifact-id-allocator.js +510 -0
- package/dist/core/sdd/check.d.ts +52 -1
- package/dist/core/sdd/check.js +326 -11
- package/dist/core/sdd/coordination/coordination-adapters.d.ts +15 -8
- package/dist/core/sdd/coordination/coordination-adapters.js +43 -15
- 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 +99 -5
- package/dist/core/sdd/deepagent-contracts.js +62 -0
- package/dist/core/sdd/deepagents/reversa-subagents.d.ts +3 -3
- package/dist/core/sdd/default-bootstrap-files.d.ts +2 -2
- package/dist/core/sdd/default-bootstrap-files.js +14 -10
- package/dist/core/sdd/default-skills.js +115 -9
- package/dist/core/sdd/devtrack-api-appliance.d.ts +42 -1
- package/dist/core/sdd/devtrack-api-appliance.js +159 -32
- package/dist/core/sdd/devtrack-api-architecture.d.ts +16 -0
- package/dist/core/sdd/devtrack-api-architecture.js +86 -0
- package/dist/core/sdd/docs-sync.js +24 -18
- 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/semantic-intent-classifier.d.ts +29 -0
- package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
- package/dist/core/sdd/enterprise-mutating-command-gate.d.ts +27 -0
- package/dist/core/sdd/enterprise-mutating-command-gate.js +104 -0
- package/dist/core/sdd/enterprise-provenance-gates.d.ts +20 -0
- package/dist/core/sdd/enterprise-provenance-gates.js +63 -0
- package/dist/core/sdd/enterprise-provisioning-policy.d.ts +26 -0
- package/dist/core/sdd/enterprise-provisioning-policy.js +104 -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-schemas.d.ts +2 -2
- package/dist/core/sdd/governance-schemas.js +11 -2
- 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 +13 -1
- package/dist/core/sdd/legacy-operations.js +169 -5
- package/dist/core/sdd/migrate-workspace.js +39 -0
- package/dist/core/sdd/package-security-gates.d.ts +21 -0
- package/dist/core/sdd/package-security-gates.js +121 -0
- package/dist/core/sdd/package-structure-gate.d.ts +85 -3
- package/dist/core/sdd/package-structure-gate.js +384 -11
- package/dist/core/sdd/parallel-feat-automation.d.ts +185 -7
- package/dist/core/sdd/parallel-feat-automation.js +212 -0
- package/dist/core/sdd/plugin-broker.d.ts +223 -4
- package/dist/core/sdd/plugin-broker.js +10 -0
- package/dist/core/sdd/plugin-cli.d.ts +30 -0
- package/dist/core/sdd/plugin-cli.js +70 -3
- package/dist/core/sdd/plugin-evidence.d.ts +73 -0
- package/dist/core/sdd/plugin-manifest.d.ts +69 -1
- package/dist/core/sdd/plugin-manifest.js +10 -0
- package/dist/core/sdd/plugin-policy-pack.d.ts +1 -1
- package/dist/core/sdd/plugin-policy.js +6 -1
- package/dist/core/sdd/plugin-registry.d.ts +138 -2
- 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 +1 -1
- package/dist/core/sdd/quality-validation.d.ts +89 -16
- package/dist/core/sdd/release-readiness.d.ts +68 -0
- package/dist/core/sdd/release-readiness.js +767 -0
- package/dist/core/sdd/reversa-architecture-extractor.d.ts +13 -0
- package/dist/core/sdd/reversa-architecture-extractor.js +89 -0
- package/dist/core/sdd/reversa-artifact-writer.d.ts +18 -0
- package/dist/core/sdd/reversa-artifact-writer.js +40 -0
- package/dist/core/sdd/reversa-command-policy.d.ts +136 -0
- package/dist/core/sdd/reversa-command-policy.js +361 -0
- package/dist/core/sdd/reversa-data-extractor.d.ts +11 -0
- package/dist/core/sdd/reversa-data-extractor.js +73 -0
- package/dist/core/sdd/reversa-equivalence.d.ts +20 -0
- package/dist/core/sdd/reversa-equivalence.js +34 -0
- package/dist/core/sdd/reversa-evidence.d.ts +298 -0
- package/dist/core/sdd/reversa-evidence.js +118 -0
- package/dist/core/sdd/reversa-reconstruction.d.ts +29 -0
- package/dist/core/sdd/reversa-reconstruction.js +32 -0
- package/dist/core/sdd/reversa-rules-extractor.d.ts +12 -0
- package/dist/core/sdd/reversa-rules-extractor.js +86 -0
- package/dist/core/sdd/reversa-source-safety.d.ts +19 -0
- package/dist/core/sdd/reversa-source-safety.js +105 -0
- package/dist/core/sdd/reversa-surface-scout.d.ts +13 -0
- package/dist/core/sdd/reversa-surface-scout.js +85 -0
- package/dist/core/sdd/reversa-ux-mapper.d.ts +11 -0
- package/dist/core/sdd/reversa-ux-mapper.js +73 -0
- 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/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 +38 -6
- package/dist/core/sdd/services/agent-run.service.js +73 -1
- package/dist/core/sdd/services/archive-quality-coherence.service.d.ts +17 -0
- package/dist/core/sdd/services/archive-quality-coherence.service.js +141 -0
- 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 +323 -9
- package/dist/core/sdd/services/decide.service.js +1 -1
- package/dist/core/sdd/services/finalize.service.d.ts +27 -0
- package/dist/core/sdd/services/finalize.service.js +226 -18
- package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
- package/dist/core/sdd/services/historical-quality-regression.service.d.ts +35 -0
- package/dist/core/sdd/services/historical-quality-regression.service.js +228 -0
- package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
- package/dist/core/sdd/services/planning-execution-coherence.service.d.ts +45 -0
- package/dist/core/sdd/services/planning-execution-coherence.service.js +225 -0
- 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/state.d.ts +1 -0
- package/dist/core/sdd/state.js +266 -34
- package/dist/core/sdd/store/sdd-stores.js +2 -2
- package/dist/core/sdd/structural-health.d.ts +13 -13
- package/dist/core/sdd/types.d.ts +30 -15
- package/dist/core/sdd/types.js +4 -0
- package/dist/core/sdd/views.js +17 -0
- package/dist/core/sdd/workspace-schemas.d.ts +428 -7
- package/dist/core/sdd/workspace-schemas.js +223 -70
- package/dist/core/shared/skill-generation.d.ts +2 -0
- package/dist/core/shared/skill-generation.js +19 -2
- package/dist/core/shared/tool-detection.d.ts +19 -0
- package/dist/core/shared/tool-detection.js +89 -0
- 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/package.json +14 -10
- package/schemas/sdd/2-plan.schema.json +207 -2
- package/schemas/sdd/5-quality.schema.json +324 -25
- 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/codesdd-plugin.schema.json +171 -0
- package/schemas/sdd/deepagent-run-request.schema.json +316 -0
- package/schemas/sdd/parallel-feat-automation-plan.schema.json +89 -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 +109 -0
- package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
- package/schemas/sdd/plugin-evidence-manifest.schema.json +109 -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-registry.schema.json +171 -0
- package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +109 -0
- package/schemas/sdd/quality-evidence-bundle.schema.json +109 -0
- package/schemas/sdd/reversa-evidence-bundle.schema.json +466 -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 +5298 -1409
|
@@ -20,6 +20,65 @@ export const workspacePolicyInjectionSchema = z.object({
|
|
|
20
20
|
generated_from: z.literal('recommended_skills'),
|
|
21
21
|
required_policies: z.array(workspacePolicyRequirementSchema).default([]),
|
|
22
22
|
});
|
|
23
|
+
const workspacePercentSchema = z.number().min(0).max(100);
|
|
24
|
+
export const workspaceValidationGateSchema = z.object({
|
|
25
|
+
name: z.string().min(1),
|
|
26
|
+
command: z.string().min(1),
|
|
27
|
+
expected: z.string().min(1),
|
|
28
|
+
});
|
|
29
|
+
export const workspaceExecutionStepSchema = z.object({
|
|
30
|
+
name: z.string().min(1),
|
|
31
|
+
command: z.string().min(1),
|
|
32
|
+
writes_state: z.boolean().default(false),
|
|
33
|
+
expected_state_writes: z.array(z.string().min(1)).default([]),
|
|
34
|
+
});
|
|
35
|
+
export const workspacePlanExecutionSchema = z
|
|
36
|
+
.object({
|
|
37
|
+
mode: z.enum(['single-feature', 'parallel-wave', 'chained-features']).default('single-feature'),
|
|
38
|
+
state_boundary_ref: z.literal('codesdd-canonical-sdd-state').default('codesdd-canonical-sdd-state'),
|
|
39
|
+
command_sequence: z.array(workspaceExecutionStepSchema).min(1),
|
|
40
|
+
allowed_state_writes: z.array(z.string().min(1)).default([]),
|
|
41
|
+
forbidden_state_writes: z.array(z.string().min(1)).default(['.codesdd/**', 'external-context/**']),
|
|
42
|
+
handoff_artifacts: z.array(z.string().min(1)).default([]),
|
|
43
|
+
})
|
|
44
|
+
.default({
|
|
45
|
+
mode: 'single-feature',
|
|
46
|
+
state_boundary_ref: 'codesdd-canonical-sdd-state',
|
|
47
|
+
command_sequence: [
|
|
48
|
+
{
|
|
49
|
+
name: 'SDD check',
|
|
50
|
+
command: 'codesdd sdd check --render',
|
|
51
|
+
writes_state: false,
|
|
52
|
+
expected_state_writes: [],
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
allowed_state_writes: [],
|
|
56
|
+
forbidden_state_writes: ['.codesdd/**', 'external-context/**'],
|
|
57
|
+
handoff_artifacts: [],
|
|
58
|
+
});
|
|
59
|
+
export const workspacePlanGovernanceSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
state_boundary: z.literal('codesdd-canonical-sdd-state').default('codesdd-canonical-sdd-state'),
|
|
62
|
+
planning_artifacts: z.array(z.string().min(1)).min(1),
|
|
63
|
+
decision_refs: z.array(z.string().min(1)).default([]),
|
|
64
|
+
planned_state_writes: z.array(z.string().min(1)).default([]),
|
|
65
|
+
rollback_plan: z.string().min(20),
|
|
66
|
+
validation_gates: z.array(workspaceValidationGateSchema).min(1),
|
|
67
|
+
})
|
|
68
|
+
.default({
|
|
69
|
+
state_boundary: 'codesdd-canonical-sdd-state',
|
|
70
|
+
planning_artifacts: ['.sdd/state/backlog.yaml'],
|
|
71
|
+
decision_refs: [],
|
|
72
|
+
planned_state_writes: [],
|
|
73
|
+
rollback_plan: 'Review and revert only the scoped CodeSDD feature workspace and state changes if validation fails.',
|
|
74
|
+
validation_gates: [
|
|
75
|
+
{
|
|
76
|
+
name: 'SDD check',
|
|
77
|
+
command: 'codesdd sdd check --render',
|
|
78
|
+
expected: 'CodeSDD state and generated views remain valid.',
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
});
|
|
23
82
|
export const workspaceSpecSchema = z.object({
|
|
24
83
|
schema_version: z.literal(1),
|
|
25
84
|
feature_id: workspaceFeatureIdSchema,
|
|
@@ -52,6 +111,8 @@ export const workspaceSpecSchema = z.object({
|
|
|
52
111
|
export const workspacePlanSchema = z.object({
|
|
53
112
|
schema_version: z.literal(1),
|
|
54
113
|
feature_id: workspaceFeatureIdSchema,
|
|
114
|
+
governance: workspacePlanGovernanceSchema,
|
|
115
|
+
execution_plan: workspacePlanExecutionSchema,
|
|
55
116
|
architectural_impact: z.object({
|
|
56
117
|
description: z.string(),
|
|
57
118
|
affected_modules: z.array(z.string()),
|
|
@@ -65,8 +126,8 @@ export const workspacePlanSchema = z.object({
|
|
|
65
126
|
change_type: z.string(),
|
|
66
127
|
})),
|
|
67
128
|
quality_strategy: z.object({
|
|
68
|
-
unit_target:
|
|
69
|
-
integration_target:
|
|
129
|
+
unit_target: workspacePercentSchema,
|
|
130
|
+
integration_target: workspacePercentSchema,
|
|
70
131
|
approach: z.string(),
|
|
71
132
|
}),
|
|
72
133
|
suggested_skills: z.array(z.string()),
|
|
@@ -156,25 +217,165 @@ export const workspaceTraceabilitySchema = z.object({
|
|
|
156
217
|
}),
|
|
157
218
|
requirements: z.array(workspaceTraceabilityRequirementSchema).default([]),
|
|
158
219
|
});
|
|
220
|
+
export const workspaceQualityLedgerAxisSchema = z.object({
|
|
221
|
+
raw_score: workspacePercentSchema,
|
|
222
|
+
weighted_score: workspacePercentSchema,
|
|
223
|
+
rationale: z.string().min(1),
|
|
224
|
+
});
|
|
225
|
+
export const workspaceQualityLedgerWeightsSchema = z
|
|
226
|
+
.object({
|
|
227
|
+
coverage: workspacePercentSchema.default(30),
|
|
228
|
+
traceability: workspacePercentSchema.default(20),
|
|
229
|
+
integrity: workspacePercentSchema.default(20),
|
|
230
|
+
naming: workspacePercentSchema.default(10),
|
|
231
|
+
token: workspacePercentSchema.default(20),
|
|
232
|
+
})
|
|
233
|
+
.superRefine((weights, ctx) => {
|
|
234
|
+
const total = weights.coverage + weights.traceability + weights.integrity + weights.naming + weights.token;
|
|
235
|
+
if (total !== 100) {
|
|
236
|
+
ctx.addIssue({
|
|
237
|
+
code: z.ZodIssueCode.custom,
|
|
238
|
+
message: `q95_ledger.weights must total 100, got ${total}.`,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
export const workspaceQualityLedgerSchema = z
|
|
243
|
+
.object({
|
|
244
|
+
threshold: workspacePercentSchema.default(95),
|
|
245
|
+
score: workspacePercentSchema.default(0),
|
|
246
|
+
status: z.enum(['pass', 'fail', 'pending']).default('pending'),
|
|
247
|
+
computed_at: z.string().default(''),
|
|
248
|
+
weights: workspaceQualityLedgerWeightsSchema.default({
|
|
249
|
+
coverage: 30,
|
|
250
|
+
traceability: 20,
|
|
251
|
+
integrity: 20,
|
|
252
|
+
naming: 10,
|
|
253
|
+
token: 20,
|
|
254
|
+
}),
|
|
255
|
+
axes: z
|
|
256
|
+
.object({
|
|
257
|
+
coverage: workspaceQualityLedgerAxisSchema,
|
|
258
|
+
traceability: workspaceQualityLedgerAxisSchema,
|
|
259
|
+
integrity: workspaceQualityLedgerAxisSchema,
|
|
260
|
+
naming: workspaceQualityLedgerAxisSchema,
|
|
261
|
+
token: workspaceQualityLedgerAxisSchema,
|
|
262
|
+
})
|
|
263
|
+
.default({
|
|
264
|
+
coverage: {
|
|
265
|
+
raw_score: 0,
|
|
266
|
+
weighted_score: 0,
|
|
267
|
+
rationale: 'Computed during finalize.'
|
|
268
|
+
},
|
|
269
|
+
traceability: {
|
|
270
|
+
raw_score: 0,
|
|
271
|
+
weighted_score: 0,
|
|
272
|
+
rationale: 'Computed during finalize.'
|
|
273
|
+
},
|
|
274
|
+
integrity: {
|
|
275
|
+
raw_score: 0,
|
|
276
|
+
weighted_score: 0,
|
|
277
|
+
rationale: 'Computed during finalize.'
|
|
278
|
+
},
|
|
279
|
+
naming: {
|
|
280
|
+
raw_score: 0,
|
|
281
|
+
weighted_score: 0,
|
|
282
|
+
rationale: 'Computed during finalize.'
|
|
283
|
+
},
|
|
284
|
+
token: {
|
|
285
|
+
raw_score: 0,
|
|
286
|
+
weighted_score: 0,
|
|
287
|
+
rationale: 'Computed during finalize.'
|
|
288
|
+
},
|
|
289
|
+
}),
|
|
290
|
+
next_best_action: z.string().default('Record missing evidence to raise the lowest weighted axis.'),
|
|
291
|
+
})
|
|
292
|
+
.superRefine((ledger, ctx) => {
|
|
293
|
+
if (ledger.status === 'pass' && ledger.score < ledger.threshold) {
|
|
294
|
+
ctx.addIssue({
|
|
295
|
+
code: z.ZodIssueCode.custom,
|
|
296
|
+
path: ['status'],
|
|
297
|
+
message: 'q95_ledger.status cannot be pass when score is below threshold.',
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
export const workspaceTokenTelemetrySchema = z.object({
|
|
302
|
+
mode: z.enum(['compact', 'standard', 'full']).optional(),
|
|
303
|
+
budget_chars: z.number().int().positive().optional(),
|
|
304
|
+
actual_chars: z.number().int().nonnegative().optional(),
|
|
305
|
+
efficiency_percent: workspacePercentSchema.optional(),
|
|
306
|
+
gate: z.enum(['pass', 'warn', 'fail']).default('pass'),
|
|
307
|
+
evidence_ref: z.string().min(1).optional(),
|
|
308
|
+
notes: z.string().optional(),
|
|
309
|
+
});
|
|
310
|
+
export const workspaceTokenBudgetGatesSchema = z.object({
|
|
311
|
+
max_context_chars: z.number().int().positive().optional(),
|
|
312
|
+
require_numeric_efficiency: z.boolean().default(true),
|
|
313
|
+
fail_below_percent: workspacePercentSchema.default(95),
|
|
314
|
+
telemetry: z.array(workspaceTokenTelemetrySchema).default([]),
|
|
315
|
+
});
|
|
316
|
+
export const workspaceRuntimePerformanceTelemetrySchema = z.object({
|
|
317
|
+
command: z.string().min(1),
|
|
318
|
+
metric: z.enum(['duration_ms', 'p95_ms', 'memory_mb', 'cpu_percent']).default('duration_ms'),
|
|
319
|
+
threshold: z.number().nonnegative().optional(),
|
|
320
|
+
actual: z.number().nonnegative().optional(),
|
|
321
|
+
gate: z.enum(['pass', 'warn', 'fail']).default('pass'),
|
|
322
|
+
evidence_ref: z.string().min(1).optional(),
|
|
323
|
+
notes: z.string().optional(),
|
|
324
|
+
});
|
|
325
|
+
export const workspaceFlakinessTelemetrySchema = z.object({
|
|
326
|
+
command: z.string().min(1),
|
|
327
|
+
attempts: z.number().int().positive().optional(),
|
|
328
|
+
failures: z.number().int().nonnegative().optional(),
|
|
329
|
+
failure_rate_percent: workspacePercentSchema.optional(),
|
|
330
|
+
gate: z.enum(['pass', 'warn', 'fail']).default('pass'),
|
|
331
|
+
evidence_ref: z.string().min(1).optional(),
|
|
332
|
+
notes: z.string().optional(),
|
|
333
|
+
});
|
|
334
|
+
export const workspaceRuntimeQualityGatesSchema = z.object({
|
|
335
|
+
mode: z.enum(['observe', 'enforce']).default('observe'),
|
|
336
|
+
performance: z.array(workspaceRuntimePerformanceTelemetrySchema).default([]),
|
|
337
|
+
flakiness: z.array(workspaceFlakinessTelemetrySchema).default([]),
|
|
338
|
+
});
|
|
339
|
+
export const workspaceCriticalEvidenceProvenanceSchema = z.object({
|
|
340
|
+
command: z.string().min(1),
|
|
341
|
+
exit_code: z.number().int(),
|
|
342
|
+
timestamp_iso: z.string().datetime(),
|
|
343
|
+
commit_sha: z.string().regex(/^[0-9a-f]{7,40}$/i),
|
|
344
|
+
artifact_path: z.string().min(1),
|
|
345
|
+
artifact_hash: z.string().min(1),
|
|
346
|
+
});
|
|
347
|
+
export const workspaceEvidenceLogEntrySchema = z
|
|
348
|
+
.object({
|
|
349
|
+
timestamp: z.string(),
|
|
350
|
+
kind: z.string(),
|
|
351
|
+
result: z.string(),
|
|
352
|
+
artifact: z.string().optional(),
|
|
353
|
+
critical: z.boolean().optional(),
|
|
354
|
+
provenance: workspaceCriticalEvidenceProvenanceSchema.optional(),
|
|
355
|
+
})
|
|
356
|
+
.superRefine((entry, ctx) => {
|
|
357
|
+
if (entry.critical === true && !entry.provenance) {
|
|
358
|
+
ctx.addIssue({
|
|
359
|
+
code: z.ZodIssueCode.custom,
|
|
360
|
+
path: ['provenance'],
|
|
361
|
+
message: 'critical evidence entries must include provenance with command, exit_code, timestamp_iso, commit_sha, artifact_path, and artifact_hash.',
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
});
|
|
159
365
|
export const workspaceQualitySchema = z.object({
|
|
160
366
|
schema_version: z.literal(1),
|
|
161
367
|
feature_id: workspaceFeatureIdSchema,
|
|
162
368
|
coverage_targets: z.object({
|
|
163
|
-
unit:
|
|
164
|
-
integration:
|
|
165
|
-
modules: z.record(z.string(),
|
|
369
|
+
unit: workspacePercentSchema,
|
|
370
|
+
integration: workspacePercentSchema,
|
|
371
|
+
modules: z.record(z.string(), workspacePercentSchema).optional(),
|
|
166
372
|
}),
|
|
167
373
|
validation_strategies: z.array(z.object({
|
|
168
374
|
name: z.string(),
|
|
169
375
|
command: z.string(),
|
|
170
376
|
expected: z.string(),
|
|
171
377
|
})),
|
|
172
|
-
evidence_log: z.array(
|
|
173
|
-
timestamp: z.string(),
|
|
174
|
-
kind: z.string(),
|
|
175
|
-
result: z.string(),
|
|
176
|
-
artifact: z.string().optional(),
|
|
177
|
-
})),
|
|
378
|
+
evidence_log: z.array(workspaceEvidenceLogEntrySchema),
|
|
178
379
|
skill_evidence: z
|
|
179
380
|
.object({
|
|
180
381
|
required_skill_ids: z.array(z.string()),
|
|
@@ -234,65 +435,17 @@ export const workspaceQualitySchema = z.object({
|
|
|
234
435
|
notes: z.string().optional(),
|
|
235
436
|
})
|
|
236
437
|
.optional(),
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
naming: z.number().default(10),
|
|
249
|
-
token: z.number().default(20),
|
|
250
|
-
})
|
|
251
|
-
.default({
|
|
252
|
-
coverage: 30,
|
|
253
|
-
traceability: 20,
|
|
254
|
-
integrity: 20,
|
|
255
|
-
naming: 10,
|
|
256
|
-
token: 20,
|
|
257
|
-
}),
|
|
258
|
-
axes: z
|
|
259
|
-
.object({
|
|
260
|
-
coverage: z.object({ raw_score: z.number(), weighted_score: z.number(), rationale: z.string() }),
|
|
261
|
-
traceability: z.object({ raw_score: z.number(), weighted_score: z.number(), rationale: z.string() }),
|
|
262
|
-
integrity: z.object({ raw_score: z.number(), weighted_score: z.number(), rationale: z.string() }),
|
|
263
|
-
naming: z.object({ raw_score: z.number(), weighted_score: z.number(), rationale: z.string() }),
|
|
264
|
-
token: z.object({ raw_score: z.number(), weighted_score: z.number(), rationale: z.string() }),
|
|
265
|
-
})
|
|
266
|
-
.default({
|
|
267
|
-
coverage: {
|
|
268
|
-
raw_score: 0,
|
|
269
|
-
weighted_score: 0,
|
|
270
|
-
rationale: 'Computed during finalize.'
|
|
271
|
-
},
|
|
272
|
-
traceability: {
|
|
273
|
-
raw_score: 0,
|
|
274
|
-
weighted_score: 0,
|
|
275
|
-
rationale: 'Computed during finalize.'
|
|
276
|
-
},
|
|
277
|
-
integrity: {
|
|
278
|
-
raw_score: 0,
|
|
279
|
-
weighted_score: 0,
|
|
280
|
-
rationale: 'Computed during finalize.'
|
|
281
|
-
},
|
|
282
|
-
naming: {
|
|
283
|
-
raw_score: 0,
|
|
284
|
-
weighted_score: 0,
|
|
285
|
-
rationale: 'Computed during finalize.'
|
|
286
|
-
},
|
|
287
|
-
token: {
|
|
288
|
-
raw_score: 0,
|
|
289
|
-
weighted_score: 0,
|
|
290
|
-
rationale: 'Computed during finalize.'
|
|
291
|
-
},
|
|
292
|
-
}),
|
|
293
|
-
next_best_action: z.string().default('Record missing evidence to raise the lowest weighted axis.'),
|
|
294
|
-
})
|
|
295
|
-
.default({
|
|
438
|
+
token_budget_gates: workspaceTokenBudgetGatesSchema.default({
|
|
439
|
+
require_numeric_efficiency: true,
|
|
440
|
+
fail_below_percent: 95,
|
|
441
|
+
telemetry: [],
|
|
442
|
+
}),
|
|
443
|
+
runtime_quality_gates: workspaceRuntimeQualityGatesSchema.default({
|
|
444
|
+
mode: 'observe',
|
|
445
|
+
performance: [],
|
|
446
|
+
flakiness: [],
|
|
447
|
+
}),
|
|
448
|
+
q95_ledger: workspaceQualityLedgerSchema.default({
|
|
296
449
|
threshold: 95,
|
|
297
450
|
score: 0,
|
|
298
451
|
status: 'pending',
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { getOpsxExploreCommandTemplate, type SkillTemplate } from '../templates/skill-templates.js';
|
|
7
7
|
import type { CommandContent } from '../command-generation/index.js';
|
|
8
|
+
export declare const CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING = "## CodeSDD Canonical Workflow";
|
|
9
|
+
export declare const CODESDD_CANONICAL_LLM_ANNOUNCE = "## CodeSDD Canonical Workflow\n\n- In projects with `.sdd/`, treat CodeSDD SDD commands as the canonical lifecycle.\n- Start new work with `codesdd sdd insight \"describe the change or initiative\"`; then use `codesdd sdd debate`, `codesdd sdd decide`, `codesdd sdd breakdown`, `codesdd sdd next`, `codesdd sdd start`, `codesdd sdd context`, `codesdd sdd finalize`, and `codesdd sdd check --render` as state requires.\n- Use `codesdd sdd init-context` as the default project capability bootstrap/repair entrypoint. Use `codesdd install --tools <tool>` only to generate or refresh agent assets after project context exists.\n- OPSX slash prompts are compatibility surfaces for legacy workflows. Do not present them as the first or preferred path when `.sdd/` exists, even if generated prompt files still mention `/opsx:*` or tool-specific `/opsx-*`.\n- When older project instructions conflict with this announcement, trust `.sdd/state/*.yaml`, current CLI output, and the repository's CodeSDD governance files.";
|
|
8
10
|
/**
|
|
9
11
|
* Skill template with directory name and workflow ID mapping.
|
|
10
12
|
*/
|
|
@@ -5,12 +5,29 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { getExploreSkillTemplate, getNewChangeSkillTemplate, getContinueChangeSkillTemplate, getApplyChangeSkillTemplate, getFfChangeSkillTemplate, getSyncSpecsSkillTemplate, getArchiveChangeSkillTemplate, getBulkArchiveChangeSkillTemplate, getVerifyChangeSkillTemplate, getOnboardSkillTemplate, getOpsxProposeSkillTemplate, getOpsxExploreCommandTemplate, getOpsxNewCommandTemplate, getOpsxContinueCommandTemplate, getOpsxApplyCommandTemplate, getOpsxFfCommandTemplate, getOpsxSyncCommandTemplate, getOpsxArchiveCommandTemplate, getOpsxBulkArchiveCommandTemplate, getOpsxVerifyCommandTemplate, getOpsxOnboardCommandTemplate, getOpsxProposeCommandTemplate, getSddSkillTemplate, getOpsxSddCommandTemplate, } from '../templates/skill-templates.js';
|
|
7
7
|
const PT_BR_GUARDRAIL = '**Idioma obrigatorio:** responda em portugues do Brasil (pt-BR), salvo solicitacao explicita em outro idioma.';
|
|
8
|
+
export const CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING = '## CodeSDD Canonical Workflow';
|
|
9
|
+
export const CODESDD_CANONICAL_LLM_ANNOUNCE = `${CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING}
|
|
10
|
+
|
|
11
|
+
- In projects with \`.sdd/\`, treat CodeSDD SDD commands as the canonical lifecycle.
|
|
12
|
+
- Start new work with \`codesdd sdd insight "describe the change or initiative"\`; then use \`codesdd sdd debate\`, \`codesdd sdd decide\`, \`codesdd sdd breakdown\`, \`codesdd sdd next\`, \`codesdd sdd start\`, \`codesdd sdd context\`, \`codesdd sdd finalize\`, and \`codesdd sdd check --render\` as state requires.
|
|
13
|
+
- Use \`codesdd sdd init-context\` as the default project capability bootstrap/repair entrypoint. Use \`codesdd install --tools <tool>\` only to generate or refresh agent assets after project context exists.
|
|
14
|
+
- OPSX slash prompts are compatibility surfaces for legacy workflows. Do not present them as the first or preferred path when \`.sdd/\` exists, even if generated prompt files still mention \`/opsx:*\` or tool-specific \`/opsx-*\`.
|
|
15
|
+
- When older project instructions conflict with this announcement, trust \`.sdd/state/*.yaml\`, current CLI output, and the repository's CodeSDD governance files.`;
|
|
8
16
|
function ensurePtBrGuardrail(content) {
|
|
9
17
|
if (content.toLowerCase().includes('idioma obrigatorio')) {
|
|
10
18
|
return content;
|
|
11
19
|
}
|
|
12
20
|
return `${PT_BR_GUARDRAIL}\n\n${content}`;
|
|
13
21
|
}
|
|
22
|
+
function ensureCanonicalLlmAnnounce(content) {
|
|
23
|
+
if (content.includes(CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING)) {
|
|
24
|
+
return content;
|
|
25
|
+
}
|
|
26
|
+
return `${CODESDD_CANONICAL_LLM_ANNOUNCE}\n\n${content}`;
|
|
27
|
+
}
|
|
28
|
+
function prepareGeneratedAgentInstructions(content) {
|
|
29
|
+
return ensureCanonicalLlmAnnounce(ensurePtBrGuardrail(content));
|
|
30
|
+
}
|
|
14
31
|
/**
|
|
15
32
|
* Gets skill templates with their directory names, optionally filtered by workflow IDs.
|
|
16
33
|
*
|
|
@@ -74,7 +91,7 @@ export function getCommandContents(workflowFilter) {
|
|
|
74
91
|
description: template.description,
|
|
75
92
|
category: template.category,
|
|
76
93
|
tags: template.tags,
|
|
77
|
-
body:
|
|
94
|
+
body: prepareGeneratedAgentInstructions(template.content),
|
|
78
95
|
}));
|
|
79
96
|
}
|
|
80
97
|
/**
|
|
@@ -88,7 +105,7 @@ export function generateSkillContent(template, generatedByVersion, transformInst
|
|
|
88
105
|
const transformedInstructions = transformInstructions
|
|
89
106
|
? transformInstructions(template.instructions)
|
|
90
107
|
: template.instructions;
|
|
91
|
-
const instructions =
|
|
108
|
+
const instructions = prepareGeneratedAgentInstructions(transformedInstructions);
|
|
92
109
|
return `---
|
|
93
110
|
name: ${template.name}
|
|
94
111
|
description: ${template.description}
|
|
@@ -39,6 +39,24 @@ export interface ToolVersionStatus {
|
|
|
39
39
|
/** Whether the tool needs updating (version mismatch or missing) */
|
|
40
40
|
needsUpdate: boolean;
|
|
41
41
|
}
|
|
42
|
+
export interface GeneratedInstructionDriftEntry {
|
|
43
|
+
toolId: string;
|
|
44
|
+
toolName: string;
|
|
45
|
+
kind: 'skill' | 'command';
|
|
46
|
+
path: string;
|
|
47
|
+
issue: 'missing_canonical_announcement';
|
|
48
|
+
}
|
|
49
|
+
export interface GeneratedInstructionDriftReport {
|
|
50
|
+
schema_version: 1;
|
|
51
|
+
status: 'not_configured' | 'clean' | 'stale';
|
|
52
|
+
checked_count: number;
|
|
53
|
+
stale_count: number;
|
|
54
|
+
canonical_heading: string;
|
|
55
|
+
compatibility_warning: string;
|
|
56
|
+
stale_files: GeneratedInstructionDriftEntry[];
|
|
57
|
+
warnings: string[];
|
|
58
|
+
next_action: string;
|
|
59
|
+
}
|
|
42
60
|
/**
|
|
43
61
|
* Gets the list of tools with skillsDir configured.
|
|
44
62
|
*/
|
|
@@ -68,4 +86,5 @@ export declare function getConfiguredTools(projectRoot: string): string[];
|
|
|
68
86
|
* Gets version status for all configured tools.
|
|
69
87
|
*/
|
|
70
88
|
export declare function getAllToolVersionStatus(projectRoot: string, currentVersion: string): ToolVersionStatus[];
|
|
89
|
+
export declare function buildGeneratedInstructionDriftReport(projectRoot: string): GeneratedInstructionDriftReport;
|
|
71
90
|
//# sourceMappingURL=tool-detection.d.ts.map
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import { AI_TOOLS } from '../config.js';
|
|
9
|
+
import { CommandAdapterRegistry } from '../command-generation/registry.js';
|
|
10
|
+
import { CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING } from './skill-generation.js';
|
|
9
11
|
/**
|
|
10
12
|
* Names of skill directories created by codesdd init.
|
|
11
13
|
*/
|
|
@@ -155,4 +157,91 @@ export function getAllToolVersionStatus(projectRoot, currentVersion) {
|
|
|
155
157
|
const configuredTools = getConfiguredTools(projectRoot);
|
|
156
158
|
return configuredTools.map((toolId) => getToolVersionStatus(projectRoot, toolId, currentVersion));
|
|
157
159
|
}
|
|
160
|
+
function formatInstructionPath(projectRoot, filePath) {
|
|
161
|
+
if (!path.isAbsolute(filePath)) {
|
|
162
|
+
return filePath;
|
|
163
|
+
}
|
|
164
|
+
const relative = path.relative(projectRoot, filePath);
|
|
165
|
+
if (relative && !relative.startsWith('..') && !path.isAbsolute(relative)) {
|
|
166
|
+
return relative;
|
|
167
|
+
}
|
|
168
|
+
return filePath;
|
|
169
|
+
}
|
|
170
|
+
function inspectGeneratedInstructionFile(projectRoot, toolId, toolName, kind, filePath) {
|
|
171
|
+
if (!fs.existsSync(filePath)) {
|
|
172
|
+
return { checked: false };
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
176
|
+
const checked = true;
|
|
177
|
+
if (content.includes(CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING)) {
|
|
178
|
+
return { checked };
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
checked,
|
|
182
|
+
stale: {
|
|
183
|
+
toolId,
|
|
184
|
+
toolName,
|
|
185
|
+
kind,
|
|
186
|
+
path: formatInstructionPath(projectRoot, filePath),
|
|
187
|
+
issue: 'missing_canonical_announcement',
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return { checked: false };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
export function buildGeneratedInstructionDriftReport(projectRoot) {
|
|
196
|
+
const staleFiles = [];
|
|
197
|
+
let checkedCount = 0;
|
|
198
|
+
for (const tool of AI_TOOLS.filter((item) => item.skillsDir)) {
|
|
199
|
+
if (!tool.skillsDir)
|
|
200
|
+
continue;
|
|
201
|
+
const skillStatus = getToolSkillStatus(projectRoot, tool.value);
|
|
202
|
+
const skillsDir = path.join(projectRoot, tool.skillsDir, 'skills');
|
|
203
|
+
for (const skillName of SKILL_NAMES) {
|
|
204
|
+
const skillFile = path.join(skillsDir, skillName, 'SKILL.md');
|
|
205
|
+
const result = inspectGeneratedInstructionFile(projectRoot, tool.value, tool.name, 'skill', skillFile);
|
|
206
|
+
if (result.checked)
|
|
207
|
+
checkedCount++;
|
|
208
|
+
if (result.stale)
|
|
209
|
+
staleFiles.push(result.stale);
|
|
210
|
+
}
|
|
211
|
+
const adapter = CommandAdapterRegistry.get(tool.value);
|
|
212
|
+
if (!adapter)
|
|
213
|
+
continue;
|
|
214
|
+
for (const commandId of COMMAND_IDS) {
|
|
215
|
+
const adapterPath = adapter.getFilePath(commandId);
|
|
216
|
+
if (path.isAbsolute(adapterPath) && !skillStatus.configured) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const commandFile = path.isAbsolute(adapterPath) ? adapterPath : path.join(projectRoot, adapterPath);
|
|
220
|
+
const result = inspectGeneratedInstructionFile(projectRoot, tool.value, tool.name, 'command', commandFile);
|
|
221
|
+
if (result.checked)
|
|
222
|
+
checkedCount++;
|
|
223
|
+
if (result.stale)
|
|
224
|
+
staleFiles.push(result.stale);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const staleCount = staleFiles.length;
|
|
228
|
+
const status = checkedCount === 0 ? 'not_configured' : staleCount > 0 ? 'stale' : 'clean';
|
|
229
|
+
const warnings = staleCount > 0
|
|
230
|
+
? [
|
|
231
|
+
`${staleCount} generated CodeSDD instruction file(s) are missing the canonical LLM announcement.`,
|
|
232
|
+
'Regenerate instructions with `codesdd update` or rerun `codesdd install --tools <tool>` for the affected tools.',
|
|
233
|
+
]
|
|
234
|
+
: [];
|
|
235
|
+
return {
|
|
236
|
+
schema_version: 1,
|
|
237
|
+
status,
|
|
238
|
+
checked_count: checkedCount,
|
|
239
|
+
stale_count: staleCount,
|
|
240
|
+
canonical_heading: CODESDD_CANONICAL_LLM_ANNOUNCE_HEADING,
|
|
241
|
+
compatibility_warning: 'OPSX slash prompts are compatibility surfaces; prefer CodeSDD SDD commands when .sdd/ exists.',
|
|
242
|
+
stale_files: staleFiles,
|
|
243
|
+
warnings,
|
|
244
|
+
next_action: staleCount > 0 ? 'codesdd update' : 'none',
|
|
245
|
+
};
|
|
246
|
+
}
|
|
158
247
|
//# sourceMappingURL=tool-detection.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { buildFeatureTitle, computeCanonicalTitle, markdownInsightTemplate, slugify, stripFunctionalTitlePrefixes, } from '../../core/sdd/domain/helpers.js';
|
|
2
|
+
export { evaluateFeatureFinalizeGuardrails, evaluateFeatureStartGuardrails, type FeatureFinalizeGuardrails, type FeatureStartGuardrails, type LifecycleDependencyCheck, type LifecycleLockCheck, } from '../../core/sdd/domain/lifecycle-guardrails.js';
|
|
3
|
+
export { clearLifecycleHooks, registerLifecycleHook, runLifecycleHooks, unregisterLifecycleHook, type LifecycleHook, type LifecycleHookContext, type LifecycleHookEvent, } from '../../core/sdd/domain/lifecycle-hooks.js';
|
|
4
|
+
export { TransitionEngine, type EntityStatus } from '../../core/sdd/domain/transition-engine.js';
|
|
5
|
+
export { evaluateWorkspaceTraceability } from '../../core/sdd/domain/traceability.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { buildFeatureTitle, computeCanonicalTitle, markdownInsightTemplate, slugify, stripFunctionalTitlePrefixes, } from '../../core/sdd/domain/helpers.js';
|
|
2
|
+
export { evaluateFeatureFinalizeGuardrails, evaluateFeatureStartGuardrails, } from '../../core/sdd/domain/lifecycle-guardrails.js';
|
|
3
|
+
export { clearLifecycleHooks, registerLifecycleHook, runLifecycleHooks, unregisterLifecycleHook, } from '../../core/sdd/domain/lifecycle-hooks.js';
|
|
4
|
+
export { TransitionEngine } from '../../core/sdd/domain/transition-engine.js';
|
|
5
|
+
export { evaluateWorkspaceTraceability } from '../../core/sdd/domain/traceability.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { FileSystemLockAdapter, InMemoryCoordinationCache, InMemoryCoordinationEventBus, InMemoryCoordinationQueue, MultiTierCoordinationCache, createFilesystemFirstCoordinationAdapters, type CoordinationCacheAdapter, type CoordinationEvent, type CoordinationEventBusAdapter, type CoordinationLockAdapter, type CoordinationQueueAdapter, type SddCoordinationAdapters, } from '../../core/sdd/coordination/coordination-adapters.js';
|
|
2
|
+
export { RedisClientFactory, RedisCoordinationCache, RedisEventBusAdapter, RedisLockAdapter, RedisQueueAdapter, RedisWorkDeduper, buildRedisKey, hashRedisKey, redactRedisUrl, resolveRedisBoundaryConfig, resolveRedisRuntimeConfig, sanitizeRedisError, type RedisOperationalReport, type RedisRuntimeConfig, type RedisRuntimeStatus, } from '../../core/sdd/coordination/redis-runtime.js';
|
|
3
|
+
export { InMemoryAdapter } from '../../core/sdd/store/in-memory-adapter.js';
|
|
4
|
+
export { YamlFileAdapter } from '../../core/sdd/store/yaml-file-adapter.js';
|
|
5
|
+
export { createInMemorySddStores, createSddStores, type SddStores } from '../../core/sdd/store/sdd-stores.js';
|
|
6
|
+
export type { StateStore } from '../../core/sdd/store/state-store.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { FileSystemLockAdapter, InMemoryCoordinationCache, InMemoryCoordinationEventBus, InMemoryCoordinationQueue, MultiTierCoordinationCache, createFilesystemFirstCoordinationAdapters, } from '../../core/sdd/coordination/coordination-adapters.js';
|
|
2
|
+
export { RedisClientFactory, RedisCoordinationCache, RedisEventBusAdapter, RedisLockAdapter, RedisQueueAdapter, RedisWorkDeduper, buildRedisKey, hashRedisKey, redactRedisUrl, resolveRedisBoundaryConfig, resolveRedisRuntimeConfig, sanitizeRedisError, } from '../../core/sdd/coordination/redis-runtime.js';
|
|
3
|
+
export { InMemoryAdapter } from '../../core/sdd/store/in-memory-adapter.js';
|
|
4
|
+
export { YamlFileAdapter } from '../../core/sdd/store/yaml-file-adapter.js';
|
|
5
|
+
export { createInMemorySddStores, createSddStores } from '../../core/sdd/store/sdd-stores.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { BacklogItem, BacklogState, DiscoveryIndexState, DiscoveryRecord, FinalizeQueueState, FrontendGapsState, FrontendMapState, RepoMapState, ServiceCatalogState, TransitionLogState, } from '../../core/sdd/types.js';
|
|
2
|
+
export { stringifyWorkspaceYamlDocument, workspaceDocumentSchemas, workspaceSchemaForFile, type WorkspaceChangelogDocument, type WorkspaceDocumentFileName, type WorkspacePlanDocument, type WorkspaceQualityDocument, type WorkspaceSpecDocument, type WorkspaceTasksDocument, } from '../../core/sdd/workspace-schemas.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devtrack-solution/codesdd",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "AI-native system for spec-driven development",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"codesdd",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"type": "module",
|
|
23
23
|
"packageManager": "pnpm@10.33.2",
|
|
24
24
|
"publishConfig": {
|
|
25
|
-
"access": "public"
|
|
25
|
+
"access": "public",
|
|
26
|
+
"provenance": true
|
|
26
27
|
},
|
|
27
28
|
"pnpm": {
|
|
28
29
|
"overrides": {
|
|
@@ -64,15 +65,15 @@
|
|
|
64
65
|
"build": "node build.js",
|
|
65
66
|
"dev": "tsc --watch",
|
|
66
67
|
"dev:cli": "pnpm build && node bin/codesdd.js",
|
|
67
|
-
"test": "vitest run",
|
|
68
|
+
"test": "vitest run --silent=passed-only",
|
|
68
69
|
"test:watch": "vitest",
|
|
69
|
-
"test:e2e": "vitest run test/e2e test/cli-e2e",
|
|
70
|
+
"test:e2e": "vitest run test/e2e test/cli-e2e --silent=passed-only",
|
|
70
71
|
"test:deepagents-smoke": "vitest run test/e2e/deepagents-agent-run-smoke.test.ts",
|
|
71
72
|
"test:ui": "vitest --ui",
|
|
72
|
-
"test:coverage": "vitest run --coverage",
|
|
73
|
-
"coverage": "vitest run --coverage",
|
|
73
|
+
"test:coverage": "vitest run --coverage --silent=passed-only",
|
|
74
|
+
"coverage": "vitest run --coverage --silent=passed-only",
|
|
74
75
|
"quality": "pnpm run cleanup:install && pnpm run build && pnpm run lint && pnpm run test && pnpm run test:e2e && pnpm run coverage",
|
|
75
|
-
"quality:review": "pnpm run build && pnpm run lint && pnpm run test && pnpm run test:e2e && pnpm run coverage && pnpm run sdd:validate && pnpm run check:pack-version",
|
|
76
|
+
"quality:review": "pnpm run build && pnpm run lint && pnpm run test && pnpm run test:e2e && pnpm run coverage && pnpm run sdd:validate && pnpm run check:pack-version && node bin/codesdd.js sdd check --render --strict",
|
|
76
77
|
"prepublishOnly": "node build.js",
|
|
77
78
|
"prepare": "node scripts/install-git-hooks.mjs",
|
|
78
79
|
"check:pack-version": "node scripts/pack-version-check.mjs",
|
|
@@ -80,11 +81,13 @@
|
|
|
80
81
|
"sdd:schema:check": "node scripts/export-sdd-schemas.mjs --check",
|
|
81
82
|
"sdd:scan-naming": "node bin/codesdd.js sdd scan-naming",
|
|
82
83
|
"sdd:scan-naming:strict": "node bin/codesdd.js sdd scan-naming --strict",
|
|
84
|
+
"sdd:service-catalog:maturity": "node scripts/audit-service-catalog-maturity.mjs",
|
|
83
85
|
"sdd:precommit:fast": "node scripts/pre-commit-sdd-fast.mjs",
|
|
84
86
|
"sdd:validate:no-build": "node bin/codesdd.js sdd check --render --strict && node bin/codesdd.js sdd diagnose --strict && node bin/codesdd.js sdd scan-naming",
|
|
85
87
|
"sdd:validate": "pnpm run build && pnpm run sdd:schema:check && pnpm run sdd:validate:no-build",
|
|
86
88
|
"release": "pnpm run release:ci",
|
|
87
89
|
"release:ci": "pnpm run check:pack-version && pnpm exec changeset publish",
|
|
90
|
+
"release:sbom": "npm sbom --sbom-format cyclonedx",
|
|
88
91
|
"changeset": "changeset"
|
|
89
92
|
},
|
|
90
93
|
"engines": {
|
|
@@ -94,13 +97,13 @@
|
|
|
94
97
|
"@changesets/changelog-github": "^0.7.0",
|
|
95
98
|
"@changesets/cli": "^2.31.0",
|
|
96
99
|
"@mermaid-js/mermaid-cli": "^11.15.0",
|
|
97
|
-
"@vitest/coverage-v8": "^
|
|
98
|
-
"@vitest/ui": "^
|
|
100
|
+
"@vitest/coverage-v8": "^4.1.8",
|
|
101
|
+
"@vitest/ui": "^4.1.8",
|
|
99
102
|
"eslint": "^10.4.0",
|
|
100
103
|
"puppeteer": "24.43.1",
|
|
101
104
|
"ts-morph": "^28.0.0",
|
|
102
105
|
"typescript-eslint": "^8.59.4",
|
|
103
|
-
"vitest": "^
|
|
106
|
+
"vitest": "^4.1.8"
|
|
104
107
|
},
|
|
105
108
|
"dependencies": {
|
|
106
109
|
"@inquirer/core": "^11.1.10",
|
|
@@ -114,6 +117,7 @@
|
|
|
114
117
|
"fast-glob": "^3.3.3",
|
|
115
118
|
"ora": "^9.4.0",
|
|
116
119
|
"posthog-node": "^5.35.1",
|
|
120
|
+
"redis": "^6.0.0",
|
|
117
121
|
"typescript": "^6.0.3",
|
|
118
122
|
"yaml": "^2.9.0",
|
|
119
123
|
"zod": "^4.4.3"
|