@ai-sdlc/orchestrator 0.6.0 → 0.10.0

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 (209) hide show
  1. package/dist/__test-helpers/git-env.d.ts +40 -0
  2. package/dist/__test-helpers/git-env.js +73 -0
  3. package/dist/admission-composite.d.ts +89 -0
  4. package/dist/admission-composite.js +241 -0
  5. package/dist/admission-enrichment.d.ts +142 -0
  6. package/dist/admission-enrichment.js +341 -0
  7. package/dist/admission-hc.d.ts +81 -0
  8. package/dist/admission-hc.js +94 -0
  9. package/dist/admission-score.d.ts +109 -5
  10. package/dist/admission-score.js +90 -11
  11. package/dist/analysis/analyzer.js +3 -2
  12. package/dist/analysis/convention-detector.d.ts +85 -2
  13. package/dist/analysis/convention-detector.js +375 -70
  14. package/dist/analysis/diff-analyzer.d.ts +33 -0
  15. package/dist/analysis/diff-analyzer.js +122 -0
  16. package/dist/analysis/hotspot-analyzer.js +3 -1
  17. package/dist/analysis/index.d.ts +2 -1
  18. package/dist/analysis/index.js +2 -1
  19. package/dist/artifacts/index.d.ts +65 -0
  20. package/dist/artifacts/index.js +142 -0
  21. package/dist/backlog-adapter.d.ts +121 -0
  22. package/dist/backlog-adapter.js +438 -0
  23. package/dist/calibration.d.ts +43 -0
  24. package/dist/calibration.js +76 -0
  25. package/dist/cli/commands/agents.d.ts +24 -0
  26. package/dist/cli/commands/agents.js +66 -1
  27. package/dist/cli/commands/git-remote.d.ts +74 -0
  28. package/dist/cli/commands/git-remote.js +170 -0
  29. package/dist/cli/commands/health.d.ts +4 -0
  30. package/dist/cli/commands/health.js +13 -1
  31. package/dist/cli/commands/init-features.d.ts +208 -0
  32. package/dist/cli/commands/init-features.js +473 -0
  33. package/dist/cli/commands/init-templates.d.ts +104 -0
  34. package/dist/cli/commands/init-templates.js +399 -0
  35. package/dist/cli/commands/init.d.ts +48 -0
  36. package/dist/cli/commands/init.js +322 -23
  37. package/dist/cli/commands/mcp-setup.d.ts +31 -0
  38. package/dist/cli/commands/mcp-setup.js +78 -8
  39. package/dist/cli/formatters/table.js +15 -2
  40. package/dist/cli/index.d.ts +14 -1
  41. package/dist/cli/index.js +81 -20
  42. package/dist/cli/versions.d.ts +57 -0
  43. package/dist/cli/versions.js +128 -0
  44. package/dist/code-area-classifier.d.ts +21 -0
  45. package/dist/code-area-classifier.js +48 -0
  46. package/dist/config.d.ts +33 -1
  47. package/dist/config.js +78 -8
  48. package/dist/database/adapters/external.d.ts +24 -0
  49. package/dist/database/adapters/external.js +80 -0
  50. package/dist/database/adapters/neon.d.ts +41 -0
  51. package/dist/database/adapters/neon.js +98 -0
  52. package/dist/database/adapters/pg-snapshot-restore.d.ts +28 -0
  53. package/dist/database/adapters/pg-snapshot-restore.js +68 -0
  54. package/dist/database/adapters/sqlite-copy.d.ts +32 -0
  55. package/dist/database/adapters/sqlite-copy.js +145 -0
  56. package/dist/database/connection-injection.d.ts +35 -0
  57. package/dist/database/connection-injection.js +93 -0
  58. package/dist/database/index.d.ts +12 -0
  59. package/dist/database/index.js +23 -0
  60. package/dist/database/registry.d.ts +13 -0
  61. package/dist/database/registry.js +27 -0
  62. package/dist/database/topology.d.ts +52 -0
  63. package/dist/database/topology.js +44 -0
  64. package/dist/database/types.d.ts +89 -0
  65. package/dist/database/types.js +26 -0
  66. package/dist/design-authority.d.ts +53 -0
  67. package/dist/design-authority.js +84 -0
  68. package/dist/design-lookahead.d.ts +64 -0
  69. package/dist/design-lookahead.js +86 -0
  70. package/dist/design-quality-trend.d.ts +87 -0
  71. package/dist/design-quality-trend.js +190 -0
  72. package/dist/design-system-context.d.ts +46 -0
  73. package/dist/design-system-context.js +80 -0
  74. package/dist/design-system-correction-loop.d.ts +64 -0
  75. package/dist/design-system-correction-loop.js +128 -0
  76. package/dist/design-system-metrics.d.ts +61 -0
  77. package/dist/design-system-metrics.js +104 -0
  78. package/dist/design-system-stewardship.d.ts +22 -0
  79. package/dist/design-system-stewardship.js +85 -0
  80. package/dist/design-system-validation.d.ts +37 -0
  81. package/dist/design-system-validation.js +88 -0
  82. package/dist/dispatch/index.d.ts +4 -0
  83. package/dist/dispatch/index.js +4 -0
  84. package/dist/dispatch/merge-gate.d.ts +46 -0
  85. package/dist/dispatch/merge-gate.js +90 -0
  86. package/dist/dispatch/requeue.d.ts +57 -0
  87. package/dist/dispatch/requeue.js +131 -0
  88. package/dist/dispatch/worker-pool.d.ts +62 -0
  89. package/dist/dispatch/worker-pool.js +60 -0
  90. package/dist/execute.d.ts +40 -0
  91. package/dist/execute.js +188 -15
  92. package/dist/fix-ci.js +8 -1
  93. package/dist/fix-review.js +8 -1
  94. package/dist/harness/adapters/claude-code.d.ts +29 -0
  95. package/dist/harness/adapters/claude-code.js +191 -0
  96. package/dist/harness/adapters/codex.d.ts +25 -0
  97. package/dist/harness/adapters/codex.js +61 -0
  98. package/dist/harness/independence.d.ts +51 -0
  99. package/dist/harness/independence.js +67 -0
  100. package/dist/harness/index.d.ts +14 -0
  101. package/dist/harness/index.js +20 -0
  102. package/dist/harness/registry.d.ts +17 -0
  103. package/dist/harness/registry.js +31 -0
  104. package/dist/harness/types.d.ts +123 -0
  105. package/dist/harness/types.js +8 -0
  106. package/dist/harness/version-probe.d.ts +14 -0
  107. package/dist/harness/version-probe.js +123 -0
  108. package/dist/index.d.ts +30 -4
  109. package/dist/index.js +35 -2
  110. package/dist/models/classifier.d.ts +78 -0
  111. package/dist/models/classifier.js +277 -0
  112. package/dist/models/index.d.ts +3 -0
  113. package/dist/models/index.js +3 -0
  114. package/dist/models/registry.d.ts +97 -0
  115. package/dist/models/registry.js +173 -0
  116. package/dist/pillar-breakdown.d.ts +85 -0
  117. package/dist/pillar-breakdown.js +162 -0
  118. package/dist/priority.d.ts +5 -0
  119. package/dist/priority.js +18 -5
  120. package/dist/review-meta.d.ts +65 -0
  121. package/dist/review-meta.js +149 -0
  122. package/dist/review.d.ts +4 -0
  123. package/dist/review.js +12 -2
  124. package/dist/runners/claude-code-sdk.d.ts +31 -0
  125. package/dist/runners/claude-code-sdk.js +238 -0
  126. package/dist/runners/claude-code.d.ts +3 -0
  127. package/dist/runners/claude-code.js +30 -66
  128. package/dist/runners/codex.js +4 -1
  129. package/dist/runners/copilot.js +4 -1
  130. package/dist/runners/cursor.js +4 -1
  131. package/dist/runners/git-utils.d.ts +81 -0
  132. package/dist/runners/git-utils.js +201 -0
  133. package/dist/runners/index.d.ts +3 -0
  134. package/dist/runners/index.js +3 -0
  135. package/dist/runners/review-agent.d.ts +20 -0
  136. package/dist/runners/review-agent.js +171 -41
  137. package/dist/runners/runner-registry.js +10 -0
  138. package/dist/runners/sdk-review-runner.d.ts +65 -0
  139. package/dist/runners/sdk-review-runner.js +185 -0
  140. package/dist/runners/security-triage.d.ts +20 -4
  141. package/dist/runners/security-triage.js +39 -15
  142. package/dist/runners/types.d.ts +6 -0
  143. package/dist/runtime/attestations.d.ts +766 -0
  144. package/dist/runtime/attestations.js +1195 -0
  145. package/dist/runtime/git-env.d.ts +53 -0
  146. package/dist/runtime/git-env.js +60 -0
  147. package/dist/runtime/index.d.ts +7 -0
  148. package/dist/runtime/index.js +7 -0
  149. package/dist/runtime/parallelism-flag.d.ts +28 -0
  150. package/dist/runtime/parallelism-flag.js +39 -0
  151. package/dist/runtime/port-allocator.d.ts +32 -0
  152. package/dist/runtime/port-allocator.js +96 -0
  153. package/dist/runtime/worktree-pool.d.ts +86 -0
  154. package/dist/runtime/worktree-pool.js +204 -0
  155. package/dist/runtime/worktree.d.ts +25 -0
  156. package/dist/runtime/worktree.js +111 -0
  157. package/dist/sa-scoring/auto-calibrate.d.ts +69 -0
  158. package/dist/sa-scoring/auto-calibrate.js +107 -0
  159. package/dist/sa-scoring/c1-sa2-computable.d.ts +42 -0
  160. package/dist/sa-scoring/c1-sa2-computable.js +59 -0
  161. package/dist/sa-scoring/composite.d.ts +107 -0
  162. package/dist/sa-scoring/composite.js +139 -0
  163. package/dist/sa-scoring/depparse-client.d.ts +79 -0
  164. package/dist/sa-scoring/depparse-client.js +187 -0
  165. package/dist/sa-scoring/did-compiler.d.ts +122 -0
  166. package/dist/sa-scoring/did-compiler.js +286 -0
  167. package/dist/sa-scoring/drift-monitor.d.ts +84 -0
  168. package/dist/sa-scoring/drift-monitor.js +186 -0
  169. package/dist/sa-scoring/exemplar-bank.d.ts +78 -0
  170. package/dist/sa-scoring/exemplar-bank.js +154 -0
  171. package/dist/sa-scoring/feedback-store.d.ts +100 -0
  172. package/dist/sa-scoring/feedback-store.js +156 -0
  173. package/dist/sa-scoring/index.d.ts +71 -0
  174. package/dist/sa-scoring/index.js +158 -0
  175. package/dist/sa-scoring/layer1-deterministic.d.ts +115 -0
  176. package/dist/sa-scoring/layer1-deterministic.js +298 -0
  177. package/dist/sa-scoring/layer2-structural.d.ts +71 -0
  178. package/dist/sa-scoring/layer2-structural.js +151 -0
  179. package/dist/sa-scoring/layer3-llm.d.ts +86 -0
  180. package/dist/sa-scoring/layer3-llm.js +282 -0
  181. package/dist/sa-scoring/rescore-orchestrator.d.ts +52 -0
  182. package/dist/sa-scoring/rescore-orchestrator.js +47 -0
  183. package/dist/scheduling/burn-down.d.ts +27 -0
  184. package/dist/scheduling/burn-down.js +43 -0
  185. package/dist/scheduling/calibration.d.ts +42 -0
  186. package/dist/scheduling/calibration.js +150 -0
  187. package/dist/scheduling/index.d.ts +8 -0
  188. package/dist/scheduling/index.js +8 -0
  189. package/dist/scheduling/ledger.d.ts +59 -0
  190. package/dist/scheduling/ledger.js +216 -0
  191. package/dist/scheduling/off-peak.d.ts +27 -0
  192. package/dist/scheduling/off-peak.js +112 -0
  193. package/dist/scheduling/schedule-decision.d.ts +39 -0
  194. package/dist/scheduling/schedule-decision.js +89 -0
  195. package/dist/scheduling/tier-analysis.d.ts +47 -0
  196. package/dist/scheduling/tier-analysis.js +81 -0
  197. package/dist/scheduling/types.d.ts +140 -0
  198. package/dist/scheduling/types.js +11 -0
  199. package/dist/shared.d.ts +13 -0
  200. package/dist/shared.js +32 -0
  201. package/dist/state/schema.d.ts +5 -1
  202. package/dist/state/schema.js +223 -1
  203. package/dist/state/store.d.ts +55 -1
  204. package/dist/state/store.js +342 -7
  205. package/dist/state/types.d.ts +139 -0
  206. package/dist/types.d.ts +1 -1
  207. package/dist/validate-agent-output.js +4 -1
  208. package/dist/watch.js +6 -0
  209. package/package.json +3 -2
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Subscription-aware scheduling types per RFC-0010 §14. The dispatcher consults a
3
+ * SubscriptionLedger keyed by (harness, accountId, tenant) on every admission decision
4
+ * so parallel agents on the same vendor account correctly share quota.
5
+ */
6
+ export type BillingMode = 'session-window' | 'monthly-cap' | 'pay-per-token';
7
+ export type QuotaSource = 'self-tracked' | 'authoritative-api' | 'authoritative-with-fallback';
8
+ export interface OffPeakSchedule {
9
+ enabled: boolean;
10
+ multiplier: number;
11
+ schedule: Array<{
12
+ /** IANA timezone (e.g., 'America/Los_Angeles'). */
13
+ tz: string;
14
+ /** Hour range like '22-06' (wraps midnight). */
15
+ hours: string;
16
+ /** Optional comma-separated days like 'Sat,Sun'. */
17
+ daysOfWeek?: string;
18
+ }>;
19
+ /** ISO 8601 date the operator last verified the schedule against vendor docs. */
20
+ lastVerified?: string;
21
+ }
22
+ export interface SubscriptionPlan {
23
+ /** Resource metadata.name. */
24
+ name: string;
25
+ /** Harness this plan applies to. */
26
+ harness: string;
27
+ billingMode: BillingMode;
28
+ /** Required when billingMode is session-window. ISO 8601 duration (e.g., 'PT5H'). */
29
+ windowDuration?: string;
30
+ /** Required when billingMode is session-window or monthly-cap. */
31
+ windowQuotaTokens?: number;
32
+ offPeak?: OffPeakSchedule;
33
+ pacingTarget: number;
34
+ hardCap: number;
35
+ quotaSource: QuotaSource;
36
+ }
37
+ export type Schedule = 'now' | 'off-peak' | 'quota-permitting' | 'defer-if-low-priority';
38
+ export interface TokenEstimate {
39
+ input: number;
40
+ output: number;
41
+ /** When true, rolling updates do NOT supersede the operator-declared values. */
42
+ frozen?: boolean;
43
+ }
44
+ export interface LedgerKey {
45
+ harness: string;
46
+ accountId: string;
47
+ tenant: string;
48
+ }
49
+ export declare const DEFAULT_TENANT = "__default__";
50
+ export declare const COLD_START_DEFAULT_INPUT = 50000;
51
+ export declare const COLD_START_DEFAULT_OUTPUT = 10000;
52
+ export declare const ESTIMATE_VARIANCE_THRESHOLD = 0.5;
53
+ export declare const ROLLING_WINDOW_SIZE = 20;
54
+ export interface WindowState {
55
+ windowStart: Date;
56
+ windowEnd: Date;
57
+ consumedTokens: number;
58
+ quotaTokens: number;
59
+ multiplier: number;
60
+ utilizationFraction: number;
61
+ pacingTarget: number;
62
+ hardCap: number;
63
+ }
64
+ export type AdmissionDecision = {
65
+ kind: 'yes';
66
+ reason: string;
67
+ } | {
68
+ kind: 'wait-until';
69
+ until: Date;
70
+ reason: string;
71
+ } | {
72
+ kind: 'no';
73
+ reason: string;
74
+ blockedBy: 'hardCap' | 'cost-budget' | 'maxBudgetUsd';
75
+ };
76
+ export interface BurnDownReport {
77
+ harness: string;
78
+ ledgerKey: LedgerKey;
79
+ windowEnd: string;
80
+ subscriptionTokensConsumed: number;
81
+ quotaTokens: number;
82
+ subscriptionUtilizationFraction: number;
83
+ dollarsSpent: number;
84
+ shadowCostUsd: number;
85
+ pacingTarget: number;
86
+ projectedUtilization: number;
87
+ queueDepth: number;
88
+ recommendation: 'under-pacing' | 'on-pace' | 'over-pacing';
89
+ }
90
+ export type LedgerEvent = {
91
+ type: 'AdmissionDenied';
92
+ ledgerKey: LedgerKey;
93
+ blockedBy: string;
94
+ detail: string;
95
+ } | {
96
+ type: 'OffPeakDeferralExceeded';
97
+ ledgerKey: LedgerKey;
98
+ stage: string;
99
+ } | {
100
+ type: 'BurnDownReport';
101
+ report: BurnDownReport;
102
+ } | {
103
+ type: 'EstimateBootstrapped';
104
+ stage: string;
105
+ coldStartDefault: TokenEstimate;
106
+ firstRunActual: TokenEstimate;
107
+ newRollingEstimate: TokenEstimate;
108
+ } | {
109
+ type: 'EstimateVariance';
110
+ stage: string;
111
+ declared: TokenEstimate;
112
+ observed: TokenEstimate;
113
+ ratio: number;
114
+ } | {
115
+ type: 'MissingEstimate';
116
+ stage: string;
117
+ } | {
118
+ type: 'LedgerReconciliation';
119
+ ledgerKey: LedgerKey;
120
+ previousSource: QuotaSource;
121
+ newSource: QuotaSource;
122
+ selfTracked: number;
123
+ authoritative: number;
124
+ absoluteDivergence: number;
125
+ relativeDivergence: number;
126
+ } | {
127
+ type: 'LedgerPooled';
128
+ ledgerKey: LedgerKey;
129
+ pipelines: string[];
130
+ } | {
131
+ type: 'LedgerKeyAmbiguous';
132
+ harness: string;
133
+ pipeline: string;
134
+ } | {
135
+ type: 'TenantShareInvalid';
136
+ harness: string;
137
+ accountId: string;
138
+ sumOfShares: number;
139
+ };
140
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Subscription-aware scheduling types per RFC-0010 §14. The dispatcher consults a
3
+ * SubscriptionLedger keyed by (harness, accountId, tenant) on every admission decision
4
+ * so parallel agents on the same vendor account correctly share quota.
5
+ */
6
+ export const DEFAULT_TENANT = '__default__';
7
+ export const COLD_START_DEFAULT_INPUT = 50_000;
8
+ export const COLD_START_DEFAULT_OUTPUT = 10_000;
9
+ export const ESTIMATE_VARIANCE_THRESHOLD = 0.5;
10
+ export const ROLLING_WINDOW_SIZE = 20;
11
+ //# sourceMappingURL=types.js.map
package/dist/shared.d.ts CHANGED
@@ -12,6 +12,19 @@ export declare function execFileAsync(cmd: string, args: string[], opts?: Record
12
12
  * Unknown keys are left as-is.
13
13
  */
14
14
  export declare function interpolate(text: string, vars: Record<string, string>): string;
15
+ /**
16
+ * Build the standard set of template vars for branch / PR / notification interpolation.
17
+ * Provides backward-compatible {issueNumber} + {issueTitle} alongside backlog-friendly
18
+ * {issueId}, {issueIdLower}, {slug}.
19
+ */
20
+ export declare function buildIssueTemplateVars(issueId: string, issueTitle: string): Record<string, string>;
21
+ /**
22
+ * Convert an arbitrary string to a kebab-case slug suitable for branch names.
23
+ * Lowercases, replaces non-alphanumerics with single dashes, trims dashes from
24
+ * start/end, and truncates to 40 chars at a word boundary so the resulting
25
+ * branch name stays under git's path-component limits.
26
+ */
27
+ export declare function slugify(input: string, maxLen?: number): string;
15
28
  /**
16
29
  * Interpolate a branch name pattern by replacing `{key}` placeholders.
17
30
  * Falls back to `ai-sdlc/issue-{issueNumber}` when no pattern is provided.
package/dist/shared.js CHANGED
@@ -24,6 +24,38 @@ export function execFileAsync(cmd, args, opts) {
24
24
  export function interpolate(text, vars) {
25
25
  return text.replace(/\{(\w+)\}/g, (_, key) => vars[key] ?? `{${key}}`);
26
26
  }
27
+ /**
28
+ * Build the standard set of template vars for branch / PR / notification interpolation.
29
+ * Provides backward-compatible {issueNumber} + {issueTitle} alongside backlog-friendly
30
+ * {issueId}, {issueIdLower}, {slug}.
31
+ */
32
+ export function buildIssueTemplateVars(issueId, issueTitle) {
33
+ return {
34
+ issueNumber: issueId,
35
+ issueTitle,
36
+ issueId,
37
+ issueIdLower: issueId.toLowerCase(),
38
+ slug: slugify(issueTitle),
39
+ };
40
+ }
41
+ /**
42
+ * Convert an arbitrary string to a kebab-case slug suitable for branch names.
43
+ * Lowercases, replaces non-alphanumerics with single dashes, trims dashes from
44
+ * start/end, and truncates to 40 chars at a word boundary so the resulting
45
+ * branch name stays under git's path-component limits.
46
+ */
47
+ export function slugify(input, maxLen = 40) {
48
+ const cleaned = input
49
+ .toLowerCase()
50
+ .replace(/[^a-z0-9]+/g, '-')
51
+ .replace(/^-+|-+$/g, '');
52
+ if (cleaned.length <= maxLen)
53
+ return cleaned;
54
+ // Truncate at the last dash before maxLen so we don't cut a word in half.
55
+ const truncated = cleaned.slice(0, maxLen);
56
+ const lastDash = truncated.lastIndexOf('-');
57
+ return lastDash > maxLen / 2 ? truncated.slice(0, lastDash) : truncated;
58
+ }
27
59
  /**
28
60
  * Interpolate a branch name pattern by replacing `{key}` placeholders.
29
61
  * Falls back to `ai-sdlc/issue-{issueNumber}` when no pattern is provided.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * SQLite DDL and migrations for the state store.
3
3
  */
4
- export declare const CURRENT_SCHEMA_VERSION = 9;
4
+ export declare const CURRENT_SCHEMA_VERSION = 12;
5
5
  export declare const SCHEMA_DDL = "\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS complexity_profile (\n id INTEGER PRIMARY KEY,\n repo_path TEXT NOT NULL,\n score REAL NOT NULL,\n files_count INTEGER,\n modules_count INTEGER,\n dependency_count INTEGER,\n analyzed_at TEXT DEFAULT (datetime('now')),\n raw_data TEXT\n);\n\nCREATE TABLE IF NOT EXISTS episodic_memory (\n id INTEGER PRIMARY KEY,\n issue_number INTEGER,\n pr_number INTEGER,\n pipeline_type TEXT NOT NULL,\n outcome TEXT NOT NULL,\n duration_ms INTEGER,\n files_changed INTEGER,\n error_message TEXT,\n metadata TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS autonomy_ledger (\n id INTEGER PRIMARY KEY,\n agent_name TEXT NOT NULL UNIQUE,\n current_level INTEGER DEFAULT 0,\n total_tasks INTEGER DEFAULT 0,\n success_count INTEGER DEFAULT 0,\n failure_count INTEGER DEFAULT 0,\n last_task_at TEXT,\n metrics TEXT\n);\n\nCREATE TABLE IF NOT EXISTS pipeline_runs (\n id INTEGER PRIMARY KEY,\n run_id TEXT NOT NULL UNIQUE,\n issue_number INTEGER,\n pr_number INTEGER,\n pipeline_type TEXT NOT NULL,\n status TEXT NOT NULL,\n current_stage TEXT,\n started_at TEXT DEFAULT (datetime('now')),\n completed_at TEXT,\n result TEXT,\n gate_results TEXT\n);\n\nCREATE TABLE IF NOT EXISTS conventions (\n id INTEGER PRIMARY KEY,\n category TEXT NOT NULL,\n pattern TEXT NOT NULL,\n confidence REAL,\n examples TEXT,\n detected_at TEXT DEFAULT (datetime('now'))\n);\n";
6
6
  export interface Migration {
7
7
  version: number;
@@ -15,5 +15,9 @@ export declare const MIGRATION_V6 = "\n-- Cost governance: add stage_name and ca
15
15
  export declare const MIGRATION_V7 = "\n-- String issue IDs\nALTER TABLE pipeline_runs ADD COLUMN issue_id TEXT;\nALTER TABLE episodic_memory ADD COLUMN issue_id TEXT;\nALTER TABLE cost_ledger ADD COLUMN issue_id TEXT;\nALTER TABLE routing_history ADD COLUMN issue_id TEXT;\n";
16
16
  export declare const MIGRATION_V8 = "\n-- Priority calibration table (RFC-0005 PPA)\nCREATE TABLE IF NOT EXISTS priority_calibration (\n id INTEGER PRIMARY KEY,\n issue_id TEXT NOT NULL,\n priority_composite REAL NOT NULL,\n priority_confidence REAL NOT NULL,\n priority_dimensions TEXT,\n actual_complexity INTEGER,\n files_changed INTEGER,\n outcome TEXT,\n sampled_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_priority_calibration_issue ON priority_calibration(issue_id);\nCREATE INDEX IF NOT EXISTS idx_priority_calibration_sampled ON priority_calibration(sampled_at);\n\n-- Extend episodic_memory with priority columns\nALTER TABLE episodic_memory ADD COLUMN priority_composite REAL;\nALTER TABLE episodic_memory ADD COLUMN priority_confidence REAL;\n";
17
17
  export declare const MIGRATION_V9 = "\n-- Workflow pattern detection tables\n\n-- Tool sequence events captured by PostToolUse hook\nCREATE TABLE IF NOT EXISTS tool_sequence_events (\n id INTEGER PRIMARY KEY,\n session_id TEXT NOT NULL,\n tool_name TEXT NOT NULL,\n action_canonical TEXT NOT NULL,\n project_path TEXT,\n timestamp TEXT NOT NULL,\n ingested_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_tool_seq_session ON tool_sequence_events(session_id);\nCREATE INDEX IF NOT EXISTS idx_tool_seq_ts ON tool_sequence_events(timestamp);\n\n-- Detected workflow patterns (from n-gram mining)\nCREATE TABLE IF NOT EXISTS workflow_patterns (\n id INTEGER PRIMARY KEY,\n pattern_hash TEXT NOT NULL UNIQUE,\n pattern_type TEXT NOT NULL,\n sequence_json TEXT NOT NULL,\n frequency INTEGER NOT NULL,\n session_count INTEGER NOT NULL,\n confidence REAL NOT NULL,\n first_seen TEXT,\n last_seen TEXT,\n status TEXT DEFAULT 'detected',\n detected_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_workflow_patterns_status ON workflow_patterns(status);\n\n-- Automation proposals for human review\nCREATE TABLE IF NOT EXISTS pattern_proposals (\n id INTEGER PRIMARY KEY,\n pattern_id INTEGER NOT NULL,\n proposal_type TEXT NOT NULL,\n artifact_type TEXT NOT NULL,\n artifact_path TEXT,\n draft_content TEXT NOT NULL,\n confidence REAL NOT NULL,\n status TEXT DEFAULT 'pending',\n reviewed_at TEXT,\n reviewer_reason TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n FOREIGN KEY (pattern_id) REFERENCES workflow_patterns(id)\n);\nCREATE INDEX IF NOT EXISTS idx_pattern_proposals_status ON pattern_proposals(status);\n";
18
+ export declare const MIGRATION_V10 = "\n-- Design System Governance tables (RFC-0006)\n\nCREATE TABLE IF NOT EXISTS design_token_events (\n id INTEGER PRIMARY KEY,\n binding_name TEXT NOT NULL,\n event_type TEXT NOT NULL,\n tokens_affected INTEGER DEFAULT 0,\n diff_json TEXT,\n actor TEXT,\n pipeline_run_id TEXT,\n design_review_decision TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_design_token_events_binding ON design_token_events(binding_name);\nCREATE INDEX IF NOT EXISTS idx_design_token_events_type ON design_token_events(event_type);\nCREATE INDEX IF NOT EXISTS idx_design_token_events_run ON design_token_events(pipeline_run_id);\n\nCREATE TABLE IF NOT EXISTS design_review_events (\n id INTEGER PRIMARY KEY,\n binding_name TEXT NOT NULL,\n pr_number INTEGER,\n component_name TEXT,\n reviewer TEXT NOT NULL,\n decision TEXT NOT NULL,\n categories_json TEXT,\n actionable_notes TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_design_review_events_binding ON design_review_events(binding_name);\nCREATE INDEX IF NOT EXISTS idx_design_review_events_pr ON design_review_events(pr_number);\nCREATE INDEX IF NOT EXISTS idx_design_review_events_decision ON design_review_events(decision);\n\nCREATE TABLE IF NOT EXISTS token_compliance_history (\n id INTEGER PRIMARY KEY,\n binding_name TEXT NOT NULL,\n coverage_percent REAL NOT NULL,\n violations_count INTEGER NOT NULL DEFAULT 0,\n scanned_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_token_compliance_binding ON token_compliance_history(binding_name);\n\nCREATE TABLE IF NOT EXISTS visual_regression_results (\n id INTEGER PRIMARY KEY,\n binding_name TEXT NOT NULL,\n story_name TEXT NOT NULL,\n viewport INTEGER,\n diff_percentage REAL NOT NULL,\n approved INTEGER DEFAULT 0,\n approver TEXT,\n baseline_url TEXT,\n current_url TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_visual_regression_binding ON visual_regression_results(binding_name);\nCREATE INDEX IF NOT EXISTS idx_visual_regression_story ON visual_regression_results(story_name);\n\nCREATE TABLE IF NOT EXISTS usability_simulation_results (\n id INTEGER PRIMARY KEY,\n binding_name TEXT NOT NULL,\n story_name TEXT NOT NULL,\n persona_id TEXT,\n task_id TEXT,\n completed INTEGER DEFAULT 0,\n actions_taken INTEGER,\n expected_actions INTEGER,\n efficiency REAL,\n findings_json TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_usability_sim_binding ON usability_simulation_results(binding_name);\nCREATE INDEX IF NOT EXISTS idx_usability_sim_story ON usability_simulation_results(story_name);\n";
19
+ export declare const MIGRATION_V11 = "\n-- PPA Triad Integration tables (RFC-0008)\n\n-- Compiled DID artifacts: scope lists, constraint rules, anti-pattern lists,\n-- BM25 corpus (SA-1), principle corpora (SA-2). Keyed by source_hash so the\n-- reconciler can detect DID changes cheaply.\nCREATE TABLE IF NOT EXISTS did_compiled_artifacts (\n id INTEGER PRIMARY KEY,\n did_name TEXT NOT NULL,\n namespace TEXT,\n source_hash TEXT NOT NULL,\n scope_lists_json TEXT,\n constraint_rules_json TEXT,\n anti_pattern_lists_json TEXT,\n measurable_signals_json TEXT,\n bm25_corpus_blob BLOB,\n principle_corpora_blob BLOB,\n compiled_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_did_compiled_did ON did_compiled_artifacts(did_name);\nCREATE INDEX IF NOT EXISTS idx_did_compiled_hash ON did_compiled_artifacts(source_hash);\n\n-- SA scoring events: layer 1/2/3 results per issue, phase weights, composite score.\nCREATE TABLE IF NOT EXISTS did_scoring_events (\n id INTEGER PRIMARY KEY,\n did_name TEXT NOT NULL,\n issue_number INTEGER NOT NULL,\n sa_dimension TEXT NOT NULL,\n phase TEXT NOT NULL,\n layer1_result_json TEXT,\n layer2_result_json TEXT,\n layer3_result_json TEXT,\n composite_score REAL,\n phase_weights_json TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_did_scoring_did ON did_scoring_events(did_name);\nCREATE INDEX IF NOT EXISTS idx_did_scoring_issue ON did_scoring_events(issue_number);\nCREATE INDEX IF NOT EXISTS idx_did_scoring_created ON did_scoring_events(created_at);\n\n-- SA feedback events: accept/dismiss/escalate/override signals from Product/Design leads.\n-- Used by C6 calibration (M6) and Phase 3 weight auto-calibration.\nCREATE TABLE IF NOT EXISTS did_feedback_events (\n id INTEGER PRIMARY KEY,\n did_name TEXT NOT NULL,\n issue_number INTEGER NOT NULL,\n dimension TEXT NOT NULL,\n signal TEXT NOT NULL CHECK (signal IN ('accept', 'dismiss', 'escalate', 'override')),\n principal TEXT,\n category TEXT,\n structural_score REAL,\n llm_score REAL,\n composite_score REAL,\n notes TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_did_feedback_did ON did_feedback_events(did_name);\nCREATE INDEX IF NOT EXISTS idx_did_feedback_issue ON did_feedback_events(issue_number);\nCREATE INDEX IF NOT EXISTS idx_did_feedback_signal ON did_feedback_events(signal);\nCREATE INDEX IF NOT EXISTS idx_did_feedback_created ON did_feedback_events(created_at);\n\n-- Design change events: emitted when DID.spec.plannedChanges[] adds an entry.\n-- Addendum A \u00A7A.9 Design\u2192Engineering lookahead.\nCREATE TABLE IF NOT EXISTS design_change_events (\n id INTEGER PRIMARY KEY,\n did_name TEXT NOT NULL,\n change_id TEXT NOT NULL,\n change_type TEXT NOT NULL,\n status TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n emitted_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_design_change_did ON design_change_events(did_name);\nCREATE INDEX IF NOT EXISTS idx_design_change_change ON design_change_events(change_id);\n\n-- Code area metrics: used by enrichAdmissionInput (C3) for defect risk factor\n-- and by DesignQualityTrendDegrading monitor (A.8).\nCREATE TABLE IF NOT EXISTS code_area_metrics (\n id INTEGER PRIMARY KEY,\n code_area TEXT NOT NULL,\n defect_density REAL,\n churn_rate REAL,\n pr_rejection_rate REAL,\n code_acceptance_rate REAL,\n has_frontend_components INTEGER DEFAULT 0,\n design_metrics_json TEXT,\n data_point_count INTEGER DEFAULT 0,\n window_start TEXT,\n window_end TEXT,\n computed_at TEXT DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_code_area_metrics_area ON code_area_metrics(code_area);\nCREATE INDEX IF NOT EXISTS idx_code_area_metrics_computed ON code_area_metrics(computed_at);\n\n-- Design lookahead notification state: dedupe per issue with 7-day expiry.\n-- Used by C7 (\u00A711).\nCREATE TABLE IF NOT EXISTS design_lookahead_notifications (\n id INTEGER PRIMARY KEY,\n issue_number INTEGER NOT NULL,\n first_notified_at TEXT DEFAULT (datetime('now')),\n last_notified_at TEXT DEFAULT (datetime('now')),\n pillar_breakdown_json TEXT,\n UNIQUE(issue_number)\n);\nCREATE INDEX IF NOT EXISTS idx_lookahead_issue ON design_lookahead_notifications(issue_number);\n";
20
+ export declare const MIGRATION_V12 = "\n-- SA Phase-3 calibrated weights (RFC-0008 \u00A7B.8 \u2014 AISDLC-66).\n-- One row per dimension (SA-1, SA-2); upserted by the auto-calibrator\n-- nightly or on demand.\n-- CR-2 (RFC-0008 Addendum B \u00A7B.7): both weights MUST be \u2265 0.20 so\n-- neither layer can be dropped below a \"minimum influence\" floor by\n-- auto-calibration. The code-level clamp is the first gate; this\n-- CHECK is the last line of defense if the code clamp is bypassed.\nCREATE TABLE IF NOT EXISTS sa_phase_weights (\n id INTEGER PRIMARY KEY,\n dimension TEXT NOT NULL UNIQUE,\n w_structural REAL NOT NULL,\n w_llm REAL NOT NULL,\n calibrated_at TEXT DEFAULT (datetime('now')),\n CHECK (w_structural >= 0.20 AND w_structural <= 0.80),\n CHECK (w_llm >= 0.20 AND w_llm <= 0.80)\n);\nCREATE INDEX IF NOT EXISTS idx_sa_phase_weights_dim ON sa_phase_weights(dimension);\n";
21
+ export declare const MIGRATION_V13 = "\n-- RFC-0010 \u00A711.4 cost attribution: track the model alias used in pipeline YAML\n-- alongside the resolved physical model ID, plus an informational shadow cost\n-- (what subscription-harness work would have cost on pay-per-token).\nALTER TABLE cost_ledger ADD COLUMN model_alias TEXT;\nALTER TABLE cost_ledger ADD COLUMN shadow_cost_usd REAL;\nCREATE INDEX IF NOT EXISTS idx_cost_ledger_model_alias ON cost_ledger(model_alias);\n";
18
22
  export declare const MIGRATIONS: Migration[];
19
23
  //# sourceMappingURL=schema.d.ts.map
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * SQLite DDL and migrations for the state store.
3
3
  */
4
- export const CURRENT_SCHEMA_VERSION = 9;
4
+ export const CURRENT_SCHEMA_VERSION = 12;
5
5
  export const SCHEMA_DDL = `
6
6
  CREATE TABLE IF NOT EXISTS schema_version (
7
7
  version INTEGER PRIMARY KEY,
@@ -311,6 +311,212 @@ CREATE TABLE IF NOT EXISTS pattern_proposals (
311
311
  );
312
312
  CREATE INDEX IF NOT EXISTS idx_pattern_proposals_status ON pattern_proposals(status);
313
313
  `;
314
+ export const MIGRATION_V10 = `
315
+ -- Design System Governance tables (RFC-0006)
316
+
317
+ CREATE TABLE IF NOT EXISTS design_token_events (
318
+ id INTEGER PRIMARY KEY,
319
+ binding_name TEXT NOT NULL,
320
+ event_type TEXT NOT NULL,
321
+ tokens_affected INTEGER DEFAULT 0,
322
+ diff_json TEXT,
323
+ actor TEXT,
324
+ pipeline_run_id TEXT,
325
+ design_review_decision TEXT,
326
+ created_at TEXT DEFAULT (datetime('now'))
327
+ );
328
+ CREATE INDEX IF NOT EXISTS idx_design_token_events_binding ON design_token_events(binding_name);
329
+ CREATE INDEX IF NOT EXISTS idx_design_token_events_type ON design_token_events(event_type);
330
+ CREATE INDEX IF NOT EXISTS idx_design_token_events_run ON design_token_events(pipeline_run_id);
331
+
332
+ CREATE TABLE IF NOT EXISTS design_review_events (
333
+ id INTEGER PRIMARY KEY,
334
+ binding_name TEXT NOT NULL,
335
+ pr_number INTEGER,
336
+ component_name TEXT,
337
+ reviewer TEXT NOT NULL,
338
+ decision TEXT NOT NULL,
339
+ categories_json TEXT,
340
+ actionable_notes TEXT,
341
+ created_at TEXT DEFAULT (datetime('now'))
342
+ );
343
+ CREATE INDEX IF NOT EXISTS idx_design_review_events_binding ON design_review_events(binding_name);
344
+ CREATE INDEX IF NOT EXISTS idx_design_review_events_pr ON design_review_events(pr_number);
345
+ CREATE INDEX IF NOT EXISTS idx_design_review_events_decision ON design_review_events(decision);
346
+
347
+ CREATE TABLE IF NOT EXISTS token_compliance_history (
348
+ id INTEGER PRIMARY KEY,
349
+ binding_name TEXT NOT NULL,
350
+ coverage_percent REAL NOT NULL,
351
+ violations_count INTEGER NOT NULL DEFAULT 0,
352
+ scanned_at TEXT DEFAULT (datetime('now'))
353
+ );
354
+ CREATE INDEX IF NOT EXISTS idx_token_compliance_binding ON token_compliance_history(binding_name);
355
+
356
+ CREATE TABLE IF NOT EXISTS visual_regression_results (
357
+ id INTEGER PRIMARY KEY,
358
+ binding_name TEXT NOT NULL,
359
+ story_name TEXT NOT NULL,
360
+ viewport INTEGER,
361
+ diff_percentage REAL NOT NULL,
362
+ approved INTEGER DEFAULT 0,
363
+ approver TEXT,
364
+ baseline_url TEXT,
365
+ current_url TEXT,
366
+ created_at TEXT DEFAULT (datetime('now'))
367
+ );
368
+ CREATE INDEX IF NOT EXISTS idx_visual_regression_binding ON visual_regression_results(binding_name);
369
+ CREATE INDEX IF NOT EXISTS idx_visual_regression_story ON visual_regression_results(story_name);
370
+
371
+ CREATE TABLE IF NOT EXISTS usability_simulation_results (
372
+ id INTEGER PRIMARY KEY,
373
+ binding_name TEXT NOT NULL,
374
+ story_name TEXT NOT NULL,
375
+ persona_id TEXT,
376
+ task_id TEXT,
377
+ completed INTEGER DEFAULT 0,
378
+ actions_taken INTEGER,
379
+ expected_actions INTEGER,
380
+ efficiency REAL,
381
+ findings_json TEXT,
382
+ created_at TEXT DEFAULT (datetime('now'))
383
+ );
384
+ CREATE INDEX IF NOT EXISTS idx_usability_sim_binding ON usability_simulation_results(binding_name);
385
+ CREATE INDEX IF NOT EXISTS idx_usability_sim_story ON usability_simulation_results(story_name);
386
+ `;
387
+ export const MIGRATION_V11 = `
388
+ -- PPA Triad Integration tables (RFC-0008)
389
+
390
+ -- Compiled DID artifacts: scope lists, constraint rules, anti-pattern lists,
391
+ -- BM25 corpus (SA-1), principle corpora (SA-2). Keyed by source_hash so the
392
+ -- reconciler can detect DID changes cheaply.
393
+ CREATE TABLE IF NOT EXISTS did_compiled_artifacts (
394
+ id INTEGER PRIMARY KEY,
395
+ did_name TEXT NOT NULL,
396
+ namespace TEXT,
397
+ source_hash TEXT NOT NULL,
398
+ scope_lists_json TEXT,
399
+ constraint_rules_json TEXT,
400
+ anti_pattern_lists_json TEXT,
401
+ measurable_signals_json TEXT,
402
+ bm25_corpus_blob BLOB,
403
+ principle_corpora_blob BLOB,
404
+ compiled_at TEXT DEFAULT (datetime('now'))
405
+ );
406
+ CREATE INDEX IF NOT EXISTS idx_did_compiled_did ON did_compiled_artifacts(did_name);
407
+ CREATE INDEX IF NOT EXISTS idx_did_compiled_hash ON did_compiled_artifacts(source_hash);
408
+
409
+ -- SA scoring events: layer 1/2/3 results per issue, phase weights, composite score.
410
+ CREATE TABLE IF NOT EXISTS did_scoring_events (
411
+ id INTEGER PRIMARY KEY,
412
+ did_name TEXT NOT NULL,
413
+ issue_number INTEGER NOT NULL,
414
+ sa_dimension TEXT NOT NULL,
415
+ phase TEXT NOT NULL,
416
+ layer1_result_json TEXT,
417
+ layer2_result_json TEXT,
418
+ layer3_result_json TEXT,
419
+ composite_score REAL,
420
+ phase_weights_json TEXT,
421
+ created_at TEXT DEFAULT (datetime('now'))
422
+ );
423
+ CREATE INDEX IF NOT EXISTS idx_did_scoring_did ON did_scoring_events(did_name);
424
+ CREATE INDEX IF NOT EXISTS idx_did_scoring_issue ON did_scoring_events(issue_number);
425
+ CREATE INDEX IF NOT EXISTS idx_did_scoring_created ON did_scoring_events(created_at);
426
+
427
+ -- SA feedback events: accept/dismiss/escalate/override signals from Product/Design leads.
428
+ -- Used by C6 calibration (M6) and Phase 3 weight auto-calibration.
429
+ CREATE TABLE IF NOT EXISTS did_feedback_events (
430
+ id INTEGER PRIMARY KEY,
431
+ did_name TEXT NOT NULL,
432
+ issue_number INTEGER NOT NULL,
433
+ dimension TEXT NOT NULL,
434
+ signal TEXT NOT NULL CHECK (signal IN ('accept', 'dismiss', 'escalate', 'override')),
435
+ principal TEXT,
436
+ category TEXT,
437
+ structural_score REAL,
438
+ llm_score REAL,
439
+ composite_score REAL,
440
+ notes TEXT,
441
+ created_at TEXT DEFAULT (datetime('now'))
442
+ );
443
+ CREATE INDEX IF NOT EXISTS idx_did_feedback_did ON did_feedback_events(did_name);
444
+ CREATE INDEX IF NOT EXISTS idx_did_feedback_issue ON did_feedback_events(issue_number);
445
+ CREATE INDEX IF NOT EXISTS idx_did_feedback_signal ON did_feedback_events(signal);
446
+ CREATE INDEX IF NOT EXISTS idx_did_feedback_created ON did_feedback_events(created_at);
447
+
448
+ -- Design change events: emitted when DID.spec.plannedChanges[] adds an entry.
449
+ -- Addendum A §A.9 Design→Engineering lookahead.
450
+ CREATE TABLE IF NOT EXISTS design_change_events (
451
+ id INTEGER PRIMARY KEY,
452
+ did_name TEXT NOT NULL,
453
+ change_id TEXT NOT NULL,
454
+ change_type TEXT NOT NULL,
455
+ status TEXT NOT NULL,
456
+ payload_json TEXT NOT NULL,
457
+ emitted_at TEXT DEFAULT (datetime('now'))
458
+ );
459
+ CREATE INDEX IF NOT EXISTS idx_design_change_did ON design_change_events(did_name);
460
+ CREATE INDEX IF NOT EXISTS idx_design_change_change ON design_change_events(change_id);
461
+
462
+ -- Code area metrics: used by enrichAdmissionInput (C3) for defect risk factor
463
+ -- and by DesignQualityTrendDegrading monitor (A.8).
464
+ CREATE TABLE IF NOT EXISTS code_area_metrics (
465
+ id INTEGER PRIMARY KEY,
466
+ code_area TEXT NOT NULL,
467
+ defect_density REAL,
468
+ churn_rate REAL,
469
+ pr_rejection_rate REAL,
470
+ code_acceptance_rate REAL,
471
+ has_frontend_components INTEGER DEFAULT 0,
472
+ design_metrics_json TEXT,
473
+ data_point_count INTEGER DEFAULT 0,
474
+ window_start TEXT,
475
+ window_end TEXT,
476
+ computed_at TEXT DEFAULT (datetime('now'))
477
+ );
478
+ CREATE INDEX IF NOT EXISTS idx_code_area_metrics_area ON code_area_metrics(code_area);
479
+ CREATE INDEX IF NOT EXISTS idx_code_area_metrics_computed ON code_area_metrics(computed_at);
480
+
481
+ -- Design lookahead notification state: dedupe per issue with 7-day expiry.
482
+ -- Used by C7 (§11).
483
+ CREATE TABLE IF NOT EXISTS design_lookahead_notifications (
484
+ id INTEGER PRIMARY KEY,
485
+ issue_number INTEGER NOT NULL,
486
+ first_notified_at TEXT DEFAULT (datetime('now')),
487
+ last_notified_at TEXT DEFAULT (datetime('now')),
488
+ pillar_breakdown_json TEXT,
489
+ UNIQUE(issue_number)
490
+ );
491
+ CREATE INDEX IF NOT EXISTS idx_lookahead_issue ON design_lookahead_notifications(issue_number);
492
+ `;
493
+ export const MIGRATION_V12 = `
494
+ -- SA Phase-3 calibrated weights (RFC-0008 §B.8 — AISDLC-66).
495
+ -- One row per dimension (SA-1, SA-2); upserted by the auto-calibrator
496
+ -- nightly or on demand.
497
+ -- CR-2 (RFC-0008 Addendum B §B.7): both weights MUST be ≥ 0.20 so
498
+ -- neither layer can be dropped below a "minimum influence" floor by
499
+ -- auto-calibration. The code-level clamp is the first gate; this
500
+ -- CHECK is the last line of defense if the code clamp is bypassed.
501
+ CREATE TABLE IF NOT EXISTS sa_phase_weights (
502
+ id INTEGER PRIMARY KEY,
503
+ dimension TEXT NOT NULL UNIQUE,
504
+ w_structural REAL NOT NULL,
505
+ w_llm REAL NOT NULL,
506
+ calibrated_at TEXT DEFAULT (datetime('now')),
507
+ CHECK (w_structural >= 0.20 AND w_structural <= 0.80),
508
+ CHECK (w_llm >= 0.20 AND w_llm <= 0.80)
509
+ );
510
+ CREATE INDEX IF NOT EXISTS idx_sa_phase_weights_dim ON sa_phase_weights(dimension);
511
+ `;
512
+ export const MIGRATION_V13 = `
513
+ -- RFC-0010 §11.4 cost attribution: track the model alias used in pipeline YAML
514
+ -- alongside the resolved physical model ID, plus an informational shadow cost
515
+ -- (what subscription-harness work would have cost on pay-per-token).
516
+ ALTER TABLE cost_ledger ADD COLUMN model_alias TEXT;
517
+ ALTER TABLE cost_ledger ADD COLUMN shadow_cost_usd REAL;
518
+ CREATE INDEX IF NOT EXISTS idx_cost_ledger_model_alias ON cost_ledger(model_alias);
519
+ `;
314
520
  export const MIGRATIONS = [
315
521
  {
316
522
  version: 1,
@@ -348,5 +554,21 @@ export const MIGRATIONS = [
348
554
  version: 9,
349
555
  sql: MIGRATION_V9,
350
556
  },
557
+ {
558
+ version: 10,
559
+ sql: MIGRATION_V10,
560
+ },
561
+ {
562
+ version: 11,
563
+ sql: MIGRATION_V11,
564
+ },
565
+ {
566
+ version: 12,
567
+ sql: MIGRATION_V12,
568
+ },
569
+ {
570
+ version: 13,
571
+ sql: MIGRATION_V13,
572
+ },
351
573
  ];
352
574
  //# sourceMappingURL=schema.js.map
@@ -5,7 +5,7 @@
5
5
  * optional — the orchestrator works without it.
6
6
  */
7
7
  import type BetterSqlite3 from 'better-sqlite3';
8
- import type { ComplexityProfile, EpisodicRecord, AutonomyLedgerEntry, PipelineRun, PipelineRunStatus, Convention, HotspotRecord, RoutingDecision, CostLedgerEntry, GateThresholdOverride, AutonomyEvent, HandoffEvent, DeploymentRecord, DeploymentRecordState, RolloutStepRecord, AuditEntryRecord, PriorityCalibrationSample, ToolSequenceEvent, WorkflowPattern, PatternProposal } from './types.js';
8
+ import type { ComplexityProfile, EpisodicRecord, AutonomyLedgerEntry, PipelineRun, PipelineRunStatus, Convention, HotspotRecord, RoutingDecision, CostLedgerEntry, GateThresholdOverride, AutonomyEvent, HandoffEvent, DeploymentRecord, DeploymentRecordState, RolloutStepRecord, AuditEntryRecord, PriorityCalibrationSample, ToolSequenceEvent, WorkflowPattern, PatternProposal, DesignTokenEventRecord, DesignReviewEventRecord, TokenComplianceRecord, VisualRegressionResultRecord, UsabilitySimulationResultRecord, DidCompiledArtifactRecord, DidScoringEventRecord, SaDimension, DidFeedbackEventRecord, FeedbackSignal, DesignChangeEventRecord, CodeAreaMetricsRecord, DesignLookaheadNotificationRecord, SaPhaseWeightsRecord } from './types.js';
9
9
  export declare class StateStore {
10
10
  private db;
11
11
  constructor(db: BetterSqlite3.Database);
@@ -134,6 +134,60 @@ export declare class StateStore {
134
134
  status?: string;
135
135
  }): PatternProposal[];
136
136
  updateProposalStatus(id: number, status: string, reason?: string): void;
137
+ insertDesignTokenEvent(record: DesignTokenEventRecord): number;
138
+ getDesignTokenEvents(bindingName: string, limit?: number): DesignTokenEventRecord[];
139
+ insertDesignReviewEvent(record: DesignReviewEventRecord): number;
140
+ getDesignReviewEvents(bindingName: string, limit?: number): DesignReviewEventRecord[];
141
+ insertTokenComplianceSnapshot(record: TokenComplianceRecord): number;
142
+ getTokenComplianceHistory(bindingName: string, limit?: number): TokenComplianceRecord[];
143
+ insertVisualRegressionResult(record: VisualRegressionResultRecord): number;
144
+ getVisualRegressionResults(bindingName: string, limit?: number): VisualRegressionResultRecord[];
145
+ insertUsabilitySimulationResult(record: UsabilitySimulationResultRecord): number;
146
+ getUsabilitySimulationResults(bindingName: string, limit?: number): UsabilitySimulationResultRecord[];
147
+ insertDidCompiledArtifact(record: DidCompiledArtifactRecord): number;
148
+ getLatestDidCompiledArtifact(didName: string): DidCompiledArtifactRecord | undefined;
149
+ getDidCompiledArtifactByHash(didName: string, sourceHash: string): DidCompiledArtifactRecord | undefined;
150
+ private mapDidCompiledArtifact;
151
+ recordDidScoringEvent(record: DidScoringEventRecord): number;
152
+ getDidScoringEvents(opts?: {
153
+ didName?: string;
154
+ issueNumber?: number;
155
+ saDimension?: SaDimension;
156
+ since?: string;
157
+ limit?: number;
158
+ }): DidScoringEventRecord[];
159
+ recordDidFeedback(record: DidFeedbackEventRecord): number;
160
+ getDidFeedbackEvents(opts?: {
161
+ didName?: string;
162
+ issueNumber?: number;
163
+ signal?: FeedbackSignal;
164
+ dimension?: SaDimension;
165
+ since?: string;
166
+ limit?: number;
167
+ }): DidFeedbackEventRecord[];
168
+ recordDesignChange(record: DesignChangeEventRecord): number;
169
+ getDesignChangeEvents(opts?: {
170
+ didName?: string;
171
+ changeId?: string;
172
+ limit?: number;
173
+ }): DesignChangeEventRecord[];
174
+ insertCodeAreaMetrics(record: CodeAreaMetricsRecord): number;
175
+ /**
176
+ * Get the most recent metrics snapshot for a code area.
177
+ * `since` filters to rows where `computed_at >= since`.
178
+ */
179
+ getCodeAreaMetrics(codeArea: string, opts?: {
180
+ since?: string;
181
+ }): CodeAreaMetricsRecord | undefined;
182
+ getCodeAreaMetricsHistory(codeArea: string, opts?: {
183
+ since?: string;
184
+ limit?: number;
185
+ }): CodeAreaMetricsRecord[];
186
+ private mapCodeAreaMetrics;
187
+ upsertDesignLookaheadNotification(record: DesignLookaheadNotificationRecord): number;
188
+ getDesignLookaheadNotification(issueNumber: number): DesignLookaheadNotificationRecord | undefined;
189
+ upsertSaPhaseWeights(record: SaPhaseWeightsRecord): void;
190
+ getSaPhaseWeights(dimension: SaDimension): SaPhaseWeightsRecord | undefined;
137
191
  close(): void;
138
192
  }
139
193
  //# sourceMappingURL=store.d.ts.map