@devtrack-solution/codesdd 1.2.4-rc3 → 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.
Files changed (128) hide show
  1. package/.sdd/skills/curated/devtrack-api/SKILL.md +91 -12
  2. package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +2 -0
  3. package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +2 -0
  4. package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +2 -0
  5. package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +2 -0
  6. package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +2 -0
  7. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +3 -3
  8. package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +2 -0
  9. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +59 -3
  10. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +15 -3
  11. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +1898 -2
  12. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +3 -1
  13. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +40 -0
  14. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +20 -2
  15. package/.sdd/skills/curated/devtrack-api/references/generated-artifact-invalidation.md +97 -0
  16. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +30 -1
  17. package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +4 -3
  18. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +22 -1
  19. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +9 -5
  20. package/README.md +122 -25
  21. package/dist/cli/program.js +180 -11
  22. package/dist/commands/config.js +27 -1
  23. package/dist/commands/sdd/execution.js +64 -2
  24. package/dist/commands/sdd.js +119 -4
  25. package/dist/core/cli/command-matrix.d.ts +18 -0
  26. package/dist/core/cli/command-matrix.js +148 -0
  27. package/dist/core/cli-command-quality.js +2 -0
  28. package/dist/core/config-schema.d.ts +14 -1
  29. package/dist/core/config-schema.js +32 -1
  30. package/dist/core/config.d.ts +1 -0
  31. package/dist/core/config.js +11 -0
  32. package/dist/core/global-config.d.ts +13 -0
  33. package/dist/core/init.d.ts +2 -2
  34. package/dist/core/init.js +13 -14
  35. package/dist/core/sdd/agent-binding.d.ts +9 -9
  36. package/dist/core/sdd/agent-runtime-contract.d.ts +4 -4
  37. package/dist/core/sdd/allocator-recovery.d.ts +14 -0
  38. package/dist/core/sdd/allocator-recovery.js +30 -0
  39. package/dist/core/sdd/allocator-security.d.ts +18 -0
  40. package/dist/core/sdd/allocator-security.js +36 -0
  41. package/dist/core/sdd/api-foundation-baseline.d.ts +111 -0
  42. package/dist/core/sdd/api-foundation-baseline.js +151 -0
  43. package/dist/core/sdd/api-foundation-parity.d.ts +114 -0
  44. package/dist/core/sdd/api-foundation-parity.js +131 -0
  45. package/dist/core/sdd/api-profile-catalog.d.ts +36 -0
  46. package/dist/core/sdd/api-profile-catalog.js +132 -0
  47. package/dist/core/sdd/api-profile-dry-run-projection.d.ts +93 -0
  48. package/dist/core/sdd/api-profile-dry-run-projection.js +370 -0
  49. package/dist/core/sdd/api-profile-recipes.d.ts +82 -0
  50. package/dist/core/sdd/api-profile-recipes.js +484 -0
  51. package/dist/core/sdd/artifact-id-allocator.d.ts +368 -0
  52. package/dist/core/sdd/artifact-id-allocator.js +510 -0
  53. package/dist/core/sdd/check.d.ts +50 -1
  54. package/dist/core/sdd/check.js +286 -9
  55. package/dist/core/sdd/deepagent-contracts.d.ts +4 -4
  56. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +3 -3
  57. package/dist/core/sdd/default-bootstrap-files.d.ts +1 -1
  58. package/dist/core/sdd/default-bootstrap-files.js +0 -2
  59. package/dist/core/sdd/default-skills.js +7 -5
  60. package/dist/core/sdd/devtrack-api-appliance.d.ts +34 -0
  61. package/dist/core/sdd/devtrack-api-appliance.js +138 -34
  62. package/dist/core/sdd/devtrack-api-architecture.d.ts +16 -0
  63. package/dist/core/sdd/devtrack-api-architecture.js +86 -0
  64. package/dist/core/sdd/docs-sync.js +3 -3
  65. package/dist/core/sdd/enterprise-mutating-command-gate.d.ts +27 -0
  66. package/dist/core/sdd/enterprise-mutating-command-gate.js +104 -0
  67. package/dist/core/sdd/enterprise-provenance-gates.d.ts +20 -0
  68. package/dist/core/sdd/enterprise-provenance-gates.js +63 -0
  69. package/dist/core/sdd/enterprise-provisioning-policy.d.ts +26 -0
  70. package/dist/core/sdd/enterprise-provisioning-policy.js +104 -0
  71. package/dist/core/sdd/governance-schemas.d.ts +2 -2
  72. package/dist/core/sdd/governance-schemas.js +11 -2
  73. package/dist/core/sdd/json-schema.js +4 -0
  74. package/dist/core/sdd/legacy-operations.js +93 -4
  75. package/dist/core/sdd/package-security-gates.js +2 -0
  76. package/dist/core/sdd/package-structure-gate.d.ts +85 -3
  77. package/dist/core/sdd/package-structure-gate.js +386 -8
  78. package/dist/core/sdd/parallel-feat-automation.d.ts +6 -6
  79. package/dist/core/sdd/plugin-policy.js +6 -1
  80. package/dist/core/sdd/plugin-registry.d.ts +3 -3
  81. package/dist/core/sdd/quality-validation.d.ts +5 -5
  82. package/dist/core/sdd/release-readiness.d.ts +49 -0
  83. package/dist/core/sdd/release-readiness.js +303 -8
  84. package/dist/core/sdd/reversa-architecture-extractor.d.ts +13 -0
  85. package/dist/core/sdd/reversa-architecture-extractor.js +89 -0
  86. package/dist/core/sdd/reversa-artifact-writer.d.ts +18 -0
  87. package/dist/core/sdd/reversa-artifact-writer.js +40 -0
  88. package/dist/core/sdd/reversa-command-policy.d.ts +136 -0
  89. package/dist/core/sdd/reversa-command-policy.js +361 -0
  90. package/dist/core/sdd/reversa-data-extractor.d.ts +11 -0
  91. package/dist/core/sdd/reversa-data-extractor.js +73 -0
  92. package/dist/core/sdd/reversa-equivalence.d.ts +20 -0
  93. package/dist/core/sdd/reversa-equivalence.js +34 -0
  94. package/dist/core/sdd/reversa-evidence.d.ts +298 -0
  95. package/dist/core/sdd/reversa-evidence.js +118 -0
  96. package/dist/core/sdd/reversa-reconstruction.d.ts +29 -0
  97. package/dist/core/sdd/reversa-reconstruction.js +32 -0
  98. package/dist/core/sdd/reversa-rules-extractor.d.ts +12 -0
  99. package/dist/core/sdd/reversa-rules-extractor.js +86 -0
  100. package/dist/core/sdd/reversa-source-safety.d.ts +19 -0
  101. package/dist/core/sdd/reversa-source-safety.js +105 -0
  102. package/dist/core/sdd/reversa-surface-scout.d.ts +13 -0
  103. package/dist/core/sdd/reversa-surface-scout.js +85 -0
  104. package/dist/core/sdd/reversa-ux-mapper.d.ts +11 -0
  105. package/dist/core/sdd/reversa-ux-mapper.js +73 -0
  106. package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +1 -1
  107. package/dist/core/sdd/services/archive-quality-coherence.service.d.ts +17 -0
  108. package/dist/core/sdd/services/archive-quality-coherence.service.js +141 -0
  109. package/dist/core/sdd/services/decide.service.js +1 -1
  110. package/dist/core/sdd/services/finalize.service.d.ts +2 -0
  111. package/dist/core/sdd/services/finalize.service.js +48 -2
  112. package/dist/core/sdd/services/historical-quality-regression.service.d.ts +35 -0
  113. package/dist/core/sdd/services/historical-quality-regression.service.js +228 -0
  114. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  115. package/dist/core/sdd/services/planning-execution-coherence.service.d.ts +45 -0
  116. package/dist/core/sdd/services/planning-execution-coherence.service.js +225 -0
  117. package/dist/core/sdd/state.js +15 -5
  118. package/dist/core/sdd/types.d.ts +3 -3
  119. package/dist/core/sdd/workspace-schemas.d.ts +45 -4
  120. package/dist/core/sdd/workspace-schemas.js +27 -6
  121. package/dist/core/shared/skill-generation.d.ts +2 -0
  122. package/dist/core/shared/skill-generation.js +19 -2
  123. package/dist/core/shared/tool-detection.d.ts +19 -0
  124. package/dist/core/shared/tool-detection.js +89 -0
  125. package/package.json +6 -5
  126. package/schemas/sdd/5-quality.schema.json +43 -0
  127. package/schemas/sdd/reversa-evidence-bundle.schema.json +466 -0
  128. package/schemas/sdd/workspace-catalog.schema.json +511 -0
package/dist/core/init.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Init Command
3
3
  *
4
- * Sets up CodeSDD with Agent Skills and /opsx:* slash commands.
5
- * This is the unified setup command that replaces both the old init and experimental commands.
4
+ * Sets up CodeSDD agent skills and compatibility slash commands.
5
+ * The canonical project lifecycle lives under .sdd and codesdd sdd commands.
6
6
  */
7
7
  import path from 'path';
8
8
  import chalk from 'chalk';
@@ -11,7 +11,7 @@ import * as fs from 'fs';
11
11
  import { createRequire } from 'module';
12
12
  import { FileSystemUtils } from '../utils/file-system.js';
13
13
  import { transformToHyphenCommands } from '../utils/command-references.js';
14
- import { AI_TOOLS, LEGACY_SPEC_DIR_NAME, } from './config.js';
14
+ import { AI_TOOLS, LEGACY_SPEC_DIR_NAME, getToolInstallGuidance, } from './config.js';
15
15
  import { isInteractive } from '../utils/interactive.js';
16
16
  import { generateCommands, CommandAdapterRegistry, } from './command-generation/index.js';
17
17
  import { CLI_ISSUES_URL, CLI_NAME, CLI_PRODUCT_NAME, CLI_REPOSITORY_URL } from './branding.js';
@@ -515,6 +515,10 @@ export class InitCommand {
515
515
  if (results.removedSkillCount > 0) {
516
516
  this.log(chalk.dim(`Removed: ${results.removedSkillCount} skill directories (delivery: commands)`));
517
517
  }
518
+ const toolNotes = getToolInstallGuidance(successfulTools.map((tool) => tool.value));
519
+ for (const note of toolNotes) {
520
+ this.log(chalk.dim(note));
521
+ }
518
522
  // Config status
519
523
  if (configStatus === 'exists') {
520
524
  // Show actual filename (config.yaml or config.yml)
@@ -528,21 +532,16 @@ export class InitCommand {
528
532
  else {
529
533
  this.log(chalk.dim(`Project config: not created (SDD uses .sdd/config.yaml)`));
530
534
  }
531
- // Getting started (task 7.6: show propose if in profile)
535
+ // Getting started
532
536
  const globalCfg = getGlobalConfig();
533
537
  const activeProfile = this.profileOverride ?? globalCfg.profile ?? 'core';
534
538
  const activeWorkflows = [...getProfileWorkflows(activeProfile, globalCfg.workflows)];
535
539
  this.log();
536
- if (activeWorkflows.includes('propose')) {
537
- this.log(chalk.bold('Getting started:'));
538
- this.log(' Start your first change: /opsx:propose "your idea"');
539
- }
540
- else if (activeWorkflows.includes('new')) {
541
- this.log(chalk.bold('Getting started:'));
542
- this.log(' Start your first change: /opsx:new "your idea"');
543
- }
544
- else {
545
- this.log(`Done. Run '${CLI_NAME} config profile' to configure your workflows.`);
540
+ this.log(chalk.bold('Getting started:'));
541
+ this.log(` Full project bootstrap: ${CLI_NAME} install`);
542
+ this.log(` Canonical first change: ${CLI_NAME} sdd insight "your idea"`);
543
+ if (activeWorkflows.includes('propose') || activeWorkflows.includes('new')) {
544
+ this.log(chalk.dim(' Compatibility slash commands were generated for existing workflows; prefer CodeSDD SDD commands in .sdd-native projects.'));
546
545
  }
547
546
  // Links
548
547
  this.log();
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  declare const agentProviderSchema: z.ZodEnum<{
3
- codex: "codex";
4
3
  opencode: "opencode";
4
+ codex: "codex";
5
5
  deepagents: "deepagents";
6
6
  fake: "fake";
7
7
  "claude-code": "claude-code";
@@ -61,8 +61,8 @@ export declare const agentBindingAdapterSchema: z.ZodObject<{
61
61
  schema_version: z.ZodDefault<z.ZodLiteral<1>>;
62
62
  id: z.ZodString;
63
63
  provider: z.ZodEnum<{
64
- codex: "codex";
65
64
  opencode: "opencode";
65
+ codex: "codex";
66
66
  deepagents: "deepagents";
67
67
  fake: "fake";
68
68
  "claude-code": "claude-code";
@@ -148,16 +148,16 @@ export declare const agentBindingResolutionRequestSchema: z.ZodObject<{
148
148
  "documentation-sync": "documentation-sync";
149
149
  }>;
150
150
  provider: z.ZodOptional<z.ZodEnum<{
151
- codex: "codex";
152
151
  opencode: "opencode";
152
+ codex: "codex";
153
153
  deepagents: "deepagents";
154
154
  fake: "fake";
155
155
  "claude-code": "claude-code";
156
156
  cloudcode: "cloudcode";
157
157
  }>>;
158
158
  allowed_providers: z.ZodDefault<z.ZodArray<z.ZodEnum<{
159
- codex: "codex";
160
159
  opencode: "opencode";
160
+ codex: "codex";
161
161
  deepagents: "deepagents";
162
162
  fake: "fake";
163
163
  "claude-code": "claude-code";
@@ -186,8 +186,8 @@ export declare const agentBindingCandidateSchema: z.ZodObject<{
186
186
  adapter_ref: z.ZodObject<{
187
187
  id: z.ZodString;
188
188
  provider: z.ZodEnum<{
189
- codex: "codex";
190
189
  opencode: "opencode";
190
+ codex: "codex";
191
191
  deepagents: "deepagents";
192
192
  fake: "fake";
193
193
  "claude-code": "claude-code";
@@ -231,16 +231,16 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
231
231
  "documentation-sync": "documentation-sync";
232
232
  }>;
233
233
  provider: z.ZodOptional<z.ZodEnum<{
234
- codex: "codex";
235
234
  opencode: "opencode";
235
+ codex: "codex";
236
236
  deepagents: "deepagents";
237
237
  fake: "fake";
238
238
  "claude-code": "claude-code";
239
239
  cloudcode: "cloudcode";
240
240
  }>>;
241
241
  allowed_providers: z.ZodDefault<z.ZodArray<z.ZodEnum<{
242
- codex: "codex";
243
242
  opencode: "opencode";
243
+ codex: "codex";
244
244
  deepagents: "deepagents";
245
245
  fake: "fake";
246
246
  "claude-code": "claude-code";
@@ -269,8 +269,8 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
269
269
  adapter_ref: z.ZodObject<{
270
270
  id: z.ZodString;
271
271
  provider: z.ZodEnum<{
272
- codex: "codex";
273
272
  opencode: "opencode";
273
+ codex: "codex";
274
274
  deepagents: "deepagents";
275
275
  fake: "fake";
276
276
  "claude-code": "claude-code";
@@ -296,8 +296,8 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
296
296
  adapter_ref: z.ZodObject<{
297
297
  id: z.ZodString;
298
298
  provider: z.ZodEnum<{
299
- codex: "codex";
300
299
  opencode: "opencode";
300
+ codex: "codex";
301
301
  deepagents: "deepagents";
302
302
  fake: "fake";
303
303
  "claude-code": "claude-code";
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export declare const agentRuntimeProviderSchema: z.ZodEnum<{
3
- codex: "codex";
4
3
  opencode: "opencode";
4
+ codex: "codex";
5
5
  deepagents: "deepagents";
6
6
  }>;
7
7
  export declare const agentRuntimeModeSchema: z.ZodEnum<{
@@ -32,8 +32,8 @@ export declare const agentRuntimeCommandPlanRequestSchema: z.ZodObject<{
32
32
  schema_version: z.ZodDefault<z.ZodLiteral<1>>;
33
33
  feature_ref: z.ZodString;
34
34
  provider: z.ZodEnum<{
35
- codex: "codex";
36
35
  opencode: "opencode";
36
+ codex: "codex";
37
37
  deepagents: "deepagents";
38
38
  }>;
39
39
  mode: z.ZodDefault<z.ZodEnum<{
@@ -73,8 +73,8 @@ export declare const agentRuntimeCommandPlanSchema: z.ZodObject<{
73
73
  schema_version: z.ZodDefault<z.ZodLiteral<1>>;
74
74
  feature_ref: z.ZodString;
75
75
  provider: z.ZodEnum<{
76
- codex: "codex";
77
76
  opencode: "opencode";
77
+ codex: "codex";
78
78
  deepagents: "deepagents";
79
79
  }>;
80
80
  mode: z.ZodDefault<z.ZodEnum<{
@@ -104,8 +104,8 @@ export declare const agentRuntimeCommandPlanSchema: z.ZodObject<{
104
104
  }>>>;
105
105
  }, z.core.$strip>;
106
106
  provider: z.ZodEnum<{
107
- codex: "codex";
108
107
  opencode: "opencode";
108
+ codex: "codex";
109
109
  deepagents: "deepagents";
110
110
  }>;
111
111
  command: z.ZodOptional<z.ZodObject<{
@@ -0,0 +1,14 @@
1
+ import type { ArtifactIdAllocatorState, ArtifactIdAllocatorType } from './artifact-id-allocator.js';
2
+ export interface AllocatorRecoveryFinding {
3
+ code: 'counter-behind-reservations' | 'branch-lag';
4
+ message: string;
5
+ ref?: string;
6
+ }
7
+ export interface AllocatorRecoveryPlan {
8
+ recovered_counters: Partial<Record<ArtifactIdAllocatorType, number>>;
9
+ findings: AllocatorRecoveryFinding[];
10
+ }
11
+ export declare function buildAllocatorRecoveryPlan(state: ArtifactIdAllocatorState, options?: {
12
+ local_revisions?: Record<string, number>;
13
+ }): AllocatorRecoveryPlan;
14
+ //# sourceMappingURL=allocator-recovery.d.ts.map
@@ -0,0 +1,30 @@
1
+ export function buildAllocatorRecoveryPlan(state, options = {}) {
2
+ const recovered = { ...state.counters };
3
+ const findings = [];
4
+ for (const reservation of state.reservations) {
5
+ const current = recovered[reservation.artifact_type] ?? 0;
6
+ if (reservation.sequence > current) {
7
+ recovered[reservation.artifact_type] = reservation.sequence;
8
+ findings.push({
9
+ code: 'counter-behind-reservations',
10
+ message: `${reservation.artifact_type} counter recovered from ${current} to ${reservation.sequence}.`,
11
+ ref: reservation.artifact_id,
12
+ });
13
+ }
14
+ }
15
+ for (const [artifactId, remoteRevision] of Object.entries(state.canonical_revisions)) {
16
+ const localRevision = options.local_revisions?.[artifactId] ?? remoteRevision;
17
+ if (localRevision < remoteRevision) {
18
+ findings.push({
19
+ code: 'branch-lag',
20
+ message: `${artifactId} local revision ${localRevision} is behind canonical revision ${remoteRevision}.`,
21
+ ref: artifactId,
22
+ });
23
+ }
24
+ }
25
+ return {
26
+ recovered_counters: recovered,
27
+ findings,
28
+ };
29
+ }
30
+ //# sourceMappingURL=allocator-recovery.js.map
@@ -0,0 +1,18 @@
1
+ import type { ArtifactIdAllocatorState, ArtifactIdAllocatorType } from './artifact-id-allocator.js';
2
+ export interface AllocatorSecurityPolicy {
3
+ max_reservations_per_tenant?: number;
4
+ max_reservations_per_type?: Partial<Record<ArtifactIdAllocatorType, number>>;
5
+ replay_window_ms?: number;
6
+ }
7
+ export interface AllocatorSecurityDecision {
8
+ allowed: boolean;
9
+ code: 'allowed' | 'tenant-quota-exceeded' | 'type-quota-exceeded' | 'replay-window-expired';
10
+ reason: string;
11
+ }
12
+ export declare function evaluateAllocatorSecurityPolicy(state: ArtifactIdAllocatorState, input: {
13
+ tenant_id?: string;
14
+ artifact_type: ArtifactIdAllocatorType;
15
+ idempotency_key: string;
16
+ now: string;
17
+ }, policy: AllocatorSecurityPolicy): AllocatorSecurityDecision;
18
+ //# sourceMappingURL=allocator-security.d.ts.map
@@ -0,0 +1,36 @@
1
+ export function evaluateAllocatorSecurityPolicy(state, input, policy) {
2
+ if (policy.max_reservations_per_tenant !== undefined && input.tenant_id) {
3
+ const tenantReservations = state.reservations.filter((reservation) => reservation.tenant_id === input.tenant_id).length;
4
+ if (tenantReservations >= policy.max_reservations_per_tenant) {
5
+ return {
6
+ allowed: false,
7
+ code: 'tenant-quota-exceeded',
8
+ reason: `Tenant ${input.tenant_id} has reached reservation quota ${policy.max_reservations_per_tenant}.`,
9
+ };
10
+ }
11
+ }
12
+ const typeQuota = policy.max_reservations_per_type?.[input.artifact_type];
13
+ if (typeQuota !== undefined && (state.counters[input.artifact_type] ?? 0) >= typeQuota) {
14
+ return {
15
+ allowed: false,
16
+ code: 'type-quota-exceeded',
17
+ reason: `${input.artifact_type} reservation quota ${typeQuota} has been reached.`,
18
+ };
19
+ }
20
+ if (policy.replay_window_ms !== undefined) {
21
+ const existing = state.reservations.find((reservation) => reservation.idempotency_key === input.idempotency_key);
22
+ if (existing && new Date(input.now).getTime() - new Date(existing.reserved_at).getTime() > policy.replay_window_ms) {
23
+ return {
24
+ allowed: false,
25
+ code: 'replay-window-expired',
26
+ reason: `Idempotency key ${input.idempotency_key} is outside the replay window.`,
27
+ };
28
+ }
29
+ }
30
+ return {
31
+ allowed: true,
32
+ code: 'allowed',
33
+ reason: 'Allocator security policy allows the request.',
34
+ };
35
+ }
36
+ //# sourceMappingURL=allocator-security.js.map
@@ -0,0 +1,111 @@
1
+ export declare const CODESDD_API_FOUNDATION_SHARED_BASELINE: {
2
+ readonly id: "foundation-api-shared-baseline";
3
+ readonly version: 1;
4
+ readonly foundation_reference: "devtrack-foundation-api";
5
+ };
6
+ export declare const CODESDD_API_SHARED_BASELINE_REQUIREMENTS: readonly ["openapi-swagger-docs", "env-example", "package-json-scripts", "application-usecase-boundary", "dto-validation", "structured-api-errors", "auth-authz-planning", "route-and-usecase-tests"];
7
+ export declare const CODESDD_API_SHARED_BASELINE_QUALITY_GATES: readonly ["openapi-docs-required", "env-example-required", "package-scripts-required", "application-usecase-route-boundary", "dto-validation-required", "structured-error-contract-required", "authz-planning-required", "route-usecase-tests-required"];
8
+ export type CodeSddApiSharedBaselineRequirementId = (typeof CODESDD_API_SHARED_BASELINE_REQUIREMENTS)[number];
9
+ export interface CodeSddApiSharedBaselineRequirement {
10
+ id: CodeSddApiSharedBaselineRequirementId;
11
+ title: string;
12
+ foundation_reference: typeof CODESDD_API_FOUNDATION_SHARED_BASELINE.foundation_reference;
13
+ severity: 'P0';
14
+ phase: 'planning' | 'scaffold' | 'implementation' | 'validation';
15
+ quality_gate: (typeof CODESDD_API_SHARED_BASELINE_QUALITY_GATES)[number];
16
+ contract_rule_refs: readonly string[];
17
+ required_artifacts: readonly string[];
18
+ required_evidence: readonly string[];
19
+ }
20
+ export declare const CODESDD_API_SHARED_BASELINE_REQUIREMENT_DEFINITIONS: {
21
+ 'openapi-swagger-docs': {
22
+ id: "openapi-swagger-docs";
23
+ title: string;
24
+ foundation_reference: "devtrack-foundation-api";
25
+ severity: "P0";
26
+ phase: "scaffold";
27
+ quality_gate: "openapi-docs-required";
28
+ contract_rule_refs: string[];
29
+ required_artifacts: string[];
30
+ required_evidence: string[];
31
+ };
32
+ 'env-example': {
33
+ id: "env-example";
34
+ title: string;
35
+ foundation_reference: "devtrack-foundation-api";
36
+ severity: "P0";
37
+ phase: "scaffold";
38
+ quality_gate: "env-example-required";
39
+ contract_rule_refs: string[];
40
+ required_artifacts: string[];
41
+ required_evidence: string[];
42
+ };
43
+ 'package-json-scripts': {
44
+ id: "package-json-scripts";
45
+ title: string;
46
+ foundation_reference: "devtrack-foundation-api";
47
+ severity: "P0";
48
+ phase: "scaffold";
49
+ quality_gate: "package-scripts-required";
50
+ contract_rule_refs: string[];
51
+ required_artifacts: string[];
52
+ required_evidence: string[];
53
+ };
54
+ 'application-usecase-boundary': {
55
+ id: "application-usecase-boundary";
56
+ title: string;
57
+ foundation_reference: "devtrack-foundation-api";
58
+ severity: "P0";
59
+ phase: "implementation";
60
+ quality_gate: "application-usecase-route-boundary";
61
+ contract_rule_refs: string[];
62
+ required_artifacts: string[];
63
+ required_evidence: string[];
64
+ };
65
+ 'dto-validation': {
66
+ id: "dto-validation";
67
+ title: string;
68
+ foundation_reference: "devtrack-foundation-api";
69
+ severity: "P0";
70
+ phase: "implementation";
71
+ quality_gate: "dto-validation-required";
72
+ contract_rule_refs: string[];
73
+ required_artifacts: string[];
74
+ required_evidence: string[];
75
+ };
76
+ 'structured-api-errors': {
77
+ id: "structured-api-errors";
78
+ title: string;
79
+ foundation_reference: "devtrack-foundation-api";
80
+ severity: "P0";
81
+ phase: "implementation";
82
+ quality_gate: "structured-error-contract-required";
83
+ contract_rule_refs: string[];
84
+ required_artifacts: string[];
85
+ required_evidence: string[];
86
+ };
87
+ 'auth-authz-planning': {
88
+ id: "auth-authz-planning";
89
+ title: string;
90
+ foundation_reference: "devtrack-foundation-api";
91
+ severity: "P0";
92
+ phase: "planning";
93
+ quality_gate: "authz-planning-required";
94
+ contract_rule_refs: string[];
95
+ required_artifacts: string[];
96
+ required_evidence: string[];
97
+ };
98
+ 'route-and-usecase-tests': {
99
+ id: "route-and-usecase-tests";
100
+ title: string;
101
+ foundation_reference: "devtrack-foundation-api";
102
+ severity: "P0";
103
+ phase: "validation";
104
+ quality_gate: "route-usecase-tests-required";
105
+ contract_rule_refs: string[];
106
+ required_artifacts: string[];
107
+ required_evidence: string[];
108
+ };
109
+ };
110
+ export declare function getCodeSddApiSharedBaselineRequirements(): CodeSddApiSharedBaselineRequirement[];
111
+ //# sourceMappingURL=api-foundation-baseline.d.ts.map
@@ -0,0 +1,151 @@
1
+ export const CODESDD_API_FOUNDATION_SHARED_BASELINE = {
2
+ id: 'foundation-api-shared-baseline',
3
+ version: 1,
4
+ foundation_reference: 'devtrack-foundation-api',
5
+ };
6
+ export const CODESDD_API_SHARED_BASELINE_REQUIREMENTS = [
7
+ 'openapi-swagger-docs',
8
+ 'env-example',
9
+ 'package-json-scripts',
10
+ 'application-usecase-boundary',
11
+ 'dto-validation',
12
+ 'structured-api-errors',
13
+ 'auth-authz-planning',
14
+ 'route-and-usecase-tests',
15
+ ];
16
+ export const CODESDD_API_SHARED_BASELINE_QUALITY_GATES = [
17
+ 'openapi-docs-required',
18
+ 'env-example-required',
19
+ 'package-scripts-required',
20
+ 'application-usecase-route-boundary',
21
+ 'dto-validation-required',
22
+ 'structured-error-contract-required',
23
+ 'authz-planning-required',
24
+ 'route-usecase-tests-required',
25
+ ];
26
+ export const CODESDD_API_SHARED_BASELINE_REQUIREMENT_DEFINITIONS = {
27
+ 'openapi-swagger-docs': {
28
+ id: 'openapi-swagger-docs',
29
+ title: 'Swagger/OpenAPI documentation',
30
+ foundation_reference: 'devtrack-foundation-api',
31
+ severity: 'P0',
32
+ phase: 'scaffold',
33
+ quality_gate: 'openapi-docs-required',
34
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-OPENAPI-001', 'DTAPI-P0-TOOL-BASELINE-001'],
35
+ required_artifacts: ['package.json', '.env.example', 'src/main.ts', 'src/presentation/**'],
36
+ required_evidence: [
37
+ '@nestjs/swagger dependency is present',
38
+ 'DocumentBuilder and SwaggerModule bootstrap /docs',
39
+ 'controllers and DTOs include Swagger decorators',
40
+ ],
41
+ },
42
+ 'env-example': {
43
+ id: 'env-example',
44
+ title: '.env.example placeholder contract',
45
+ foundation_reference: 'devtrack-foundation-api',
46
+ severity: 'P0',
47
+ phase: 'scaffold',
48
+ quality_gate: 'env-example-required',
49
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-TOOL-BASELINE-001'],
50
+ required_artifacts: ['.env.example'],
51
+ required_evidence: [
52
+ 'runtime variables have placeholder values',
53
+ 'Swagger server settings are represented when OpenAPI is enabled',
54
+ 'no secret or credential values are emitted',
55
+ ],
56
+ },
57
+ 'package-json-scripts': {
58
+ id: 'package-json-scripts',
59
+ title: 'Operational package scripts and runtime bootstrap',
60
+ foundation_reference: 'devtrack-foundation-api',
61
+ severity: 'P0',
62
+ phase: 'scaffold',
63
+ quality_gate: 'package-scripts-required',
64
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-TOOL-BASELINE-001', 'DTAPI-P0-RUNTIME-SCRIPTS-001'],
65
+ required_artifacts: ['package.json', 'scripts/cleanup.sh', 'scripts/kill-port.js'],
66
+ required_evidence: [
67
+ 'build, start, start:dev, start:prod, lint, test, coverage, e2e, cleanup, and cleanup:install scripts are present',
68
+ 'cleanup removes dependency installs, build outputs, caches, lockfiles, and compilation residue unless an ADR preserves a canonical lockfile',
69
+ 'start and start:dev run a configured-port preflight that terminates the listener before Nest starts',
70
+ 'scripts can be invoked with npm or pnpm, while nested package-script calls use npm run/npm install so Docker images do not require pnpm',
71
+ 'migration scripts are present when persistence is included',
72
+ ],
73
+ },
74
+ 'application-usecase-boundary': {
75
+ id: 'application-usecase-boundary',
76
+ title: 'Application use-case and input-port boundary',
77
+ foundation_reference: 'devtrack-foundation-api',
78
+ severity: 'P0',
79
+ phase: 'implementation',
80
+ quality_gate: 'application-usecase-route-boundary',
81
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-USECASE-001', 'DTAPI-P0-TOOL-BASELINE-001'],
82
+ required_artifacts: ['src/application/**', 'src/presentation/**'],
83
+ required_evidence: [
84
+ 'each user-facing route calls an application input port',
85
+ 'each input port delegates business orchestration to a use case',
86
+ ],
87
+ },
88
+ 'dto-validation': {
89
+ id: 'dto-validation',
90
+ title: 'DTO validation and documented request shape',
91
+ foundation_reference: 'devtrack-foundation-api',
92
+ severity: 'P0',
93
+ phase: 'implementation',
94
+ quality_gate: 'dto-validation-required',
95
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-OPENAPI-001'],
96
+ required_artifacts: ['src/main.ts', 'src/presentation/**/dtos/**'],
97
+ required_evidence: [
98
+ 'global validation pipe is configured',
99
+ 'request DTOs use class-validator decorators',
100
+ 'DTOs include Swagger property metadata',
101
+ ],
102
+ },
103
+ 'structured-api-errors': {
104
+ id: 'structured-api-errors',
105
+ title: 'Structured API error responses',
106
+ foundation_reference: 'devtrack-foundation-api',
107
+ severity: 'P0',
108
+ phase: 'implementation',
109
+ quality_gate: 'structured-error-contract-required',
110
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-TOOL-BASELINE-001'],
111
+ required_artifacts: ['src/presentation/dtos/api-error-response.dto.ts', 'src/presentation/**'],
112
+ required_evidence: [
113
+ 'controllers document error responses',
114
+ 'error DTO avoids leaking internal provider or secret data',
115
+ ],
116
+ },
117
+ 'auth-authz-planning': {
118
+ id: 'auth-authz-planning',
119
+ title: 'Authentication and authorization planning',
120
+ foundation_reference: 'devtrack-foundation-api',
121
+ severity: 'P0',
122
+ phase: 'planning',
123
+ quality_gate: 'authz-planning-required',
124
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P0-AUTH-PLAN-001', 'DTAPI-P0-TOOL-BASELINE-001'],
125
+ required_artifacts: ['FEAT quality evidence', 'src/presentation/**/guards/**'],
126
+ required_evidence: [
127
+ 'route public/protected decision is recorded',
128
+ 'guard, decorator, role, permission, or policy choice is recorded',
129
+ 'Swagger security scheme is documented for protected routes',
130
+ ],
131
+ },
132
+ 'route-and-usecase-tests': {
133
+ id: 'route-and-usecase-tests',
134
+ title: 'Route and use-case test evidence',
135
+ foundation_reference: 'devtrack-foundation-api',
136
+ severity: 'P0',
137
+ phase: 'validation',
138
+ quality_gate: 'route-usecase-tests-required',
139
+ contract_rule_refs: ['DTAPI-P0-SHARED-BASELINE-001', 'DTAPI-P1-EVIDENCE-001'],
140
+ required_artifacts: ['test/**', 'coverage/**'],
141
+ required_evidence: [
142
+ 'route/controller behavior is covered',
143
+ 'application use-case behavior is covered',
144
+ 'validation evidence is recorded in the FEAT quality artifact',
145
+ ],
146
+ },
147
+ };
148
+ export function getCodeSddApiSharedBaselineRequirements() {
149
+ return CODESDD_API_SHARED_BASELINE_REQUIREMENTS.map((requirementId) => CODESDD_API_SHARED_BASELINE_REQUIREMENT_DEFINITIONS[requirementId]);
150
+ }
151
+ //# sourceMappingURL=api-foundation-baseline.js.map
@@ -0,0 +1,114 @@
1
+ export declare const CODESDD_FULL_FOUNDATION_COMPATIBLE_PROFILE_ID = "full-foundation-compatible";
2
+ export declare const CODESDD_FULL_FOUNDATION_PARITY_MATRIX: {
3
+ readonly id: "full-foundation-compatible-parity-matrix";
4
+ readonly version: 1;
5
+ readonly profile_id: "full-foundation-compatible";
6
+ readonly foundation_reference: "devtrack-foundation-api";
7
+ };
8
+ export declare const CODESDD_FULL_FOUNDATION_PARITY_DIMENSIONS: readonly ["architecture-roots", "contract-boundaries", "api-documentation", "env-and-runtime-config", "package-scripts", "auth-and-authorization", "persistence-typeorm", "validation-and-errors", "evidence-and-quality-gates"];
9
+ export declare const CODESDD_FULL_FOUNDATION_PARITY_QUALITY_GATES: readonly ["foundation-parity-matrix-required", "foundation-architecture-roots-parity", "foundation-contract-boundaries-parity", "foundation-api-documentation-parity", "foundation-env-runtime-config-parity", "foundation-package-scripts-parity", "foundation-auth-authorization-parity", "foundation-typeorm-persistence-parity", "foundation-validation-errors-parity", "foundation-evidence-quality-gates-parity"];
10
+ export type CodeSddFullFoundationParityDimensionId = (typeof CODESDD_FULL_FOUNDATION_PARITY_DIMENSIONS)[number];
11
+ export interface CodeSddFullFoundationParityDimension {
12
+ id: CodeSddFullFoundationParityDimensionId;
13
+ title: string;
14
+ foundation_reference: typeof CODESDD_FULL_FOUNDATION_PARITY_MATRIX.foundation_reference;
15
+ severity: 'P0';
16
+ quality_gate: (typeof CODESDD_FULL_FOUNDATION_PARITY_QUALITY_GATES)[number];
17
+ contract_rule_refs: readonly string[];
18
+ required_artifacts: readonly string[];
19
+ required_evidence: readonly string[];
20
+ }
21
+ export declare const CODESDD_FULL_FOUNDATION_PARITY_DIMENSION_DEFINITIONS: {
22
+ 'architecture-roots': {
23
+ id: "architecture-roots";
24
+ title: string;
25
+ foundation_reference: "devtrack-foundation-api";
26
+ severity: "P0";
27
+ quality_gate: "foundation-architecture-roots-parity";
28
+ contract_rule_refs: string[];
29
+ required_artifacts: string[];
30
+ required_evidence: string[];
31
+ };
32
+ 'contract-boundaries': {
33
+ id: "contract-boundaries";
34
+ title: string;
35
+ foundation_reference: "devtrack-foundation-api";
36
+ severity: "P0";
37
+ quality_gate: "foundation-contract-boundaries-parity";
38
+ contract_rule_refs: string[];
39
+ required_artifacts: string[];
40
+ required_evidence: string[];
41
+ };
42
+ 'api-documentation': {
43
+ id: "api-documentation";
44
+ title: string;
45
+ foundation_reference: "devtrack-foundation-api";
46
+ severity: "P0";
47
+ quality_gate: "foundation-api-documentation-parity";
48
+ contract_rule_refs: string[];
49
+ required_artifacts: string[];
50
+ required_evidence: string[];
51
+ };
52
+ 'env-and-runtime-config': {
53
+ id: "env-and-runtime-config";
54
+ title: string;
55
+ foundation_reference: "devtrack-foundation-api";
56
+ severity: "P0";
57
+ quality_gate: "foundation-env-runtime-config-parity";
58
+ contract_rule_refs: string[];
59
+ required_artifacts: string[];
60
+ required_evidence: string[];
61
+ };
62
+ 'package-scripts': {
63
+ id: "package-scripts";
64
+ title: string;
65
+ foundation_reference: "devtrack-foundation-api";
66
+ severity: "P0";
67
+ quality_gate: "foundation-package-scripts-parity";
68
+ contract_rule_refs: string[];
69
+ required_artifacts: string[];
70
+ required_evidence: string[];
71
+ };
72
+ 'auth-and-authorization': {
73
+ id: "auth-and-authorization";
74
+ title: string;
75
+ foundation_reference: "devtrack-foundation-api";
76
+ severity: "P0";
77
+ quality_gate: "foundation-auth-authorization-parity";
78
+ contract_rule_refs: string[];
79
+ required_artifacts: string[];
80
+ required_evidence: string[];
81
+ };
82
+ 'persistence-typeorm': {
83
+ id: "persistence-typeorm";
84
+ title: string;
85
+ foundation_reference: "devtrack-foundation-api";
86
+ severity: "P0";
87
+ quality_gate: "foundation-typeorm-persistence-parity";
88
+ contract_rule_refs: string[];
89
+ required_artifacts: string[];
90
+ required_evidence: string[];
91
+ };
92
+ 'validation-and-errors': {
93
+ id: "validation-and-errors";
94
+ title: string;
95
+ foundation_reference: "devtrack-foundation-api";
96
+ severity: "P0";
97
+ quality_gate: "foundation-validation-errors-parity";
98
+ contract_rule_refs: string[];
99
+ required_artifacts: string[];
100
+ required_evidence: string[];
101
+ };
102
+ 'evidence-and-quality-gates': {
103
+ id: "evidence-and-quality-gates";
104
+ title: string;
105
+ foundation_reference: "devtrack-foundation-api";
106
+ severity: "P0";
107
+ quality_gate: "foundation-evidence-quality-gates-parity";
108
+ contract_rule_refs: string[];
109
+ required_artifacts: string[];
110
+ required_evidence: string[];
111
+ };
112
+ };
113
+ export declare function getCodeSddFullFoundationParityMatrix(): CodeSddFullFoundationParityDimension[];
114
+ //# sourceMappingURL=api-foundation-parity.d.ts.map