@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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Principle Tree Ledger — pure file-based ledger for principle entries.
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
- * M8 key insight: ledger operations are single-process. No cross-process
11
- * locking needed for pd-cli usage. The file write is atomic (rename).
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
- export type { Principle, Rule, Implementation, PrincipleValueMetrics, LedgerPrinciple, LedgerRule, LedgerTreeStore, LegacyPrincipleTrainingState, LegacyPrincipleTrainingStore, HybridLedgerStore, };
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;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EACV,SAAS,EACT,IAAI,EACJ,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,eAAe,EACf,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAYpE,YAAY,EACV,SAAS,EACT,IAAI,EACJ,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,eAAe,EACf,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,GAClB,CAAC;AACF,OAAO,EAAE,cAAc,EAAE,CAAC;AAkG1B,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAE9D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAK3E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,eAAe,CAMlG;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAiBzH;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,qBAAqB,CAMxI;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE"}
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 — pure file-based ledger for principle entries.
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
- * M8 key insight: ledger operations are single-process. No cross-process
11
- * locking needed for pd-cli usage. The file write is atomic (rename).
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
- // Ledger mutations (synchronous safe for single-process use)
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
- * Read-modify-write the ledger file atomically.
97
- * Safe for single-process CLI use. NOT safe for concurrent multi-process access.
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
- const store = readLedgerFromFile(filePath);
102
- const result = mutate(store);
103
- const dir = path.dirname(filePath);
104
- if (!fs.existsSync(dir))
105
- fs.mkdirSync(dir, { recursive: true });
106
- atomicWriteFileSync(filePath, serializeLedger(store));
107
- return result;
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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"}