@principles/core 1.181.0 → 1.182.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/principle-tree-ledger.d.ts +55 -4
- package/dist/principle-tree-ledger.d.ts.map +1 -1
- package/dist/principle-tree-ledger.js +472 -13
- package/dist/principle-tree-ledger.js.map +1 -1
- 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/principle-tree/ledger-codec.js.map +1 -1
- package/dist/runtime-v2/types/ledger-store.d.ts +30 -30
- package/dist/runtime-v2/types/ledger-store.d.ts.map +1 -1
- package/dist/runtime-v2/types/ledger-store.js +10 -5
- package/dist/runtime-v2/types/ledger-store.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Principle Tree Ledger —
|
|
2
|
+
* Principle Tree Ledger — file-based ledger for principle entries.
|
|
3
3
|
*
|
|
4
4
|
* Lives in principles-core so pd-cli can read/write the ledger without
|
|
5
5
|
* importing openclaw-plugin private code.
|
|
@@ -7,17 +7,68 @@
|
|
|
7
7
|
* M8: Single-path ledger. The ledger file is at:
|
|
8
8
|
* {stateDir}/principle_training_state.json
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* PRI-459: This module is the SINGLE source of truth for parsing,
|
|
11
|
+
* serialization, AND mutation of principle_training_state.json. Every
|
|
12
|
+
* read-modify-write acquires a cross-process file lock (see withLock above),
|
|
13
|
+
* eliminating the dual-writer lost-update class. The openclaw-plugin ledger
|
|
14
|
+
* is now a thin re-export adapter over this module.
|
|
12
15
|
*/
|
|
13
16
|
import type { Principle, Rule, Implementation, PrincipleValueMetrics, LedgerPrinciple, LedgerRule, LedgerTreeStore, LegacyPrincipleTrainingState, LegacyPrincipleTrainingStore, HybridLedgerStore } from './runtime-v2/types/ledger-store.js';
|
|
14
17
|
import { TREE_NAMESPACE } from './runtime-v2/types/ledger-store.js';
|
|
15
|
-
|
|
18
|
+
import type { ImplementationLifecycleState } from './runtime-v2/types/principle-enums.js';
|
|
19
|
+
export type { Principle, Rule, Implementation, PrincipleValueMetrics, LedgerPrinciple, LedgerRule, LedgerTreeStore, LegacyPrincipleTrainingState, LegacyPrincipleTrainingStore, HybridLedgerStore, ImplementationLifecycleState, };
|
|
16
20
|
export { TREE_NAMESPACE };
|
|
21
|
+
export declare class LockAcquisitionError extends Error {
|
|
22
|
+
readonly filePath: string;
|
|
23
|
+
readonly lockPath: string;
|
|
24
|
+
constructor(message: string, filePath: string, lockPath: string);
|
|
25
|
+
}
|
|
26
|
+
interface LockOptions {
|
|
27
|
+
maxRetries?: number;
|
|
28
|
+
baseRetryDelayMs?: number;
|
|
29
|
+
maxRetryDelayMs?: number;
|
|
30
|
+
lockStaleMs?: number;
|
|
31
|
+
lockSuffix?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run `fn` while holding the ledger file lock. FAIL-LOUD: if the lock cannot
|
|
35
|
+
* be acquired after bounded retries, throws LockAcquisitionError carrying the
|
|
36
|
+
* file + lock path (EP-03 / ERR-009 — no silent fallback).
|
|
37
|
+
*
|
|
38
|
+
* Exported so tests and integrators can drive the lock primitive directly with
|
|
39
|
+
* a tight retry budget (the public mutators use production defaults).
|
|
40
|
+
*/
|
|
41
|
+
export declare function withLock<T>(filePath: string, fn: () => T, options?: LockOptions): T;
|
|
17
42
|
export declare function loadLedger(stateDir: string): HybridLedgerStore;
|
|
18
43
|
export declare function saveLedger(stateDir: string, store: HybridLedgerStore): void;
|
|
19
44
|
export declare function addPrincipleToLedger(stateDir: string, principle: LedgerPrinciple): LedgerPrinciple;
|
|
20
45
|
export declare function updatePrinciple(stateDir: string, principleId: string, updates: Partial<LedgerPrinciple>): LedgerPrinciple;
|
|
21
46
|
export declare function updatePrincipleValueMetrics(stateDir: string, principleId: string, metrics: PrincipleValueMetrics): PrincipleValueMetrics;
|
|
22
47
|
export declare function getLedgerFilePathPublic(stateDir: string): string;
|
|
48
|
+
export interface PrincipleSubtree {
|
|
49
|
+
principle: LedgerPrinciple;
|
|
50
|
+
rules: {
|
|
51
|
+
rule: LedgerRule;
|
|
52
|
+
implementations: Implementation[];
|
|
53
|
+
}[];
|
|
54
|
+
}
|
|
55
|
+
export declare function createRule(stateDir: string, rule: LedgerRule): LedgerRule;
|
|
56
|
+
export declare function createImplementation(stateDir: string, implementation: Implementation): Implementation;
|
|
57
|
+
export declare function updateRule(stateDir: string, ruleId: string, updates: Partial<LedgerRule>): LedgerRule;
|
|
58
|
+
export declare function deleteRule(stateDir: string, ruleId: string): LedgerRule | undefined;
|
|
59
|
+
export declare function updateImplementation(stateDir: string, implementationId: string, updates: Partial<Implementation>): Implementation;
|
|
60
|
+
export declare function deleteImplementation(stateDir: string, implementationId: string): Implementation | undefined;
|
|
61
|
+
export declare function listImplementationsForRule(stateDir: string, ruleId: string): Implementation[];
|
|
62
|
+
export declare function getPrincipleSubtree(stateDir: string, principleId: string): PrincipleSubtree | undefined;
|
|
63
|
+
export declare function isValidLifecycleTransition(from: ImplementationLifecycleState, to: ImplementationLifecycleState): boolean;
|
|
64
|
+
export declare function getAllowedTransitions(from: ImplementationLifecycleState): ImplementationLifecycleState[];
|
|
65
|
+
/**
|
|
66
|
+
* Transition an implementation's lifecycle state with validation.
|
|
67
|
+
* Throws on invalid transitions or missing implementation (fail loud).
|
|
68
|
+
*/
|
|
69
|
+
export declare function transitionImplementationState(stateDir: string, implementationId: string, newState: ImplementationLifecycleState): Implementation;
|
|
70
|
+
export declare function listRuleImplementationsByState(stateDir: string, ruleId: string, state: ImplementationLifecycleState): Implementation[];
|
|
71
|
+
export declare function findActiveImplementation(stateDir: string, ruleId: string): Implementation | null;
|
|
72
|
+
export declare function saveLedgerAsync(stateDir: string, store: HybridLedgerStore): Promise<void>;
|
|
73
|
+
export declare function updateTrainingStore(stateDir: string, mutate: (store: LegacyPrincipleTrainingStore) => void): void;
|
|
23
74
|
//# sourceMappingURL=principle-tree-ledger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"principle-tree-ledger.d.ts","sourceRoot":"","sources":["../src/principle-tree-ledger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"principle-tree-ledger.d.ts","sourceRoot":"","sources":["../src/principle-tree-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Principle Tree Ledger —
|
|
2
|
+
* Principle Tree Ledger — file-based ledger for principle entries.
|
|
3
3
|
*
|
|
4
4
|
* Lives in principles-core so pd-cli can read/write the ledger without
|
|
5
5
|
* importing openclaw-plugin private code.
|
|
@@ -7,8 +7,11 @@
|
|
|
7
7
|
* M8: Single-path ledger. The ledger file is at:
|
|
8
8
|
* {stateDir}/principle_training_state.json
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* PRI-459: This module is the SINGLE source of truth for parsing,
|
|
11
|
+
* serialization, AND mutation of principle_training_state.json. Every
|
|
12
|
+
* read-modify-write acquires a cross-process file lock (see withLock above),
|
|
13
|
+
* eliminating the dual-writer lost-update class. The openclaw-plugin ledger
|
|
14
|
+
* is now a thin re-export adapter over this module.
|
|
12
15
|
*/
|
|
13
16
|
import * as fs from 'fs';
|
|
14
17
|
import * as path from 'path';
|
|
@@ -90,21 +93,240 @@ function readLedgerFromFile(filePath) {
|
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
// ---------------------------------------------------------------------------
|
|
93
|
-
//
|
|
96
|
+
// File lock (PRI-459: hoisted from openclaw-plugin/utils/file-lock.ts)
|
|
94
97
|
// ---------------------------------------------------------------------------
|
|
98
|
+
/* global NodeJS */
|
|
99
|
+
//
|
|
100
|
+
// The principle_training_state.json file has a SINGLE writer contract. Before
|
|
101
|
+
// PRI-459, core wrote it UNLOCKED and the plugin wrote it WITH a lock — but
|
|
102
|
+
// neither knew about the other's lock, so concurrent writers (e.g.
|
|
103
|
+
// evolution-worker async + a pd-cli command) could lose updates. The atomic
|
|
104
|
+
// rename only prevents torn files; it does NOT prevent lost updates.
|
|
105
|
+
//
|
|
106
|
+
// The lock is now owned by core (the single mutator source of truth). Both
|
|
107
|
+
// the sync and async mutate paths acquire it. Acquisition failure fails LOUD
|
|
108
|
+
// (EP-03 / ERR-009) — never silently swallowed.
|
|
109
|
+
export class LockAcquisitionError extends Error {
|
|
110
|
+
filePath;
|
|
111
|
+
lockPath;
|
|
112
|
+
constructor(message, filePath, lockPath) {
|
|
113
|
+
super(message);
|
|
114
|
+
this.name = 'LockAcquisitionError';
|
|
115
|
+
this.filePath = filePath;
|
|
116
|
+
this.lockPath = lockPath;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const DEFAULT_LOCK_OPTIONS = {
|
|
120
|
+
maxRetries: 50,
|
|
121
|
+
baseRetryDelayMs: 10,
|
|
122
|
+
maxRetryDelayMs: 500,
|
|
123
|
+
lockStaleMs: 10000,
|
|
124
|
+
lockSuffix: '.lock',
|
|
125
|
+
};
|
|
126
|
+
function isProcessAlive(pid) {
|
|
127
|
+
try {
|
|
128
|
+
process.kill(pid, 0);
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function isErrnoException(value) {
|
|
136
|
+
return typeof value === 'object' && value !== null && Object.hasOwn(value, 'code');
|
|
137
|
+
}
|
|
138
|
+
function tryAcquireLock(lockPath, pid) {
|
|
139
|
+
try {
|
|
140
|
+
const lockDir = path.dirname(lockPath);
|
|
141
|
+
if (!fs.existsSync(lockDir)) {
|
|
142
|
+
fs.mkdirSync(lockDir, { recursive: true });
|
|
143
|
+
}
|
|
144
|
+
const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL;
|
|
145
|
+
const fd = fs.openSync(lockPath, flags);
|
|
146
|
+
fs.writeSync(fd, String(pid));
|
|
147
|
+
fs.fsyncSync(fd);
|
|
148
|
+
fs.closeSync(fd);
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
// Runtime Contract Rule #2: never `as` to bypass validation on caught
|
|
153
|
+
// unknown. A non-object `err` would throw on `.code` access and mask the
|
|
154
|
+
// original EEXIST (EP-01 / ERR-001).
|
|
155
|
+
if (isErrnoException(err) && err.code === 'EEXIST') {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function readLockPid(lockPath) {
|
|
162
|
+
try {
|
|
163
|
+
const content = fs.readFileSync(lockPath, 'utf8');
|
|
164
|
+
const pid = parseInt(content.trim(), 10);
|
|
165
|
+
return Number.isNaN(pid) ? null : pid;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function safeReleaseLock(lockPath, expectedPid) {
|
|
172
|
+
try {
|
|
173
|
+
if (readLockPid(lockPath) === expectedPid) {
|
|
174
|
+
fs.unlinkSync(lockPath);
|
|
175
|
+
}
|
|
176
|
+
// If PID does not match, the lock was re-acquired by another process; leave it.
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// best effort
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function cleanupStaleLock(lockPath, _staleMs) {
|
|
183
|
+
// PRI-459 review: reclaim ONLY when the holder is dead/unknown. The file
|
|
184
|
+
// age must NEVER be the sole eviction signal — a legitimately long write
|
|
185
|
+
// that exceeds lockStaleMs would otherwise let a second writer steal the
|
|
186
|
+
// lock and re-introduce the lost-update class this PR exists to eliminate.
|
|
187
|
+
// PID liveness is the sole authority. `_staleMs` is retained on the
|
|
188
|
+
// signature for back-compat with callers but is intentionally unused.
|
|
189
|
+
try {
|
|
190
|
+
const pid = readLockPid(lockPath);
|
|
191
|
+
const isDead = pid === null || !isProcessAlive(pid);
|
|
192
|
+
if (isDead) {
|
|
193
|
+
try {
|
|
194
|
+
fs.unlinkSync(lockPath);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function calculateBackoff(attempt, baseMs, maxMs) {
|
|
208
|
+
const exponentialDelay = Math.min(baseMs * Math.pow(2, attempt), maxMs);
|
|
209
|
+
const jitter = exponentialDelay * 0.2 * Math.random();
|
|
210
|
+
return Math.floor(exponentialDelay + jitter);
|
|
211
|
+
}
|
|
212
|
+
function sleepSync(ms) {
|
|
213
|
+
// Non-spinning blocking sleep. Atomics.wait parks the thread instead of
|
|
214
|
+
// busy-polling Date.now(), so lock-contention retries don't burn a CPU
|
|
215
|
+
// core for the whole backoff window. Returns immediately when ms <= 0
|
|
216
|
+
// (Atomics.wait requires a positive timeout).
|
|
217
|
+
if (ms <= 0)
|
|
218
|
+
return;
|
|
219
|
+
const shared = new Int32Array(new SharedArrayBuffer(4));
|
|
220
|
+
Atomics.wait(shared, 0, 0, ms);
|
|
221
|
+
}
|
|
222
|
+
function tryAcquireWithStaleCleanup(filePath, opts, pid) {
|
|
223
|
+
const lockPath = filePath + opts.lockSuffix;
|
|
224
|
+
if (tryAcquireLock(lockPath, pid) && readLockPid(lockPath) === pid) {
|
|
225
|
+
return { lockPath, pid, acquiredAt: Date.now() };
|
|
226
|
+
}
|
|
227
|
+
cleanupStaleLock(lockPath, opts.lockStaleMs);
|
|
228
|
+
if (tryAcquireLock(lockPath, pid) && readLockPid(lockPath) === pid) {
|
|
229
|
+
return { lockPath, pid, acquiredAt: Date.now() };
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
function buildLockError(filePath, opts) {
|
|
234
|
+
const lockPath = filePath + opts.lockSuffix;
|
|
235
|
+
const holderPid = readLockPid(lockPath);
|
|
236
|
+
const holderStatus = holderPid !== null
|
|
237
|
+
? (isProcessAlive(holderPid) ? `alive (PID ${holderPid})` : `dead (PID ${holderPid})`)
|
|
238
|
+
: 'unknown';
|
|
239
|
+
return new LockAcquisitionError(`Failed to acquire lock for ${filePath}. Lock holder: ${holderStatus}.`, filePath, lockPath);
|
|
240
|
+
}
|
|
241
|
+
function acquireLock(filePath, options = {}) {
|
|
242
|
+
const opts = { ...DEFAULT_LOCK_OPTIONS, ...options };
|
|
243
|
+
const { pid } = process;
|
|
244
|
+
for (let attempt = 0; attempt < opts.maxRetries; attempt++) {
|
|
245
|
+
const ctx = tryAcquireWithStaleCleanup(filePath, opts, pid);
|
|
246
|
+
if (ctx)
|
|
247
|
+
return ctx;
|
|
248
|
+
if (attempt < opts.maxRetries - 1) {
|
|
249
|
+
sleepSync(calculateBackoff(attempt, opts.baseRetryDelayMs, opts.maxRetryDelayMs));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
throw buildLockError(filePath, opts);
|
|
253
|
+
}
|
|
254
|
+
async function acquireLockAsync(filePath, options = {}) {
|
|
255
|
+
const opts = { ...DEFAULT_LOCK_OPTIONS, ...options };
|
|
256
|
+
const { pid } = process;
|
|
257
|
+
for (let attempt = 0; attempt < opts.maxRetries; attempt++) {
|
|
258
|
+
const ctx = tryAcquireWithStaleCleanup(filePath, opts, pid);
|
|
259
|
+
if (ctx)
|
|
260
|
+
return ctx;
|
|
261
|
+
if (attempt < opts.maxRetries - 1) {
|
|
262
|
+
await new Promise((resolve) => setTimeout(resolve, calculateBackoff(attempt, opts.baseRetryDelayMs, opts.maxRetryDelayMs)));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
throw buildLockError(filePath, opts);
|
|
266
|
+
}
|
|
267
|
+
function releaseLock(ctx) {
|
|
268
|
+
safeReleaseLock(ctx.lockPath, ctx.pid);
|
|
269
|
+
}
|
|
95
270
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
271
|
+
* Run `fn` while holding the ledger file lock. FAIL-LOUD: if the lock cannot
|
|
272
|
+
* be acquired after bounded retries, throws LockAcquisitionError carrying the
|
|
273
|
+
* file + lock path (EP-03 / ERR-009 — no silent fallback).
|
|
274
|
+
*
|
|
275
|
+
* Exported so tests and integrators can drive the lock primitive directly with
|
|
276
|
+
* a tight retry budget (the public mutators use production defaults).
|
|
277
|
+
*/
|
|
278
|
+
export function withLock(filePath, fn, options) {
|
|
279
|
+
const ctx = acquireLock(filePath, options);
|
|
280
|
+
try {
|
|
281
|
+
return fn();
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
releaseLock(ctx);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
async function withLockAsync(filePath, fn, options) {
|
|
288
|
+
const ctx = await acquireLockAsync(filePath, options);
|
|
289
|
+
try {
|
|
290
|
+
return await fn();
|
|
291
|
+
}
|
|
292
|
+
finally {
|
|
293
|
+
releaseLock(ctx);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
// Ledger mutations (single writer, cross-process safe via the file lock above)
|
|
298
|
+
// ---------------------------------------------------------------------------
|
|
299
|
+
/**
|
|
300
|
+
* Read-modify-write the ledger file atomically AND under a cross-process file
|
|
301
|
+
* lock. Single source of truth since PRI-459: every mutation (sync + async)
|
|
302
|
+
* acquires `<file>.lock`, eliminating the dual-writer lost-update class.
|
|
98
303
|
*/
|
|
99
304
|
function mutateLedger(stateDir, mutate) {
|
|
100
305
|
const filePath = getLedgerFilePath(stateDir);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
fs.
|
|
106
|
-
|
|
107
|
-
|
|
306
|
+
return withLock(filePath, () => {
|
|
307
|
+
const store = readLedgerFromFile(filePath);
|
|
308
|
+
const result = mutate(store);
|
|
309
|
+
const dir = path.dirname(filePath);
|
|
310
|
+
if (!fs.existsSync(dir))
|
|
311
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
312
|
+
atomicWriteFileSync(filePath, serializeLedger(store));
|
|
313
|
+
return result;
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Async read-modify-write. Same lock semantics as {@link mutateLedger}.
|
|
318
|
+
*/
|
|
319
|
+
async function mutateLedgerAsync(stateDir, mutate) {
|
|
320
|
+
const filePath = getLedgerFilePath(stateDir);
|
|
321
|
+
return withLockAsync(filePath, async () => {
|
|
322
|
+
const store = readLedgerFromFile(filePath);
|
|
323
|
+
const result = await mutate(store);
|
|
324
|
+
const dir = path.dirname(filePath);
|
|
325
|
+
if (!fs.existsSync(dir))
|
|
326
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
327
|
+
atomicWriteFileSync(filePath, serializeLedger(store));
|
|
328
|
+
return result;
|
|
329
|
+
});
|
|
108
330
|
}
|
|
109
331
|
// ---------------------------------------------------------------------------
|
|
110
332
|
// Public API
|
|
@@ -154,4 +376,241 @@ export function updatePrincipleValueMetrics(stateDir, principleId, metrics) {
|
|
|
154
376
|
export function getLedgerFilePathPublic(stateDir) {
|
|
155
377
|
return getLedgerFilePath(stateDir);
|
|
156
378
|
}
|
|
379
|
+
export function createRule(stateDir, rule) {
|
|
380
|
+
return mutateLedger(stateDir, (store) => {
|
|
381
|
+
const principle = store.tree.principles[rule.principleId];
|
|
382
|
+
if (!principle) {
|
|
383
|
+
throw new Error(`Cannot create rule "${rule.id}" for missing principle "${rule.principleId}".`);
|
|
384
|
+
}
|
|
385
|
+
if (Object.hasOwn(store.tree.rules, rule.id)) {
|
|
386
|
+
// Fail loud: overwriting would orphan the old parent's ruleIds link.
|
|
387
|
+
// Use updateRule for intentional replacement (EP-09 / ERR-009).
|
|
388
|
+
throw new Error(`Cannot create rule "${rule.id}": it already exists. Use updateRule instead.`);
|
|
389
|
+
}
|
|
390
|
+
const nextRule = {
|
|
391
|
+
...rule,
|
|
392
|
+
implementationIds: uniqueStrings(rule.implementationIds),
|
|
393
|
+
};
|
|
394
|
+
store.tree.rules[nextRule.id] = nextRule;
|
|
395
|
+
principle.ruleIds = uniqueStrings([...principle.ruleIds, nextRule.id]);
|
|
396
|
+
return nextRule;
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
export function createImplementation(stateDir, implementation) {
|
|
400
|
+
return mutateLedger(stateDir, (store) => {
|
|
401
|
+
const rule = store.tree.rules[implementation.ruleId];
|
|
402
|
+
if (!rule) {
|
|
403
|
+
throw new Error(`Cannot create implementation "${implementation.id}" for missing rule "${implementation.ruleId}".`);
|
|
404
|
+
}
|
|
405
|
+
if (Object.hasOwn(store.tree.implementations, implementation.id)) {
|
|
406
|
+
// Fail loud: overwriting would orphan the old rule's implementationIds link.
|
|
407
|
+
// Use updateImplementation for intentional replacement (EP-09 / ERR-009).
|
|
408
|
+
throw new Error(`Cannot create implementation "${implementation.id}": it already exists. Use updateImplementation instead.`);
|
|
409
|
+
}
|
|
410
|
+
store.tree.implementations[implementation.id] = implementation;
|
|
411
|
+
rule.implementationIds = uniqueStrings([...rule.implementationIds, implementation.id]);
|
|
412
|
+
return implementation;
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
export function updateRule(stateDir, ruleId, updates) {
|
|
416
|
+
return mutateLedger(stateDir, (store) => {
|
|
417
|
+
const existingRule = store.tree.rules[ruleId];
|
|
418
|
+
if (!existingRule) {
|
|
419
|
+
throw new Error(`Cannot update missing rule "${ruleId}".`);
|
|
420
|
+
}
|
|
421
|
+
const nextPrincipleId = updates.principleId ?? existingRule.principleId;
|
|
422
|
+
const nextPrinciple = store.tree.principles[nextPrincipleId];
|
|
423
|
+
if (!nextPrinciple) {
|
|
424
|
+
throw new Error(`Cannot move rule "${ruleId}" to missing principle "${nextPrincipleId}".`);
|
|
425
|
+
}
|
|
426
|
+
const nextRule = {
|
|
427
|
+
...existingRule,
|
|
428
|
+
...updates,
|
|
429
|
+
id: ruleId,
|
|
430
|
+
principleId: nextPrincipleId,
|
|
431
|
+
implementationIds: updates.implementationIds
|
|
432
|
+
? uniqueStrings(updates.implementationIds)
|
|
433
|
+
: existingRule.implementationIds,
|
|
434
|
+
};
|
|
435
|
+
if (existingRule.principleId !== nextPrincipleId) {
|
|
436
|
+
const previousPrinciple = store.tree.principles[existingRule.principleId];
|
|
437
|
+
if (previousPrinciple) {
|
|
438
|
+
previousPrinciple.ruleIds = previousPrinciple.ruleIds.filter((candidateId) => candidateId !== ruleId);
|
|
439
|
+
}
|
|
440
|
+
nextPrinciple.ruleIds = uniqueStrings([...nextPrinciple.ruleIds, ruleId]);
|
|
441
|
+
}
|
|
442
|
+
store.tree.rules[ruleId] = nextRule;
|
|
443
|
+
return nextRule;
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
export function deleteRule(stateDir, ruleId) {
|
|
447
|
+
return mutateLedger(stateDir, (store) => {
|
|
448
|
+
const existingRule = store.tree.rules[ruleId];
|
|
449
|
+
if (!existingRule) {
|
|
450
|
+
return undefined;
|
|
451
|
+
}
|
|
452
|
+
const parentPrinciple = store.tree.principles[existingRule.principleId];
|
|
453
|
+
if (parentPrinciple) {
|
|
454
|
+
parentPrinciple.ruleIds = parentPrinciple.ruleIds.filter((candidateId) => candidateId !== ruleId);
|
|
455
|
+
}
|
|
456
|
+
// Cascade: delete every implementation attached to this rule, including
|
|
457
|
+
// any whose implementationIds were not pre-listed on the rule.
|
|
458
|
+
const implementationIds = uniqueStrings([
|
|
459
|
+
...existingRule.implementationIds,
|
|
460
|
+
...Object.values(store.tree.implementations)
|
|
461
|
+
.filter((implementation) => implementation.ruleId === ruleId)
|
|
462
|
+
.map((implementation) => implementation.id),
|
|
463
|
+
]);
|
|
464
|
+
for (const implementationId of implementationIds) {
|
|
465
|
+
delete store.tree.implementations[implementationId];
|
|
466
|
+
}
|
|
467
|
+
delete store.tree.rules[ruleId];
|
|
468
|
+
return existingRule;
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
export function updateImplementation(stateDir, implementationId, updates) {
|
|
472
|
+
return mutateLedger(stateDir, (store) => {
|
|
473
|
+
const existingImplementation = store.tree.implementations[implementationId];
|
|
474
|
+
if (!existingImplementation) {
|
|
475
|
+
throw new Error(`Cannot update missing implementation "${implementationId}".`);
|
|
476
|
+
}
|
|
477
|
+
const nextRuleId = updates.ruleId ?? existingImplementation.ruleId;
|
|
478
|
+
const nextRule = store.tree.rules[nextRuleId];
|
|
479
|
+
if (!nextRule) {
|
|
480
|
+
throw new Error(`Cannot move implementation "${implementationId}" to missing rule "${nextRuleId}".`);
|
|
481
|
+
}
|
|
482
|
+
const nextImplementation = {
|
|
483
|
+
...existingImplementation,
|
|
484
|
+
...updates,
|
|
485
|
+
id: implementationId,
|
|
486
|
+
ruleId: nextRuleId,
|
|
487
|
+
};
|
|
488
|
+
if (existingImplementation.ruleId !== nextRuleId) {
|
|
489
|
+
const previousRule = store.tree.rules[existingImplementation.ruleId];
|
|
490
|
+
if (previousRule) {
|
|
491
|
+
previousRule.implementationIds = previousRule.implementationIds.filter((candidateId) => candidateId !== implementationId);
|
|
492
|
+
}
|
|
493
|
+
nextRule.implementationIds = uniqueStrings([...nextRule.implementationIds, implementationId]);
|
|
494
|
+
}
|
|
495
|
+
store.tree.implementations[implementationId] = nextImplementation;
|
|
496
|
+
return nextImplementation;
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
export function deleteImplementation(stateDir, implementationId) {
|
|
500
|
+
return mutateLedger(stateDir, (store) => {
|
|
501
|
+
const existingImplementation = store.tree.implementations[implementationId];
|
|
502
|
+
if (!existingImplementation) {
|
|
503
|
+
return undefined;
|
|
504
|
+
}
|
|
505
|
+
const parentRule = store.tree.rules[existingImplementation.ruleId];
|
|
506
|
+
if (parentRule) {
|
|
507
|
+
parentRule.implementationIds = parentRule.implementationIds.filter((candidateId) => candidateId !== implementationId);
|
|
508
|
+
}
|
|
509
|
+
delete store.tree.implementations[implementationId];
|
|
510
|
+
return existingImplementation;
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
export function listImplementationsForRule(stateDir, ruleId) {
|
|
514
|
+
const ledger = loadLedger(stateDir);
|
|
515
|
+
const rule = ledger.tree.rules[ruleId];
|
|
516
|
+
if (!rule) {
|
|
517
|
+
return [];
|
|
518
|
+
}
|
|
519
|
+
return rule.implementationIds
|
|
520
|
+
.map((implementationId) => ledger.tree.implementations[implementationId])
|
|
521
|
+
.filter((implementation) => implementation !== undefined);
|
|
522
|
+
}
|
|
523
|
+
export function getPrincipleSubtree(stateDir, principleId) {
|
|
524
|
+
const ledger = loadLedger(stateDir);
|
|
525
|
+
const principle = ledger.tree.principles[principleId];
|
|
526
|
+
if (!principle) {
|
|
527
|
+
return undefined;
|
|
528
|
+
}
|
|
529
|
+
return {
|
|
530
|
+
principle,
|
|
531
|
+
rules: principle.ruleIds
|
|
532
|
+
.map((ruleId) => ledger.tree.rules[ruleId])
|
|
533
|
+
.filter((rule) => rule !== undefined)
|
|
534
|
+
.map((rule) => ({
|
|
535
|
+
rule,
|
|
536
|
+
implementations: rule.implementationIds
|
|
537
|
+
.map((implementationId) => ledger.tree.implementations[implementationId])
|
|
538
|
+
.filter((implementation) => implementation !== undefined),
|
|
539
|
+
})),
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
// ---------------------------------------------------------------------------
|
|
543
|
+
// Implementation Lifecycle State Transitions
|
|
544
|
+
// ---------------------------------------------------------------------------
|
|
545
|
+
//
|
|
546
|
+
// Valid transitions (per Phase 13 context D-15). Values match the core enum
|
|
547
|
+
// ImplementationLifecycleState: candidate / active / disabled / archived.
|
|
548
|
+
// candidate -> active (promote)
|
|
549
|
+
// active -> disabled (disable)
|
|
550
|
+
// disabled -> active (re-enable via promote)
|
|
551
|
+
// disabled -> archived (permanent disable)
|
|
552
|
+
// active -> archived (direct archive)
|
|
553
|
+
// candidate -> archived (rejected candidate cleanup)
|
|
554
|
+
const VALID_LIFECYCLE_TRANSITIONS = {
|
|
555
|
+
candidate: ['active', 'archived'],
|
|
556
|
+
active: ['disabled', 'archived'],
|
|
557
|
+
disabled: ['active', 'archived'],
|
|
558
|
+
archived: [],
|
|
559
|
+
};
|
|
560
|
+
export function isValidLifecycleTransition(from, to) {
|
|
561
|
+
return VALID_LIFECYCLE_TRANSITIONS[from]?.includes(to) ?? false;
|
|
562
|
+
}
|
|
563
|
+
export function getAllowedTransitions(from) {
|
|
564
|
+
return VALID_LIFECYCLE_TRANSITIONS[from] ?? [];
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Transition an implementation's lifecycle state with validation.
|
|
568
|
+
* Throws on invalid transitions or missing implementation (fail loud).
|
|
569
|
+
*/
|
|
570
|
+
export function transitionImplementationState(stateDir, implementationId, newState) {
|
|
571
|
+
return mutateLedger(stateDir, (store) => {
|
|
572
|
+
const impl = store.tree.implementations[implementationId];
|
|
573
|
+
if (!impl) {
|
|
574
|
+
throw new Error(`Implementation not found: ${implementationId}`);
|
|
575
|
+
}
|
|
576
|
+
const currentState = impl.lifecycleState ?? 'candidate';
|
|
577
|
+
if (!isValidLifecycleTransition(currentState, newState)) {
|
|
578
|
+
const allowed = getAllowedTransitions(currentState);
|
|
579
|
+
throw new Error(`Invalid lifecycle transition: ${currentState} -> ${newState}. ` +
|
|
580
|
+
`Allowed: ${allowed.length > 0 ? allowed.join(', ') : 'none (terminal state)'}`);
|
|
581
|
+
}
|
|
582
|
+
const updated = {
|
|
583
|
+
...impl,
|
|
584
|
+
lifecycleState: newState,
|
|
585
|
+
updatedAt: new Date().toISOString(),
|
|
586
|
+
};
|
|
587
|
+
store.tree.implementations[implementationId] = updated;
|
|
588
|
+
return updated;
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
export function listRuleImplementationsByState(stateDir, ruleId, state) {
|
|
592
|
+
const implementations = listImplementationsForRule(stateDir, ruleId);
|
|
593
|
+
// Match transitionImplementationState: a missing lifecycleState is treated
|
|
594
|
+
// as 'candidate'. Filtering on strict equality would silently drop
|
|
595
|
+
// historical/minimal records from candidate queries (EP-09 consistency).
|
|
596
|
+
return implementations.filter((impl) => (impl.lifecycleState ?? 'candidate') === state);
|
|
597
|
+
}
|
|
598
|
+
export function findActiveImplementation(stateDir, ruleId) {
|
|
599
|
+
const implementations = listImplementationsForRule(stateDir, ruleId);
|
|
600
|
+
return implementations.find((impl) => impl.lifecycleState === 'active') ?? null;
|
|
601
|
+
}
|
|
602
|
+
// ---------------------------------------------------------------------------
|
|
603
|
+
// PRI-459: training store + async mutators (hoisted from plugin ledger)
|
|
604
|
+
// ---------------------------------------------------------------------------
|
|
605
|
+
export async function saveLedgerAsync(stateDir, store) {
|
|
606
|
+
await mutateLedgerAsync(stateDir, async (current) => {
|
|
607
|
+
current.trainingStore = store.trainingStore;
|
|
608
|
+
current.tree = store.tree;
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
export function updateTrainingStore(stateDir, mutate) {
|
|
612
|
+
mutateLedger(stateDir, (store) => {
|
|
613
|
+
mutate(store.trainingStore);
|
|
614
|
+
});
|
|
615
|
+
}
|
|
157
616
|
//# sourceMappingURL=principle-tree-ledger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"principle-tree-ledger.js","sourceRoot":"","sources":["../src/principle-tree-ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"principle-tree-ledger.js","sourceRoot":"","sources":["../src/principle-tree-ledger.ts"],"names":[],"mappings":"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"}
|