@cat-factory/node-server 0.202.0 → 0.203.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.
@@ -0,0 +1,199 @@
1
+ import { and, eq, inArray } from 'drizzle-orm';
2
+ import { accountRiskPolicies, riskPolicySuppressions } from '../../db/schema.js';
3
+ /**
4
+ * Chunk size for the batched `IN` read, matching the D1 mirror. Postgres would take far more bound
5
+ * parameters, but the two facades chunk identically so a conformance assertion over a large id set
6
+ * exercises the same code path on both.
7
+ */
8
+ const ID_CHUNK = 90;
9
+ /**
10
+ * A stored account row → the domain policy. Byte-for-byte the reading `D1AccountRiskPolicyRepository`
11
+ * applies, including the defensive JSON reads (each empty value is that field's identity) and the
12
+ * NARROWED `autonomy`: a stored value the closed vocabulary no longer carries reads as `attended`,
13
+ * the posture that stops for a person, never as a licence this row cannot be shown to have granted.
14
+ */
15
+ function rowToPolicy(row) {
16
+ return {
17
+ id: row.id,
18
+ name: row.name,
19
+ maxComplexity: row.max_complexity,
20
+ maxRisk: row.max_risk,
21
+ maxImpact: row.max_impact,
22
+ ciMaxAttempts: row.ci_max_attempts,
23
+ maxRequirementIterations: row.max_requirement_iterations,
24
+ maxRequirementConcernAllowed: row.max_requirement_concern_allowed,
25
+ maxTesterQualityIterations: row.max_tester_quality_iterations,
26
+ releaseWatchWindowMinutes: row.release_watch_window_minutes,
27
+ releaseMaxAttempts: row.release_max_attempts,
28
+ humanReviewGraceMinutes: row.human_review_grace_minutes,
29
+ judgeMinScore: row.judge_min_score,
30
+ judgeMaxBounces: row.judge_max_bounces,
31
+ autoMergeEnabled: row.auto_merge_enabled === 1,
32
+ forkDecision: row.fork_decision
33
+ ? JSON.parse(row.fork_decision)
34
+ : null,
35
+ classRules: row.class_rules
36
+ ? JSON.parse(row.class_rules)
37
+ : {},
38
+ classRulesByRole: row.class_rules_by_role
39
+ ? JSON.parse(row.class_rules_by_role)
40
+ : {},
41
+ dryRunRoles: row.dry_run_roles
42
+ ? JSON.parse(row.dry_run_roles)
43
+ : [],
44
+ submissionClassesByRole: row.submission_classes_by_role
45
+ ? JSON.parse(row.submission_classes_by_role)
46
+ : {},
47
+ autonomy: row.autonomy === 'unattended' ? 'unattended' : 'attended',
48
+ minAutoAnswerConfidence: row.min_auto_answer_confidence,
49
+ ...(row.version != null ? { version: row.version } : {}),
50
+ createdAt: row.created_at,
51
+ };
52
+ }
53
+ /**
54
+ * ACCOUNT-tier risk policies over Postgres (the Drizzle mirror of the Worker's
55
+ * `D1AccountRiskPolicyRepository`, migration 0092). Behaviourally identical, so the cross-runtime
56
+ * conformance suite asserts the same tier merge on both facades.
57
+ *
58
+ * No default-promotion machinery, unlike the workspace-tier repository: an account row holds no
59
+ * per-scope default claim, so there is no cross-row invariant and every write is a plain upsert. See
60
+ * ADR 0055.
61
+ */
62
+ export class DrizzleAccountRiskPolicyRepository {
63
+ db;
64
+ constructor(db) {
65
+ this.db = db;
66
+ }
67
+ async get(accountId, id) {
68
+ const rows = await this.db
69
+ .select()
70
+ .from(accountRiskPolicies)
71
+ .where(and(eq(accountRiskPolicies.account_id, accountId), eq(accountRiskPolicies.id, id)))
72
+ .limit(1);
73
+ return rows[0] ? rowToPolicy(rows[0]) : null;
74
+ }
75
+ async list(accountId) {
76
+ const rows = await this.db
77
+ .select()
78
+ .from(accountRiskPolicies)
79
+ .where(eq(accountRiskPolicies.account_id, accountId))
80
+ .orderBy(accountRiskPolicies.created_at);
81
+ return rows.map(rowToPolicy);
82
+ }
83
+ async listByIds(accountId, ids) {
84
+ const wanted = [...new Set(ids)].filter(Boolean);
85
+ // An empty set is a no-op rather than a dropped predicate, which would answer the whole tier to
86
+ // a caller that asked about nothing.
87
+ if (wanted.length === 0)
88
+ return [];
89
+ const rows = [];
90
+ for (let i = 0; i < wanted.length; i += ID_CHUNK) {
91
+ const chunk = wanted.slice(i, i + ID_CHUNK);
92
+ rows.push(...(await this.db
93
+ .select()
94
+ .from(accountRiskPolicies)
95
+ .where(and(eq(accountRiskPolicies.account_id, accountId), inArray(accountRiskPolicies.id, chunk)))
96
+ .orderBy(accountRiskPolicies.created_at)));
97
+ }
98
+ return rows.map(rowToPolicy);
99
+ }
100
+ async upsert(accountId, policy) {
101
+ const values = {
102
+ account_id: accountId,
103
+ id: policy.id,
104
+ name: policy.name,
105
+ max_complexity: policy.maxComplexity,
106
+ max_risk: policy.maxRisk,
107
+ max_impact: policy.maxImpact,
108
+ ci_max_attempts: policy.ciMaxAttempts,
109
+ max_requirement_iterations: policy.maxRequirementIterations,
110
+ max_requirement_concern_allowed: policy.maxRequirementConcernAllowed,
111
+ max_tester_quality_iterations: policy.maxTesterQualityIterations,
112
+ release_watch_window_minutes: policy.releaseWatchWindowMinutes,
113
+ release_max_attempts: policy.releaseMaxAttempts,
114
+ human_review_grace_minutes: policy.humanReviewGraceMinutes,
115
+ judge_min_score: policy.judgeMinScore,
116
+ judge_max_bounces: policy.judgeMaxBounces,
117
+ auto_merge_enabled: policy.autoMergeEnabled ? 1 : 0,
118
+ fork_decision: policy.forkDecision ? JSON.stringify(policy.forkDecision) : null,
119
+ class_rules: JSON.stringify(policy.classRules ?? {}),
120
+ class_rules_by_role: JSON.stringify(policy.classRulesByRole ?? {}),
121
+ dry_run_roles: JSON.stringify(policy.dryRunRoles ?? []),
122
+ submission_classes_by_role: JSON.stringify(policy.submissionClassesByRole ?? {}),
123
+ version: policy.version ?? null,
124
+ autonomy: policy.autonomy,
125
+ min_auto_answer_confidence: policy.minAutoAnswerConfidence,
126
+ created_at: policy.createdAt,
127
+ };
128
+ await this.db
129
+ .insert(accountRiskPolicies)
130
+ .values(values)
131
+ .onConflictDoUpdate({
132
+ target: [accountRiskPolicies.account_id, accountRiskPolicies.id],
133
+ // Every editable column is projected. The one this mirrors had a silent gap for exactly this
134
+ // reason (the judge pair was on the INSERT and missing from the update), which an in-memory
135
+ // unit test cannot see: an edit simply left the stored value untouched.
136
+ set: {
137
+ name: values.name,
138
+ max_complexity: values.max_complexity,
139
+ max_risk: values.max_risk,
140
+ max_impact: values.max_impact,
141
+ ci_max_attempts: values.ci_max_attempts,
142
+ max_requirement_iterations: values.max_requirement_iterations,
143
+ max_requirement_concern_allowed: values.max_requirement_concern_allowed,
144
+ max_tester_quality_iterations: values.max_tester_quality_iterations,
145
+ release_watch_window_minutes: values.release_watch_window_minutes,
146
+ release_max_attempts: values.release_max_attempts,
147
+ human_review_grace_minutes: values.human_review_grace_minutes,
148
+ judge_min_score: values.judge_min_score,
149
+ judge_max_bounces: values.judge_max_bounces,
150
+ auto_merge_enabled: values.auto_merge_enabled,
151
+ fork_decision: values.fork_decision,
152
+ class_rules: values.class_rules,
153
+ class_rules_by_role: values.class_rules_by_role,
154
+ dry_run_roles: values.dry_run_roles,
155
+ submission_classes_by_role: values.submission_classes_by_role,
156
+ version: values.version,
157
+ autonomy: values.autonomy,
158
+ min_auto_answer_confidence: values.min_auto_answer_confidence,
159
+ },
160
+ });
161
+ }
162
+ async remove(accountId, id) {
163
+ await this.db
164
+ .delete(accountRiskPolicies)
165
+ .where(and(eq(accountRiskPolicies.account_id, accountId), eq(accountRiskPolicies.id, id)));
166
+ }
167
+ }
168
+ /** Which inherited policies a board HIDES (the Drizzle mirror of migration 0092's suppressions). */
169
+ export class DrizzleRiskPolicySuppressionRepository {
170
+ db;
171
+ constructor(db) {
172
+ this.db = db;
173
+ }
174
+ async list(workspaceId) {
175
+ const rows = await this.db
176
+ .select({ policyId: riskPolicySuppressions.policy_id })
177
+ .from(riskPolicySuppressions)
178
+ .where(eq(riskPolicySuppressions.workspace_id, workspaceId))
179
+ .orderBy(riskPolicySuppressions.created_at);
180
+ return rows.map((row) => row.policyId);
181
+ }
182
+ async add(workspaceId, policyId, at) {
183
+ // FIRST write wins, mirroring the D1 `DO NOTHING`: hiding an already-hidden policy is the same
184
+ // state, so a retry keeps the original timestamp and the editor's ordering is stable across a
185
+ // double-click. Targeted on the primary key alone, never a bare ignore.
186
+ await this.db
187
+ .insert(riskPolicySuppressions)
188
+ .values({ workspace_id: workspaceId, policy_id: policyId, created_at: at })
189
+ .onConflictDoNothing({
190
+ target: [riskPolicySuppressions.workspace_id, riskPolicySuppressions.policy_id],
191
+ });
192
+ }
193
+ async remove(workspaceId, policyId) {
194
+ await this.db
195
+ .delete(riskPolicySuppressions)
196
+ .where(and(eq(riskPolicySuppressions.workspace_id, workspaceId), eq(riskPolicySuppressions.policy_id, policyId)));
197
+ }
198
+ }
199
+ //# sourceMappingURL=account-risk-policies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-risk-policies.js","sourceRoot":"","sources":["../../../src/repositories/drizzle/account-risk-policies.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AccountInvitationRepository, AccountRepository, AccountSettingsRepository, AgentContextSnapshotRepository, AgentPromptRepository, AgentRunRepository, AgentSearchQueryRepository, AgentToolCallRepository, BinaryArtifactMetadataStore, BlockRepository, BrainstormSessionRepository, CapabilityCredentialRepository, McpOAuthGrantRepository, ClarityReviewRepository, Clock, ConsensusGroupRepository, ConsensusSessionRepository, DocInterviewRepository, EmailConnectionRepository, ExecutionRepository, GateOutcomeRepository, IncidentEnrichmentConnectionRepository, InitiativeRepository, KaizenGradingRepository, KaizenVerifiedComboRepository, LlmCallMetricRepository, MembershipRepository, MergeTrackRecordRepository, ModelPresetRepository, ObservabilityConnectionRepository, PackageRegistryConnectionRepository, AuditEventRepository, AuthAttemptRepository, MachineNodeRepository, PasswordResetTokenRepository, PipelineRepository, PipelineScheduleRepository, PlatformMetricsRepository, ProvisioningLogRepository, ReleaseHealthConfigRepository, ReportsRepository, RequirementReviewRepository, RiskPolicyRepository, ServiceFragmentDefaultsRepository, ServiceRepository, SpendRollupRepository, SharedStackRepository, SubscriptionQuotaCycleRepository, TestSecretsRepository, TokenUsageRepository, TrackerSettingsRepository, UserRepository, TutorialProgressRepository, UserSettingsRepository, ValidationConfigRepository, TaskTypeSuppressionRepository, WorkspaceAgentSettingsRepository, WorkspaceMemberRepository, WorkspaceMountRepository, WorkspaceRepository, WorkspaceSettingsRepository } from '@cat-factory/kernel';
1
+ import type { AccountInvitationRepository, AccountRepository, AccountSettingsRepository, AgentContextSnapshotRepository, AgentPromptRepository, AgentRunRepository, AgentSearchQueryRepository, AgentToolCallRepository, BinaryArtifactMetadataStore, BlockRepository, BrainstormSessionRepository, CapabilityCredentialRepository, McpOAuthGrantRepository, ClarityReviewRepository, Clock, ConsensusGroupRepository, ConsensusSessionRepository, DocInterviewRepository, EmailConnectionRepository, ExecutionRepository, GateOutcomeRepository, IncidentEnrichmentConnectionRepository, InitiativeRepository, KaizenGradingRepository, KaizenVerifiedComboRepository, LlmCallMetricRepository, MembershipRepository, MergeTrackRecordRepository, ModelPresetRepository, ObservabilityConnectionRepository, PackageRegistryConnectionRepository, AuditEventRepository, AuthAttemptRepository, MachineNodeRepository, PasswordResetTokenRepository, PipelineRepository, PipelineScheduleRepository, PlatformMetricsRepository, ProvisioningLogRepository, ReleaseHealthConfigRepository, ReportsRepository, RequirementReviewRepository, AccountRiskPolicyRepository, RiskPolicyRepository, RiskPolicySuppressionRepository, ServiceFragmentDefaultsRepository, ServiceRepository, SpendRollupRepository, SharedStackRepository, SubscriptionQuotaCycleRepository, TestSecretsRepository, TokenUsageRepository, TrackerSettingsRepository, UserRepository, TutorialProgressRepository, UserSettingsRepository, ValidationConfigRepository, TaskTypeSuppressionRepository, WorkspaceAgentSettingsRepository, WorkspaceMemberRepository, WorkspaceMountRepository, WorkspaceRepository, WorkspaceSettingsRepository } from '@cat-factory/kernel';
2
2
  import type { DrizzleDb } from '../db/client.js';
3
3
  export interface CoreRepositories {
4
4
  workspaceRepository: WorkspaceRepository;
@@ -45,6 +45,8 @@ export interface CoreRepositories {
45
45
  brainstormSessionRepository: BrainstormSessionRepository;
46
46
  initiativeRepository: InitiativeRepository;
47
47
  riskPolicyRepository: RiskPolicyRepository;
48
+ accountRiskPolicyRepository: AccountRiskPolicyRepository;
49
+ riskPolicySuppressionRepository: RiskPolicySuppressionRepository;
48
50
  mergeTrackRecordRepository: MergeTrackRecordRepository;
49
51
  sharedStackRepository: SharedStackRepository;
50
52
  workspaceSettingsRepository: WorkspaceSettingsRepository;
@@ -67,6 +69,7 @@ export declare function createDrizzleRepositories(db: DrizzleDb, clock: Clock):
67
69
  export { DrizzleServiceRepository, DrizzleWorkspaceMemberRepository, DrizzleWorkspaceRepository, } from './drizzle/board.js';
68
70
  export { DrizzleAccountSettingsRepository, DrizzleLocalSettingsRepository, DrizzleWorkspaceSettingsRepository, } from './drizzle/settings.js';
69
71
  export { DrizzleClarityReviewRepository, DrizzleDocInterviewRepository, DrizzleRequirementReviewRepository, } from './drizzle/reviews.js';
72
+ export { DrizzleAccountRiskPolicyRepository, DrizzleRiskPolicySuppressionRepository, } from './drizzle/account-risk-policies.js';
70
73
  export { createDrizzleSandboxDeps } from './drizzle/sandbox.js';
71
74
  export { DrizzleTestSecretsRepository } from './drizzle/connections.js';
72
75
  export { DrizzleValidationConfigRepository } from './drizzle/connections.js';
@@ -1 +1 @@
1
- {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/repositories/drizzle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/repositories/drizzle.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { DrizzleAccountSettingsRepository, DrizzleAgentPromptRepository, Drizzle
14
14
  import { DrizzleBrainstormSessionRepository, DrizzleClarityReviewRepository, DrizzleConsensusGroupRepository, DrizzleConsensusSessionRepository, DrizzleDocInterviewRepository, DrizzleRequirementReviewRepository, } from './drizzle/reviews.js';
15
15
  import { DrizzleKaizenGradingRepository, DrizzleKaizenVerifiedComboRepository, } from './drizzle/kaizen.js';
16
16
  import { DrizzleInitiativeRepository, DrizzleRiskPolicyRepository, DrizzleSharedStackRepository, } from './drizzle/initiatives.js';
17
+ import { DrizzleAccountRiskPolicyRepository, DrizzleRiskPolicySuppressionRepository, } from './drizzle/account-risk-policies.js';
17
18
  import { DrizzleMergeTrackRecordRepository } from './drizzle/mergeTrackRecord.js';
18
19
  import { DrizzleIncidentEnrichmentConnectionRepository, DrizzleObservabilityConnectionRepository, DrizzlePackageRegistryConnectionRepository, DrizzleReleaseHealthConfigRepository, DrizzleValidationConfigRepository, DrizzleSubscriptionQuotaCycleRepository, DrizzleTestSecretsRepository, DrizzleCapabilityCredentialRepository, DrizzleMcpOAuthGrantRepository, } from './drizzle/connections.js';
19
20
  /** Build the Drizzle/Postgres-backed core repositories. */
@@ -63,6 +64,8 @@ export function createDrizzleRepositories(db, clock) {
63
64
  brainstormSessionRepository: new DrizzleBrainstormSessionRepository(db),
64
65
  initiativeRepository: new DrizzleInitiativeRepository(db),
65
66
  riskPolicyRepository: new DrizzleRiskPolicyRepository(db),
67
+ accountRiskPolicyRepository: new DrizzleAccountRiskPolicyRepository(db),
68
+ riskPolicySuppressionRepository: new DrizzleRiskPolicySuppressionRepository(db),
66
69
  mergeTrackRecordRepository: new DrizzleMergeTrackRecordRepository(db),
67
70
  sharedStackRepository: new DrizzleSharedStackRepository(db),
68
71
  workspaceSettingsRepository: new DrizzleWorkspaceSettingsRepository(db),
@@ -85,6 +88,9 @@ export function createDrizzleRepositories(db, clock) {
85
88
  export { DrizzleServiceRepository, DrizzleWorkspaceMemberRepository, DrizzleWorkspaceRepository, } from './drizzle/board.js';
86
89
  export { DrizzleAccountSettingsRepository, DrizzleLocalSettingsRepository, DrizzleWorkspaceSettingsRepository, } from './drizzle/settings.js';
87
90
  export { DrizzleClarityReviewRepository, DrizzleDocInterviewRepository, DrizzleRequirementReviewRepository, } from './drizzle/reviews.js';
91
+ // The account tier of the risk-policy library (ADR 0055) + a board's suppressions. Re-exported so
92
+ // the conformance harness can author an account policy against the real store.
93
+ export { DrizzleAccountRiskPolicyRepository, DrizzleRiskPolicySuppressionRepository, } from './drizzle/account-risk-policies.js';
88
94
  export { createDrizzleSandboxDeps } from './drizzle/sandbox.js';
89
95
  export { DrizzleTestSecretsRepository } from './drizzle/connections.js';
90
96
  export { DrizzleValidationConfigRepository } from './drizzle/connections.js';
@@ -1 +1 @@
1
- {"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../src/repositories/drizzle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../src/repositories/drizzle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ CREATE TABLE "account_risk_policies" (
2
+ "account_id" text,
3
+ "id" text,
4
+ "name" text NOT NULL,
5
+ "max_complexity" double precision NOT NULL,
6
+ "max_risk" double precision NOT NULL,
7
+ "max_impact" double precision NOT NULL,
8
+ "ci_max_attempts" integer NOT NULL,
9
+ "max_requirement_iterations" integer DEFAULT 3 NOT NULL,
10
+ "max_requirement_concern_allowed" text DEFAULT 'none' NOT NULL,
11
+ "max_tester_quality_iterations" integer DEFAULT 3 NOT NULL,
12
+ "release_watch_window_minutes" integer DEFAULT 30 NOT NULL,
13
+ "release_max_attempts" integer DEFAULT 1 NOT NULL,
14
+ "human_review_grace_minutes" integer DEFAULT 10 NOT NULL,
15
+ "judge_min_score" double precision DEFAULT 0.7 NOT NULL,
16
+ "judge_max_bounces" integer DEFAULT 1 NOT NULL,
17
+ "auto_merge_enabled" integer DEFAULT 1 NOT NULL,
18
+ "fork_decision" text,
19
+ "class_rules" text DEFAULT '{}' NOT NULL,
20
+ "class_rules_by_role" text DEFAULT '{}' NOT NULL,
21
+ "dry_run_roles" text DEFAULT '[]' NOT NULL,
22
+ "submission_classes_by_role" text DEFAULT '{}' NOT NULL,
23
+ "version" integer,
24
+ "autonomy" text DEFAULT 'attended' NOT NULL,
25
+ "min_auto_answer_confidence" double precision DEFAULT 0.8 NOT NULL,
26
+ "created_at" bigint NOT NULL,
27
+ CONSTRAINT "account_risk_policies_pkey" PRIMARY KEY("account_id","id")
28
+ );
29
+ --> statement-breakpoint
30
+ CREATE TABLE "risk_policy_suppressions" (
31
+ "workspace_id" text,
32
+ "policy_id" text,
33
+ "created_at" bigint NOT NULL,
34
+ CONSTRAINT "risk_policy_suppressions_pkey" PRIMARY KEY("workspace_id","policy_id")
35
+ );