@principles/core 1.289.2 → 1.291.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 (90) hide show
  1. package/dist/principle-tree-ledger.d.ts +20 -0
  2. package/dist/principle-tree-ledger.d.ts.map +1 -1
  3. package/dist/principle-tree-ledger.js +13 -9
  4. package/dist/principle-tree-ledger.js.map +1 -1
  5. package/dist/runtime-v2/activation/activation-dispatcher.d.ts +4 -0
  6. package/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
  7. package/dist/runtime-v2/activation/activation-dispatcher.js +225 -66
  8. package/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
  9. package/dist/runtime-v2/activation/activation-types.d.ts +48 -0
  10. package/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
  11. package/dist/runtime-v2/activation/activation-types.js.map +1 -1
  12. package/dist/runtime-v2/activation/approval-completion-service.d.ts +9 -0
  13. package/dist/runtime-v2/activation/approval-completion-service.d.ts.map +1 -1
  14. package/dist/runtime-v2/activation/approval-completion-service.js +4 -1
  15. package/dist/runtime-v2/activation/approval-completion-service.js.map +1 -1
  16. package/dist/runtime-v2/activation/index.d.ts +4 -2
  17. package/dist/runtime-v2/activation/index.d.ts.map +1 -1
  18. package/dist/runtime-v2/activation/index.js +4 -1
  19. package/dist/runtime-v2/activation/index.js.map +1 -1
  20. package/dist/runtime-v2/activation/ledger-identity.d.ts +12 -3
  21. package/dist/runtime-v2/activation/ledger-identity.d.ts.map +1 -1
  22. package/dist/runtime-v2/activation/ledger-identity.js +18 -3
  23. package/dist/runtime-v2/activation/ledger-identity.js.map +1 -1
  24. package/dist/runtime-v2/activation/low-risk-writers.d.ts.map +1 -1
  25. package/dist/runtime-v2/activation/low-risk-writers.js +2 -1
  26. package/dist/runtime-v2/activation/low-risk-writers.js.map +1 -1
  27. package/dist/runtime-v2/activation/prompt-activation-reader-contract.d.ts +11 -0
  28. package/dist/runtime-v2/activation/prompt-activation-reader-contract.d.ts.map +1 -1
  29. package/dist/runtime-v2/activation/prompt-activation-reader-contract.js +12 -2
  30. package/dist/runtime-v2/activation/prompt-activation-reader-contract.js.map +1 -1
  31. package/dist/runtime-v2/activation/prompt-replacement.d.ts +79 -0
  32. package/dist/runtime-v2/activation/prompt-replacement.d.ts.map +1 -0
  33. package/dist/runtime-v2/activation/prompt-replacement.js +171 -0
  34. package/dist/runtime-v2/activation/prompt-replacement.js.map +1 -0
  35. package/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts +17 -1
  36. package/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
  37. package/dist/runtime-v2/activation/sqlite-activation-state-store.js +132 -0
  38. package/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
  39. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.d.ts +8 -0
  40. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.d.ts.map +1 -1
  41. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.js +11 -1
  42. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.js.map +1 -1
  43. package/dist/runtime-v2/index.d.ts +8 -2
  44. package/dist/runtime-v2/index.d.ts.map +1 -1
  45. package/dist/runtime-v2/index.js +8 -2
  46. package/dist/runtime-v2/index.js.map +1 -1
  47. package/dist/runtime-v2/internalization/evaluator-runner.d.ts +14 -3
  48. package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  49. package/dist/runtime-v2/internalization/evaluator-runner.js +10 -2
  50. package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  51. package/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +13 -1
  52. package/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  53. package/dist/runtime-v2/internalization/scribe-prompt-builder.js +15 -2
  54. package/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  55. package/dist/runtime-v2/internalization/scribe-runner.d.ts +4 -0
  56. package/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  57. package/dist/runtime-v2/internalization/scribe-runner.js +13 -1
  58. package/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  59. package/dist/runtime-v2/intervention-evidence-normalizer.d.ts +28 -0
  60. package/dist/runtime-v2/intervention-evidence-normalizer.d.ts.map +1 -0
  61. package/dist/runtime-v2/intervention-evidence-normalizer.js +654 -0
  62. package/dist/runtime-v2/intervention-evidence-normalizer.js.map +1 -0
  63. package/dist/runtime-v2/receipt-coverage.d.ts +8 -0
  64. package/dist/runtime-v2/receipt-coverage.d.ts.map +1 -1
  65. package/dist/runtime-v2/receipt-coverage.js +18 -0
  66. package/dist/runtime-v2/receipt-coverage.js.map +1 -1
  67. package/dist/runtime-v2/store/intervention-evidence-schema.d.ts +6 -0
  68. package/dist/runtime-v2/store/intervention-evidence-schema.d.ts.map +1 -0
  69. package/dist/runtime-v2/store/intervention-evidence-schema.js +122 -0
  70. package/dist/runtime-v2/store/intervention-evidence-schema.js.map +1 -0
  71. package/dist/runtime-v2/store/sqlite-connection.d.ts +8 -0
  72. package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  73. package/dist/runtime-v2/store/sqlite-connection.js +62 -3
  74. package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  75. package/dist/runtime-v2/store/sqlite-intervention-evidence-store.d.ts +67 -0
  76. package/dist/runtime-v2/store/sqlite-intervention-evidence-store.d.ts.map +1 -0
  77. package/dist/runtime-v2/store/sqlite-intervention-evidence-store.js +737 -0
  78. package/dist/runtime-v2/store/sqlite-intervention-evidence-store.js.map +1 -0
  79. package/dist/runtime-v2/types/event-types.d.ts +6 -0
  80. package/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  81. package/dist/runtime-v2/types/event-types.js +2 -0
  82. package/dist/runtime-v2/types/event-types.js.map +1 -1
  83. package/dist/runtime-v2/types/intervention-evidence-contract.d.ts +287 -0
  84. package/dist/runtime-v2/types/intervention-evidence-contract.d.ts.map +1 -0
  85. package/dist/runtime-v2/types/intervention-evidence-contract.js +84 -0
  86. package/dist/runtime-v2/types/intervention-evidence-contract.js.map +1 -0
  87. package/dist/telemetry-event.d.ts.map +1 -1
  88. package/dist/telemetry-event.js +3 -2
  89. package/dist/telemetry-event.js.map +1 -1
  90. package/package.json +5 -1
@@ -0,0 +1,79 @@
1
+ /**
2
+ * PD_PROMPT_CAPACITY_V1 R-B3: prompt-channel version replacement support.
3
+ *
4
+ * Two focused capabilities over EXISTING authorities (no new store, no new
5
+ * lifecycle states):
6
+ * 1. `detectPromptReplacementTarget` — given the artifact an Owner just
7
+ * approved, find the live prompt activation of a PRIOR artifact version of
8
+ * the same principle (revision lineage via the existing
9
+ * `isArtifactRevisionOf` predicate). Ambiguity fails closed: more than one
10
+ * live match is an error the Owner resolves manually, never a guess and
11
+ * never a batch migration over history.
12
+ * 2. `buildOwnerRevisionArtifact` — assemble the new artifact version for an
13
+ * Owner-submitted replacement statement: a clone of the approved scribe
14
+ * artifact with ONLY principleDraft.statement replaced, new lineage, new
15
+ * task identity (the (source_task_id, artifact_kind) unique index forbids
16
+ * same-task upsert — that would overwrite the old approved artifact), and
17
+ * validation through the REAL `DefaultScribeValidator` content contract —
18
+ * never a direct `validated` stamp.
19
+ */
20
+ import type { ActivationStatusRecord, PIArtifactSnapshot } from './activation-types.js';
21
+ export interface PromptReplacementTarget {
22
+ supersededActivationId: string;
23
+ supersededArtifactId: string;
24
+ }
25
+ export type PromptReplacementDetection = {
26
+ ok: true;
27
+ target: PromptReplacementTarget | null;
28
+ } | {
29
+ ok: false;
30
+ error: string;
31
+ nextAction: string;
32
+ };
33
+ /**
34
+ * Find the single live prompt activation whose artifact is a prior version of
35
+ * `approvalArtifactId`'s principle. Returns target=null when the approval is
36
+ * not a revision of anything live (plain activation), and ok=false when more
37
+ * than one live activation matches (manual resolution required).
38
+ */
39
+ export declare function detectPromptReplacementTarget(input: {
40
+ approvalArtifactId: string;
41
+ getArtifactById: (artifactId: string) => Promise<PIArtifactSnapshot | null>;
42
+ listPromptActivations: () => Promise<ActivationStatusRecord[]>;
43
+ includeHistoricalTargets?: boolean;
44
+ }): Promise<PromptReplacementDetection>;
45
+ export interface OwnerRevisionArtifactDraft {
46
+ artifactId: string;
47
+ sourceTaskId: string;
48
+ sourcePrincipleId?: string;
49
+ lineageArtifactIds: string[];
50
+ contentJson: string;
51
+ }
52
+ export type OwnerRevisionBuildResult = {
53
+ ok: true;
54
+ draft: OwnerRevisionArtifactDraft;
55
+ oldStatement: string;
56
+ title: string;
57
+ intentContract?: unknown;
58
+ } | {
59
+ ok: false;
60
+ error: string;
61
+ nextAction: string;
62
+ };
63
+ /**
64
+ * Build the new artifact version for an Owner-submitted statement. The old
65
+ * approved artifact stays immutable (untouched); the new version carries
66
+ * lineage back to it and keeps every non-statement field — the intent fields
67
+ * are preserved verbatim and returned for the reviewable diff (the Owner is
68
+ * the semantic judge of intent consistency; the validator enforces the
69
+ * structural content contract).
70
+ */
71
+ export declare function buildOwnerRevisionArtifact(input: {
72
+ oldArtifact: PIArtifactSnapshot;
73
+ newStatement: string;
74
+ editedBy: string;
75
+ now: string;
76
+ }): Promise<OwnerRevisionBuildResult>;
77
+ /** Stable digest helper for revision payloads (audit/lineage display). */
78
+ export declare function revisionDigest(contentJson: string): string;
79
+ //# sourceMappingURL=prompt-replacement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-replacement.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/prompt-replacement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIxF,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAA;CAAE,GACpD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC5E,qBAAqB,EAAE,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC/D,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA4CtC;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,0BAA0B,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9G;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrD;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA8EpC;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * PD_PROMPT_CAPACITY_V1 R-B3: prompt-channel version replacement support.
3
+ *
4
+ * Two focused capabilities over EXISTING authorities (no new store, no new
5
+ * lifecycle states):
6
+ * 1. `detectPromptReplacementTarget` — given the artifact an Owner just
7
+ * approved, find the live prompt activation of a PRIOR artifact version of
8
+ * the same principle (revision lineage via the existing
9
+ * `isArtifactRevisionOf` predicate). Ambiguity fails closed: more than one
10
+ * live match is an error the Owner resolves manually, never a guess and
11
+ * never a batch migration over history.
12
+ * 2. `buildOwnerRevisionArtifact` — assemble the new artifact version for an
13
+ * Owner-submitted replacement statement: a clone of the approved scribe
14
+ * artifact with ONLY principleDraft.statement replaced, new lineage, new
15
+ * task identity (the (source_task_id, artifact_kind) unique index forbids
16
+ * same-task upsert — that would overwrite the old approved artifact), and
17
+ * validation through the REAL `DefaultScribeValidator` content contract —
18
+ * never a direct `validated` stamp.
19
+ */
20
+ import { createHash, randomUUID } from 'node:crypto';
21
+ import { isArtifactRevisionOf } from './activation-types.js';
22
+ import { DefaultScribeValidator } from '../internalization/scribe-output.js';
23
+ /**
24
+ * Find the single live prompt activation whose artifact is a prior version of
25
+ * `approvalArtifactId`'s principle. Returns target=null when the approval is
26
+ * not a revision of anything live (plain activation), and ok=false when more
27
+ * than one live activation matches (manual resolution required).
28
+ */
29
+ export async function detectPromptReplacementTarget(input) {
30
+ const approvalArtifact = await input.getArtifactById(input.approvalArtifactId);
31
+ if (approvalArtifact === null) {
32
+ return {
33
+ ok: false,
34
+ error: `approval_artifact_unreadable: ${input.approvalArtifactId}`,
35
+ nextAction: 'check_pi_artifacts_table',
36
+ };
37
+ }
38
+ const matches = [];
39
+ const activations = await input.listPromptActivations();
40
+ for (const activation of activations) {
41
+ if (activation.deactivatedAt !== null)
42
+ continue;
43
+ if (activation.artifactId === input.approvalArtifactId)
44
+ continue;
45
+ const artifact = await input.getArtifactById(activation.artifactId);
46
+ if (artifact === null)
47
+ continue;
48
+ if (isArtifactRevisionOf(approvalArtifact, artifact)) {
49
+ if (approvalArtifact.sourcePrincipleId && artifact.sourcePrincipleId
50
+ && approvalArtifact.sourcePrincipleId !== artifact.sourcePrincipleId) {
51
+ return { ok: false, error: 'prompt_replacement_source_principle_mismatch', nextAction: 'review the artifact lineage and source principle before approval' };
52
+ }
53
+ matches.push({ supersededActivationId: activation.activationId, supersededArtifactId: activation.artifactId });
54
+ }
55
+ }
56
+ if (matches.length === 0 && input.includeHistoricalTargets === true) {
57
+ // Recovery of an already live revision must bind the nearest explicit
58
+ // lineage artifact, even when its old activation is now inactive.
59
+ for (const artifactId of [...approvalArtifact.lineageArtifactIds].reverse()) {
60
+ const historical = activations.filter((activation) => activation.artifactId === artifactId);
61
+ if (historical.length === 0)
62
+ continue;
63
+ if (historical.length !== 1)
64
+ return { ok: false, error: 'ambiguous_prompt_replacement_history', nextAction: 'inspect the bound historical artifact and activation before retrying' };
65
+ const [target] = historical;
66
+ if (target !== undefined)
67
+ matches.push({ supersededActivationId: target.activationId, supersededArtifactId: target.artifactId });
68
+ break;
69
+ }
70
+ }
71
+ if (matches.length > 1) {
72
+ return {
73
+ ok: false,
74
+ error: `ambiguous_prompt_replacement: ${matches.length} live prompt activations match this revision (${matches.map((m) => m.supersededActivationId).join(', ')})`,
75
+ nextAction: 'deactivate the stale versions manually, then retry the approval — replacement never migrates history in bulk',
76
+ };
77
+ }
78
+ return { ok: true, target: matches[0] ?? null };
79
+ }
80
+ function isRecord(value) {
81
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
82
+ }
83
+ /**
84
+ * Build the new artifact version for an Owner-submitted statement. The old
85
+ * approved artifact stays immutable (untouched); the new version carries
86
+ * lineage back to it and keeps every non-statement field — the intent fields
87
+ * are preserved verbatim and returned for the reviewable diff (the Owner is
88
+ * the semantic judge of intent consistency; the validator enforces the
89
+ * structural content contract).
90
+ */
91
+ export async function buildOwnerRevisionArtifact(input) {
92
+ const { oldArtifact, newStatement, editedBy, now } = input;
93
+ const trimmed = newStatement.trim();
94
+ if (trimmed.length === 0) {
95
+ return { ok: false, error: 'statement_empty', nextAction: 'provide a non-empty replacement statement' };
96
+ }
97
+ let parsed;
98
+ try {
99
+ parsed = JSON.parse(oldArtifact.contentJson);
100
+ }
101
+ catch {
102
+ return { ok: false, error: 'old_artifact_content_unparseable', nextAction: 'repair the old artifact content before creating a revision' };
103
+ }
104
+ if (!isRecord(parsed)) {
105
+ return { ok: false, error: 'old_artifact_content_malformed', nextAction: 'repair the old artifact content before creating a revision' };
106
+ }
107
+ const oldDraft = isRecord(parsed.principleDraft) ? parsed.principleDraft : null;
108
+ const oldStatement = typeof oldDraft?.statement === 'string' ? oldDraft.statement : '';
109
+ if (oldStatement === '') {
110
+ return { ok: false, error: 'old_artifact_missing_statement', nextAction: 'the old artifact has no principleDraft.statement to replace' };
111
+ }
112
+ if (typeof parsed.text === 'string' && parsed.text.length > 0 && parsed.text !== oldStatement) {
113
+ return { ok: false, error: 'old_artifact_ambiguous_statement', nextAction: 'review the conflicting text and principleDraft.statement; the old artifact remains unchanged' };
114
+ }
115
+ if (trimmed === oldStatement.trim()) {
116
+ return { ok: false, error: 'statement_unchanged', nextAction: 'the replacement statement must differ from the current one' };
117
+ }
118
+ // New task identity: the (source_task_id, artifact_kind) UNIQUE index makes
119
+ // same-task upsert an OVERWRITE of the old approved artifact — forbidden.
120
+ // The suffix must stay URL-safe: artifact ids flow into approval ids
121
+ // (`apr_prompt_<artifactId>`) and from there into Console route paths.
122
+ const revisionSuffix = `ownerrev-${randomUUID()}`;
123
+ const sourceTaskId = `${oldArtifact.sourceTaskId}-${revisionSuffix}`;
124
+ const artifactId = `pi-art-${sourceTaskId}`;
125
+ const revisedContent = { ...parsed };
126
+ // The production reader prefers top-level text. Remove an identical legacy
127
+ // alias only in the new version so statement remains the execution authority.
128
+ delete revisedContent.text;
129
+ revisedContent.principleDraft = {
130
+ ...(oldDraft ?? {}),
131
+ statement: trimmed,
132
+ };
133
+ revisedContent.taskId = sourceTaskId;
134
+ revisedContent.generatedAt = now;
135
+ // Trace the Owner edit inside the artifact's own risk notes (append-only
136
+ // style — never rewrite existing fields other than the statement/task bookkeeping).
137
+ const risks = Array.isArray(parsed.risks) && parsed.risks.every((r) => typeof r === 'string')
138
+ ? [...(parsed.risks)]
139
+ : [];
140
+ risks.push(`owner-edited statement (${editedBy}, ${now}): revision of ${oldArtifact.artifactId} for prompt capacity`);
141
+ revisedContent.risks = risks;
142
+ // Reuse the REAL content validation contract — taskId must match the new
143
+ // draft's task identity; every structural requirement applies as for a
144
+ // scribe run. A failure means NO artifact is persisted by the caller.
145
+ const validation = await new DefaultScribeValidator().validate(revisedContent, sourceTaskId);
146
+ if (!validation.valid) {
147
+ return {
148
+ ok: false,
149
+ error: `revision_validation_failed: ${validation.errors.slice(0, 5).join('; ')}`,
150
+ nextAction: 'fix the revision content so it satisfies the scribe output contract (title/rationale/applicability/intentContract must stay intact)',
151
+ };
152
+ }
153
+ return {
154
+ ok: true,
155
+ draft: {
156
+ artifactId,
157
+ sourceTaskId,
158
+ ...(oldArtifact.sourcePrincipleId !== undefined ? { sourcePrincipleId: oldArtifact.sourcePrincipleId } : {}),
159
+ lineageArtifactIds: [...oldArtifact.lineageArtifactIds, oldArtifact.artifactId],
160
+ contentJson: JSON.stringify(revisedContent),
161
+ },
162
+ oldStatement,
163
+ title: typeof oldDraft?.title === 'string' ? oldDraft.title : '',
164
+ intentContract: revisedContent.intentContract,
165
+ };
166
+ }
167
+ /** Stable digest helper for revision payloads (audit/lineage display). */
168
+ export function revisionDigest(contentJson) {
169
+ return `sha256:${createHash('sha256').update(contentJson, 'utf8').digest('hex')}`;
170
+ }
171
+ //# sourceMappingURL=prompt-replacement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-replacement.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/prompt-replacement.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ActivationStateReadModel, ActivationStatusRecord } from './activation-types.js';
1
+ import type { ActivationStateReadModel, ActivationStatusRecord, PromptReplacementCommit, PromptReplacementOutcome } from './activation-types.js';
2
2
  import type { SqliteConnection } from '../store/sqlite-connection.js';
3
3
  export declare class SqliteActivationStateStore implements ActivationStateReadModel {
4
4
  private readonly connection;
@@ -9,6 +9,22 @@ export declare class SqliteActivationStateStore implements ActivationStateReadMo
9
9
  listCodeToolHookActivations(includeDeactivated?: boolean): Promise<ActivationStatusRecord[]>;
10
10
  listAllActivations(): Promise<ActivationStatusRecord[]>;
11
11
  deactivateActivation(activationId: string, deactivatedAt: string): Promise<boolean>;
12
+ /**
13
+ * PD_PROMPT_CAPACITY_V1 R-B3: atomic prompt-version replacement — the
14
+ * prompt-channel sibling of the RuleCode promotion commit's supersede
15
+ * (sqlite-activation-safety-store.ts). ONE BEGIN IMMEDIATE transaction
16
+ * commits, in order: (validations) → new activation row → immutable
17
+ * `supersede` decision row → deactivation of the prior live activation.
18
+ * A failure anywhere rolls back to the OLD-ONLY state (the Owner never
19
+ * loses the working version); there is no stop-old-then-start-new window.
20
+ *
21
+ * Idempotent by construction: replaying after success takes the
22
+ * `already_replaced` branch (new row already live; old deactivation and
23
+ * decision row are INSERT OR IGNORE / idempotent UPDATE). It also RECOVERS
24
+ * the rare "new artifact activated normally earlier" state by completing
25
+ * the supersede inside the same transaction instead of failing.
26
+ */
27
+ replacePromptActivation(input: PromptReplacementCommit): Promise<PromptReplacementOutcome>;
12
28
  promoteActivation(activationId: string, promotedAt: string): Promise<boolean>;
13
29
  }
14
30
  //# sourceMappingURL=sqlite-activation-state-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-activation-state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAsDtE,qBAAa,0BAA2B,YAAW,wBAAwB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAvC,YAA6B,UAAU,EAAE,gBAAgB,EAAI;IAEvD,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAYxF;IAEK,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCpE;IAEK,qBAAqB,CAAC,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkBzF;IAEK,2BAA2B,CAAC,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAe/F;IAEK,kBAAkB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAgB5D;IAEK,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxF;IAEK,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgDlF;CACF"}
1
+ {"version":3,"file":"sqlite-activation-state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjJ,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAiEtE,qBAAa,0BAA2B,YAAW,wBAAwB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAvC,YAA6B,UAAU,EAAE,gBAAgB,EAAI;IAEvD,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAYxF;IAEK,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCpE;IAEK,qBAAqB,CAAC,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkBzF;IAEK,2BAA2B,CAAC,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAe/F;IAEK,kBAAkB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAgB5D;IAEK,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxF;IAED;;;;;;;;;;;;;;OAcG;IACG,uBAAuB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA6F/F;IACK,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgDlF;CACF"}
@@ -1,6 +1,23 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isArtifactRevisionOf } from './activation-types.js';
1
3
  function isRecord(value) {
2
4
  return value !== null && typeof value === 'object' && !Array.isArray(value);
3
5
  }
6
+ function readArtifactIdentity(row, artifactId) {
7
+ if (!isRecord(row) || typeof row.source_task_id !== 'string' || typeof row.lineage_artifact_ids !== 'string')
8
+ return null;
9
+ let lineage;
10
+ try {
11
+ lineage = JSON.parse(row.lineage_artifact_ids);
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ if (!Array.isArray(lineage) || !lineage.every((id) => typeof id === 'string'))
17
+ return null;
18
+ return { artifactId, sourceTaskId: row.source_task_id, lineageArtifactIds: lineage,
19
+ ...(typeof row.source_principle_id === 'string' ? { sourcePrincipleId: row.source_principle_id } : {}) };
20
+ }
4
21
  function readStringField(row, key) {
5
22
  if (!Object.hasOwn(row, key))
6
23
  return null;
@@ -157,6 +174,121 @@ export class SqliteActivationStateStore {
157
174
  `).run(deactivatedAt, activationId);
158
175
  return result.changes > 0;
159
176
  }
177
+ /**
178
+ * PD_PROMPT_CAPACITY_V1 R-B3: atomic prompt-version replacement — the
179
+ * prompt-channel sibling of the RuleCode promotion commit's supersede
180
+ * (sqlite-activation-safety-store.ts). ONE BEGIN IMMEDIATE transaction
181
+ * commits, in order: (validations) → new activation row → immutable
182
+ * `supersede` decision row → deactivation of the prior live activation.
183
+ * A failure anywhere rolls back to the OLD-ONLY state (the Owner never
184
+ * loses the working version); there is no stop-old-then-start-new window.
185
+ *
186
+ * Idempotent by construction: replaying after success takes the
187
+ * `already_replaced` branch (new row already live; old deactivation and
188
+ * decision row are INSERT OR IGNORE / idempotent UPDATE). It also RECOVERS
189
+ * the rare "new artifact activated normally earlier" state by completing
190
+ * the supersede inside the same transaction instead of failing.
191
+ */
192
+ async replacePromptActivation(input) {
193
+ const db = this.connection.getDb();
194
+ const { newRecord } = input;
195
+ if (newRecord.activationId === input.supersededActivationId) {
196
+ throw new Error('replacePromptActivation: new and superseded activation ids must be distinct');
197
+ }
198
+ if (newRecord.channel !== 'prompt' || newRecord.action !== 'prompt_activate' || newRecord.deactivatedAt !== null) {
199
+ throw new Error('replacePromptActivation: replacement must be a live prompt activation');
200
+ }
201
+ if (newRecord.idempotencyKey !== `${newRecord.artifactId}::prompt`) {
202
+ throw new Error('replacePromptActivation: idempotency key must identify the new artifact and channel');
203
+ }
204
+ const supersedeKey = `supersede-prompt:${newRecord.activationId}:${input.supersededActivationId}`;
205
+ db.exec('BEGIN IMMEDIATE');
206
+ try {
207
+ const oldRows = db.prepare('SELECT * FROM activations WHERE activation_id = ? AND artifact_id = ?').all(input.supersededActivationId, input.supersededArtifactId);
208
+ const [oldRaw] = oldRows;
209
+ const old = mapRowToRecord(oldRaw);
210
+ if (oldRows.length !== 1 || old === null || old.channel !== 'prompt' || old.action !== 'prompt_activate'
211
+ || old.artifactId !== input.supersededArtifactId) {
212
+ throw new Error('replacePromptActivation: superseded activation is not a live prompt activation of the expected artifact');
213
+ }
214
+ const oldArtifact = db.prepare('SELECT * FROM pi_artifacts WHERE artifact_id = ?').get(old.artifactId);
215
+ if (!isRecord(oldArtifact) || typeof oldArtifact.content_json !== 'string') {
216
+ throw new Error('replacePromptActivation: superseded artifact is unavailable');
217
+ }
218
+ const newArtifact = db.prepare('SELECT * FROM pi_artifacts WHERE artifact_id = ?').get(newRecord.artifactId);
219
+ if (!isRecord(newArtifact))
220
+ throw new Error('replacePromptActivation: new artifact is unavailable');
221
+ // Known source identities must agree even when lineage points at the old
222
+ // artifact. Missing legacy identities are not invented or migrated.
223
+ if (typeof oldArtifact.source_principle_id === 'string' && typeof newArtifact.source_principle_id === 'string'
224
+ && oldArtifact.source_principle_id !== newArtifact.source_principle_id) {
225
+ throw new Error('replacePromptActivation: replacement artifacts belong to different principles');
226
+ }
227
+ const oldIdentity = readArtifactIdentity(oldArtifact, old.artifactId);
228
+ const newIdentity = readArtifactIdentity(newArtifact, newRecord.artifactId);
229
+ if (oldIdentity === null || newIdentity === null || !isArtifactRevisionOf(newIdentity, oldIdentity)) {
230
+ throw new Error('replacePromptActivation: artifacts have no verified revision relationship');
231
+ }
232
+ const digest = `sha256:${createHash('sha256').update(JSON.stringify({ artifact_id: old.artifactId, content_json: oldArtifact.content_json }), 'utf8').digest('hex')}`;
233
+ const newRaw = db.prepare('SELECT * FROM activations WHERE idempotency_key = ?').get(newRecord.idempotencyKey);
234
+ const existing = newRaw === undefined ? null : mapRowToRecord(newRaw);
235
+ if (newRaw !== undefined && (existing === null || existing.activationId !== newRecord.activationId
236
+ || existing.artifactId !== newRecord.artifactId || existing.channel !== 'prompt'
237
+ || existing.action !== 'prompt_activate' || existing.targetRef !== newRecord.targetRef || existing.deactivatedAt !== null)) {
238
+ throw new Error('replacePromptActivation: new activation identity conflicts with the stored version');
239
+ }
240
+ const decision = db.prepare('SELECT * FROM activation_decisions WHERE idempotency_key = ?').get(supersedeKey);
241
+ if (decision !== undefined && (!isRecord(decision) || decision.activation_id !== old.activationId
242
+ || decision.artifact_id !== old.artifactId || decision.decision !== 'supersede'
243
+ || decision.artifact_digest !== digest)) {
244
+ throw new Error('replacePromptActivation: supersede decision conflicts with this replacement');
245
+ }
246
+ if (old.deactivatedAt !== null) {
247
+ if (existing === null || decision === undefined) {
248
+ throw new Error('replacePromptActivation: superseded activation is inactive without a completed replacement');
249
+ }
250
+ db.exec('COMMIT');
251
+ return { status: 'already_replaced', newActivationId: existing.activationId, supersededActivationId: old.activationId, supersedeDecisionId: supersedeKey };
252
+ }
253
+ if (existing === null) {
254
+ const artifactExists = db.prepare('SELECT 1 FROM pi_artifacts WHERE artifact_id = ?').get(newRecord.artifactId);
255
+ if (artifactExists === undefined)
256
+ throw new Error('replacePromptActivation: new artifact is unavailable');
257
+ const collisions = db.prepare('SELECT 1 FROM activations WHERE activation_id = ?').all(newRecord.activationId);
258
+ if (collisions.length !== 0)
259
+ throw new Error('replacePromptActivation: new activation identity is already occupied');
260
+ db.prepare(`
261
+ INSERT INTO activations
262
+ (activation_id, idempotency_key, artifact_id, channel, action, target_ref, activated_at, promoted_at, deactivated_at)
263
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL)
264
+ `).run(newRecord.activationId, newRecord.idempotencyKey, newRecord.artifactId, newRecord.channel, newRecord.action, newRecord.targetRef, newRecord.activatedAt, newRecord.promotedAt ?? null);
265
+ }
266
+ if (decision === undefined) {
267
+ db.prepare(`
268
+ INSERT INTO activation_decisions
269
+ (decision_id, idempotency_key, subject_kind, activation_id, artifact_id, artifact_digest,
270
+ decision, principal_kind, owner_id, authentication_method, credential_id, reason_code, note, decided_at)
271
+ VALUES (?, ?, 'activation', ?, ?, ?, 'supersede', 'configured_owner', ?, 'system', NULL, ?, ?, ?)
272
+ `).run(supersedeKey, supersedeKey, old.activationId, old.artifactId, digest, input.decidedBy, input.reasonCode, `${input.note} Approved by ${input.decidedBy} via prompt approval.`, input.decidedAt);
273
+ }
274
+ const deactivationTime = isRecord(decision) && typeof decision.decided_at === 'string' ? decision.decided_at : input.decidedAt;
275
+ const update = db.prepare(`
276
+ UPDATE activations SET deactivated_at = ?
277
+ WHERE activation_id = ? AND artifact_id = ? AND channel = 'prompt' AND deactivated_at IS NULL
278
+ `).run(deactivationTime, old.activationId, old.artifactId);
279
+ if (update.changes !== 1)
280
+ throw new Error('replacePromptActivation: superseded activation changed during commit');
281
+ db.exec('COMMIT');
282
+ return { status: existing === null ? 'replaced' : 'already_replaced', newActivationId: newRecord.activationId, supersededActivationId: old.activationId, supersedeDecisionId: supersedeKey };
283
+ }
284
+ catch (error) {
285
+ try {
286
+ db.exec('ROLLBACK');
287
+ }
288
+ catch { /* best effort */ }
289
+ throw error;
290
+ }
291
+ }
160
292
  async promoteActivation(activationId, promotedAt) {
161
293
  const db = this.connection.getDb();
162
294
  // Wrap COUNT guard + UPDATE in a single IMMEDIATE transaction (CodeRabbit
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-activation-state-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-activation-state-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,14 @@ export declare class PrincipleTreeLedgerAdapter implements LedgerAdapter {
58
58
  * real ledger principle ("验证目标确实存在").
59
59
  */
60
60
  hasPrinciple(principleId: string): boolean;
61
+ /**
62
+ * PRI-915: whether the ledger backing store is decidable right now. When
63
+ * `false`, `hasPrinciple`/`listForCandidate` collapse the unreadable file to
64
+ * an empty ledger, so their `false`/`[]` answers mean "cannot read", not
65
+ * "non-member" — callers that would report data drift MUST consult this
66
+ * first. A missing file is `true` (a true empty ledger), not an outage.
67
+ */
68
+ isAvailable(): boolean;
61
69
  /**
62
70
  * Bug-O L3 fix: upgrade a ledger principle's status to 'active' after the
63
71
  * corresponding approval+activation has been dispatched successfully.
@@ -1 +1 @@
1
- {"version":3,"file":"principle-tree-ledger-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/adapter/principle-tree-ledger-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAuCvE;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,aAAa;;IAI9D,YAAY,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,EAErC;IAED,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CASrE;IAED,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAuBnE;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAKtD;IAED;;;;;;;;OAQG;IACH,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,kBAAkB,CAAA;KAAE,GAAG,IAAI,CAejH;IAED;;;;OAIG;IACH,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,kBAAkB,GACxB;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAEjF;IAED;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGzC;IAED;;;;;;;;OAQG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAWnF;CACF"}
1
+ {"version":3,"file":"principle-tree-ledger-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/adapter/principle-tree-ledger-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAuCvE;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,aAAa;;IAI9D,YAAY,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,EAErC;IAED,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CASrE;IAED,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAuBnE;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAKtD;IAED;;;;;;;;OAQG;IACH,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,kBAAkB,CAAA;KAAE,GAAG,IAAI,CAejH;IAED;;;;OAIG;IACH,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,kBAAkB,GACxB;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAEjF;IAED;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGzC;IAED;;;;;;OAMG;IACH,WAAW,IAAI,OAAO,CAErB;IAED;;;;;;;;OAQG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAWnF;CACF"}
@@ -4,7 +4,7 @@
4
4
  * Lives in principles-core/runtime-v2 so pd-cli can use the same adapter
5
5
  * as openclaw-plugin without depending on openclaw-plugin private code.
6
6
  */
7
- import { addPrincipleToLedger, appendReuseEvidence as appendReuseEvidenceToLedger, loadLedger, updatePrinciple, } from '../../principle-tree-ledger.js';
7
+ import { addPrincipleToLedger, appendReuseEvidence as appendReuseEvidenceToLedger, loadLedger, readLedgerFileState, updatePrinciple, } from '../../principle-tree-ledger.js';
8
8
  import { isRecord } from '../principle-tree/ledger-codec.js';
9
9
  const VALID_EVALUABILITIES = ['deterministic', 'weak_heuristic', 'manual_only'];
10
10
  function extractCandidateIdStatic(sourceRef) {
@@ -137,6 +137,16 @@ export class PrincipleTreeLedgerAdapter {
137
137
  const ledger = loadLedger(this.#stateDir);
138
138
  return Object.hasOwn(ledger.tree.principles, principleId);
139
139
  }
140
+ /**
141
+ * PRI-915: whether the ledger backing store is decidable right now. When
142
+ * `false`, `hasPrinciple`/`listForCandidate` collapse the unreadable file to
143
+ * an empty ledger, so their `false`/`[]` answers mean "cannot read", not
144
+ * "non-member" — callers that would report data drift MUST consult this
145
+ * first. A missing file is `true` (a true empty ledger), not an outage.
146
+ */
147
+ isAvailable() {
148
+ return readLedgerFileState(this.#stateDir).availability.status !== 'unreadable';
149
+ }
140
150
  /**
141
151
  * Bug-O L3 fix: upgrade a ledger principle's status to 'active' after the
142
152
  * corresponding approval+activation has been dispatched successfully.
@@ -1 +1 @@
1
- {"version":3,"file":"principle-tree-ledger-adapter.js","sourceRoot":"","sources":["../../../src/runtime-v2/adapter/principle-tree-ledger-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"principle-tree-ledger-adapter.js","sourceRoot":"","sources":["../../../src/runtime-v2/adapter/principle-tree-ledger-adapter.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export type { SemanticSource, SemanticSelectionResult } from './owner-decision/s
28
28
  export { GovernancePrimaryAttentionSchema, GovernanceExperienceReasonCodeSchema, GovernanceExperienceNextActionCodeSchema, WorkspaceEnvironmentSchema, EnvironmentContextInputSchema, SourceAvailabilityInputSchema, UnlinkedRecordGroupSchema, OwnerConfigSnapshotSchema, GovernanceViewInputSchema, FrontierEvidenceSchema, GovernanceExperienceInputsSchema, GovernanceActionKindSchema, GovernanceObservedAuthoritySchema, GovernanceActionReadinessSchema, OwnerGovernanceReadinessSchema, GovernanceActivityCategorySchema, GovernanceActivityItemSchema, GovernanceActivityCategorySummarySchema, GovernanceActivitySnapshotSchema, GovernanceLineageTransparencySchema, GovernanceTrustContextSchema, GovernanceDataQualityIssueGroupSchema, GovernanceDataQualitySchema, GovernanceExperienceSummarySchema, GovernanceExperienceSnapshotSchema, } from './governance-experience-contract.js';
29
29
  export type { WorkspaceEnvironment, EnvironmentContextInput, SourceAvailabilityInput, UnlinkedRecordGroup, OwnerConfigSnapshot, GovernanceViewInput, FrontierEvidence, GovernanceExperienceInputs, GovernanceActionKind, GovernanceObservedAuthority, GovernanceActionReadiness, OwnerGovernanceReadiness, GovernancePrimaryAttention, GovernanceActivityCategory, GovernanceActivityItem, GovernanceActivityCategorySummary, GovernanceActivitySnapshot, GovernanceLineageTransparency, GovernanceTrustContext, GovernanceDataQualityIssueGroup, GovernanceDataQuality, GovernanceExperienceReasonCode, GovernanceExperienceNextActionCode, GovernanceExperienceSummary, GovernanceExperienceSnapshot, } from './governance-experience-contract.js';
30
30
  export { GOVERNANCE_EXPERIENCE_ITEMS_LIMIT, GOVERNANCE_EXPERIENCE_ISSUE_GROUPS_LIMIT, deriveGovernanceExperienceSnapshot } from './governance-experience.js';
31
- export { RECEIPT_RETENTION_POLICY_DAYS } from './receipt-coverage.js';
31
+ export { INTERVENTION_SHORT_SOURCE_RETENTION_DAYS, RECEIPT_RETENTION_POLICY_DAYS } from './receipt-coverage.js';
32
32
  export type { ReceiptSourceStatus, ReceiptValidationStatus, ReceiptEvidenceCoverage } from './receipt-coverage.js';
33
33
  export { OWNER_IDENTITY_SCHEMA_VERSION, OWNER_IDENTITY_FILE_NAME, resolveOwnerIdentity, readOwnerIdentityFile, writeOwnerIdentityFile, deleteOwnerIdentityFile, ownerIdentityFilePath, defaultOwnerIdentityHomeDir, } from './owner-identity.js';
34
34
  export type { OwnerIdentityRecord, OwnerIdentitySource, OwnerIdentityResolved, OwnerIdentityFileResult, OwnerIdentityDeleteResult } from './owner-identity.js';
@@ -343,7 +343,7 @@ export type { ReopenRevisionOptions, RolloutRevisionTarget } from './internaliza
343
343
  export { createRuntimeStateHandle } from './runtime-state-handle.js';
344
344
  export type { RuntimeStateHandle } from './runtime-state-handle.js';
345
345
  export type { ActivationRiskLevel, ActivationActor, RolloutActivationDecision, DispatchInput, ActivationDecision, PIArtifactSnapshot, ActivationArtifactReadModel, ActivationStatusRecord, ActivationStateReadModel, ActivationDecisionRecord, ActivationDecisionSubject, ActivationDecisionKind, ActivationControlState, GlobalRuleCodePause, PromotionEvidenceSnapshot, PromotionFailedCheck, PromotionReadinessResult, OwnerPromotionActor, OwnerPromotionRequest, PromotionCommitInput, OwnerPromotionResult, RuleCodeOwnerDecisionServiceDeps, PromotionCheckId, PromotionReadinessCheck, PromotionReadinessEvaluationInput, PromotionReadinessReaderDeps, RuleCodeSafetySample, RuleCodeSafetyCircuitState, RuleCodeSafetyTripReason, HostLivenessContract, WriterInput, WriterResult, CanActivateResult, ChannelWriter, ApprovalStatus, ApprovalRecord, ApprovalEnqueueInput, ApprovalFilter, ApprovalDecisionResult, ApprovalQueueStore, ApprovalListFilter, ApprovalStats, ApprovalListResult, ArtifactLineageIdentity, ApprovalWithContext, ConfidenceLabel, BuildPromotionEvidenceSnapshotInput, PromotionEvidenceOwnerIdentity, LedgerIdentityChecker, LedgerIdentityLookupDeps, LedgerActivationResolution, } from './activation/index.js';
346
- export { LOW_RISK_CHANNELS, isArtifactRevisionOf, HIGH_RISK_CHANNEL_MAP, makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, ActivationDispatcher, resolveLedgerActivationId, candidateIdFromDreamerTaskId, candidateIdFromDreamerSeed, PromptWriter, DeferArchiveWriter, RuleHostWriter, extractEvidenceRefs, extractPrincipleId, MemoryActivationStateStore, MemoryArtifactReadModel, SqliteActivationStateStore, SqliteActivationSafetyStore, RuleCodeOwnerDecisionService, REQUIRED_PROMOTION_CHECK_IDS, evaluateRuleCodePromotionReadiness, PromotionReadinessReader, evaluateRuleCodeSafetyCircuit, initialRuleCodeSafetyCircuitState, collectOpenClawPromotionChecks, summarizeRuleCodeShadowEvents, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, ApprovalQueue, decideAutoPromotion, MemoryApprovalQueueStore, SqliteApprovalQueueStore, mapConfidenceToLabel, RUNTIME_V2_PRINCIPLE_BUDGET, isArtifactRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, renderPrinciplesToDirectives, createProductionGateDeps, compileHardenedRuleEvaluator, ApprovalCompletionService, buildPromotionEvidenceSnapshot, computeArtifactDigest, normalizeOwnerIdentity, verifyPiArtifactRowDigest, } from './activation/index.js';
346
+ export { LOW_RISK_CHANNELS, isArtifactRevisionOf, HIGH_RISK_CHANNEL_MAP, makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, ActivationDispatcher, resolveLedgerActivationId, candidateIdFromDreamerTaskId, candidateIdFromDreamerSeed, PromptWriter, DeferArchiveWriter, RuleHostWriter, extractEvidenceRefs, extractPrincipleId, MemoryActivationStateStore, MemoryArtifactReadModel, SqliteActivationStateStore, SqliteActivationSafetyStore, RuleCodeOwnerDecisionService, REQUIRED_PROMOTION_CHECK_IDS, evaluateRuleCodePromotionReadiness, PromotionReadinessReader, evaluateRuleCodeSafetyCircuit, initialRuleCodeSafetyCircuitState, collectOpenClawPromotionChecks, summarizeRuleCodeShadowEvents, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, ApprovalQueue, decideAutoPromotion, MemoryApprovalQueueStore, SqliteApprovalQueueStore, mapConfidenceToLabel, RUNTIME_V2_PRINCIPLE_BUDGET, isArtifactRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, listEntryLine, renderPrinciplesToDirectives, createProductionGateDeps, compileHardenedRuleEvaluator, ApprovalCompletionService, detectPromptReplacementTarget, buildOwnerRevisionArtifact, revisionDigest, buildPromotionEvidenceSnapshot, computeArtifactDigest, normalizeOwnerIdentity, verifyPiArtifactRowDigest, } from './activation/index.js';
347
347
  export type { ActivatedPrinciple, PromptActivationReaderResult, PromptSelectionPolicy, TrimToBudgetResult, ApprovalCompletionInput, ApprovalCompletionResult, ArtifactDigestCheck, } from './activation/index.js';
348
348
  export { DEFAULT_GFI_POLICY, applyFriction, applyDecay, applyRelief, classifyGfiStage, createGfiSnapshot, } from './gfi/index.js';
349
349
  export type { GfiState, GfiEvent, GfiPolicy, GfiStage, GfiSource, GfiSnapshot, } from './gfi/index.js';
@@ -412,4 +412,10 @@ export { estimateLineChanges } from './risk/index.js';
412
412
  export type { TrajectoryTurnReader, TrajectoryUserTurn, TrajectoryAssistantTurn, } from './store/context/trajectory-turn-reader.js';
413
413
  export { scanKeywords, buildLlmPrompt, SIGNAL_CLASSIFIER_SYSTEM_PROMPT, parseLlmClassification, resolveLlmClassificationPayload, SignalClassificationOutputV1Schema, collectSync, mapLlmResultToOutput, buildEvidence, } from './signal-collector/index.js';
414
414
  export type { KeywordCategory, TermSource, UnifiedKeyword, UnifiedKeywordStore, SignalCollectorConfig, SignalStrength, DetectionSource, MatchedPrecision, SignalEvidence, SignalCollectorOutput, LlmClassificationResult, KeywordScanResult, ParseResult, PayloadResolveResult, ClassifierPayloadPath, SignalClassificationOutputV1, } from './signal-collector/index.js';
415
+ export { normalizeInterventionEvidenceBatch, canonicalJson, computeEvidenceId, computeRecordDigest, mintObservationKey, } from './intervention-evidence-normalizer.js';
416
+ export type { NormalizedInterventionBatch, InterventionNormalization, } from './intervention-evidence-normalizer.js';
417
+ export { DELIVERED_CONFIRMATIONS, DELIVERY_CONFIRMATIONS, INTERVENTION_CAPABILITIES, INTERVENTION_RECORD_KINDS, INTERVENTION_SOURCE_KINDS, INTERVENTION_TEXT_BOUNDS, } from './types/intervention-evidence-contract.js';
418
+ export type { DeliveryConfirmation, InterventionActivationOccurrenceRef, InterventionApplicationAction, InterventionApplicationProof, InterventionAuditRecordSummary, InterventionAuditCursor, InterventionAuditKindPage, InterventionAuditRelations, InterventionAuditSelector, InterventionCapability, InterventionCapabilityDeclaration, InterventionCapabilityStatus, InterventionContentRef, InterventionDeliveryOutcome, InterventionDeliveryPayload, InterventionDeliveryTarget, InterventionEffectPayload, InterventionEpisodePayload, InterventionEvidenceBatchInput, InterventionNativeRefs, InterventionObservationInput, InterventionOutcomePayload, InterventionPayload, InterventionRecordKind, InterventionSourceKind, NormalizedInterventionRecord, } from './types/intervention-evidence-contract.js';
419
+ export { SqliteInterventionEvidenceStore, } from './store/sqlite-intervention-evidence-store.js';
420
+ export type { AppendObservationBatchResult, InterventionAuditRead, InterventionAuditReadOptions, InterventionSourceConflict, } from './store/sqlite-intervention-evidence-store.js';
415
421
  //# sourceMappingURL=index.d.ts.map