@principles/core 1.153.0 → 1.155.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.
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +4 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +16 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js +2 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +13 -0
- package/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +1 -0
- package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.d.ts +21 -0
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.js +363 -0
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.js.map +1 -0
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.js +13 -0
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.d.ts +20 -0
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.js +145 -0
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.js.map +1 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.d.ts +15 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js +249 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js.map +1 -0
- package/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +22 -2
- package/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.d.ts +35 -0
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +511 -0
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -0
- package/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
- package/dist/runtime-v2/activation/activation-dispatcher.js +79 -0
- package/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
- package/dist/runtime-v2/activation/activation-types.d.ts +48 -3
- package/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
- package/dist/runtime-v2/activation/activation-types.js +6 -0
- package/dist/runtime-v2/activation/activation-types.js.map +1 -1
- package/dist/runtime-v2/activation/approval-completion-service.d.ts +50 -0
- package/dist/runtime-v2/activation/approval-completion-service.d.ts.map +1 -0
- package/dist/runtime-v2/activation/approval-completion-service.js +160 -0
- package/dist/runtime-v2/activation/approval-completion-service.js.map +1 -0
- package/dist/runtime-v2/activation/approval-queue.d.ts +7 -1
- package/dist/runtime-v2/activation/approval-queue.d.ts.map +1 -1
- package/dist/runtime-v2/activation/approval-queue.js +14 -0
- package/dist/runtime-v2/activation/approval-queue.js.map +1 -1
- package/dist/runtime-v2/activation/index.d.ts +5 -2
- package/dist/runtime-v2/activation/index.d.ts.map +1 -1
- package/dist/runtime-v2/activation/index.js +8 -1
- package/dist/runtime-v2/activation/index.js.map +1 -1
- package/dist/runtime-v2/activation/memory-activation-state-store.d.ts +2 -2
- package/dist/runtime-v2/activation/memory-activation-state-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/memory-activation-state-store.js +4 -4
- package/dist/runtime-v2/activation/memory-activation-state-store.js.map +1 -1
- package/dist/runtime-v2/activation/memory-approval-store.d.ts +2 -1
- package/dist/runtime-v2/activation/memory-approval-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/memory-approval-store.js +18 -0
- package/dist/runtime-v2/activation/memory-approval-store.js.map +1 -1
- package/dist/runtime-v2/activation/production-gate-deps.d.ts +32 -0
- package/dist/runtime-v2/activation/production-gate-deps.d.ts.map +1 -0
- package/dist/runtime-v2/activation/production-gate-deps.js +179 -0
- package/dist/runtime-v2/activation/production-gate-deps.js.map +1 -0
- package/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts +2 -2
- package/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/sqlite-activation-state-store.js +10 -14
- package/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
- package/dist/runtime-v2/activation/sqlite-approval-store.d.ts +2 -1
- package/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/sqlite-approval-store.js +24 -0
- package/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
- package/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts +7 -0
- package/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -1
- package/dist/runtime-v2/adapter/artificer-l2-adapter.js +93 -0
- package/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -1
- package/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts +8 -0
- package/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts.map +1 -1
- package/dist/runtime-v2/adapter/l2-agent-loop-adapter.js +1 -1
- package/dist/runtime-v2/adapter/l2-agent-loop-adapter.js.map +1 -1
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +2 -0
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js +11 -0
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +4 -4
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +2 -2
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +27 -0
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +129 -2
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/proven-channel-baseline.d.ts.map +1 -1
- package/dist/runtime-v2/proven-channel-baseline.js +13 -0
- package/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.js +12 -0
- package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/package.json +1 -1
|
@@ -76,6 +76,80 @@ export class ActivationDispatcher {
|
|
|
76
76
|
if (input.rolloutDecision === 'reject') {
|
|
77
77
|
return { decision: 'refused', reason: 'rollout_rejected', channel: input.channel };
|
|
78
78
|
}
|
|
79
|
+
// 'approved' = approval already granted externally (ApprovalCompletionService).
|
|
80
|
+
// Bypass the approval queue check and activate directly. This is the
|
|
81
|
+
// post-approval dispatch path for high-risk channels (code_tool_hook).
|
|
82
|
+
//
|
|
83
|
+
// Security boundary (P1 fix): the dispatcher independently verifies the
|
|
84
|
+
// approval record — it does NOT trust the caller's rolloutDecision alone.
|
|
85
|
+
// Any caller passing rolloutDecision='approved' must also supply an
|
|
86
|
+
// approvalId that resolves to an approved record matching the artifact
|
|
87
|
+
// and channel. This prevents bypassing the owner approval boundary.
|
|
88
|
+
if (input.rolloutDecision === 'approved') {
|
|
89
|
+
if (!input.approvalId) {
|
|
90
|
+
return {
|
|
91
|
+
decision: 'refused',
|
|
92
|
+
reason: 'approved_dispatch_requires_approval_id',
|
|
93
|
+
nextAction: 'provide approvalId from a verified owner approval record',
|
|
94
|
+
channel: input.channel,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (!this.approvalQueueStore) {
|
|
98
|
+
return {
|
|
99
|
+
decision: 'refused',
|
|
100
|
+
reason: 'approved_dispatch_without_approval_store',
|
|
101
|
+
nextAction: 'configure dispatcher with approvalQueueStore to verify approvals',
|
|
102
|
+
channel: input.channel,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
let approvalRecord;
|
|
106
|
+
try {
|
|
107
|
+
approvalRecord = await this.approvalQueueStore.getById(input.approvalId);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return {
|
|
111
|
+
decision: 'refused',
|
|
112
|
+
reason: 'approval_record_read_failed',
|
|
113
|
+
nextAction: 'check_approval_store_availability',
|
|
114
|
+
channel: input.channel,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (!approvalRecord) {
|
|
118
|
+
return {
|
|
119
|
+
decision: 'refused',
|
|
120
|
+
reason: `approval_record_not_found: ${input.approvalId}`,
|
|
121
|
+
nextAction: 'verify_approval_id',
|
|
122
|
+
channel: input.channel,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (approvalRecord.status !== 'approved') {
|
|
126
|
+
return {
|
|
127
|
+
decision: 'refused',
|
|
128
|
+
reason: `approval_status_is_${approvalRecord.status}_expected_approved`,
|
|
129
|
+
nextAction: approvalRecord.status === 'pending'
|
|
130
|
+
? 'owner_must_approve_before_dispatch'
|
|
131
|
+
: 'rejected_or_expired_approvals_cannot_be_activated',
|
|
132
|
+
channel: input.channel,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (approvalRecord.artifactId !== input.artifactId) {
|
|
136
|
+
return {
|
|
137
|
+
decision: 'refused',
|
|
138
|
+
reason: `approval_artifact_mismatch: approval=${approvalRecord.artifactId} dispatch=${input.artifactId}`,
|
|
139
|
+
nextAction: 'ensure_dispatch_artifact_matches_approved_artifact',
|
|
140
|
+
channel: input.channel,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (approvalRecord.channel !== input.channel) {
|
|
144
|
+
return {
|
|
145
|
+
decision: 'refused',
|
|
146
|
+
reason: `approval_channel_mismatch: approval=${approvalRecord.channel} dispatch=${input.channel}`,
|
|
147
|
+
nextAction: 'ensure_dispatch_channel_matches_approved_channel',
|
|
148
|
+
channel: input.channel,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return this.activateArtifact(input, artifact, idempotencyKey);
|
|
152
|
+
}
|
|
79
153
|
// Auto-promotion bypasses both channel-risk gating AND explicit require_approval from the rollout gate.
|
|
80
154
|
// This is intentional: high-confidence skill artifacts are safe enough to activate without human review.
|
|
81
155
|
const needsApproval = input.rolloutDecision === 'require_approval' || !isLowRiskChannel(input.channel);
|
|
@@ -141,6 +215,11 @@ export class ActivationDispatcher {
|
|
|
141
215
|
}
|
|
142
216
|
}
|
|
143
217
|
async activateArtifact(input, artifact, idempotencyKey) {
|
|
218
|
+
// Resolve the principle ID for WriterInput.principleId. Rule artifacts
|
|
219
|
+
// (code_tool_hook channel) MUST carry sourcePrincipleId — without it,
|
|
220
|
+
// the activated rule cannot be traced back to the owner-approved principle,
|
|
221
|
+
// producing an untraceable behavior change (P1 #3 fix: removed the
|
|
222
|
+
// sourceRuleId/artifactId fallback that allowed untraceable activation).
|
|
144
223
|
const principleId = extractPrincipleId(artifact);
|
|
145
224
|
if (!principleId) {
|
|
146
225
|
return { decision: 'invalid_artifact', reason: 'no_principle_id' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation-dispatcher.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/activation-dispatcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"activation-dispatcher.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/activation-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,16 @@ export type ActivationActor = {
|
|
|
15
15
|
kind: 'human';
|
|
16
16
|
userId: string;
|
|
17
17
|
};
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Rollout activation decision from the rollout reviewer.
|
|
20
|
+
* - 'auto_activate': low-risk channel, activate directly
|
|
21
|
+
* - 'require_approval': enqueue for owner approval
|
|
22
|
+
* - 'reject': refuse activation
|
|
23
|
+
* - 'approved': approval already granted externally (ApprovalCompletionService).
|
|
24
|
+
* Bypasses the approval queue check and activates directly. This is the
|
|
25
|
+
* post-approval dispatch path for high-risk channels.
|
|
26
|
+
*/
|
|
27
|
+
export type RolloutActivationDecision = 'auto_activate' | 'require_approval' | 'reject' | 'approved';
|
|
19
28
|
export interface DispatchInput {
|
|
20
29
|
artifactId: string;
|
|
21
30
|
channel: InternalizationChannel;
|
|
@@ -25,6 +34,13 @@ export interface DispatchInput {
|
|
|
25
34
|
now: string;
|
|
26
35
|
confirm: boolean;
|
|
27
36
|
confidence?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Required when rolloutDecision === 'approved'.
|
|
39
|
+
* The dispatcher independently verifies this approval record exists,
|
|
40
|
+
* is in 'approved' status, and matches the artifactId + channel.
|
|
41
|
+
* This prevents callers from bypassing the owner approval boundary.
|
|
42
|
+
*/
|
|
43
|
+
approvalId?: string;
|
|
28
44
|
}
|
|
29
45
|
export type ActivationDecision = {
|
|
30
46
|
decision: 'would_activate';
|
|
@@ -50,6 +66,7 @@ export type ActivationDecision = {
|
|
|
50
66
|
} | {
|
|
51
67
|
decision: 'refused';
|
|
52
68
|
reason: string;
|
|
69
|
+
nextAction?: string;
|
|
53
70
|
riskLevel?: ActivationRiskLevel;
|
|
54
71
|
channel?: InternalizationChannel;
|
|
55
72
|
} | {
|
|
@@ -85,8 +102,8 @@ export interface ActivationStatusRecord {
|
|
|
85
102
|
export interface ActivationStateReadModel {
|
|
86
103
|
getActivationStatus(idempotencyKey: string): Promise<ActivationStatusRecord | null>;
|
|
87
104
|
recordActivation(record: ActivationStatusRecord): Promise<void>;
|
|
88
|
-
listPromptActivations(): Promise<ActivationStatusRecord[]>;
|
|
89
|
-
listCodeToolHookActivations(): Promise<ActivationStatusRecord[]>;
|
|
105
|
+
listPromptActivations(includeDeactivated?: boolean): Promise<ActivationStatusRecord[]>;
|
|
106
|
+
listCodeToolHookActivations(includeDeactivated?: boolean): Promise<ActivationStatusRecord[]>;
|
|
90
107
|
listAllActivations(): Promise<ActivationStatusRecord[]>;
|
|
91
108
|
deactivateActivation(activationId: string, deactivatedAt: string): Promise<boolean>;
|
|
92
109
|
}
|
|
@@ -131,6 +148,12 @@ export interface ApprovalRecord {
|
|
|
131
148
|
confidenceExplanation?: string;
|
|
132
149
|
effectDescription?: string;
|
|
133
150
|
rejectionEffect?: string;
|
|
151
|
+
/** Story A (PRI-408): Edit tracking — when owner edits the principle/rule before approving */
|
|
152
|
+
editedAt?: string;
|
|
153
|
+
editedBy?: string;
|
|
154
|
+
editReason?: string;
|
|
155
|
+
/** The previous artifactId before the edit (for lineage tracking) */
|
|
156
|
+
previousArtifactId?: string;
|
|
134
157
|
}
|
|
135
158
|
export type ConfidenceLabel = 'high' | 'medium' | 'low';
|
|
136
159
|
export declare function mapConfidenceToLabel(confidence: number | undefined): ConfidenceLabel;
|
|
@@ -200,7 +223,29 @@ export interface ApprovalQueueStore {
|
|
|
200
223
|
ok: false;
|
|
201
224
|
error: 'not_found' | 'not_approved';
|
|
202
225
|
}>;
|
|
226
|
+
/**
|
|
227
|
+
* Story A (PRI-408): Edit a pending approval's artifact to a new version.
|
|
228
|
+
* Updates artifactId, records edit metadata, keeps status as pending.
|
|
229
|
+
* The caller is responsible for creating the new artifact and performing
|
|
230
|
+
* schema validation + sandbox replay BEFORE calling this method.
|
|
231
|
+
* Returns error if the approval is not in 'pending' status.
|
|
232
|
+
*/
|
|
233
|
+
edit(input: ApprovalEditInput): Promise<ApprovalDecisionResult>;
|
|
234
|
+
}
|
|
235
|
+
export interface ApprovalEditInput {
|
|
236
|
+
approvalId: string;
|
|
237
|
+
editedBy: string;
|
|
238
|
+
newArtifactId: string;
|
|
239
|
+
editReason: string;
|
|
240
|
+
now: string;
|
|
241
|
+
}
|
|
242
|
+
export interface ArtifactLineageIdentity {
|
|
243
|
+
artifactId: string;
|
|
244
|
+
sourceTaskId: string;
|
|
245
|
+
sourcePrincipleId?: string;
|
|
246
|
+
lineageArtifactIds: string[];
|
|
203
247
|
}
|
|
248
|
+
export declare function isArtifactRevisionOf(candidate: ArtifactLineageIdentity, original: ArtifactLineageIdentity): boolean;
|
|
204
249
|
export declare function makeIdempotencyKey(artifactId: string, channel: InternalizationChannel): string;
|
|
205
250
|
export declare function isLowRiskChannel(channel: InternalizationChannel): boolean;
|
|
206
251
|
export declare function getChannelRiskLevel(channel: InternalizationChannel): ActivationRiskLevel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation-types.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/activation-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAEtI,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC;AAEnF,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzE,eAAO,MAAM,iBAAiB,EAAE,SAAS,sBAAsB,EAAyC,CAAC;AAEzG,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAItE,CAAC;AAEX,eAAO,MAAM,mCAAmC,OAAO,CAAC;AAExD,eAAO,MAAM,wBAAwB,EAAE,SAAS,sBAAsB,EAAuB,CAAC;AAE9F,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,yBAAyB,GAAG,eAAe,GAAG,kBAAkB,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"activation-types.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/activation-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,12 @@ export function mapConfidenceToLabel(confidence) {
|
|
|
15
15
|
return 'medium';
|
|
16
16
|
return 'low';
|
|
17
17
|
}
|
|
18
|
+
export function isArtifactRevisionOf(candidate, original) {
|
|
19
|
+
const referencesOriginal = candidate.lineageArtifactIds.includes(original.artifactId);
|
|
20
|
+
const samePrinciple = Boolean(candidate.sourcePrincipleId)
|
|
21
|
+
&& candidate.sourcePrincipleId === original.sourcePrincipleId;
|
|
22
|
+
return candidate.sourceTaskId === original.sourceTaskId || referencesOriginal || samePrinciple;
|
|
23
|
+
}
|
|
18
24
|
export function makeIdempotencyKey(artifactId, channel) {
|
|
19
25
|
return `${artifactId}::${channel}`;
|
|
20
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation-types.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/activation-types.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,iBAAiB,GAAsC,CAAC,QAAQ,EAAE,eAAe,CAAU,CAAC;AAEzG,MAAM,CAAC,MAAM,qBAAqB,GAAkD;IAClF,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,UAAU;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC;AAExD,MAAM,CAAC,MAAM,wBAAwB,GAAsC,CAAC,OAAO,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"activation-types.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/activation-types.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,iBAAiB,GAAsC,CAAC,QAAQ,EAAE,eAAe,CAAU,CAAC;AAEzG,MAAM,CAAC,MAAM,qBAAqB,GAAkD;IAClF,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,UAAU;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC;AAExD,MAAM,CAAC,MAAM,wBAAwB,GAAsC,CAAC,OAAO,CAAU,CAAC;AA+I9F,MAAM,UAAU,oBAAoB,CAAC,UAA8B;IACjE,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACrE,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAwFD,MAAM,UAAU,oBAAoB,CAAC,SAAkC,EAAE,QAAiC;IACxG,MAAM,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC;WACrD,SAAS,CAAC,iBAAiB,KAAK,QAAQ,CAAC,iBAAiB,CAAC;IAChE,OAAO,SAAS,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,IAAI,kBAAkB,IAAI,aAAa,CAAC;AACjG,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,OAA+B;IACpF,OAAO,GAAG,UAAU,KAAK,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAA+B;IAC9D,OAAO,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA+B;IACjE,IAAI,gBAAgB,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Completion Service — Story A (PRI-408)
|
|
3
|
+
*
|
|
4
|
+
* Formal production service that orchestrates activation AFTER an owner
|
|
5
|
+
* approves an approval record. Replaces the demo "approve → direct writer"
|
|
6
|
+
* pattern with a structured, idempotent, validated completion path.
|
|
7
|
+
*
|
|
8
|
+
* Product Contract B requirements:
|
|
9
|
+
* - Reads the approved approval record
|
|
10
|
+
* - Validates artifact/version/channel consistency
|
|
11
|
+
* - Prevents unapproved, rejected, or expired records from activating
|
|
12
|
+
* - Idempotent activation (duplicate submissions = no duplicate activation)
|
|
13
|
+
* - Calls the ActivationDispatcher with rolloutDecision='approved'
|
|
14
|
+
* - Records activation state (via dispatcher)
|
|
15
|
+
* - Returns structured decision/reason/nextAction
|
|
16
|
+
*
|
|
17
|
+
* ERR checklist:
|
|
18
|
+
* - ERR-001: Approval record fields validated at runtime, not via `as`
|
|
19
|
+
* - ERR-002: Every failure path carries reason + nextAction
|
|
20
|
+
* - ERR-009: Required fields fail loud when missing
|
|
21
|
+
* - ERR-015: Idempotency state distinguished from current dispatch state
|
|
22
|
+
* - ERR-025: Production-path service, not demo helper
|
|
23
|
+
*/
|
|
24
|
+
import type { ActivationActor, ActivationDecision, ActivationStateReadModel, ApprovalQueueStore } from './activation-types.js';
|
|
25
|
+
import type { ActivationDispatcher } from './activation-dispatcher.js';
|
|
26
|
+
export interface ApprovalCompletionInput {
|
|
27
|
+
approvalId: string;
|
|
28
|
+
actor: ActivationActor;
|
|
29
|
+
now: string;
|
|
30
|
+
}
|
|
31
|
+
export type ApprovalCompletionResult = {
|
|
32
|
+
ok: true;
|
|
33
|
+
decision: ActivationDecision;
|
|
34
|
+
activationId?: string;
|
|
35
|
+
approvalId: string;
|
|
36
|
+
} | {
|
|
37
|
+
ok: false;
|
|
38
|
+
error: 'not_found' | 'not_approved' | 'already_activated';
|
|
39
|
+
reason: string;
|
|
40
|
+
nextAction: string;
|
|
41
|
+
approvalId: string;
|
|
42
|
+
};
|
|
43
|
+
export declare class ApprovalCompletionService {
|
|
44
|
+
private readonly approvalStore;
|
|
45
|
+
private readonly dispatcher;
|
|
46
|
+
private readonly stateReadModel;
|
|
47
|
+
constructor(approvalStore: ApprovalQueueStore, dispatcher: ActivationDispatcher, stateReadModel: ActivationStateReadModel);
|
|
48
|
+
completeApproval(input: ApprovalCompletionInput): Promise<ApprovalCompletionResult>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=approval-completion-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-completion-service.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/approval-completion-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,wBAAwB,GAChC;IACE,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,mBAAmB,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,aAAa,EAAE,kBAAkB,EACjC,UAAU,EAAE,oBAAoB,EAChC,cAAc,EAAE,wBAAwB;IAGrD,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAkI1F"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Completion Service — Story A (PRI-408)
|
|
3
|
+
*
|
|
4
|
+
* Formal production service that orchestrates activation AFTER an owner
|
|
5
|
+
* approves an approval record. Replaces the demo "approve → direct writer"
|
|
6
|
+
* pattern with a structured, idempotent, validated completion path.
|
|
7
|
+
*
|
|
8
|
+
* Product Contract B requirements:
|
|
9
|
+
* - Reads the approved approval record
|
|
10
|
+
* - Validates artifact/version/channel consistency
|
|
11
|
+
* - Prevents unapproved, rejected, or expired records from activating
|
|
12
|
+
* - Idempotent activation (duplicate submissions = no duplicate activation)
|
|
13
|
+
* - Calls the ActivationDispatcher with rolloutDecision='approved'
|
|
14
|
+
* - Records activation state (via dispatcher)
|
|
15
|
+
* - Returns structured decision/reason/nextAction
|
|
16
|
+
*
|
|
17
|
+
* ERR checklist:
|
|
18
|
+
* - ERR-001: Approval record fields validated at runtime, not via `as`
|
|
19
|
+
* - ERR-002: Every failure path carries reason + nextAction
|
|
20
|
+
* - ERR-009: Required fields fail loud when missing
|
|
21
|
+
* - ERR-015: Idempotency state distinguished from current dispatch state
|
|
22
|
+
* - ERR-025: Production-path service, not demo helper
|
|
23
|
+
*/
|
|
24
|
+
import { makeIdempotencyKey } from './activation-types.js';
|
|
25
|
+
export class ApprovalCompletionService {
|
|
26
|
+
approvalStore;
|
|
27
|
+
dispatcher;
|
|
28
|
+
stateReadModel;
|
|
29
|
+
constructor(approvalStore, dispatcher, stateReadModel) {
|
|
30
|
+
this.approvalStore = approvalStore;
|
|
31
|
+
this.dispatcher = dispatcher;
|
|
32
|
+
this.stateReadModel = stateReadModel;
|
|
33
|
+
}
|
|
34
|
+
async completeApproval(input) {
|
|
35
|
+
// 1. Read the approval record
|
|
36
|
+
let record;
|
|
37
|
+
try {
|
|
38
|
+
record = await this.approvalStore.getById(input.approvalId);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
error: 'not_found',
|
|
44
|
+
reason: 'approval_record_read_failed',
|
|
45
|
+
nextAction: 'check_approval_store_or_retry',
|
|
46
|
+
approvalId: input.approvalId,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (!record) {
|
|
50
|
+
return {
|
|
51
|
+
ok: false,
|
|
52
|
+
error: 'not_found',
|
|
53
|
+
reason: `approval record ${input.approvalId} not found`,
|
|
54
|
+
nextAction: 'verify_approval_id_or_check_store',
|
|
55
|
+
approvalId: input.approvalId,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// 2. Validate the approval is in 'approved' status
|
|
59
|
+
if (record.status !== 'approved') {
|
|
60
|
+
return {
|
|
61
|
+
ok: false,
|
|
62
|
+
error: 'not_approved',
|
|
63
|
+
reason: `approval status is ${record.status}, expected approved`,
|
|
64
|
+
nextAction: record.status === 'pending'
|
|
65
|
+
? 'owner_must_approve_before_completion'
|
|
66
|
+
: record.status === 'rejected'
|
|
67
|
+
? 'rejected_approvals_cannot_be_activated'
|
|
68
|
+
: 'check_approval_status',
|
|
69
|
+
approvalId: input.approvalId,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// 2b. Validate required fields before generating idempotency key (EP-01)
|
|
73
|
+
if (!record.artifactId || typeof record.artifactId !== 'string') {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
error: 'not_approved',
|
|
77
|
+
reason: 'approval record has missing or invalid artifactId',
|
|
78
|
+
nextAction: 'check_artifact_store_integrity',
|
|
79
|
+
approvalId: input.approvalId,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (!record.channel || typeof record.channel !== 'string') {
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
error: 'not_approved',
|
|
86
|
+
reason: 'approval record has missing or invalid channel',
|
|
87
|
+
nextAction: 'check_approval_store_integrity',
|
|
88
|
+
approvalId: input.approvalId,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// 3. Check idempotency — has this already been activated?
|
|
92
|
+
const idempotencyKey = makeIdempotencyKey(record.artifactId, record.channel);
|
|
93
|
+
let existingActivation;
|
|
94
|
+
try {
|
|
95
|
+
existingActivation = await this.stateReadModel.getActivationStatus(idempotencyKey);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
// If state read fails, proceed to dispatch — the dispatcher will
|
|
99
|
+
// also check idempotency and handle errors. Log the failure for
|
|
100
|
+
// observability (ERR-002: graceful degradation must include a reason).
|
|
101
|
+
const readErr = err instanceof Error ? err.message : String(err);
|
|
102
|
+
console.warn(`[ApprovalCompletionService] idempotency state read failed for key ${idempotencyKey}: ${readErr}; proceeding to dispatch`);
|
|
103
|
+
existingActivation = null;
|
|
104
|
+
}
|
|
105
|
+
if (existingActivation) {
|
|
106
|
+
return {
|
|
107
|
+
ok: true,
|
|
108
|
+
decision: {
|
|
109
|
+
decision: 'already_activated',
|
|
110
|
+
activationId: existingActivation.activationId,
|
|
111
|
+
action: existingActivation.action,
|
|
112
|
+
targetRef: existingActivation.targetRef,
|
|
113
|
+
},
|
|
114
|
+
activationId: existingActivation.activationId,
|
|
115
|
+
approvalId: input.approvalId,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// 4. Dispatch with 'approved' — the dispatcher independently verifies
|
|
119
|
+
// the approval record via approvalId (security boundary, P1 #3 fix).
|
|
120
|
+
let dispatchDecision;
|
|
121
|
+
try {
|
|
122
|
+
dispatchDecision = await this.dispatcher.dispatch({
|
|
123
|
+
artifactId: record.artifactId,
|
|
124
|
+
channel: record.channel,
|
|
125
|
+
rolloutDecision: 'approved',
|
|
126
|
+
approvalId: input.approvalId,
|
|
127
|
+
actor: input.actor,
|
|
128
|
+
now: input.now,
|
|
129
|
+
confirm: true,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
error: 'not_approved',
|
|
137
|
+
reason: `dispatch_failed: ${message}`,
|
|
138
|
+
nextAction: 'check_dispatcher_writers_and_artifact_store',
|
|
139
|
+
approvalId: input.approvalId,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// 5. Return structured result
|
|
143
|
+
if (dispatchDecision.decision === 'activated' || dispatchDecision.decision === 'already_activated') {
|
|
144
|
+
return {
|
|
145
|
+
ok: true,
|
|
146
|
+
decision: dispatchDecision,
|
|
147
|
+
activationId: dispatchDecision.activationId,
|
|
148
|
+
approvalId: input.approvalId,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// The dispatch returned a non-activation decision (refused, invalid_artifact, etc.)
|
|
152
|
+
// This is not a service-level failure — the caller gets the dispatch decision.
|
|
153
|
+
return {
|
|
154
|
+
ok: true,
|
|
155
|
+
decision: dispatchDecision,
|
|
156
|
+
approvalId: input.approvalId,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=approval-completion-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-completion-service.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/approval-completion-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InternalizationChannel } from '../internalization/peer-runner-contracts.js';
|
|
2
|
-
import type { ApprovalDecisionResult, ApprovalEnqueueInput, ApprovalFilter, ApprovalListFilter, ApprovalQueueStore, ApprovalRecord, ApprovalStats } from './activation-types.js';
|
|
2
|
+
import type { ApprovalDecisionResult, ApprovalEditInput, ApprovalEnqueueInput, ApprovalFilter, ApprovalListFilter, ApprovalQueueStore, ApprovalRecord, ApprovalStats } from './activation-types.js';
|
|
3
3
|
export declare function decideAutoPromotion(channel: InternalizationChannel, confidence: number | undefined): boolean;
|
|
4
4
|
export declare class ApprovalQueue {
|
|
5
5
|
private readonly store;
|
|
@@ -17,5 +17,11 @@ export declare class ApprovalQueue {
|
|
|
17
17
|
ok: false;
|
|
18
18
|
error: 'not_found' | 'not_approved';
|
|
19
19
|
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Story A (PRI-408): Edit a pending approval's artifact to a new version.
|
|
22
|
+
* The caller must create the new artifact and perform schema validation +
|
|
23
|
+
* sandbox replay BEFORE calling this method.
|
|
24
|
+
*/
|
|
25
|
+
edit(input: ApprovalEditInput): Promise<ApprovalDecisionResult>;
|
|
20
26
|
}
|
|
21
27
|
//# sourceMappingURL=approval-queue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-queue.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/approval-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACd,MAAM,uBAAuB,CAAC;AAM/B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK5G;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,kBAAkB;IAEhD,OAAO,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1E,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI3D,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS9F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS9F,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAIvC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"approval-queue.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/approval-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACd,MAAM,uBAAuB,CAAC;AAM/B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK5G;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,kBAAkB;IAEhD,OAAO,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1E,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI3D,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS9F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS9F,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAIvC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAA;KAAE,CAAC;IAIpH;;;;OAIG;IACG,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAQtE"}
|
|
@@ -49,5 +49,19 @@ export class ApprovalQueue {
|
|
|
49
49
|
async resetToPending(approvalId) {
|
|
50
50
|
return this.store.resetToPending(approvalId);
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Story A (PRI-408): Edit a pending approval's artifact to a new version.
|
|
54
|
+
* The caller must create the new artifact and perform schema validation +
|
|
55
|
+
* sandbox replay BEFORE calling this method.
|
|
56
|
+
*/
|
|
57
|
+
async edit(input) {
|
|
58
|
+
const existing = await this.store.getById(input.approvalId);
|
|
59
|
+
if (!existing)
|
|
60
|
+
return { ok: false, error: 'not_found' };
|
|
61
|
+
if (existing.status !== 'pending') {
|
|
62
|
+
return { ok: false, error: 'already_decided', status: existing.status };
|
|
63
|
+
}
|
|
64
|
+
return this.store.edit(input);
|
|
65
|
+
}
|
|
52
66
|
}
|
|
53
67
|
//# sourceMappingURL=approval-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-queue.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/approval-queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"approval-queue.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/approval-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { ActivationRiskLevel, ActivationActor, RolloutActivationDecision, DispatchInput, ActivationDecision, PIArtifactSnapshot, ActivationArtifactReadModel, ActivationStatusRecord, ActivationStateReadModel, WriterInput, WriterResult, CanActivateResult, ChannelWriter, InternalizationChannel, PIArtifactKind, PIArtifactValidationStatus, ApprovalStatus, ApprovalRecord, ApprovalEnqueueInput, ApprovalFilter, ApprovalDecisionResult, ApprovalQueueStore, ConfidenceLabel, ApprovalWithContext, ApprovalListFilter, ApprovalStats, ApprovalListResult, } from './activation-types.js';
|
|
2
|
-
export { LOW_RISK_CHANNELS, HIGH_RISK_CHANNEL_MAP, makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, mapConfidenceToLabel, } from './activation-types.js';
|
|
1
|
+
export type { ActivationRiskLevel, ActivationActor, RolloutActivationDecision, DispatchInput, ActivationDecision, PIArtifactSnapshot, ActivationArtifactReadModel, ActivationStatusRecord, ActivationStateReadModel, WriterInput, WriterResult, CanActivateResult, ChannelWriter, InternalizationChannel, PIArtifactKind, PIArtifactValidationStatus, ApprovalStatus, ApprovalRecord, ApprovalEnqueueInput, ApprovalFilter, ApprovalDecisionResult, ApprovalQueueStore, ConfidenceLabel, ApprovalWithContext, ApprovalListFilter, ArtifactLineageIdentity, ApprovalStats, ApprovalListResult, } from './activation-types.js';
|
|
2
|
+
export { isArtifactRevisionOf, LOW_RISK_CHANNELS, HIGH_RISK_CHANNEL_MAP, makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, mapConfidenceToLabel, } from './activation-types.js';
|
|
3
3
|
export { ActivationDispatcher } from './activation-dispatcher.js';
|
|
4
4
|
export type { DispatcherConfig } from './activation-dispatcher.js';
|
|
5
5
|
export { PromptWriter, DeferArchiveWriter, extractPrincipleId, } from './low-risk-writers.js';
|
|
@@ -10,6 +10,9 @@ export { MemoryApprovalQueueStore } from './memory-approval-store.js';
|
|
|
10
10
|
export { SqliteApprovalQueueStore } from './sqlite-approval-store.js';
|
|
11
11
|
export { RuleHostWriter } from './writers/rule-host-writer.js';
|
|
12
12
|
export type { RuleHostWriterConfig } from './writers/rule-host-writer.js';
|
|
13
|
+
export { createProductionGateDeps } from './production-gate-deps.js';
|
|
14
|
+
export { ApprovalCompletionService } from './approval-completion-service.js';
|
|
15
|
+
export type { ApprovalCompletionInput, ApprovalCompletionResult } from './approval-completion-service.js';
|
|
13
16
|
export { RUNTIME_V2_PRINCIPLE_BUDGET, isRecord as isArtifactRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, renderPrinciplesToDirectives, } from './prompt-activation-reader-contract.js';
|
|
14
17
|
export type { ActivatedPrinciple, PromptActivationReaderResult, } from './prompt-activation-reader-contract.js';
|
|
15
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mCAAmC,EACnC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mCAAmC,EACnC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAK1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE1G,OAAO,EACL,2BAA2B,EAC3B,QAAQ,IAAI,gBAAgB,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,YAAY,EACZ,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC;AAEhD,YAAY,EACV,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { LOW_RISK_CHANNELS, HIGH_RISK_CHANNEL_MAP, makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, mapConfidenceToLabel, } from './activation-types.js';
|
|
1
|
+
export { isArtifactRevisionOf, LOW_RISK_CHANNELS, HIGH_RISK_CHANNEL_MAP, makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, mapConfidenceToLabel, } from './activation-types.js';
|
|
2
2
|
export { ActivationDispatcher } from './activation-dispatcher.js';
|
|
3
3
|
export { PromptWriter, DeferArchiveWriter, extractPrincipleId, } from './low-risk-writers.js';
|
|
4
4
|
export { MemoryActivationStateStore, MemoryArtifactReadModel, } from './memory-activation-state-store.js';
|
|
@@ -7,5 +7,12 @@ export { ApprovalQueue, decideAutoPromotion } from './approval-queue.js';
|
|
|
7
7
|
export { MemoryApprovalQueueStore } from './memory-approval-store.js';
|
|
8
8
|
export { SqliteApprovalQueueStore } from './sqlite-approval-store.js';
|
|
9
9
|
export { RuleHostWriter } from './writers/rule-host-writer.js';
|
|
10
|
+
// Story A (PRI-408): Production gate deps factory — canonical vm-based rule
|
|
11
|
+
// compilation for RuleHostWriter gateDeps. Available to all packages that
|
|
12
|
+
// depend on @principles/core (pd-cli, pd-console, plugin).
|
|
13
|
+
export { createProductionGateDeps } from './production-gate-deps.js';
|
|
14
|
+
// Story A (PRI-408): Formal approval-completion production service.
|
|
15
|
+
// Replaces demo "approve → direct writer" with structured, idempotent path.
|
|
16
|
+
export { ApprovalCompletionService } from './approval-completion-service.js';
|
|
10
17
|
export { RUNTIME_V2_PRINCIPLE_BUDGET, isRecord as isArtifactRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, renderPrinciplesToDirectives, } from './prompt-activation-reader-contract.js';
|
|
11
18
|
//# sourceMappingURL=index.js.map
|