@manifesto-ai/governance 0.1.0 → 3.1.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/README.md +57 -38
- package/dist/index.d.ts +148 -87
- package/dist/index.js +438 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,52 +1,71 @@
|
|
|
1
1
|
# @manifesto-ai/governance
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Decorator runtime for legitimacy, approval, and governed execution.
|
|
4
4
|
|
|
5
|
-
`@manifesto-ai/governance` is the package
|
|
5
|
+
`@manifesto-ai/governance` is the package that turns a composable manifesto into a governed world. Its canonical public entry is `withGovernance(manifesto, config)`.
|
|
6
6
|
|
|
7
|
-
> **Current Contract Note:** The current
|
|
7
|
+
> **Current Contract Note:** The truthful current package contract is [docs/governance-SPEC-v3.0.0-draft.md](docs/governance-SPEC-v3.0.0-draft.md). The v2.0.0 governance spec remains as the historical service-first baseline.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Canonical Runtime Path
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { createManifesto } from "@manifesto-ai/sdk";
|
|
13
|
+
import { withGovernance } from "@manifesto-ai/governance";
|
|
14
|
+
|
|
15
|
+
const governed = withGovernance(
|
|
16
|
+
createManifesto<CounterDomain>(schema, effects),
|
|
17
|
+
{
|
|
18
|
+
lineage: { store },
|
|
19
|
+
bindings,
|
|
20
|
+
execution: {
|
|
21
|
+
projectionId: "counter",
|
|
22
|
+
deriveActor(intent) {
|
|
23
|
+
return { actorId: "agent:demo", kind: "agent" };
|
|
24
|
+
},
|
|
25
|
+
deriveSource(intent) {
|
|
26
|
+
return { kind: "agent", eventId: intent.intentId };
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
).activate();
|
|
10
31
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- governance events and event dispatch
|
|
15
|
-
- in-memory governance storage
|
|
16
|
-
- intent-instance helpers
|
|
17
|
-
|
|
18
|
-
## When to Use It
|
|
19
|
-
|
|
20
|
-
Use `@manifesto-ai/governance` directly when you want:
|
|
21
|
-
|
|
22
|
-
- custom governance evaluation or policy logic
|
|
23
|
-
- isolated tests for proposal lifecycle behavior
|
|
24
|
-
- explicit control over authority and event dispatch
|
|
25
|
-
- a lower-level building block for `@manifesto-ai/world`
|
|
26
|
-
|
|
27
|
-
## Quick Start
|
|
28
|
-
|
|
29
|
-
```typescript
|
|
30
|
-
import {
|
|
31
|
-
createGovernanceEventDispatcher,
|
|
32
|
-
createGovernanceService,
|
|
33
|
-
createInMemoryGovernanceStore,
|
|
34
|
-
} from "@manifesto-ai/governance";
|
|
35
|
-
import { createLineageService, createInMemoryLineageStore } from "@manifesto-ai/lineage";
|
|
36
|
-
|
|
37
|
-
const lineageStore = createInMemoryLineageStore();
|
|
38
|
-
const lineage = createLineageService(lineageStore);
|
|
39
|
-
const governanceStore = createInMemoryGovernanceStore();
|
|
40
|
-
const governance = createGovernanceService(governanceStore, {
|
|
41
|
-
lineageService: lineage,
|
|
42
|
-
});
|
|
43
|
-
const eventDispatcher = createGovernanceEventDispatcher({ service: governance });
|
|
32
|
+
const proposal = await governed.proposeAsync(
|
|
33
|
+
governed.createIntent(governed.MEL.actions.increment),
|
|
34
|
+
);
|
|
44
35
|
```
|
|
45
36
|
|
|
37
|
+
## What This Package Owns
|
|
38
|
+
|
|
39
|
+
- `withGovernance()` and the activated `GovernanceInstance`
|
|
40
|
+
- proposal lifecycle and authority evaluation
|
|
41
|
+
- pending human/tribunal resolution through `approve()` / `reject()`
|
|
42
|
+
- governance decision records and post-commit governance events
|
|
43
|
+
- low-level governance stores, services, authority handlers, and intent-instance helpers
|
|
44
|
+
|
|
45
|
+
## What Changes After Governance Activation
|
|
46
|
+
|
|
47
|
+
- direct `dispatchAsync` no longer exists
|
|
48
|
+
- the canonical state-change path becomes `proposeAsync() -> approve()/reject()`
|
|
49
|
+
- lineage is guaranteed at runtime
|
|
50
|
+
- visible snapshots publish only after approved execution seals successfully
|
|
51
|
+
|
|
52
|
+
## Low-Level Surface Still Available
|
|
53
|
+
|
|
54
|
+
The service-first exports remain public for lower-level tooling and protocol tests:
|
|
55
|
+
|
|
56
|
+
- `createGovernanceService()`
|
|
57
|
+
- `createGovernanceEventDispatcher()`
|
|
58
|
+
- `createInMemoryGovernanceStore()`
|
|
59
|
+
- `createAuthorityEvaluator()`
|
|
60
|
+
- authority handlers and lifecycle types
|
|
61
|
+
|
|
62
|
+
Those are no longer the canonical application entry story.
|
|
63
|
+
|
|
46
64
|
## Docs
|
|
47
65
|
|
|
48
66
|
- [Docs Landing](docs/README.md)
|
|
49
67
|
- [Governance Guide](docs/GUIDE.md)
|
|
50
|
-
- [Governance Specification](docs/governance-SPEC-
|
|
68
|
+
- [Governance Specification](docs/governance-SPEC-v3.0.0-draft.md)
|
|
69
|
+
- [Historical v2 Baseline](docs/governance-SPEC-2.0.0v.md)
|
|
51
70
|
- [Historical v1 Baseline](docs/governance-SPEC-1.0.0v.md)
|
|
52
71
|
- [VERSION-INDEX](docs/VERSION-INDEX.md)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ErrorValue, Intent as Intent$1, Snapshot } from '@manifesto-ai/core';
|
|
2
2
|
export { Snapshot } from '@manifesto-ai/core';
|
|
3
|
-
import { WorldId, BranchId, World, PreparedLineageCommit, LineageService } from '@manifesto-ai/lineage';
|
|
3
|
+
import { WorldId, BranchId, World, PreparedLineageCommit, LineageService, LineageStore, LineageConfig, LineageInstance } from '@manifesto-ai/lineage';
|
|
4
4
|
export { ArtifactRef, BranchId, PreparedLineageCommit, World, WorldId } from '@manifesto-ai/lineage';
|
|
5
|
+
import { ManifestoDomainShape, BaseLaws, LineageLaws, ComposableManifesto, GovernanceLaws } from '@manifesto-ai/sdk';
|
|
5
6
|
|
|
6
7
|
type ProposalId = string;
|
|
7
8
|
type DecisionId = string;
|
|
@@ -275,6 +276,15 @@ interface PreparedAuthorityResult {
|
|
|
275
276
|
}
|
|
276
277
|
interface GovernanceService {
|
|
277
278
|
createProposal(input: CreateProposalInput): Proposal;
|
|
279
|
+
beginEvaluating(proposal: Proposal): Proposal & {
|
|
280
|
+
readonly status: "evaluating";
|
|
281
|
+
};
|
|
282
|
+
beginExecution(proposal: Proposal): Proposal & {
|
|
283
|
+
readonly status: "executing";
|
|
284
|
+
};
|
|
285
|
+
failExecution(proposal: Proposal, completedAt: number, resultWorld?: WorldId): Proposal & {
|
|
286
|
+
readonly status: "failed";
|
|
287
|
+
};
|
|
278
288
|
prepareAuthorityResult(proposal: Proposal, response: Extract<AuthorityResponse, {
|
|
279
289
|
kind: "approved" | "rejected";
|
|
280
290
|
}>, options: PrepareAuthorityResultOptions): Promise<PreparedAuthorityResult>;
|
|
@@ -299,6 +309,132 @@ declare const defaultExecutionKeyPolicy: ExecutionKeyPolicy;
|
|
|
299
309
|
declare function createNoopGovernanceEventSink(): GovernanceEventSink;
|
|
300
310
|
declare function toHostIntent(intent: Intent | IntentInstance): Intent$1;
|
|
301
311
|
|
|
312
|
+
interface AuthorityHandler {
|
|
313
|
+
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
314
|
+
}
|
|
315
|
+
interface HITLDecisionCallback {
|
|
316
|
+
(proposalId: string, decision: "approved" | "rejected", reasoning?: string): void;
|
|
317
|
+
}
|
|
318
|
+
interface HITLPendingState {
|
|
319
|
+
proposalId: string;
|
|
320
|
+
proposal?: Proposal;
|
|
321
|
+
resolve: (response: AuthorityResponse) => void;
|
|
322
|
+
reject: (error: Error) => void;
|
|
323
|
+
timeoutId?: ReturnType<typeof setTimeout>;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
declare class AutoApproveHandler implements AuthorityHandler {
|
|
327
|
+
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
328
|
+
}
|
|
329
|
+
declare function createAutoApproveHandler(): AutoApproveHandler;
|
|
330
|
+
|
|
331
|
+
type HITLNotificationCallback = (proposalId: string, proposal: Proposal, binding: ActorAuthorityBinding) => void;
|
|
332
|
+
declare class HITLHandler implements AuthorityHandler {
|
|
333
|
+
private readonly pendingDecisions;
|
|
334
|
+
private readonly notificationCallbacks;
|
|
335
|
+
onPendingDecision(callback: HITLNotificationCallback): () => void;
|
|
336
|
+
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
337
|
+
submitDecision(proposalId: string, decision: "approved" | "rejected", reasoning?: string, approvedScope?: IntentScope | null): void;
|
|
338
|
+
isPending(proposalId: string): boolean;
|
|
339
|
+
getPendingIds(): string[];
|
|
340
|
+
clearAllPending(): void;
|
|
341
|
+
}
|
|
342
|
+
declare function createHITLHandler(): HITLHandler;
|
|
343
|
+
|
|
344
|
+
type CustomConditionEvaluator = (proposal: Proposal, binding: ActorAuthorityBinding) => boolean;
|
|
345
|
+
declare class PolicyRulesHandler implements AuthorityHandler {
|
|
346
|
+
private readonly customEvaluators;
|
|
347
|
+
registerCustomEvaluator(name: string, evaluator: CustomConditionEvaluator): void;
|
|
348
|
+
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
349
|
+
private evaluateCondition;
|
|
350
|
+
private matchPattern;
|
|
351
|
+
private applyDecision;
|
|
352
|
+
}
|
|
353
|
+
declare function createPolicyRulesHandler(): PolicyRulesHandler;
|
|
354
|
+
|
|
355
|
+
type TribunalNotificationCallback = (proposalId: string, proposal: Proposal, members: readonly ActorRef[]) => void;
|
|
356
|
+
declare class TribunalHandler implements AuthorityHandler {
|
|
357
|
+
private readonly pendingTribunals;
|
|
358
|
+
private notificationCallback?;
|
|
359
|
+
onPendingTribunal(callback: TribunalNotificationCallback): void;
|
|
360
|
+
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
361
|
+
submitVote(proposalId: string, voter: ActorRef, decision: "approve" | "reject" | "abstain", reasoning?: string): void;
|
|
362
|
+
isPending(proposalId: string): boolean;
|
|
363
|
+
getVotes(proposalId: string): Vote[];
|
|
364
|
+
getPendingIds(): string[];
|
|
365
|
+
clearAllPending(): void;
|
|
366
|
+
private checkQuorum;
|
|
367
|
+
}
|
|
368
|
+
declare function createTribunalHandler(): TribunalHandler;
|
|
369
|
+
|
|
370
|
+
declare class AuthorityEvaluator {
|
|
371
|
+
private readonly handlers;
|
|
372
|
+
private readonly autoHandler;
|
|
373
|
+
private readonly policyHandler;
|
|
374
|
+
private readonly hitlHandler;
|
|
375
|
+
private readonly tribunalHandler;
|
|
376
|
+
constructor();
|
|
377
|
+
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
378
|
+
registerHandler(policyMode: string, handler: AuthorityHandler): void;
|
|
379
|
+
getAutoHandler(): AutoApproveHandler;
|
|
380
|
+
getPolicyHandler(): PolicyRulesHandler;
|
|
381
|
+
getHITLHandler(): HITLHandler;
|
|
382
|
+
getTribunalHandler(): TribunalHandler;
|
|
383
|
+
getAuthorityKind(policyMode: string): AuthorityKind | null;
|
|
384
|
+
submitHITLDecision(proposalId: string, decision: "approved" | "rejected", reasoning?: string, approvedScope?: IntentScope | null): void;
|
|
385
|
+
submitTribunalVote(proposalId: string, voter: {
|
|
386
|
+
actorId: string;
|
|
387
|
+
kind: "human" | "agent" | "system";
|
|
388
|
+
name?: string;
|
|
389
|
+
}, decision: "approve" | "reject" | "abstain", reasoning?: string): void;
|
|
390
|
+
hasPendingHITL(): boolean;
|
|
391
|
+
hasPendingTribunal(): boolean;
|
|
392
|
+
getPendingHITLIds(): string[];
|
|
393
|
+
getPendingTribunalIds(): string[];
|
|
394
|
+
clearAllPending(): void;
|
|
395
|
+
}
|
|
396
|
+
declare function createAuthorityEvaluator(): AuthorityEvaluator;
|
|
397
|
+
|
|
398
|
+
type GovernanceLineageConfig = {
|
|
399
|
+
readonly service: LineageService;
|
|
400
|
+
readonly store?: LineageStore;
|
|
401
|
+
readonly branchId?: BranchId;
|
|
402
|
+
} | {
|
|
403
|
+
readonly store: LineageStore;
|
|
404
|
+
readonly service?: LineageService;
|
|
405
|
+
readonly branchId?: BranchId;
|
|
406
|
+
};
|
|
407
|
+
type GovernanceExecutionConfig = {
|
|
408
|
+
readonly projectionId: string;
|
|
409
|
+
readonly deriveActor: (intent: Intent$1) => ActorRef;
|
|
410
|
+
readonly deriveSource: (intent: Intent$1) => SourceRef;
|
|
411
|
+
};
|
|
412
|
+
type GovernanceConfig<T extends ManifestoDomainShape, Laws extends BaseLaws> = {
|
|
413
|
+
readonly bindings: readonly ActorAuthorityBinding[];
|
|
414
|
+
readonly governanceStore?: GovernanceStore;
|
|
415
|
+
readonly evaluator?: AuthorityEvaluator;
|
|
416
|
+
readonly eventSink?: GovernanceEventSink;
|
|
417
|
+
readonly now?: () => number;
|
|
418
|
+
readonly execution: GovernanceExecutionConfig;
|
|
419
|
+
} & (Laws extends LineageLaws ? {
|
|
420
|
+
readonly lineage?: GovernanceLineageConfig | LineageConfig;
|
|
421
|
+
} : {
|
|
422
|
+
readonly lineage: GovernanceLineageConfig;
|
|
423
|
+
});
|
|
424
|
+
type GovernanceInstance<T extends ManifestoDomainShape> = Omit<LineageInstance<T>, "dispatchAsync"> & {
|
|
425
|
+
readonly proposeAsync: (intent: Intent$1) => Promise<Proposal>;
|
|
426
|
+
readonly approve: (proposalId: ProposalId, approvedScope?: IntentScope | null) => Promise<Proposal>;
|
|
427
|
+
readonly reject: (proposalId: ProposalId, reason?: string) => Promise<Proposal>;
|
|
428
|
+
readonly getProposal: (proposalId: ProposalId) => Promise<Proposal | null>;
|
|
429
|
+
readonly getProposals: (branchId?: BranchId) => Promise<readonly Proposal[]>;
|
|
430
|
+
readonly bindActor: (binding: ActorAuthorityBinding) => Promise<void>;
|
|
431
|
+
readonly getActorBinding: (actorId: ActorId) => Promise<ActorAuthorityBinding | null>;
|
|
432
|
+
readonly getDecisionRecord: (decisionId: DecisionId) => Promise<DecisionRecord | null>;
|
|
433
|
+
};
|
|
434
|
+
type GovernanceComposableManifesto<T extends ManifestoDomainShape, Laws extends BaseLaws> = Omit<ComposableManifesto<T, Laws & LineageLaws & GovernanceLaws>, "activate"> & {
|
|
435
|
+
activate(): GovernanceInstance<T>;
|
|
436
|
+
};
|
|
437
|
+
|
|
302
438
|
interface CreateIntentInstanceOptions {
|
|
303
439
|
readonly body: IntentBody;
|
|
304
440
|
readonly schemaHash: string;
|
|
@@ -354,6 +490,15 @@ declare class DefaultGovernanceService implements GovernanceService {
|
|
|
354
490
|
private readonly options;
|
|
355
491
|
constructor(store: GovernanceStore, options?: GovernanceServiceOptions);
|
|
356
492
|
createProposal(input: CreateProposalInput): Proposal;
|
|
493
|
+
beginEvaluating(proposal: Proposal): Proposal & {
|
|
494
|
+
readonly status: "evaluating";
|
|
495
|
+
};
|
|
496
|
+
beginExecution(proposal: Proposal): Proposal & {
|
|
497
|
+
readonly status: "executing";
|
|
498
|
+
};
|
|
499
|
+
failExecution(proposal: Proposal, completedAt: number, resultWorld?: WorldId): Proposal & {
|
|
500
|
+
readonly status: "failed";
|
|
501
|
+
};
|
|
357
502
|
prepareAuthorityResult(proposal: Proposal, response: Extract<AuthorityResponse, {
|
|
358
503
|
kind: "approved" | "rejected";
|
|
359
504
|
}>, options: PrepareAuthorityResultOptions): Promise<PreparedAuthorityResult>;
|
|
@@ -383,90 +528,6 @@ interface CreateGovernanceEventDispatcherOptions {
|
|
|
383
528
|
}
|
|
384
529
|
declare function createGovernanceEventDispatcher(options: CreateGovernanceEventDispatcherOptions): GovernanceEventDispatcher;
|
|
385
530
|
|
|
386
|
-
|
|
387
|
-
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
388
|
-
}
|
|
389
|
-
interface HITLDecisionCallback {
|
|
390
|
-
(proposalId: string, decision: "approved" | "rejected", reasoning?: string): void;
|
|
391
|
-
}
|
|
392
|
-
interface HITLPendingState {
|
|
393
|
-
proposalId: string;
|
|
394
|
-
proposal?: Proposal;
|
|
395
|
-
resolve: (response: AuthorityResponse) => void;
|
|
396
|
-
reject: (error: Error) => void;
|
|
397
|
-
timeoutId?: ReturnType<typeof setTimeout>;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
declare class AutoApproveHandler implements AuthorityHandler {
|
|
401
|
-
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
402
|
-
}
|
|
403
|
-
declare function createAutoApproveHandler(): AutoApproveHandler;
|
|
404
|
-
|
|
405
|
-
type CustomConditionEvaluator = (proposal: Proposal, binding: ActorAuthorityBinding) => boolean;
|
|
406
|
-
declare class PolicyRulesHandler implements AuthorityHandler {
|
|
407
|
-
private readonly customEvaluators;
|
|
408
|
-
registerCustomEvaluator(name: string, evaluator: CustomConditionEvaluator): void;
|
|
409
|
-
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
410
|
-
private evaluateCondition;
|
|
411
|
-
private matchPattern;
|
|
412
|
-
private applyDecision;
|
|
413
|
-
}
|
|
414
|
-
declare function createPolicyRulesHandler(): PolicyRulesHandler;
|
|
415
|
-
|
|
416
|
-
type HITLNotificationCallback = (proposalId: string, proposal: Proposal, binding: ActorAuthorityBinding) => void;
|
|
417
|
-
declare class HITLHandler implements AuthorityHandler {
|
|
418
|
-
private readonly pendingDecisions;
|
|
419
|
-
private readonly notificationCallbacks;
|
|
420
|
-
onPendingDecision(callback: HITLNotificationCallback): () => void;
|
|
421
|
-
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
422
|
-
submitDecision(proposalId: string, decision: "approved" | "rejected", reasoning?: string, approvedScope?: IntentScope | null): void;
|
|
423
|
-
isPending(proposalId: string): boolean;
|
|
424
|
-
getPendingIds(): string[];
|
|
425
|
-
clearAllPending(): void;
|
|
426
|
-
}
|
|
427
|
-
declare function createHITLHandler(): HITLHandler;
|
|
428
|
-
|
|
429
|
-
type TribunalNotificationCallback = (proposalId: string, proposal: Proposal, members: readonly ActorRef[]) => void;
|
|
430
|
-
declare class TribunalHandler implements AuthorityHandler {
|
|
431
|
-
private readonly pendingTribunals;
|
|
432
|
-
private notificationCallback?;
|
|
433
|
-
onPendingTribunal(callback: TribunalNotificationCallback): void;
|
|
434
|
-
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
435
|
-
submitVote(proposalId: string, voter: ActorRef, decision: "approve" | "reject" | "abstain", reasoning?: string): void;
|
|
436
|
-
isPending(proposalId: string): boolean;
|
|
437
|
-
getVotes(proposalId: string): Vote[];
|
|
438
|
-
getPendingIds(): string[];
|
|
439
|
-
clearAllPending(): void;
|
|
440
|
-
private checkQuorum;
|
|
441
|
-
}
|
|
442
|
-
declare function createTribunalHandler(): TribunalHandler;
|
|
443
|
-
|
|
444
|
-
declare class AuthorityEvaluator {
|
|
445
|
-
private readonly handlers;
|
|
446
|
-
private readonly autoHandler;
|
|
447
|
-
private readonly policyHandler;
|
|
448
|
-
private readonly hitlHandler;
|
|
449
|
-
private readonly tribunalHandler;
|
|
450
|
-
constructor();
|
|
451
|
-
evaluate(proposal: Proposal, binding: ActorAuthorityBinding): Promise<AuthorityResponse>;
|
|
452
|
-
registerHandler(policyMode: string, handler: AuthorityHandler): void;
|
|
453
|
-
getAutoHandler(): AutoApproveHandler;
|
|
454
|
-
getPolicyHandler(): PolicyRulesHandler;
|
|
455
|
-
getHITLHandler(): HITLHandler;
|
|
456
|
-
getTribunalHandler(): TribunalHandler;
|
|
457
|
-
getAuthorityKind(policyMode: string): AuthorityKind | null;
|
|
458
|
-
submitHITLDecision(proposalId: string, decision: "approved" | "rejected", reasoning?: string, approvedScope?: IntentScope | null): void;
|
|
459
|
-
submitTribunalVote(proposalId: string, voter: {
|
|
460
|
-
actorId: string;
|
|
461
|
-
kind: "human" | "agent" | "system";
|
|
462
|
-
name?: string;
|
|
463
|
-
}, decision: "approve" | "reject" | "abstain", reasoning?: string): void;
|
|
464
|
-
hasPendingHITL(): boolean;
|
|
465
|
-
hasPendingTribunal(): boolean;
|
|
466
|
-
getPendingHITLIds(): string[];
|
|
467
|
-
getPendingTribunalIds(): string[];
|
|
468
|
-
clearAllPending(): void;
|
|
469
|
-
}
|
|
470
|
-
declare function createAuthorityEvaluator(): AuthorityEvaluator;
|
|
531
|
+
declare function withGovernance<T extends ManifestoDomainShape, Laws extends BaseLaws>(manifesto: ComposableManifesto<T, Laws>, config: GovernanceConfig<T, Laws>): GovernanceComposableManifesto<T, Laws>;
|
|
471
532
|
|
|
472
|
-
export { type ActorAuthorityBinding, type ActorId, type ActorKind, type ActorRef, AuthorityEvaluator, type AuthorityHandler, type AuthorityId, type AuthorityKind, type AuthorityPolicy, type AuthorityRef, type AuthorityResponse, AutoApproveHandler, type BaseGovernanceEvent, type CreateGovernanceEventDispatcherOptions, type CreateIntentInstanceOptions, type CreateProposalInput, type CustomConditionEvaluator, DECISION_TRANSITION_TARGETS, type DecisionId, type DecisionRecord, DefaultGovernanceService, EXECUTION_STAGE_STATUSES, type ErrorInfo, type ExecutionCompletedEvent, type ExecutionFailedEvent, type ExecutionKey, type ExecutionKeyContext, type ExecutionKeyPolicy, type FinalDecision, type GovernanceEvent, type GovernanceEventDispatcher, type GovernanceEventSink, type GovernanceEventType, type GovernanceService, type GovernanceStore, type HITLDecisionCallback, HITLHandler, type HITLNotificationCallback, type HITLPendingState, INGRESS_STATUSES, InMemoryGovernanceStore, type Intent, type IntentBody, type IntentInstance, type IntentOrigin, type IntentScope, type PolicyCondition, type PolicyRule, PolicyRulesHandler, type PrepareAuthorityResultOptions, type PreparedAuthorityResult, type PreparedGovernanceCommit, type Proposal, type ProposalDecidedEvent, type ProposalEvaluatingEvent, type ProposalId, type ProposalStatus, type ProposalSubmittedEvent, type ProposalSupersededEvent, type QuorumRule, type SourceKind, type SourceRef, type SupersedeReason, TERMINAL_STATUSES, TribunalHandler, type TribunalNotificationCallback, type Vote, type WaitingFor, type WorldCreatedEvent, type WorldForkedEvent, computeIntentKey, createAuthorityEvaluator, createAutoApproveHandler, createDecisionId, createExecutionKey, createGovernanceEventDispatcher, createGovernanceService, createHITLHandler, createInMemoryGovernanceStore, createIntentInstance, createIntentInstanceSync, createNoopGovernanceEventSink, createPolicyRulesHandler, createProposalId, createTribunalHandler, defaultExecutionKeyPolicy, getValidTransitions, isExecutionStageStatus, isIngressStatus, isTerminalStatus, isValidTransition, toHostIntent, transitionCreatesDecisionRecord };
|
|
533
|
+
export { type ActorAuthorityBinding, type ActorId, type ActorKind, type ActorRef, AuthorityEvaluator, type AuthorityHandler, type AuthorityId, type AuthorityKind, type AuthorityPolicy, type AuthorityRef, type AuthorityResponse, AutoApproveHandler, type BaseGovernanceEvent, type CreateGovernanceEventDispatcherOptions, type CreateIntentInstanceOptions, type CreateProposalInput, type CustomConditionEvaluator, DECISION_TRANSITION_TARGETS, type DecisionId, type DecisionRecord, DefaultGovernanceService, EXECUTION_STAGE_STATUSES, type ErrorInfo, type ExecutionCompletedEvent, type ExecutionFailedEvent, type ExecutionKey, type ExecutionKeyContext, type ExecutionKeyPolicy, type FinalDecision, type GovernanceComposableManifesto, type GovernanceConfig, type GovernanceEvent, type GovernanceEventDispatcher, type GovernanceEventSink, type GovernanceEventType, type GovernanceExecutionConfig, type GovernanceInstance, type GovernanceLineageConfig, type GovernanceService, type GovernanceStore, type HITLDecisionCallback, HITLHandler, type HITLNotificationCallback, type HITLPendingState, INGRESS_STATUSES, InMemoryGovernanceStore, type Intent, type IntentBody, type IntentInstance, type IntentOrigin, type IntentScope, type PolicyCondition, type PolicyRule, PolicyRulesHandler, type PrepareAuthorityResultOptions, type PreparedAuthorityResult, type PreparedGovernanceCommit, type Proposal, type ProposalDecidedEvent, type ProposalEvaluatingEvent, type ProposalId, type ProposalStatus, type ProposalSubmittedEvent, type ProposalSupersededEvent, type QuorumRule, type SourceKind, type SourceRef, type SupersedeReason, TERMINAL_STATUSES, TribunalHandler, type TribunalNotificationCallback, type Vote, type WaitingFor, type WorldCreatedEvent, type WorldForkedEvent, computeIntentKey, createAuthorityEvaluator, createAutoApproveHandler, createDecisionId, createExecutionKey, createGovernanceEventDispatcher, createGovernanceService, createHITLHandler, createInMemoryGovernanceStore, createIntentInstance, createIntentInstanceSync, createNoopGovernanceEventSink, createPolicyRulesHandler, createProposalId, createTribunalHandler, defaultExecutionKeyPolicy, getValidTransitions, isExecutionStageStatus, isIngressStatus, isTerminalStatus, isValidTransition, toHostIntent, transitionCreatesDecisionRecord, withGovernance };
|
package/dist/index.js
CHANGED
|
@@ -213,6 +213,23 @@ var DefaultGovernanceService = class {
|
|
|
213
213
|
epoch: input.epoch
|
|
214
214
|
});
|
|
215
215
|
}
|
|
216
|
+
beginEvaluating(proposal) {
|
|
217
|
+
return this.transitionProposal(proposal, "evaluating");
|
|
218
|
+
}
|
|
219
|
+
beginExecution(proposal) {
|
|
220
|
+
if (!proposal.decisionId) {
|
|
221
|
+
throw new Error(
|
|
222
|
+
"GOV-EXEC-1 violation: approved proposal requires decisionId before execution can begin"
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
return this.transitionProposal(proposal, "executing");
|
|
226
|
+
}
|
|
227
|
+
failExecution(proposal, completedAt, resultWorld) {
|
|
228
|
+
return this.transitionProposal(proposal, "failed", {
|
|
229
|
+
completedAt,
|
|
230
|
+
...resultWorld !== void 0 ? { resultWorld } : {}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
216
233
|
async prepareAuthorityResult(proposal, response, options) {
|
|
217
234
|
if (proposal.status !== "submitted" && proposal.status !== "evaluating") {
|
|
218
235
|
throw new Error(
|
|
@@ -963,6 +980,425 @@ var AuthorityEvaluator = class {
|
|
|
963
980
|
function createAuthorityEvaluator() {
|
|
964
981
|
return new AuthorityEvaluator();
|
|
965
982
|
}
|
|
983
|
+
|
|
984
|
+
// src/with-governance.ts
|
|
985
|
+
import {
|
|
986
|
+
AlreadyActivatedError,
|
|
987
|
+
DisposedError,
|
|
988
|
+
ManifestoError
|
|
989
|
+
} from "@manifesto-ai/sdk";
|
|
990
|
+
import {
|
|
991
|
+
attachRuntimeKernelFactory,
|
|
992
|
+
getRuntimeKernelFactory
|
|
993
|
+
} from "@manifesto-ai/sdk/internal";
|
|
994
|
+
import {
|
|
995
|
+
createLineageService
|
|
996
|
+
} from "@manifesto-ai/lineage";
|
|
997
|
+
import {
|
|
998
|
+
createLineageRuntimeController,
|
|
999
|
+
getLineageDecoration
|
|
1000
|
+
} from "@manifesto-ai/lineage/internal";
|
|
1001
|
+
var LINEAGE_LAWS = Object.freeze({ __lineageLaws: true });
|
|
1002
|
+
var GOVERNANCE_LAWS = Object.freeze({ __governanceLaws: true });
|
|
1003
|
+
function withGovernance(manifesto, config) {
|
|
1004
|
+
const createKernel = getRuntimeKernelFactory(manifesto);
|
|
1005
|
+
const explicitLineage = getLineageDecoration(manifesto);
|
|
1006
|
+
const lineageConfig = explicitLineage?.config ?? resolveGovernanceLineageConfig(config.lineage);
|
|
1007
|
+
let activated = false;
|
|
1008
|
+
const decorated = {
|
|
1009
|
+
_laws: Object.freeze({
|
|
1010
|
+
...manifesto._laws,
|
|
1011
|
+
...LINEAGE_LAWS,
|
|
1012
|
+
...GOVERNANCE_LAWS
|
|
1013
|
+
}),
|
|
1014
|
+
schema: manifesto.schema,
|
|
1015
|
+
activate() {
|
|
1016
|
+
if (activated) {
|
|
1017
|
+
throw new AlreadyActivatedError();
|
|
1018
|
+
}
|
|
1019
|
+
activated = true;
|
|
1020
|
+
return activateGovernanceRuntime(
|
|
1021
|
+
createKernel(),
|
|
1022
|
+
explicitLineage?.config ?? lineageConfig,
|
|
1023
|
+
config
|
|
1024
|
+
);
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
attachRuntimeKernelFactory(
|
|
1028
|
+
decorated,
|
|
1029
|
+
createKernel
|
|
1030
|
+
);
|
|
1031
|
+
return decorated;
|
|
1032
|
+
}
|
|
1033
|
+
function activateGovernanceRuntime(kernel, lineageConfig, config) {
|
|
1034
|
+
const governanceStore = config.governanceStore ?? createInMemoryGovernanceStore();
|
|
1035
|
+
const governanceService = createGovernanceService(governanceStore, {
|
|
1036
|
+
lineageService: lineageConfig.service
|
|
1037
|
+
});
|
|
1038
|
+
const evaluator = config.evaluator ?? createAuthorityEvaluator();
|
|
1039
|
+
const eventDispatcher = createGovernanceEventDispatcher({
|
|
1040
|
+
service: governanceService,
|
|
1041
|
+
sink: config.eventSink,
|
|
1042
|
+
now: config.now
|
|
1043
|
+
});
|
|
1044
|
+
const now = config.now ?? Date.now;
|
|
1045
|
+
const lineage = createLineageRuntimeController(kernel, lineageConfig.service, lineageConfig);
|
|
1046
|
+
let bindingsReady = null;
|
|
1047
|
+
async function ensureBindings() {
|
|
1048
|
+
if (bindingsReady) {
|
|
1049
|
+
return bindingsReady;
|
|
1050
|
+
}
|
|
1051
|
+
bindingsReady = Promise.all(config.bindings.map(async (binding) => {
|
|
1052
|
+
await governanceStore.putActorBinding(binding);
|
|
1053
|
+
})).then(() => void 0).catch((error) => {
|
|
1054
|
+
bindingsReady = null;
|
|
1055
|
+
throw error;
|
|
1056
|
+
});
|
|
1057
|
+
return bindingsReady;
|
|
1058
|
+
}
|
|
1059
|
+
async function ensureReady() {
|
|
1060
|
+
await lineage.ensureReady();
|
|
1061
|
+
await ensureBindings();
|
|
1062
|
+
}
|
|
1063
|
+
function getCurrentTimestamp() {
|
|
1064
|
+
return now();
|
|
1065
|
+
}
|
|
1066
|
+
async function invalidateStaleIngress(branchId, epoch) {
|
|
1067
|
+
const stale = await governanceService.invalidateStaleIngress(branchId, epoch);
|
|
1068
|
+
await Promise.all(stale.map(async (proposal) => {
|
|
1069
|
+
await governanceStore.putProposal(proposal);
|
|
1070
|
+
}));
|
|
1071
|
+
}
|
|
1072
|
+
async function resolveBinding(actorId) {
|
|
1073
|
+
const binding = await governanceStore.getActorBinding(actorId);
|
|
1074
|
+
if (binding) {
|
|
1075
|
+
return binding;
|
|
1076
|
+
}
|
|
1077
|
+
throw new ManifestoError(
|
|
1078
|
+
"GOVERNANCE_BINDING_NOT_FOUND",
|
|
1079
|
+
`No actor-authority binding exists for actor "${actorId}"`
|
|
1080
|
+
);
|
|
1081
|
+
}
|
|
1082
|
+
async function evaluateProposal(proposal, binding, activeEvaluator) {
|
|
1083
|
+
switch (binding.policy.mode) {
|
|
1084
|
+
case "hitl":
|
|
1085
|
+
return {
|
|
1086
|
+
kind: "pending",
|
|
1087
|
+
waitingFor: {
|
|
1088
|
+
kind: "human",
|
|
1089
|
+
delegate: binding.policy.delegate
|
|
1090
|
+
}
|
|
1091
|
+
};
|
|
1092
|
+
case "tribunal":
|
|
1093
|
+
return {
|
|
1094
|
+
kind: "pending",
|
|
1095
|
+
waitingFor: {
|
|
1096
|
+
kind: "tribunal",
|
|
1097
|
+
members: binding.policy.members
|
|
1098
|
+
}
|
|
1099
|
+
};
|
|
1100
|
+
default:
|
|
1101
|
+
return activeEvaluator.evaluate(proposal, binding);
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
async function finalizeApprovedExecution(executingProposal, intent) {
|
|
1105
|
+
let sealed = null;
|
|
1106
|
+
let proposalPersisted = false;
|
|
1107
|
+
try {
|
|
1108
|
+
sealed = await lineage.sealIntent(intent, {
|
|
1109
|
+
proposalRef: executingProposal.proposalId,
|
|
1110
|
+
decisionRef: executingProposal.decisionId,
|
|
1111
|
+
publishOnCompleted: false,
|
|
1112
|
+
assumeEnqueued: true
|
|
1113
|
+
});
|
|
1114
|
+
const governanceCommit = await governanceService.finalize(
|
|
1115
|
+
executingProposal,
|
|
1116
|
+
sealed.preparedCommit,
|
|
1117
|
+
getCurrentTimestamp()
|
|
1118
|
+
);
|
|
1119
|
+
await governanceStore.putProposal(governanceCommit.proposal);
|
|
1120
|
+
proposalPersisted = true;
|
|
1121
|
+
await governanceStore.putDecisionRecord(governanceCommit.decisionRecord);
|
|
1122
|
+
eventDispatcher.emitSealCompleted(governanceCommit, sealed.preparedCommit);
|
|
1123
|
+
if (sealed.preparedCommit.branchChange.headAdvanced) {
|
|
1124
|
+
const publishedSnapshot = kernel.setVisibleSnapshot(sealed.hostResult.snapshot);
|
|
1125
|
+
kernel.emitEvent("dispatch:completed", {
|
|
1126
|
+
intentId: intent.intentId ?? "",
|
|
1127
|
+
intent,
|
|
1128
|
+
snapshot: publishedSnapshot
|
|
1129
|
+
});
|
|
1130
|
+
return governanceCommit.proposal;
|
|
1131
|
+
}
|
|
1132
|
+
const failure = toGovernanceFailure(sealed.hostResult.error);
|
|
1133
|
+
kernel.emitEvent("dispatch:failed", {
|
|
1134
|
+
intentId: intent.intentId ?? "",
|
|
1135
|
+
intent,
|
|
1136
|
+
error: failure
|
|
1137
|
+
});
|
|
1138
|
+
return governanceCommit.proposal;
|
|
1139
|
+
} catch (error) {
|
|
1140
|
+
const failure = toGovernanceFailure(error);
|
|
1141
|
+
if (!proposalPersisted) {
|
|
1142
|
+
try {
|
|
1143
|
+
const failedProposal = governanceService.failExecution(
|
|
1144
|
+
executingProposal,
|
|
1145
|
+
getCurrentTimestamp(),
|
|
1146
|
+
sealed?.preparedCommit.worldId
|
|
1147
|
+
);
|
|
1148
|
+
await governanceStore.putProposal(failedProposal);
|
|
1149
|
+
} catch {
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
if (!isActionUnavailable(failure)) {
|
|
1153
|
+
kernel.emitEvent("dispatch:failed", {
|
|
1154
|
+
intentId: intent.intentId ?? "",
|
|
1155
|
+
intent,
|
|
1156
|
+
error: failure
|
|
1157
|
+
});
|
|
1158
|
+
}
|
|
1159
|
+
throw failure;
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
async function applyAuthorityDecision(proposal, response) {
|
|
1163
|
+
const prepared = await governanceService.prepareAuthorityResult(
|
|
1164
|
+
proposal,
|
|
1165
|
+
response,
|
|
1166
|
+
{
|
|
1167
|
+
decidedAt: getCurrentTimestamp()
|
|
1168
|
+
}
|
|
1169
|
+
);
|
|
1170
|
+
await governanceStore.putProposal(prepared.proposal);
|
|
1171
|
+
if (prepared.decisionRecord) {
|
|
1172
|
+
await governanceStore.putDecisionRecord(prepared.decisionRecord);
|
|
1173
|
+
}
|
|
1174
|
+
if (prepared.discarded || prepared.proposal.status === "rejected") {
|
|
1175
|
+
return prepared.proposal;
|
|
1176
|
+
}
|
|
1177
|
+
const executingProposal = governanceService.beginExecution(prepared.proposal);
|
|
1178
|
+
await governanceStore.putProposal(executingProposal);
|
|
1179
|
+
return finalizeApprovedExecution(executingProposal, toCoreIntent(prepared.proposal));
|
|
1180
|
+
}
|
|
1181
|
+
async function proposeAsync(intent) {
|
|
1182
|
+
if (kernel.isDisposed()) {
|
|
1183
|
+
throw new DisposedError();
|
|
1184
|
+
}
|
|
1185
|
+
return kernel.enqueue(async () => {
|
|
1186
|
+
if (kernel.isDisposed()) {
|
|
1187
|
+
throw new DisposedError();
|
|
1188
|
+
}
|
|
1189
|
+
await ensureReady();
|
|
1190
|
+
const enrichedIntent = kernel.ensureIntentId(intent);
|
|
1191
|
+
if (!kernel.isActionAvailable(enrichedIntent.type)) {
|
|
1192
|
+
return kernel.rejectUnavailable(enrichedIntent);
|
|
1193
|
+
}
|
|
1194
|
+
const branch = await lineage.getActiveBranch();
|
|
1195
|
+
await invalidateStaleIngress(branch.id, branch.epoch);
|
|
1196
|
+
const actor = config.execution.deriveActor(enrichedIntent);
|
|
1197
|
+
const binding = await resolveBinding(actor.actorId);
|
|
1198
|
+
const intentInstance = await createIntentInstance({
|
|
1199
|
+
body: {
|
|
1200
|
+
type: enrichedIntent.type,
|
|
1201
|
+
...enrichedIntent.input !== void 0 ? { input: enrichedIntent.input } : {},
|
|
1202
|
+
...hasScopeProposal(enrichedIntent) ? { scopeProposal: enrichedIntent.scopeProposal } : {}
|
|
1203
|
+
},
|
|
1204
|
+
schemaHash: kernel.schema.hash,
|
|
1205
|
+
projectionId: config.execution.projectionId,
|
|
1206
|
+
source: config.execution.deriveSource(enrichedIntent),
|
|
1207
|
+
actor,
|
|
1208
|
+
intentId: enrichedIntent.intentId
|
|
1209
|
+
});
|
|
1210
|
+
const proposalId = createProposalId();
|
|
1211
|
+
const proposal = governanceService.createProposal({
|
|
1212
|
+
proposalId,
|
|
1213
|
+
baseWorld: branch.head,
|
|
1214
|
+
branchId: branch.id,
|
|
1215
|
+
actorId: binding.actorId,
|
|
1216
|
+
authorityId: binding.authorityId,
|
|
1217
|
+
intent: {
|
|
1218
|
+
type: intentInstance.body.type,
|
|
1219
|
+
intentId: intentInstance.intentId,
|
|
1220
|
+
...intentInstance.body.input !== void 0 ? { input: intentInstance.body.input } : {},
|
|
1221
|
+
...intentInstance.body.scopeProposal !== void 0 ? { scopeProposal: intentInstance.body.scopeProposal } : {}
|
|
1222
|
+
},
|
|
1223
|
+
executionKey: defaultExecutionKeyPolicy({
|
|
1224
|
+
proposalId,
|
|
1225
|
+
actorId: binding.actorId,
|
|
1226
|
+
baseWorld: branch.head,
|
|
1227
|
+
branchId: branch.id,
|
|
1228
|
+
attempt: 1
|
|
1229
|
+
}),
|
|
1230
|
+
submittedAt: getCurrentTimestamp(),
|
|
1231
|
+
epoch: branch.epoch
|
|
1232
|
+
});
|
|
1233
|
+
await governanceStore.putProposal(proposal);
|
|
1234
|
+
const evaluatingProposal = governanceService.beginEvaluating(proposal);
|
|
1235
|
+
await governanceStore.putProposal(evaluatingProposal);
|
|
1236
|
+
const response = await evaluateProposal(evaluatingProposal, binding, evaluator);
|
|
1237
|
+
if (response.kind === "pending") {
|
|
1238
|
+
return evaluatingProposal;
|
|
1239
|
+
}
|
|
1240
|
+
return applyAuthorityDecision(evaluatingProposal, response);
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
async function getEvaluatingProposal(proposalId) {
|
|
1244
|
+
const proposal = await governanceStore.getProposal(proposalId);
|
|
1245
|
+
if (!proposal) {
|
|
1246
|
+
throw new ManifestoError(
|
|
1247
|
+
"GOVERNANCE_PROPOSAL_NOT_FOUND",
|
|
1248
|
+
`Proposal "${proposalId}" was not found`
|
|
1249
|
+
);
|
|
1250
|
+
}
|
|
1251
|
+
if (proposal.status !== "evaluating") {
|
|
1252
|
+
throw new ManifestoError(
|
|
1253
|
+
"GOVERNANCE_PENDING_REQUIRED",
|
|
1254
|
+
`Proposal "${proposalId}" is not pending human resolution`
|
|
1255
|
+
);
|
|
1256
|
+
}
|
|
1257
|
+
return proposal;
|
|
1258
|
+
}
|
|
1259
|
+
async function approve(proposalId, approvedScope) {
|
|
1260
|
+
if (kernel.isDisposed()) {
|
|
1261
|
+
throw new DisposedError();
|
|
1262
|
+
}
|
|
1263
|
+
return kernel.enqueue(async () => {
|
|
1264
|
+
if (kernel.isDisposed()) {
|
|
1265
|
+
throw new DisposedError();
|
|
1266
|
+
}
|
|
1267
|
+
await ensureReady();
|
|
1268
|
+
const proposal = await getEvaluatingProposal(proposalId);
|
|
1269
|
+
return applyAuthorityDecision(proposal, {
|
|
1270
|
+
kind: "approved",
|
|
1271
|
+
approvedScope: approvedScope !== void 0 ? approvedScope : proposal.intent.scopeProposal ?? null
|
|
1272
|
+
});
|
|
1273
|
+
});
|
|
1274
|
+
}
|
|
1275
|
+
async function reject(proposalId, reason) {
|
|
1276
|
+
if (kernel.isDisposed()) {
|
|
1277
|
+
throw new DisposedError();
|
|
1278
|
+
}
|
|
1279
|
+
return kernel.enqueue(async () => {
|
|
1280
|
+
if (kernel.isDisposed()) {
|
|
1281
|
+
throw new DisposedError();
|
|
1282
|
+
}
|
|
1283
|
+
await ensureReady();
|
|
1284
|
+
const proposal = await getEvaluatingProposal(proposalId);
|
|
1285
|
+
return applyAuthorityDecision(proposal, {
|
|
1286
|
+
kind: "rejected",
|
|
1287
|
+
...reason ? { reason } : {}
|
|
1288
|
+
});
|
|
1289
|
+
});
|
|
1290
|
+
}
|
|
1291
|
+
async function getProposal(proposalId) {
|
|
1292
|
+
await ensureBindings();
|
|
1293
|
+
return governanceStore.getProposal(proposalId);
|
|
1294
|
+
}
|
|
1295
|
+
async function getProposals(branchId) {
|
|
1296
|
+
await ensureReady();
|
|
1297
|
+
const resolvedBranchId = branchId ?? (await lineage.getActiveBranch()).id;
|
|
1298
|
+
return governanceStore.getProposalsByBranch(resolvedBranchId);
|
|
1299
|
+
}
|
|
1300
|
+
async function bindActor(binding) {
|
|
1301
|
+
if (kernel.isDisposed()) {
|
|
1302
|
+
throw new DisposedError();
|
|
1303
|
+
}
|
|
1304
|
+
return kernel.enqueue(async () => {
|
|
1305
|
+
if (kernel.isDisposed()) {
|
|
1306
|
+
throw new DisposedError();
|
|
1307
|
+
}
|
|
1308
|
+
await ensureBindings();
|
|
1309
|
+
await governanceStore.putActorBinding(binding);
|
|
1310
|
+
});
|
|
1311
|
+
}
|
|
1312
|
+
async function getActorBinding(actorId) {
|
|
1313
|
+
await ensureBindings();
|
|
1314
|
+
return governanceStore.getActorBinding(actorId);
|
|
1315
|
+
}
|
|
1316
|
+
async function getDecisionRecord(decisionId) {
|
|
1317
|
+
await ensureBindings();
|
|
1318
|
+
return governanceStore.getDecisionRecord(decisionId);
|
|
1319
|
+
}
|
|
1320
|
+
const governed = {
|
|
1321
|
+
createIntent: kernel.createIntent,
|
|
1322
|
+
subscribe: kernel.subscribe,
|
|
1323
|
+
on: kernel.on,
|
|
1324
|
+
getSnapshot: kernel.getSnapshot,
|
|
1325
|
+
getAvailableActions: kernel.getAvailableActions,
|
|
1326
|
+
isActionAvailable: kernel.isActionAvailable,
|
|
1327
|
+
MEL: kernel.MEL,
|
|
1328
|
+
schema: kernel.schema,
|
|
1329
|
+
dispose: kernel.dispose,
|
|
1330
|
+
restore: lineage.restore,
|
|
1331
|
+
getWorld: lineage.getWorld,
|
|
1332
|
+
getLatestHead: lineage.getLatestHead,
|
|
1333
|
+
getHeads: lineage.getHeads,
|
|
1334
|
+
getBranches: lineage.getBranches,
|
|
1335
|
+
getActiveBranch: lineage.getActiveBranch,
|
|
1336
|
+
switchActiveBranch: lineage.switchActiveBranch,
|
|
1337
|
+
createBranch: lineage.createBranch,
|
|
1338
|
+
proposeAsync,
|
|
1339
|
+
approve,
|
|
1340
|
+
reject,
|
|
1341
|
+
getProposal,
|
|
1342
|
+
getProposals,
|
|
1343
|
+
bindActor,
|
|
1344
|
+
getActorBinding,
|
|
1345
|
+
getDecisionRecord
|
|
1346
|
+
};
|
|
1347
|
+
return governed;
|
|
1348
|
+
}
|
|
1349
|
+
function resolveGovernanceLineageConfig(lineage) {
|
|
1350
|
+
if (!lineage) {
|
|
1351
|
+
throw new ManifestoError(
|
|
1352
|
+
"GOVERNANCE_LINEAGE_REQUIRED",
|
|
1353
|
+
"withGovernance() requires explicit lineage configuration when lineage is not already composed"
|
|
1354
|
+
);
|
|
1355
|
+
}
|
|
1356
|
+
if (!lineage.service && !lineage.store) {
|
|
1357
|
+
throw new ManifestoError(
|
|
1358
|
+
"GOVERNANCE_LINEAGE_REQUIRED",
|
|
1359
|
+
"Governance lineage configuration must provide a LineageService or LineageStore"
|
|
1360
|
+
);
|
|
1361
|
+
}
|
|
1362
|
+
if (lineage.service) {
|
|
1363
|
+
return Object.freeze({
|
|
1364
|
+
...lineage,
|
|
1365
|
+
service: lineage.service
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
const store = lineage.store;
|
|
1369
|
+
if (!store) {
|
|
1370
|
+
throw new ManifestoError(
|
|
1371
|
+
"GOVERNANCE_LINEAGE_REQUIRED",
|
|
1372
|
+
"Governance lineage configuration must provide a LineageService or LineageStore"
|
|
1373
|
+
);
|
|
1374
|
+
}
|
|
1375
|
+
return Object.freeze({
|
|
1376
|
+
...lineage,
|
|
1377
|
+
service: createLineageService(store)
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1380
|
+
function toCoreIntent(proposal) {
|
|
1381
|
+
return {
|
|
1382
|
+
type: proposal.intent.type,
|
|
1383
|
+
intentId: proposal.intent.intentId,
|
|
1384
|
+
...proposal.intent.input !== void 0 ? { input: proposal.intent.input } : {}
|
|
1385
|
+
};
|
|
1386
|
+
}
|
|
1387
|
+
function hasScopeProposal(intent) {
|
|
1388
|
+
return "scopeProposal" in intent && intent.scopeProposal !== void 0;
|
|
1389
|
+
}
|
|
1390
|
+
function toGovernanceFailure(error) {
|
|
1391
|
+
if (error instanceof Error) {
|
|
1392
|
+
return error;
|
|
1393
|
+
}
|
|
1394
|
+
return new ManifestoError(
|
|
1395
|
+
"GOVERNANCE_EXECUTION_FAILED",
|
|
1396
|
+
"Governed proposal execution did not produce a completed result"
|
|
1397
|
+
);
|
|
1398
|
+
}
|
|
1399
|
+
function isActionUnavailable(error) {
|
|
1400
|
+
return "code" in error && typeof error.code === "string" && error.code === "ACTION_UNAVAILABLE";
|
|
1401
|
+
}
|
|
966
1402
|
export {
|
|
967
1403
|
AuthorityEvaluator,
|
|
968
1404
|
AutoApproveHandler,
|
|
@@ -997,6 +1433,7 @@ export {
|
|
|
997
1433
|
isTerminalStatus,
|
|
998
1434
|
isValidTransition,
|
|
999
1435
|
toHostIntent,
|
|
1000
|
-
transitionCreatesDecisionRecord
|
|
1436
|
+
transitionCreatesDecisionRecord,
|
|
1437
|
+
withGovernance
|
|
1001
1438
|
};
|
|
1002
1439
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/intent-instance.ts","../src/state-machine.ts","../src/store/in-memory-governance-store.ts","../src/service/governance-service.ts","../src/event-dispatcher.ts","../src/authority/auto.ts","../src/authority/policy.ts","../src/authority/hitl.ts","../src/authority/tribunal.ts","../src/authority/evaluator.ts"],"sourcesContent":["import type { ErrorValue, Intent as HostIntent, Snapshot } from \"@manifesto-ai/core\";\nimport type { ArtifactRef, BranchId, PreparedLineageCommit, World, WorldId } from \"@manifesto-ai/lineage\";\n\nexport type { Snapshot } from \"@manifesto-ai/core\";\nexport type {\n ArtifactRef,\n BranchId,\n PreparedLineageCommit,\n World,\n WorldId,\n} from \"@manifesto-ai/lineage\";\n\nexport type ProposalId = string;\nexport type DecisionId = string;\nexport type ActorId = string;\nexport type AuthorityId = string;\nexport type ExecutionKey = string;\n\nexport type ActorKind = \"human\" | \"agent\" | \"system\";\nexport type AuthorityKind = \"auto\" | \"human\" | \"policy\" | \"tribunal\";\nexport type ProposalStatus =\n | \"submitted\"\n | \"evaluating\"\n | \"approved\"\n | \"rejected\"\n | \"executing\"\n | \"completed\"\n | \"failed\"\n | \"superseded\";\n\nexport type SupersedeReason =\n | \"branch_switch\"\n | \"head_advance\"\n | \"manual_cancel\";\n\nexport interface ActorRef {\n readonly actorId: ActorId;\n readonly kind: ActorKind;\n readonly name?: string;\n readonly meta?: Record<string, unknown>;\n}\n\nexport interface AuthorityRef {\n readonly authorityId: AuthorityId;\n readonly kind: AuthorityKind;\n readonly name?: string;\n}\n\nexport interface IntentScope {\n readonly allowedPaths?: readonly string[];\n readonly note?: string;\n}\n\nexport type SourceKind = \"ui\" | \"api\" | \"agent\" | \"system\";\n\nexport interface SourceRef {\n readonly kind: SourceKind;\n readonly eventId: string;\n}\n\nexport interface IntentOrigin {\n readonly projectionId: string;\n readonly source: SourceRef;\n readonly actor: ActorRef;\n readonly note?: string;\n}\n\nexport interface IntentBody {\n readonly type: string;\n readonly input?: unknown;\n readonly scopeProposal?: IntentScope;\n}\n\nexport interface IntentInstance {\n readonly body: IntentBody;\n readonly intentId: string;\n readonly intentKey: string;\n readonly meta: {\n readonly origin: IntentOrigin;\n };\n}\n\nexport interface Intent {\n readonly type: string;\n readonly intentId: string;\n readonly input?: unknown;\n readonly scopeProposal?: IntentScope;\n}\n\nexport interface ExecutionKeyContext {\n readonly proposalId: ProposalId;\n readonly actorId: ActorId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly attempt: number;\n}\n\nexport type ExecutionKeyPolicy = (context: ExecutionKeyContext) => ExecutionKey;\n\nexport interface Proposal {\n readonly proposalId: ProposalId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly actorId: ActorId;\n readonly authorityId: AuthorityId;\n readonly intent: Intent;\n readonly status: ProposalStatus;\n readonly executionKey: ExecutionKey;\n readonly submittedAt: number;\n readonly decidedAt?: number;\n readonly completedAt?: number;\n readonly decisionId?: DecisionId;\n readonly epoch: number;\n readonly resultWorld?: WorldId;\n readonly supersededReason?: SupersedeReason;\n readonly approvedScope?: unknown;\n}\n\nexport type FinalDecision =\n | { readonly kind: \"approved\" }\n | { readonly kind: \"rejected\"; readonly reason?: string };\n\nexport interface DecisionRecord {\n readonly decisionId: DecisionId;\n readonly proposalId: ProposalId;\n readonly authorityId: AuthorityId;\n readonly decision: FinalDecision;\n readonly decidedAt: number;\n}\n\nexport type AuthorityPolicy =\n | { readonly mode: \"auto_approve\"; readonly reason?: string }\n | {\n readonly mode: \"hitl\";\n readonly delegate: ActorRef;\n readonly timeout?: number;\n readonly onTimeout?: \"approve\" | \"reject\";\n }\n | {\n readonly mode: \"policy_rules\";\n readonly rules: readonly PolicyRule[];\n readonly defaultDecision: \"approve\" | \"reject\" | \"escalate\";\n readonly escalateTo?: AuthorityRef;\n }\n | {\n readonly mode: \"tribunal\";\n readonly members: readonly ActorRef[];\n readonly quorum: QuorumRule;\n readonly timeout?: number;\n readonly onTimeout?: \"approve\" | \"reject\";\n };\n\nexport interface ActorAuthorityBinding {\n readonly actorId: ActorId;\n readonly authorityId: AuthorityId;\n readonly policy: AuthorityPolicy;\n}\n\nexport type PolicyCondition =\n | { readonly kind: \"intent_type\"; readonly types: readonly string[] }\n | { readonly kind: \"scope_pattern\"; readonly pattern: string }\n | { readonly kind: \"custom\"; readonly evaluator: string };\n\nexport interface PolicyRule {\n readonly condition: PolicyCondition;\n readonly decision: \"approve\" | \"reject\" | \"escalate\";\n readonly reason?: string;\n}\n\nexport type QuorumRule =\n | { readonly kind: \"unanimous\" }\n | { readonly kind: \"majority\" }\n | { readonly kind: \"threshold\"; readonly count: number };\n\nexport type WaitingFor =\n | { readonly kind: \"human\"; readonly delegate: ActorRef }\n | { readonly kind: \"tribunal\"; readonly members: readonly ActorRef[] }\n | { readonly kind: \"timeout\"; readonly until: number };\n\nexport type AuthorityResponse =\n | { readonly kind: \"approved\"; readonly approvedScope: IntentScope | null }\n | { readonly kind: \"rejected\"; readonly reason?: string }\n | { readonly kind: \"pending\"; readonly waitingFor: WaitingFor };\n\nexport interface Vote {\n readonly voter: ActorRef;\n readonly decision: \"approve\" | \"reject\" | \"abstain\";\n readonly reasoning?: string;\n readonly votedAt: number;\n}\n\nexport type GovernanceEventType =\n | \"proposal:submitted\"\n | \"proposal:evaluating\"\n | \"proposal:decided\"\n | \"proposal:superseded\"\n | \"execution:completed\"\n | \"execution:failed\"\n | \"world:created\"\n | \"world:forked\";\n\nexport interface BaseGovernanceEvent<T extends GovernanceEventType> {\n readonly type: T;\n readonly timestamp: number;\n}\n\nexport interface ErrorInfo {\n readonly summary: string;\n readonly currentError?: ErrorValue;\n readonly pendingRequirements?: readonly string[];\n}\n\nexport interface ProposalSubmittedEvent\n extends BaseGovernanceEvent<\"proposal:submitted\"> {\n readonly proposalId: ProposalId;\n readonly actorId: ActorId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly intent: {\n readonly type: string;\n readonly intentId: string;\n readonly input?: unknown;\n };\n readonly executionKey: ExecutionKey;\n readonly epoch: number;\n}\n\nexport interface ProposalEvaluatingEvent\n extends BaseGovernanceEvent<\"proposal:evaluating\"> {\n readonly proposalId: ProposalId;\n}\n\nexport interface ProposalDecidedEvent\n extends BaseGovernanceEvent<\"proposal:decided\"> {\n readonly proposalId: ProposalId;\n readonly decisionId: DecisionId;\n readonly decision: \"approved\" | \"rejected\";\n readonly reason?: string;\n}\n\nexport interface ProposalSupersededEvent\n extends BaseGovernanceEvent<\"proposal:superseded\"> {\n readonly proposalId: ProposalId;\n readonly currentEpoch: number;\n readonly proposalEpoch: number;\n readonly reason: SupersedeReason;\n}\n\nexport interface ExecutionCompletedEvent\n extends BaseGovernanceEvent<\"execution:completed\"> {\n readonly proposalId: ProposalId;\n readonly executionKey: ExecutionKey;\n readonly resultWorld: WorldId;\n}\n\nexport interface ExecutionFailedEvent\n extends BaseGovernanceEvent<\"execution:failed\"> {\n readonly proposalId: ProposalId;\n readonly executionKey: ExecutionKey;\n readonly resultWorld: WorldId;\n readonly error: ErrorInfo;\n}\n\nexport interface WorldCreatedEvent\n extends BaseGovernanceEvent<\"world:created\"> {\n readonly world: World;\n readonly from: WorldId;\n readonly proposalId: ProposalId;\n readonly outcome: \"completed\" | \"failed\";\n}\n\nexport interface WorldForkedEvent\n extends BaseGovernanceEvent<\"world:forked\"> {\n readonly branchId: BranchId;\n readonly forkPoint: WorldId;\n}\n\nexport type GovernanceEvent =\n | ProposalSubmittedEvent\n | ProposalEvaluatingEvent\n | ProposalDecidedEvent\n | ProposalSupersededEvent\n | ExecutionCompletedEvent\n | ExecutionFailedEvent\n | WorldCreatedEvent\n | WorldForkedEvent;\n\nexport interface GovernanceEventSink {\n emit(event: GovernanceEvent): void;\n}\n\nexport interface GovernanceEventDispatcher {\n emitSealCompleted(\n governanceCommit: PreparedGovernanceCommit,\n lineageCommit: PreparedLineageCommit\n ): void;\n}\n\nexport interface PreparedGovernanceCommit {\n readonly proposal: Proposal;\n readonly decisionRecord: DecisionRecord;\n}\n\nexport interface GovernanceStore {\n putProposal(proposal: Proposal): Promise<void>;\n getProposal(proposalId: ProposalId): Promise<Proposal | null>;\n getProposalsByBranch(branchId: BranchId): Promise<readonly Proposal[]>;\n getExecutionStageProposal(branchId: BranchId): Promise<Proposal | null>;\n putDecisionRecord(record: DecisionRecord): Promise<void>;\n getDecisionRecord(decisionId: DecisionId): Promise<DecisionRecord | null>;\n putActorBinding(binding: ActorAuthorityBinding): Promise<void>;\n getActorBinding(actorId: ActorId): Promise<ActorAuthorityBinding | null>;\n getActorBindings(): Promise<readonly ActorAuthorityBinding[]>;\n}\n\nexport interface CreateProposalInput {\n readonly proposalId?: ProposalId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly actorId: ActorId;\n readonly authorityId: AuthorityId;\n readonly intent: Intent;\n readonly executionKey: ExecutionKey;\n readonly submittedAt: number;\n readonly epoch: number;\n}\n\nexport interface PrepareAuthorityResultOptions {\n readonly currentEpoch?: number;\n readonly currentBranchHead?: WorldId;\n readonly decisionId?: DecisionId;\n readonly decidedAt: number;\n}\n\nexport interface PreparedAuthorityResult {\n readonly proposal: Proposal;\n readonly decisionRecord?: DecisionRecord;\n readonly discarded: boolean;\n}\n\nexport interface GovernanceService {\n createProposal(input: CreateProposalInput): Proposal;\n prepareAuthorityResult(\n proposal: Proposal,\n response: Extract<AuthorityResponse, { kind: \"approved\" | \"rejected\" }>,\n options: PrepareAuthorityResultOptions\n ): Promise<PreparedAuthorityResult>;\n prepareSupersede(proposal: Proposal, reason: SupersedeReason): Proposal;\n invalidateStaleIngress(\n branchId: BranchId,\n currentEpoch?: number\n ): Promise<readonly Proposal[]>;\n shouldDiscardAuthorityResult(proposal: Proposal, currentEpoch: number): boolean;\n deriveOutcome(terminalSnapshot: Snapshot): \"completed\" | \"failed\";\n finalize(\n executingProposal: Proposal,\n lineageCommit: PreparedLineageCommit,\n completedAt: number\n ): Promise<PreparedGovernanceCommit>;\n createProposalSubmittedEvent(\n proposal: Proposal,\n timestamp?: number\n ): ProposalSubmittedEvent;\n createProposalEvaluatingEvent(\n proposal: Proposal,\n timestamp?: number\n ): ProposalEvaluatingEvent;\n createProposalDecidedEvent(\n proposal: Proposal,\n decisionRecord: DecisionRecord,\n timestamp?: number\n ): ProposalDecidedEvent;\n createProposalSupersededEvent(\n proposal: Proposal,\n currentEpoch: number,\n timestamp?: number\n ): ProposalSupersededEvent;\n createExecutionCompletedEvent(\n proposal: Proposal,\n timestamp?: number\n ): ExecutionCompletedEvent;\n createExecutionFailedEvent(\n proposal: Proposal,\n error: ErrorInfo,\n timestamp?: number\n ): ExecutionFailedEvent;\n createWorldCreatedEvent(\n world: World,\n proposalId: ProposalId,\n from: WorldId,\n outcome: \"completed\" | \"failed\",\n timestamp?: number\n ): WorldCreatedEvent;\n createWorldForkedEvent(\n branchId: BranchId,\n forkPoint: WorldId,\n timestamp?: number\n ): WorldForkedEvent;\n}\n\nexport function createProposalId(value?: string): ProposalId {\n return value ?? `prop-${crypto.randomUUID()}`;\n}\n\nexport function createDecisionId(value?: string): DecisionId {\n return value ?? `dec-${crypto.randomUUID()}`;\n}\n\nexport function createExecutionKey(proposalId: ProposalId, attempt = 1): ExecutionKey {\n return `${proposalId}:${attempt}`;\n}\n\nexport const defaultExecutionKeyPolicy: ExecutionKeyPolicy = ({\n proposalId,\n attempt,\n}) => createExecutionKey(proposalId, attempt);\n\nexport function createNoopGovernanceEventSink(): GovernanceEventSink {\n return {\n emit(): void {\n // no-op\n },\n };\n}\n\nexport function toHostIntent(intent: Intent | IntentInstance): HostIntent {\n if (\"body\" in intent) {\n return {\n type: intent.body.type,\n input: intent.body.input,\n intentId: intent.intentId,\n };\n }\n\n return {\n type: intent.type,\n input: intent.input,\n intentId: intent.intentId,\n };\n}\n","import { sha256, toJcs } from \"@manifesto-ai/core\";\nimport type {\n ActorRef,\n IntentBody,\n IntentInstance,\n IntentOrigin,\n SourceRef,\n} from \"./types.js\";\n\nexport interface CreateIntentInstanceOptions {\n readonly body: IntentBody;\n readonly schemaHash: string;\n readonly projectionId: string;\n readonly source: SourceRef;\n readonly actor: ActorRef;\n readonly note?: string;\n readonly intentId?: string;\n}\n\nexport async function computeIntentKey(\n schemaHash: string,\n body: IntentBody\n): Promise<string> {\n const input = [\n schemaHash,\n body.type,\n toJcs(body.input ?? null),\n toJcs(body.scopeProposal ?? null),\n ].join(\":\");\n\n return sha256(input);\n}\n\nexport async function createIntentInstance(\n options: CreateIntentInstanceOptions\n): Promise<IntentInstance> {\n const intentId = options.intentId ?? `intent-${crypto.randomUUID()}`;\n const intentKey = await computeIntentKey(options.schemaHash, options.body);\n\n return createIntentInstanceSync(\n options.body,\n intentId,\n intentKey,\n {\n projectionId: options.projectionId,\n source: options.source,\n actor: options.actor,\n note: options.note,\n }\n );\n}\n\nexport function createIntentInstanceSync(\n body: IntentBody,\n intentId: string,\n intentKey: string,\n origin: IntentOrigin\n): IntentInstance {\n return deepFreeze({\n body,\n intentId,\n intentKey,\n meta: {\n origin,\n },\n });\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n for (const key of Object.getOwnPropertyNames(value)) {\n const nested = (value as Record<string, unknown>)[key];\n if (nested !== null && typeof nested === \"object\") {\n deepFreeze(nested);\n }\n }\n\n return Object.freeze(value);\n}\n","import type { ProposalStatus } from \"./types.js\";\n\nexport const INGRESS_STATUSES = [\"submitted\", \"evaluating\"] as const satisfies readonly ProposalStatus[];\nexport const EXECUTION_STAGE_STATUSES = [\"approved\", \"executing\"] as const satisfies readonly ProposalStatus[];\nexport const TERMINAL_STATUSES = [\"rejected\", \"completed\", \"failed\", \"superseded\"] as const satisfies readonly ProposalStatus[];\nexport const DECISION_TRANSITION_TARGETS = [\"approved\", \"rejected\"] as const satisfies readonly ProposalStatus[];\n\nconst VALID_TRANSITIONS: Record<ProposalStatus, readonly ProposalStatus[]> = {\n submitted: [\"evaluating\", \"rejected\", \"superseded\"],\n evaluating: [\"approved\", \"rejected\", \"superseded\"],\n approved: [\"executing\"],\n rejected: [],\n executing: [\"completed\", \"failed\"],\n completed: [],\n failed: [],\n superseded: [],\n};\n\nexport function isIngressStatus(status: ProposalStatus): boolean {\n return (INGRESS_STATUSES as readonly ProposalStatus[]).includes(status);\n}\n\nexport function isExecutionStageStatus(status: ProposalStatus): boolean {\n return (EXECUTION_STAGE_STATUSES as readonly ProposalStatus[]).includes(status);\n}\n\nexport function isTerminalStatus(status: ProposalStatus): boolean {\n return (TERMINAL_STATUSES as readonly ProposalStatus[]).includes(status);\n}\n\nexport function isValidTransition(\n from: ProposalStatus,\n to: ProposalStatus\n): boolean {\n return VALID_TRANSITIONS[from].includes(to);\n}\n\nexport function getValidTransitions(status: ProposalStatus): ProposalStatus[] {\n return [...VALID_TRANSITIONS[status]];\n}\n\nexport function transitionCreatesDecisionRecord(\n from: ProposalStatus,\n to: ProposalStatus\n): boolean {\n return (\n (from === \"submitted\" && to === \"rejected\") ||\n (from === \"evaluating\" && to === \"approved\") ||\n (from === \"evaluating\" && to === \"rejected\")\n );\n}\n","import { isExecutionStageStatus } from \"../state-machine.js\";\nimport type {\n ActorAuthorityBinding,\n ActorId,\n BranchId,\n DecisionId,\n DecisionRecord,\n GovernanceStore,\n Proposal,\n ProposalId,\n} from \"../types.js\";\n\nfunction cloneValue<T>(value: T): T {\n return structuredClone(value);\n}\n\ntype InMemoryGovernanceStoreState = {\n proposals: Map<ProposalId, Proposal>;\n decisions: Map<DecisionId, DecisionRecord>;\n actorBindings: Map<ActorId, ActorAuthorityBinding>;\n};\n\nexport class InMemoryGovernanceStore implements GovernanceStore {\n private readonly proposals = new Map<ProposalId, Proposal>();\n private readonly decisions = new Map<DecisionId, DecisionRecord>();\n private readonly actorBindings = new Map<ActorId, ActorAuthorityBinding>();\n\n async putProposal(proposal: Proposal): Promise<void> {\n this.proposals.set(proposal.proposalId, cloneValue(proposal));\n }\n\n async getProposal(proposalId: ProposalId): Promise<Proposal | null> {\n return cloneValue(this.proposals.get(proposalId) ?? null);\n }\n\n async getProposalsByBranch(branchId: BranchId): Promise<readonly Proposal[]> {\n return [...this.proposals.values()]\n .filter((proposal) => proposal.branchId === branchId)\n .sort((left, right) => {\n if (left.submittedAt !== right.submittedAt) {\n return left.submittedAt - right.submittedAt;\n }\n return left.proposalId.localeCompare(right.proposalId);\n })\n .map((proposal) => cloneValue(proposal));\n }\n\n async getExecutionStageProposal(branchId: BranchId): Promise<Proposal | null> {\n const matches = (await this.getProposalsByBranch(branchId)).filter((proposal) =>\n isExecutionStageStatus(proposal.status)\n );\n if (matches.length > 1) {\n throw new Error(\n `GOV-STORE-4 violation: multiple execution-stage proposals found for branch ${branchId}`\n );\n }\n return matches[0] ?? null;\n }\n\n async putDecisionRecord(record: DecisionRecord): Promise<void> {\n this.decisions.set(record.decisionId, cloneValue(record));\n }\n\n async getDecisionRecord(decisionId: DecisionId): Promise<DecisionRecord | null> {\n return cloneValue(this.decisions.get(decisionId) ?? null);\n }\n\n async putActorBinding(binding: ActorAuthorityBinding): Promise<void> {\n this.actorBindings.set(binding.actorId, cloneValue(binding));\n }\n\n async getActorBinding(actorId: ActorId): Promise<ActorAuthorityBinding | null> {\n return cloneValue(this.actorBindings.get(actorId) ?? null);\n }\n\n async getActorBindings(): Promise<readonly ActorAuthorityBinding[]> {\n return [...this.actorBindings.values()]\n .sort((left, right) => left.actorId.localeCompare(right.actorId))\n .map((binding) => cloneValue(binding));\n }\n\n snapshotState(): InMemoryGovernanceStoreState {\n return {\n proposals: cloneValue(this.proposals),\n decisions: cloneValue(this.decisions),\n actorBindings: cloneValue(this.actorBindings),\n };\n }\n\n restoreState(state: InMemoryGovernanceStoreState): void {\n this.proposals.clear();\n for (const [proposalId, proposal] of state.proposals) {\n this.proposals.set(proposalId, cloneValue(proposal));\n }\n\n this.decisions.clear();\n for (const [decisionId, record] of state.decisions) {\n this.decisions.set(decisionId, cloneValue(record));\n }\n\n this.actorBindings.clear();\n for (const [actorId, binding] of state.actorBindings) {\n this.actorBindings.set(actorId, cloneValue(binding));\n }\n }\n}\n\nexport function createInMemoryGovernanceStore(): InMemoryGovernanceStore {\n return new InMemoryGovernanceStore();\n}\n","import type { BranchInfo, LineageService, PreparedLineageCommit, World, WorldId } from \"@manifesto-ai/lineage\";\nimport {\n getValidTransitions,\n isExecutionStageStatus,\n isIngressStatus,\n isValidTransition,\n transitionCreatesDecisionRecord,\n} from \"../state-machine.js\";\nimport {\n createDecisionId,\n createProposalId,\n type AuthorityResponse,\n type BranchId,\n type CreateProposalInput,\n type DecisionRecord,\n type GovernanceService,\n type GovernanceStore,\n type ExecutionCompletedEvent,\n type ExecutionFailedEvent,\n type PreparedAuthorityResult,\n type PrepareAuthorityResultOptions,\n type PreparedGovernanceCommit,\n type Proposal,\n type ProposalDecidedEvent,\n type ProposalEvaluatingEvent,\n type ProposalId,\n type ProposalSubmittedEvent,\n type ProposalSupersededEvent,\n type WorldCreatedEvent,\n type WorldForkedEvent,\n type Snapshot,\n type SupersedeReason,\n type ErrorInfo,\n} from \"../types.js\";\n\nfunction freeze<T>(value: T): T {\n return Object.freeze(value);\n}\n\nexport interface GovernanceServiceOptions {\n readonly lineageService?: Pick<LineageService, \"getBranch\">;\n}\n\nexport class DefaultGovernanceService implements GovernanceService {\n public constructor(\n private readonly store: GovernanceStore,\n private readonly options: GovernanceServiceOptions = {}\n ) {}\n\n createProposal(input: CreateProposalInput): Proposal {\n return freeze({\n proposalId: input.proposalId ?? createProposalId(),\n baseWorld: input.baseWorld,\n branchId: input.branchId,\n actorId: input.actorId,\n authorityId: input.authorityId,\n intent: freeze({ ...input.intent }),\n status: \"submitted\" as const,\n executionKey: input.executionKey,\n submittedAt: input.submittedAt,\n epoch: input.epoch,\n });\n }\n\n async prepareAuthorityResult(\n proposal: Proposal,\n response: Extract<AuthorityResponse, { kind: \"approved\" | \"rejected\" }>,\n options: PrepareAuthorityResultOptions\n ): Promise<PreparedAuthorityResult> {\n if (proposal.status !== \"submitted\" && proposal.status !== \"evaluating\") {\n throw new Error(\n `GOV-TRANS-1 violation: authority result requires ingress proposal, received ${proposal.status}`\n );\n }\n\n const branchInfo = await this.resolveBranchInfo(proposal.branchId);\n const currentEpoch = options.currentEpoch ?? branchInfo?.epoch ?? proposal.epoch;\n const currentHead = options.currentBranchHead ?? branchInfo?.head ?? proposal.baseWorld;\n\n if (this.shouldDiscardAuthorityResult(proposal, currentEpoch)) {\n return {\n proposal: this.prepareSupersede(proposal, \"head_advance\"),\n discarded: true,\n };\n }\n\n if (response.kind === \"approved\") {\n await this.assertBranchGateAvailable(proposal);\n if (currentHead !== proposal.baseWorld) {\n return {\n proposal: this.prepareSupersede(proposal, \"head_advance\"),\n discarded: true,\n };\n }\n\n const decisionRecord = freeze({\n decisionId: options.decisionId ?? createDecisionId(),\n proposalId: proposal.proposalId,\n authorityId: proposal.authorityId,\n decision: freeze({ kind: \"approved\" as const }),\n decidedAt: options.decidedAt,\n });\n\n return {\n proposal: this.transitionProposal(proposal, \"approved\", {\n decisionId: decisionRecord.decisionId,\n decidedAt: decisionRecord.decidedAt,\n approvedScope: response.approvedScope,\n }),\n decisionRecord,\n discarded: false,\n };\n }\n\n const decisionRecord = freeze({\n decisionId: options.decisionId ?? createDecisionId(),\n proposalId: proposal.proposalId,\n authorityId: proposal.authorityId,\n decision: freeze({\n kind: \"rejected\" as const,\n ...(response.reason ? { reason: response.reason } : {}),\n }),\n decidedAt: options.decidedAt,\n });\n\n return {\n proposal: this.transitionProposal(proposal, \"rejected\", {\n decisionId: decisionRecord.decisionId,\n decidedAt: decisionRecord.decidedAt,\n }),\n decisionRecord,\n discarded: false,\n };\n }\n\n prepareSupersede(proposal: Proposal, reason: SupersedeReason): Proposal {\n return this.transitionProposal(proposal, \"superseded\", {\n supersededReason: reason,\n });\n }\n\n async invalidateStaleIngress(\n branchId: string,\n currentEpoch?: number\n ): Promise<readonly Proposal[]> {\n const branchInfo = await this.resolveBranchInfo(branchId);\n const nextEpoch = currentEpoch ?? branchInfo?.epoch;\n if (nextEpoch == null) {\n throw new Error(`Cannot invalidate stale ingress without branch epoch for ${branchId}`);\n }\n\n return (await this.store\n .getProposalsByBranch(branchId))\n .filter((proposal) => isIngressStatus(proposal.status) && proposal.epoch < nextEpoch)\n .map((proposal) => this.prepareSupersede(proposal, \"head_advance\"));\n }\n\n shouldDiscardAuthorityResult(\n proposal: Proposal,\n currentEpoch: number\n ): boolean {\n return proposal.epoch < currentEpoch;\n }\n\n deriveOutcome(terminalSnapshot: Snapshot): \"completed\" | \"failed\" {\n if (terminalSnapshot.system.lastError != null) {\n return \"failed\";\n }\n if (terminalSnapshot.system.pendingRequirements.length > 0) {\n return \"failed\";\n }\n return \"completed\";\n }\n\n async finalize(\n executingProposal: Proposal,\n lineageCommit: PreparedLineageCommit,\n completedAt: number\n ): Promise<PreparedGovernanceCommit> {\n if (executingProposal.status !== \"executing\") {\n throw new Error(\n `GOV-SEAL-6 violation: finalize() requires executing proposal, received ${executingProposal.status}`\n );\n }\n if (!executingProposal.decisionId) {\n throw new Error(\"GOV-SEAL-6 violation: executing proposal is missing decisionId\");\n }\n\n const decisionRecord = await this.store.getDecisionRecord(executingProposal.decisionId);\n if (!decisionRecord) {\n throw new Error(\n `GOV-SEAL-6 violation: decision record ${executingProposal.decisionId} not found`\n );\n }\n\n const derivedOutcome = this.deriveOutcome(lineageCommit.terminalSnapshot);\n if (derivedOutcome !== lineageCommit.terminalStatus) {\n throw new Error(\n `GOV-SEAL-1 violation: deriveOutcome=${derivedOutcome} but lineageCommit.terminalStatus=${lineageCommit.terminalStatus}`\n );\n }\n\n const proposal = this.transitionProposal(executingProposal, derivedOutcome, {\n resultWorld: lineageCommit.worldId,\n completedAt,\n });\n\n return freeze({\n proposal,\n decisionRecord,\n });\n }\n\n createProposalSubmittedEvent(\n proposal: Proposal,\n timestamp = Date.now()\n ): ProposalSubmittedEvent {\n return freeze({\n type: \"proposal:submitted\",\n timestamp,\n proposalId: proposal.proposalId,\n actorId: proposal.actorId,\n baseWorld: proposal.baseWorld,\n branchId: proposal.branchId,\n intent: freeze({\n type: proposal.intent.type,\n intentId: proposal.intent.intentId,\n ...(proposal.intent.input !== undefined ? { input: proposal.intent.input } : {}),\n }),\n executionKey: proposal.executionKey,\n epoch: proposal.epoch,\n });\n }\n\n createProposalEvaluatingEvent(\n proposal: Proposal,\n timestamp = Date.now()\n ): ProposalEvaluatingEvent {\n return freeze({\n type: \"proposal:evaluating\",\n timestamp,\n proposalId: proposal.proposalId,\n });\n }\n\n createProposalDecidedEvent(\n proposal: Proposal,\n decisionRecord: DecisionRecord,\n timestamp = Date.now()\n ): ProposalDecidedEvent {\n return freeze({\n type: \"proposal:decided\",\n timestamp,\n proposalId: proposal.proposalId,\n decisionId: decisionRecord.decisionId,\n decision: decisionRecord.decision.kind,\n ...(decisionRecord.decision.kind === \"rejected\" && decisionRecord.decision.reason\n ? { reason: decisionRecord.decision.reason }\n : {}),\n });\n }\n\n createProposalSupersededEvent(\n proposal: Proposal,\n currentEpoch: number,\n timestamp = Date.now()\n ): ProposalSupersededEvent {\n if (proposal.status !== \"superseded\" || !proposal.supersededReason) {\n throw new Error(\n \"GOV-EPOCH-5 violation: superseded event requires proposal.status='superseded' with supersededReason\"\n );\n }\n\n return freeze({\n type: \"proposal:superseded\",\n timestamp,\n proposalId: proposal.proposalId,\n currentEpoch,\n proposalEpoch: proposal.epoch,\n reason: proposal.supersededReason,\n });\n }\n\n createExecutionCompletedEvent(\n proposal: Proposal,\n timestamp = Date.now()\n ): ExecutionCompletedEvent {\n if (!proposal.resultWorld) {\n throw new Error(\n \"GOV-EVT-6 violation: execution:completed requires proposal.resultWorld\"\n );\n }\n\n return freeze({\n type: \"execution:completed\",\n timestamp,\n proposalId: proposal.proposalId,\n executionKey: proposal.executionKey,\n resultWorld: proposal.resultWorld,\n });\n }\n\n createExecutionFailedEvent(\n proposal: Proposal,\n error: ErrorInfo,\n timestamp = Date.now()\n ): ExecutionFailedEvent {\n if (!proposal.resultWorld) {\n throw new Error(\n \"GOV-EVT-7 violation: execution:failed requires proposal.resultWorld\"\n );\n }\n\n return freeze({\n type: \"execution:failed\",\n timestamp,\n proposalId: proposal.proposalId,\n executionKey: proposal.executionKey,\n resultWorld: proposal.resultWorld,\n error: freeze({\n summary: error.summary,\n ...(error.currentError !== undefined ? { currentError: error.currentError } : {}),\n ...(error.pendingRequirements !== undefined\n ? { pendingRequirements: error.pendingRequirements }\n : {}),\n }),\n });\n }\n\n createWorldCreatedEvent(\n world: World,\n proposalId: ProposalId,\n from: WorldId,\n outcome: \"completed\" | \"failed\",\n timestamp = Date.now()\n ): WorldCreatedEvent {\n return freeze({\n type: \"world:created\",\n timestamp,\n world,\n from,\n proposalId,\n outcome,\n });\n }\n\n createWorldForkedEvent(\n branchId: BranchId,\n forkPoint: WorldId,\n timestamp = Date.now()\n ): WorldForkedEvent {\n return freeze({\n type: \"world:forked\",\n timestamp,\n branchId,\n forkPoint,\n });\n }\n\n private async resolveBranchInfo(branchId: string): Promise<BranchInfo | null> {\n return this.options.lineageService?.getBranch(branchId) ?? null;\n }\n\n private async assertBranchGateAvailable(proposal: Proposal): Promise<void> {\n const occupant = await this.store.getExecutionStageProposal(proposal.branchId);\n if (occupant && occupant.proposalId !== proposal.proposalId) {\n throw new Error(\n `GOV-BRANCH-GATE-1 violation: branch ${proposal.branchId} already occupied by ${occupant.proposalId}`\n );\n }\n }\n\n private transitionProposal(\n proposal: Proposal,\n to: Proposal[\"status\"],\n updates: {\n decisionId?: string;\n decidedAt?: number;\n completedAt?: number;\n resultWorld?: WorldId;\n supersededReason?: SupersedeReason;\n approvedScope?: unknown;\n } = {}\n ): Proposal {\n if (!isValidTransition(proposal.status, to)) {\n throw new Error(\n `GOV-TRANS-1 violation: invalid transition ${proposal.status} -> ${to}; valid targets are ${getValidTransitions(proposal.status).join(\", \")}`\n );\n }\n\n if (to === \"superseded\") {\n if (updates.decisionId != null) {\n throw new Error(\"GOV-TRANS-3 violation: superseded transition must not create DecisionRecord\");\n }\n if (!updates.supersededReason) {\n throw new Error(\"GOV-STAGE-7 violation: superseded proposal must record supersededReason\");\n }\n }\n\n if (\n transitionCreatesDecisionRecord(proposal.status, to) &&\n updates.decisionId == null\n ) {\n throw new Error(\n `GOV-TRANS-2 violation: transition ${proposal.status} -> ${to} requires decisionId`\n );\n }\n\n if (to !== \"superseded\" && updates.supersededReason != null) {\n throw new Error(\"GOV-TRANS-4 violation: supersededReason is only valid on superseded proposals\");\n }\n\n if (isExecutionStageStatus(proposal.status) && to === \"superseded\") {\n throw new Error(\"GOV-STAGE-4 violation: execution-stage proposals must not be superseded\");\n }\n\n return freeze({\n ...proposal,\n status: to,\n ...(updates.decisionId !== undefined ? { decisionId: updates.decisionId } : {}),\n ...(updates.decidedAt !== undefined ? { decidedAt: updates.decidedAt } : {}),\n ...(updates.completedAt !== undefined ? { completedAt: updates.completedAt } : {}),\n ...(updates.resultWorld !== undefined ? { resultWorld: updates.resultWorld } : {}),\n ...(updates.approvedScope !== undefined ? { approvedScope: updates.approvedScope } : {}),\n ...(updates.supersededReason !== undefined\n ? { supersededReason: updates.supersededReason }\n : {}),\n ...(to !== \"superseded\" ? { supersededReason: undefined } : {}),\n });\n }\n}\n\nexport function createGovernanceService(\n store: GovernanceStore,\n options?: GovernanceServiceOptions\n): DefaultGovernanceService {\n return new DefaultGovernanceService(store, options);\n}\n","import type {\n ErrorInfo,\n PreparedGovernanceCommit,\n PreparedLineageCommit,\n} from \"./types.js\";\nimport { createNoopGovernanceEventSink, type GovernanceEventDispatcher, type GovernanceEventSink, type GovernanceService } from \"./types.js\";\n\nexport interface CreateGovernanceEventDispatcherOptions {\n readonly service: Pick<\n GovernanceService,\n | \"createExecutionCompletedEvent\"\n | \"createExecutionFailedEvent\"\n | \"createWorldCreatedEvent\"\n | \"createWorldForkedEvent\"\n >;\n readonly sink?: GovernanceEventSink;\n readonly now?: () => number;\n}\n\nexport function createGovernanceEventDispatcher(\n options: CreateGovernanceEventDispatcherOptions\n): GovernanceEventDispatcher {\n const sink = options.sink ?? createNoopGovernanceEventSink();\n const now = options.now ?? Date.now;\n\n return {\n emitSealCompleted(\n governanceCommit: PreparedGovernanceCommit,\n lineageCommit: PreparedLineageCommit\n ): void {\n const timestamp = now();\n const outcome =\n governanceCommit.proposal.status === \"completed\" ? \"completed\" : \"failed\";\n\n sink.emit(\n options.service.createWorldCreatedEvent(\n lineageCommit.world,\n governanceCommit.proposal.proposalId,\n deriveWorldCreatedFrom(governanceCommit, lineageCommit),\n outcome,\n timestamp\n )\n );\n\n if (isTrueForkCommit(lineageCommit)) {\n sink.emit(\n options.service.createWorldForkedEvent(\n governanceCommit.proposal.branchId,\n lineageCommit.edge.from,\n timestamp\n )\n );\n }\n\n if (outcome === \"completed\") {\n sink.emit(options.service.createExecutionCompletedEvent(governanceCommit.proposal, timestamp));\n return;\n }\n\n sink.emit(\n options.service.createExecutionFailedEvent(\n governanceCommit.proposal,\n deriveExecutionFailure(lineageCommit),\n timestamp\n )\n );\n },\n };\n}\n\nfunction deriveWorldCreatedFrom(\n governanceCommit: PreparedGovernanceCommit,\n lineageCommit: PreparedLineageCommit\n): string {\n if (lineageCommit.kind === \"next\") {\n return lineageCommit.edge.from;\n }\n\n return lineageCommit.world.parentWorldId ?? governanceCommit.proposal.baseWorld;\n}\n\nfunction deriveExecutionFailure(lineageCommit: PreparedLineageCommit): ErrorInfo {\n const currentError = lineageCommit.terminalSnapshot.system.lastError ?? undefined;\n const pendingRequirements = lineageCommit.terminalSnapshot.system.pendingRequirements.map(\n (requirement) => requirement.id\n );\n\n return {\n summary: summarizeFailure(currentError ? 1 : 0, pendingRequirements.length),\n ...(currentError ? { currentError } : {}),\n ...(pendingRequirements.length > 0 ? { pendingRequirements } : {}),\n };\n}\n\nfunction isTrueForkCommit(\n lineageCommit: PreparedLineageCommit\n): lineageCommit is Extract<PreparedLineageCommit, { kind: \"next\" }> & {\n readonly forkCreated: true;\n} {\n return lineageCommit.kind === \"next\"\n && \"forkCreated\" in lineageCommit\n && lineageCommit.forkCreated === true;\n}\n\nfunction summarizeFailure(errorCount: number, pendingRequirementCount: number): string {\n if (errorCount > 0 && pendingRequirementCount > 0) {\n return `Execution failed with ${errorCount} error(s) and ${pendingRequirementCount} pending requirement(s)`;\n }\n if (errorCount > 0) {\n return `Execution failed with ${errorCount} error(s)`;\n }\n if (pendingRequirementCount > 0) {\n return `Execution failed with ${pendingRequirementCount} pending requirement(s)`;\n }\n return \"Execution failed\";\n}\n","import type { ActorAuthorityBinding, AuthorityResponse, Proposal } from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\n\nexport class AutoApproveHandler implements AuthorityHandler {\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"auto_approve\") {\n throw new Error(\n `AutoApproveHandler received non-auto_approve policy: ${binding.policy.mode}`\n );\n }\n\n return {\n kind: \"approved\",\n approvedScope: proposal.intent.scopeProposal ?? null,\n };\n }\n}\n\nexport function createAutoApproveHandler(): AutoApproveHandler {\n return new AutoApproveHandler();\n}\n","import type {\n ActorAuthorityBinding,\n AuthorityResponse,\n IntentScope,\n PolicyCondition,\n PolicyRule,\n Proposal,\n} from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\n\nexport type CustomConditionEvaluator = (\n proposal: Proposal,\n binding: ActorAuthorityBinding\n) => boolean;\n\nexport class PolicyRulesHandler implements AuthorityHandler {\n private readonly customEvaluators = new Map<string, CustomConditionEvaluator>();\n\n registerCustomEvaluator(\n name: string,\n evaluator: CustomConditionEvaluator\n ): void {\n this.customEvaluators.set(name, evaluator);\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"policy_rules\") {\n throw new Error(\n `PolicyRulesHandler received non-policy_rules policy: ${binding.policy.mode}`\n );\n }\n\n const approvedScope = proposal.intent.scopeProposal ?? null;\n for (const rule of binding.policy.rules) {\n if (this.evaluateCondition(rule.condition, proposal, binding)) {\n return this.applyDecision(rule, approvedScope);\n }\n }\n\n return this.applyDecision(\n {\n decision: binding.policy.defaultDecision,\n reason: \"Default policy decision\",\n },\n approvedScope\n );\n }\n\n private evaluateCondition(\n condition: PolicyCondition,\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): boolean {\n switch (condition.kind) {\n case \"intent_type\":\n return condition.types.includes(proposal.intent.type);\n case \"scope_pattern\":\n return this.matchPattern(proposal.intent.type, condition.pattern);\n case \"custom\": {\n const evaluator = this.customEvaluators.get(condition.evaluator);\n return evaluator ? evaluator(proposal, binding) : false;\n }\n }\n }\n\n private matchPattern(value: string, pattern: string): boolean {\n const regex = new RegExp(\n `^${pattern.replace(/\\*/g, \".*\").replace(/\\?/g, \".\")}$`\n );\n return regex.test(value);\n }\n\n private applyDecision(\n rule: Pick<PolicyRule, \"decision\" | \"reason\">,\n approvedScope: IntentScope | null\n ): AuthorityResponse {\n switch (rule.decision) {\n case \"approve\":\n return { kind: \"approved\", approvedScope };\n case \"reject\":\n return { kind: \"rejected\", reason: rule.reason ?? \"Policy rejection\" };\n case \"escalate\":\n return {\n kind: \"rejected\",\n reason: rule.reason ?? \"Policy requires escalation (not implemented)\",\n };\n }\n }\n}\n\nexport function createPolicyRulesHandler(): PolicyRulesHandler {\n return new PolicyRulesHandler();\n}\n","import type {\n ActorAuthorityBinding,\n AuthorityResponse,\n IntentScope,\n Proposal,\n} from \"../types.js\";\nimport type { AuthorityHandler, HITLPendingState } from \"./types.js\";\n\nexport type HITLNotificationCallback = (\n proposalId: string,\n proposal: Proposal,\n binding: ActorAuthorityBinding\n) => void;\n\nexport class HITLHandler implements AuthorityHandler {\n private readonly pendingDecisions = new Map<string, HITLPendingState>();\n private readonly notificationCallbacks = new Set<HITLNotificationCallback>();\n\n onPendingDecision(callback: HITLNotificationCallback): () => void {\n this.notificationCallbacks.add(callback);\n return () => {\n this.notificationCallbacks.delete(callback);\n };\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"hitl\") {\n throw new Error(`HITLHandler received non-hitl policy: ${binding.policy.mode}`);\n }\n const policy = binding.policy;\n\n const proposalId = proposal.proposalId;\n if (this.pendingDecisions.has(proposalId)) {\n throw new Error(`Proposal ${proposalId} already has a pending HITL decision`);\n }\n\n return new Promise((resolve, reject) => {\n const state: HITLPendingState = {\n proposalId,\n proposal,\n resolve,\n reject,\n };\n\n if (policy.timeout != null) {\n state.timeoutId = setTimeout(() => {\n this.pendingDecisions.delete(proposalId);\n if (policy.onTimeout === \"approve\") {\n resolve({\n kind: \"approved\",\n approvedScope: proposal.intent.scopeProposal ?? null,\n });\n return;\n }\n reject(\n new Error(\n `HITL decision timed out after ${policy.timeout}ms for proposal '${proposalId}'`\n )\n );\n }, policy.timeout);\n }\n\n this.pendingDecisions.set(proposalId, state);\n for (const callback of this.notificationCallbacks) {\n callback(proposalId, proposal, binding);\n }\n });\n }\n\n submitDecision(\n proposalId: string,\n decision: \"approved\" | \"rejected\",\n reasoning?: string,\n approvedScope?: IntentScope | null\n ): void {\n const state = this.pendingDecisions.get(proposalId);\n if (!state) {\n throw new Error(`No pending HITL decision for proposal ${proposalId}`);\n }\n\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n this.pendingDecisions.delete(proposalId);\n\n if (decision === \"approved\") {\n state.resolve({\n kind: \"approved\",\n approvedScope:\n approvedScope !== undefined\n ? approvedScope\n : state.proposal?.intent.scopeProposal ?? null,\n });\n return;\n }\n\n state.resolve({\n kind: \"rejected\",\n reason: reasoning ?? \"Human rejected\",\n });\n }\n\n isPending(proposalId: string): boolean {\n return this.pendingDecisions.has(proposalId);\n }\n\n getPendingIds(): string[] {\n return [...this.pendingDecisions.keys()];\n }\n\n clearAllPending(): void {\n for (const [proposalId, state] of this.pendingDecisions) {\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n state.reject(new Error(`HITL handler cleared pending proposal ${proposalId}`));\n }\n this.pendingDecisions.clear();\n }\n}\n\nexport function createHITLHandler(): HITLHandler {\n return new HITLHandler();\n}\n","import type {\n ActorAuthorityBinding,\n ActorRef,\n AuthorityResponse,\n Proposal,\n Vote,\n} from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\n\nexport type TribunalNotificationCallback = (\n proposalId: string,\n proposal: Proposal,\n members: readonly ActorRef[]\n) => void;\n\ninterface TribunalPendingState {\n proposalId: string;\n proposal: Proposal;\n binding: Extract<ActorAuthorityBinding, { policy: { mode: \"tribunal\" } }> | ActorAuthorityBinding;\n votes: Map<string, Vote>;\n resolve: (response: AuthorityResponse) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\nexport class TribunalHandler implements AuthorityHandler {\n private readonly pendingTribunals = new Map<string, TribunalPendingState>();\n private notificationCallback?: TribunalNotificationCallback;\n\n onPendingTribunal(callback: TribunalNotificationCallback): void {\n this.notificationCallback = callback;\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"tribunal\") {\n throw new Error(\n `TribunalHandler received non-tribunal policy: ${binding.policy.mode}`\n );\n }\n const policy = binding.policy;\n\n const proposalId = proposal.proposalId;\n if (this.pendingTribunals.has(proposalId)) {\n throw new Error(`Proposal ${proposalId} already has a pending tribunal`);\n }\n\n return new Promise((resolve, reject) => {\n const state: TribunalPendingState = {\n proposalId,\n proposal,\n binding,\n votes: new Map(),\n resolve,\n reject,\n };\n\n if (policy.timeout != null) {\n state.timeoutId = setTimeout(() => {\n this.pendingTribunals.delete(proposalId);\n if (policy.onTimeout === \"approve\") {\n resolve({\n kind: \"approved\",\n approvedScope: proposal.intent.scopeProposal ?? null,\n });\n return;\n }\n reject(\n new Error(\n `Tribunal decision timed out after ${policy.timeout}ms for proposal '${proposalId}'`\n )\n );\n }, policy.timeout);\n }\n\n this.pendingTribunals.set(proposalId, state);\n this.notificationCallback?.(\n proposalId,\n proposal,\n policy.members\n );\n });\n }\n\n submitVote(\n proposalId: string,\n voter: ActorRef,\n decision: \"approve\" | \"reject\" | \"abstain\",\n reasoning?: string\n ): void {\n const state = this.pendingTribunals.get(proposalId);\n if (!state) {\n throw new Error(`No pending tribunal for proposal ${proposalId}`);\n }\n\n if (state.votes.has(voter.actorId)) {\n throw new Error(`Actor ${voter.actorId} already voted on proposal ${proposalId}`);\n }\n\n const member = state.binding.policy.mode === \"tribunal\"\n ? state.binding.policy.members.some(({ actorId }) => actorId === voter.actorId)\n : false;\n if (!member) {\n throw new Error(`Actor ${voter.actorId} is not a tribunal member for proposal ${proposalId}`);\n }\n\n state.votes.set(voter.actorId, {\n voter,\n decision,\n reasoning,\n votedAt: Date.now(),\n });\n this.checkQuorum(state);\n }\n\n isPending(proposalId: string): boolean {\n return this.pendingTribunals.has(proposalId);\n }\n\n getVotes(proposalId: string): Vote[] {\n const state = this.pendingTribunals.get(proposalId);\n return state ? [...state.votes.values()] : [];\n }\n\n getPendingIds(): string[] {\n return [...this.pendingTribunals.keys()];\n }\n\n clearAllPending(): void {\n for (const [proposalId, state] of this.pendingTribunals) {\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n state.reject(new Error(`Tribunal handler cleared pending proposal ${proposalId}`));\n }\n this.pendingTribunals.clear();\n }\n\n private checkQuorum(state: TribunalPendingState): void {\n const policy = state.binding.policy;\n if (policy.mode !== \"tribunal\") {\n return;\n }\n\n const memberCount = policy.members.length;\n let approveCount = 0;\n let rejectCount = 0;\n for (const vote of state.votes.values()) {\n if (vote.decision === \"approve\") {\n approveCount++;\n } else if (vote.decision === \"reject\") {\n rejectCount++;\n }\n }\n\n let isComplete = false;\n let isApproved = false;\n switch (policy.quorum.kind) {\n case \"unanimous\":\n if (approveCount === memberCount) {\n isComplete = true;\n isApproved = true;\n } else if (rejectCount > 0 || state.votes.size === memberCount) {\n isComplete = true;\n }\n break;\n case \"majority\": {\n const majorityNeeded = Math.floor(memberCount / 2) + 1;\n if (approveCount >= majorityNeeded) {\n isComplete = true;\n isApproved = true;\n } else if (rejectCount >= majorityNeeded) {\n isComplete = true;\n } else if (state.votes.size === memberCount) {\n isComplete = true;\n isApproved = approveCount > rejectCount;\n }\n break;\n }\n case \"threshold\":\n if (approveCount >= policy.quorum.count) {\n isComplete = true;\n isApproved = true;\n } else if (rejectCount > memberCount - policy.quorum.count) {\n isComplete = true;\n } else if (state.votes.size === memberCount) {\n isComplete = true;\n isApproved = approveCount >= policy.quorum.count;\n }\n break;\n }\n\n if (!isComplete) {\n return;\n }\n\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n this.pendingTribunals.delete(state.proposalId);\n\n if (isApproved) {\n state.resolve({\n kind: \"approved\",\n approvedScope: state.proposal.intent.scopeProposal ?? null,\n });\n return;\n }\n\n state.resolve({\n kind: \"rejected\",\n reason: `Tribunal rejected (${approveCount}/${memberCount} approved)`,\n });\n }\n}\n\nexport function createTribunalHandler(): TribunalHandler {\n return new TribunalHandler();\n}\n","import type {\n ActorAuthorityBinding,\n AuthorityKind,\n AuthorityResponse,\n IntentScope,\n Proposal,\n} from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\nimport { AutoApproveHandler, createAutoApproveHandler } from \"./auto.js\";\nimport { HITLHandler, createHITLHandler } from \"./hitl.js\";\nimport { PolicyRulesHandler, createPolicyRulesHandler } from \"./policy.js\";\nimport { TribunalHandler, createTribunalHandler } from \"./tribunal.js\";\n\nconst POLICY_MODE_TO_KIND: Record<string, AuthorityKind> = {\n auto_approve: \"auto\",\n hitl: \"human\",\n policy_rules: \"policy\",\n tribunal: \"tribunal\",\n};\n\nexport class AuthorityEvaluator {\n private readonly handlers = new Map<string, AuthorityHandler>();\n private readonly autoHandler: AutoApproveHandler;\n private readonly policyHandler: PolicyRulesHandler;\n private readonly hitlHandler: HITLHandler;\n private readonly tribunalHandler: TribunalHandler;\n\n constructor() {\n this.autoHandler = createAutoApproveHandler();\n this.policyHandler = createPolicyRulesHandler();\n this.hitlHandler = createHITLHandler();\n this.tribunalHandler = createTribunalHandler();\n\n this.handlers.set(\"auto_approve\", this.autoHandler);\n this.handlers.set(\"hitl\", this.hitlHandler);\n this.handlers.set(\"policy_rules\", this.policyHandler);\n this.handlers.set(\"tribunal\", this.tribunalHandler);\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n const handler = this.handlers.get(binding.policy.mode);\n if (!handler) {\n throw new Error(`Unknown policy mode: ${binding.policy.mode}`);\n }\n return handler.evaluate(proposal, binding);\n }\n\n registerHandler(policyMode: string, handler: AuthorityHandler): void {\n this.handlers.set(policyMode, handler);\n }\n\n getAutoHandler(): AutoApproveHandler {\n return this.autoHandler;\n }\n\n getPolicyHandler(): PolicyRulesHandler {\n return this.policyHandler;\n }\n\n getHITLHandler(): HITLHandler {\n return this.hitlHandler;\n }\n\n getTribunalHandler(): TribunalHandler {\n return this.tribunalHandler;\n }\n\n getAuthorityKind(policyMode: string): AuthorityKind | null {\n return POLICY_MODE_TO_KIND[policyMode] ?? null;\n }\n\n submitHITLDecision(\n proposalId: string,\n decision: \"approved\" | \"rejected\",\n reasoning?: string,\n approvedScope?: IntentScope | null\n ): void {\n this.hitlHandler.submitDecision(proposalId, decision, reasoning, approvedScope);\n }\n\n submitTribunalVote(\n proposalId: string,\n voter: {\n actorId: string;\n kind: \"human\" | \"agent\" | \"system\";\n name?: string;\n },\n decision: \"approve\" | \"reject\" | \"abstain\",\n reasoning?: string\n ): void {\n this.tribunalHandler.submitVote(proposalId, voter, decision, reasoning);\n }\n\n hasPendingHITL(): boolean {\n return this.hitlHandler.getPendingIds().length > 0;\n }\n\n hasPendingTribunal(): boolean {\n return this.tribunalHandler.getPendingIds().length > 0;\n }\n\n getPendingHITLIds(): string[] {\n return this.hitlHandler.getPendingIds();\n }\n\n getPendingTribunalIds(): string[] {\n return this.tribunalHandler.getPendingIds();\n }\n\n clearAllPending(): void {\n this.hitlHandler.clearAllPending();\n this.tribunalHandler.clearAllPending();\n }\n}\n\nexport function createAuthorityEvaluator(): AuthorityEvaluator {\n return new AuthorityEvaluator();\n}\n"],"mappings":"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","names":["decisionRecord"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/intent-instance.ts","../src/state-machine.ts","../src/store/in-memory-governance-store.ts","../src/service/governance-service.ts","../src/event-dispatcher.ts","../src/authority/auto.ts","../src/authority/policy.ts","../src/authority/hitl.ts","../src/authority/tribunal.ts","../src/authority/evaluator.ts","../src/with-governance.ts"],"sourcesContent":["import type { ErrorValue, Intent as HostIntent, Snapshot } from \"@manifesto-ai/core\";\nimport type { ArtifactRef, BranchId, PreparedLineageCommit, World, WorldId } from \"@manifesto-ai/lineage\";\n\nexport type { Snapshot } from \"@manifesto-ai/core\";\nexport type {\n ArtifactRef,\n BranchId,\n PreparedLineageCommit,\n World,\n WorldId,\n} from \"@manifesto-ai/lineage\";\n\nexport type ProposalId = string;\nexport type DecisionId = string;\nexport type ActorId = string;\nexport type AuthorityId = string;\nexport type ExecutionKey = string;\n\nexport type ActorKind = \"human\" | \"agent\" | \"system\";\nexport type AuthorityKind = \"auto\" | \"human\" | \"policy\" | \"tribunal\";\nexport type ProposalStatus =\n | \"submitted\"\n | \"evaluating\"\n | \"approved\"\n | \"rejected\"\n | \"executing\"\n | \"completed\"\n | \"failed\"\n | \"superseded\";\n\nexport type SupersedeReason =\n | \"branch_switch\"\n | \"head_advance\"\n | \"manual_cancel\";\n\nexport interface ActorRef {\n readonly actorId: ActorId;\n readonly kind: ActorKind;\n readonly name?: string;\n readonly meta?: Record<string, unknown>;\n}\n\nexport interface AuthorityRef {\n readonly authorityId: AuthorityId;\n readonly kind: AuthorityKind;\n readonly name?: string;\n}\n\nexport interface IntentScope {\n readonly allowedPaths?: readonly string[];\n readonly note?: string;\n}\n\nexport type SourceKind = \"ui\" | \"api\" | \"agent\" | \"system\";\n\nexport interface SourceRef {\n readonly kind: SourceKind;\n readonly eventId: string;\n}\n\nexport interface IntentOrigin {\n readonly projectionId: string;\n readonly source: SourceRef;\n readonly actor: ActorRef;\n readonly note?: string;\n}\n\nexport interface IntentBody {\n readonly type: string;\n readonly input?: unknown;\n readonly scopeProposal?: IntentScope;\n}\n\nexport interface IntentInstance {\n readonly body: IntentBody;\n readonly intentId: string;\n readonly intentKey: string;\n readonly meta: {\n readonly origin: IntentOrigin;\n };\n}\n\nexport interface Intent {\n readonly type: string;\n readonly intentId: string;\n readonly input?: unknown;\n readonly scopeProposal?: IntentScope;\n}\n\nexport interface ExecutionKeyContext {\n readonly proposalId: ProposalId;\n readonly actorId: ActorId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly attempt: number;\n}\n\nexport type ExecutionKeyPolicy = (context: ExecutionKeyContext) => ExecutionKey;\n\nexport interface Proposal {\n readonly proposalId: ProposalId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly actorId: ActorId;\n readonly authorityId: AuthorityId;\n readonly intent: Intent;\n readonly status: ProposalStatus;\n readonly executionKey: ExecutionKey;\n readonly submittedAt: number;\n readonly decidedAt?: number;\n readonly completedAt?: number;\n readonly decisionId?: DecisionId;\n readonly epoch: number;\n readonly resultWorld?: WorldId;\n readonly supersededReason?: SupersedeReason;\n readonly approvedScope?: unknown;\n}\n\nexport type FinalDecision =\n | { readonly kind: \"approved\" }\n | { readonly kind: \"rejected\"; readonly reason?: string };\n\nexport interface DecisionRecord {\n readonly decisionId: DecisionId;\n readonly proposalId: ProposalId;\n readonly authorityId: AuthorityId;\n readonly decision: FinalDecision;\n readonly decidedAt: number;\n}\n\nexport type AuthorityPolicy =\n | { readonly mode: \"auto_approve\"; readonly reason?: string }\n | {\n readonly mode: \"hitl\";\n readonly delegate: ActorRef;\n readonly timeout?: number;\n readonly onTimeout?: \"approve\" | \"reject\";\n }\n | {\n readonly mode: \"policy_rules\";\n readonly rules: readonly PolicyRule[];\n readonly defaultDecision: \"approve\" | \"reject\" | \"escalate\";\n readonly escalateTo?: AuthorityRef;\n }\n | {\n readonly mode: \"tribunal\";\n readonly members: readonly ActorRef[];\n readonly quorum: QuorumRule;\n readonly timeout?: number;\n readonly onTimeout?: \"approve\" | \"reject\";\n };\n\nexport interface ActorAuthorityBinding {\n readonly actorId: ActorId;\n readonly authorityId: AuthorityId;\n readonly policy: AuthorityPolicy;\n}\n\nexport type PolicyCondition =\n | { readonly kind: \"intent_type\"; readonly types: readonly string[] }\n | { readonly kind: \"scope_pattern\"; readonly pattern: string }\n | { readonly kind: \"custom\"; readonly evaluator: string };\n\nexport interface PolicyRule {\n readonly condition: PolicyCondition;\n readonly decision: \"approve\" | \"reject\" | \"escalate\";\n readonly reason?: string;\n}\n\nexport type QuorumRule =\n | { readonly kind: \"unanimous\" }\n | { readonly kind: \"majority\" }\n | { readonly kind: \"threshold\"; readonly count: number };\n\nexport type WaitingFor =\n | { readonly kind: \"human\"; readonly delegate: ActorRef }\n | { readonly kind: \"tribunal\"; readonly members: readonly ActorRef[] }\n | { readonly kind: \"timeout\"; readonly until: number };\n\nexport type AuthorityResponse =\n | { readonly kind: \"approved\"; readonly approvedScope: IntentScope | null }\n | { readonly kind: \"rejected\"; readonly reason?: string }\n | { readonly kind: \"pending\"; readonly waitingFor: WaitingFor };\n\nexport interface Vote {\n readonly voter: ActorRef;\n readonly decision: \"approve\" | \"reject\" | \"abstain\";\n readonly reasoning?: string;\n readonly votedAt: number;\n}\n\nexport type GovernanceEventType =\n | \"proposal:submitted\"\n | \"proposal:evaluating\"\n | \"proposal:decided\"\n | \"proposal:superseded\"\n | \"execution:completed\"\n | \"execution:failed\"\n | \"world:created\"\n | \"world:forked\";\n\nexport interface BaseGovernanceEvent<T extends GovernanceEventType> {\n readonly type: T;\n readonly timestamp: number;\n}\n\nexport interface ErrorInfo {\n readonly summary: string;\n readonly currentError?: ErrorValue;\n readonly pendingRequirements?: readonly string[];\n}\n\nexport interface ProposalSubmittedEvent\n extends BaseGovernanceEvent<\"proposal:submitted\"> {\n readonly proposalId: ProposalId;\n readonly actorId: ActorId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly intent: {\n readonly type: string;\n readonly intentId: string;\n readonly input?: unknown;\n };\n readonly executionKey: ExecutionKey;\n readonly epoch: number;\n}\n\nexport interface ProposalEvaluatingEvent\n extends BaseGovernanceEvent<\"proposal:evaluating\"> {\n readonly proposalId: ProposalId;\n}\n\nexport interface ProposalDecidedEvent\n extends BaseGovernanceEvent<\"proposal:decided\"> {\n readonly proposalId: ProposalId;\n readonly decisionId: DecisionId;\n readonly decision: \"approved\" | \"rejected\";\n readonly reason?: string;\n}\n\nexport interface ProposalSupersededEvent\n extends BaseGovernanceEvent<\"proposal:superseded\"> {\n readonly proposalId: ProposalId;\n readonly currentEpoch: number;\n readonly proposalEpoch: number;\n readonly reason: SupersedeReason;\n}\n\nexport interface ExecutionCompletedEvent\n extends BaseGovernanceEvent<\"execution:completed\"> {\n readonly proposalId: ProposalId;\n readonly executionKey: ExecutionKey;\n readonly resultWorld: WorldId;\n}\n\nexport interface ExecutionFailedEvent\n extends BaseGovernanceEvent<\"execution:failed\"> {\n readonly proposalId: ProposalId;\n readonly executionKey: ExecutionKey;\n readonly resultWorld: WorldId;\n readonly error: ErrorInfo;\n}\n\nexport interface WorldCreatedEvent\n extends BaseGovernanceEvent<\"world:created\"> {\n readonly world: World;\n readonly from: WorldId;\n readonly proposalId: ProposalId;\n readonly outcome: \"completed\" | \"failed\";\n}\n\nexport interface WorldForkedEvent\n extends BaseGovernanceEvent<\"world:forked\"> {\n readonly branchId: BranchId;\n readonly forkPoint: WorldId;\n}\n\nexport type GovernanceEvent =\n | ProposalSubmittedEvent\n | ProposalEvaluatingEvent\n | ProposalDecidedEvent\n | ProposalSupersededEvent\n | ExecutionCompletedEvent\n | ExecutionFailedEvent\n | WorldCreatedEvent\n | WorldForkedEvent;\n\nexport interface GovernanceEventSink {\n emit(event: GovernanceEvent): void;\n}\n\nexport interface GovernanceEventDispatcher {\n emitSealCompleted(\n governanceCommit: PreparedGovernanceCommit,\n lineageCommit: PreparedLineageCommit\n ): void;\n}\n\nexport interface PreparedGovernanceCommit {\n readonly proposal: Proposal;\n readonly decisionRecord: DecisionRecord;\n}\n\nexport interface GovernanceStore {\n putProposal(proposal: Proposal): Promise<void>;\n getProposal(proposalId: ProposalId): Promise<Proposal | null>;\n getProposalsByBranch(branchId: BranchId): Promise<readonly Proposal[]>;\n getExecutionStageProposal(branchId: BranchId): Promise<Proposal | null>;\n putDecisionRecord(record: DecisionRecord): Promise<void>;\n getDecisionRecord(decisionId: DecisionId): Promise<DecisionRecord | null>;\n putActorBinding(binding: ActorAuthorityBinding): Promise<void>;\n getActorBinding(actorId: ActorId): Promise<ActorAuthorityBinding | null>;\n getActorBindings(): Promise<readonly ActorAuthorityBinding[]>;\n}\n\nexport interface CreateProposalInput {\n readonly proposalId?: ProposalId;\n readonly baseWorld: WorldId;\n readonly branchId: BranchId;\n readonly actorId: ActorId;\n readonly authorityId: AuthorityId;\n readonly intent: Intent;\n readonly executionKey: ExecutionKey;\n readonly submittedAt: number;\n readonly epoch: number;\n}\n\nexport interface PrepareAuthorityResultOptions {\n readonly currentEpoch?: number;\n readonly currentBranchHead?: WorldId;\n readonly decisionId?: DecisionId;\n readonly decidedAt: number;\n}\n\nexport interface PreparedAuthorityResult {\n readonly proposal: Proposal;\n readonly decisionRecord?: DecisionRecord;\n readonly discarded: boolean;\n}\n\nexport interface GovernanceService {\n createProposal(input: CreateProposalInput): Proposal;\n beginEvaluating(proposal: Proposal): Proposal & { readonly status: \"evaluating\" };\n beginExecution(proposal: Proposal): Proposal & { readonly status: \"executing\" };\n failExecution(\n proposal: Proposal,\n completedAt: number,\n resultWorld?: WorldId\n ): Proposal & { readonly status: \"failed\" };\n prepareAuthorityResult(\n proposal: Proposal,\n response: Extract<AuthorityResponse, { kind: \"approved\" | \"rejected\" }>,\n options: PrepareAuthorityResultOptions\n ): Promise<PreparedAuthorityResult>;\n prepareSupersede(proposal: Proposal, reason: SupersedeReason): Proposal;\n invalidateStaleIngress(\n branchId: BranchId,\n currentEpoch?: number\n ): Promise<readonly Proposal[]>;\n shouldDiscardAuthorityResult(proposal: Proposal, currentEpoch: number): boolean;\n deriveOutcome(terminalSnapshot: Snapshot): \"completed\" | \"failed\";\n finalize(\n executingProposal: Proposal,\n lineageCommit: PreparedLineageCommit,\n completedAt: number\n ): Promise<PreparedGovernanceCommit>;\n createProposalSubmittedEvent(\n proposal: Proposal,\n timestamp?: number\n ): ProposalSubmittedEvent;\n createProposalEvaluatingEvent(\n proposal: Proposal,\n timestamp?: number\n ): ProposalEvaluatingEvent;\n createProposalDecidedEvent(\n proposal: Proposal,\n decisionRecord: DecisionRecord,\n timestamp?: number\n ): ProposalDecidedEvent;\n createProposalSupersededEvent(\n proposal: Proposal,\n currentEpoch: number,\n timestamp?: number\n ): ProposalSupersededEvent;\n createExecutionCompletedEvent(\n proposal: Proposal,\n timestamp?: number\n ): ExecutionCompletedEvent;\n createExecutionFailedEvent(\n proposal: Proposal,\n error: ErrorInfo,\n timestamp?: number\n ): ExecutionFailedEvent;\n createWorldCreatedEvent(\n world: World,\n proposalId: ProposalId,\n from: WorldId,\n outcome: \"completed\" | \"failed\",\n timestamp?: number\n ): WorldCreatedEvent;\n createWorldForkedEvent(\n branchId: BranchId,\n forkPoint: WorldId,\n timestamp?: number\n ): WorldForkedEvent;\n}\n\nexport function createProposalId(value?: string): ProposalId {\n return value ?? `prop-${crypto.randomUUID()}`;\n}\n\nexport function createDecisionId(value?: string): DecisionId {\n return value ?? `dec-${crypto.randomUUID()}`;\n}\n\nexport function createExecutionKey(proposalId: ProposalId, attempt = 1): ExecutionKey {\n return `${proposalId}:${attempt}`;\n}\n\nexport const defaultExecutionKeyPolicy: ExecutionKeyPolicy = ({\n proposalId,\n attempt,\n}) => createExecutionKey(proposalId, attempt);\n\nexport function createNoopGovernanceEventSink(): GovernanceEventSink {\n return {\n emit(): void {\n // no-op\n },\n };\n}\n\nexport function toHostIntent(intent: Intent | IntentInstance): HostIntent {\n if (\"body\" in intent) {\n return {\n type: intent.body.type,\n input: intent.body.input,\n intentId: intent.intentId,\n };\n }\n\n return {\n type: intent.type,\n input: intent.input,\n intentId: intent.intentId,\n };\n}\n","import { sha256, toJcs } from \"@manifesto-ai/core\";\nimport type {\n ActorRef,\n IntentBody,\n IntentInstance,\n IntentOrigin,\n SourceRef,\n} from \"./types.js\";\n\nexport interface CreateIntentInstanceOptions {\n readonly body: IntentBody;\n readonly schemaHash: string;\n readonly projectionId: string;\n readonly source: SourceRef;\n readonly actor: ActorRef;\n readonly note?: string;\n readonly intentId?: string;\n}\n\nexport async function computeIntentKey(\n schemaHash: string,\n body: IntentBody\n): Promise<string> {\n const input = [\n schemaHash,\n body.type,\n toJcs(body.input ?? null),\n toJcs(body.scopeProposal ?? null),\n ].join(\":\");\n\n return sha256(input);\n}\n\nexport async function createIntentInstance(\n options: CreateIntentInstanceOptions\n): Promise<IntentInstance> {\n const intentId = options.intentId ?? `intent-${crypto.randomUUID()}`;\n const intentKey = await computeIntentKey(options.schemaHash, options.body);\n\n return createIntentInstanceSync(\n options.body,\n intentId,\n intentKey,\n {\n projectionId: options.projectionId,\n source: options.source,\n actor: options.actor,\n note: options.note,\n }\n );\n}\n\nexport function createIntentInstanceSync(\n body: IntentBody,\n intentId: string,\n intentKey: string,\n origin: IntentOrigin\n): IntentInstance {\n return deepFreeze({\n body,\n intentId,\n intentKey,\n meta: {\n origin,\n },\n });\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n for (const key of Object.getOwnPropertyNames(value)) {\n const nested = (value as Record<string, unknown>)[key];\n if (nested !== null && typeof nested === \"object\") {\n deepFreeze(nested);\n }\n }\n\n return Object.freeze(value);\n}\n","import type { ProposalStatus } from \"./types.js\";\n\nexport const INGRESS_STATUSES = [\"submitted\", \"evaluating\"] as const satisfies readonly ProposalStatus[];\nexport const EXECUTION_STAGE_STATUSES = [\"approved\", \"executing\"] as const satisfies readonly ProposalStatus[];\nexport const TERMINAL_STATUSES = [\"rejected\", \"completed\", \"failed\", \"superseded\"] as const satisfies readonly ProposalStatus[];\nexport const DECISION_TRANSITION_TARGETS = [\"approved\", \"rejected\"] as const satisfies readonly ProposalStatus[];\n\nconst VALID_TRANSITIONS: Record<ProposalStatus, readonly ProposalStatus[]> = {\n submitted: [\"evaluating\", \"rejected\", \"superseded\"],\n evaluating: [\"approved\", \"rejected\", \"superseded\"],\n approved: [\"executing\"],\n rejected: [],\n executing: [\"completed\", \"failed\"],\n completed: [],\n failed: [],\n superseded: [],\n};\n\nexport function isIngressStatus(status: ProposalStatus): boolean {\n return (INGRESS_STATUSES as readonly ProposalStatus[]).includes(status);\n}\n\nexport function isExecutionStageStatus(status: ProposalStatus): boolean {\n return (EXECUTION_STAGE_STATUSES as readonly ProposalStatus[]).includes(status);\n}\n\nexport function isTerminalStatus(status: ProposalStatus): boolean {\n return (TERMINAL_STATUSES as readonly ProposalStatus[]).includes(status);\n}\n\nexport function isValidTransition(\n from: ProposalStatus,\n to: ProposalStatus\n): boolean {\n return VALID_TRANSITIONS[from].includes(to);\n}\n\nexport function getValidTransitions(status: ProposalStatus): ProposalStatus[] {\n return [...VALID_TRANSITIONS[status]];\n}\n\nexport function transitionCreatesDecisionRecord(\n from: ProposalStatus,\n to: ProposalStatus\n): boolean {\n return (\n (from === \"submitted\" && to === \"rejected\") ||\n (from === \"evaluating\" && to === \"approved\") ||\n (from === \"evaluating\" && to === \"rejected\")\n );\n}\n","import { isExecutionStageStatus } from \"../state-machine.js\";\nimport type {\n ActorAuthorityBinding,\n ActorId,\n BranchId,\n DecisionId,\n DecisionRecord,\n GovernanceStore,\n Proposal,\n ProposalId,\n} from \"../types.js\";\n\nfunction cloneValue<T>(value: T): T {\n return structuredClone(value);\n}\n\ntype InMemoryGovernanceStoreState = {\n proposals: Map<ProposalId, Proposal>;\n decisions: Map<DecisionId, DecisionRecord>;\n actorBindings: Map<ActorId, ActorAuthorityBinding>;\n};\n\nexport class InMemoryGovernanceStore implements GovernanceStore {\n private readonly proposals = new Map<ProposalId, Proposal>();\n private readonly decisions = new Map<DecisionId, DecisionRecord>();\n private readonly actorBindings = new Map<ActorId, ActorAuthorityBinding>();\n\n async putProposal(proposal: Proposal): Promise<void> {\n this.proposals.set(proposal.proposalId, cloneValue(proposal));\n }\n\n async getProposal(proposalId: ProposalId): Promise<Proposal | null> {\n return cloneValue(this.proposals.get(proposalId) ?? null);\n }\n\n async getProposalsByBranch(branchId: BranchId): Promise<readonly Proposal[]> {\n return [...this.proposals.values()]\n .filter((proposal) => proposal.branchId === branchId)\n .sort((left, right) => {\n if (left.submittedAt !== right.submittedAt) {\n return left.submittedAt - right.submittedAt;\n }\n return left.proposalId.localeCompare(right.proposalId);\n })\n .map((proposal) => cloneValue(proposal));\n }\n\n async getExecutionStageProposal(branchId: BranchId): Promise<Proposal | null> {\n const matches = (await this.getProposalsByBranch(branchId)).filter((proposal) =>\n isExecutionStageStatus(proposal.status)\n );\n if (matches.length > 1) {\n throw new Error(\n `GOV-STORE-4 violation: multiple execution-stage proposals found for branch ${branchId}`\n );\n }\n return matches[0] ?? null;\n }\n\n async putDecisionRecord(record: DecisionRecord): Promise<void> {\n this.decisions.set(record.decisionId, cloneValue(record));\n }\n\n async getDecisionRecord(decisionId: DecisionId): Promise<DecisionRecord | null> {\n return cloneValue(this.decisions.get(decisionId) ?? null);\n }\n\n async putActorBinding(binding: ActorAuthorityBinding): Promise<void> {\n this.actorBindings.set(binding.actorId, cloneValue(binding));\n }\n\n async getActorBinding(actorId: ActorId): Promise<ActorAuthorityBinding | null> {\n return cloneValue(this.actorBindings.get(actorId) ?? null);\n }\n\n async getActorBindings(): Promise<readonly ActorAuthorityBinding[]> {\n return [...this.actorBindings.values()]\n .sort((left, right) => left.actorId.localeCompare(right.actorId))\n .map((binding) => cloneValue(binding));\n }\n\n snapshotState(): InMemoryGovernanceStoreState {\n return {\n proposals: cloneValue(this.proposals),\n decisions: cloneValue(this.decisions),\n actorBindings: cloneValue(this.actorBindings),\n };\n }\n\n restoreState(state: InMemoryGovernanceStoreState): void {\n this.proposals.clear();\n for (const [proposalId, proposal] of state.proposals) {\n this.proposals.set(proposalId, cloneValue(proposal));\n }\n\n this.decisions.clear();\n for (const [decisionId, record] of state.decisions) {\n this.decisions.set(decisionId, cloneValue(record));\n }\n\n this.actorBindings.clear();\n for (const [actorId, binding] of state.actorBindings) {\n this.actorBindings.set(actorId, cloneValue(binding));\n }\n }\n}\n\nexport function createInMemoryGovernanceStore(): InMemoryGovernanceStore {\n return new InMemoryGovernanceStore();\n}\n","import type { BranchInfo, LineageService, PreparedLineageCommit, World, WorldId } from \"@manifesto-ai/lineage\";\nimport {\n getValidTransitions,\n isExecutionStageStatus,\n isIngressStatus,\n isValidTransition,\n transitionCreatesDecisionRecord,\n} from \"../state-machine.js\";\nimport {\n createDecisionId,\n createProposalId,\n type AuthorityResponse,\n type BranchId,\n type CreateProposalInput,\n type DecisionRecord,\n type GovernanceService,\n type GovernanceStore,\n type ExecutionCompletedEvent,\n type ExecutionFailedEvent,\n type PreparedAuthorityResult,\n type PrepareAuthorityResultOptions,\n type PreparedGovernanceCommit,\n type Proposal,\n type ProposalDecidedEvent,\n type ProposalEvaluatingEvent,\n type ProposalId,\n type ProposalSubmittedEvent,\n type ProposalSupersededEvent,\n type WorldCreatedEvent,\n type WorldForkedEvent,\n type Snapshot,\n type SupersedeReason,\n type ErrorInfo,\n} from \"../types.js\";\n\nfunction freeze<T>(value: T): T {\n return Object.freeze(value);\n}\n\nexport interface GovernanceServiceOptions {\n readonly lineageService?: Pick<LineageService, \"getBranch\">;\n}\n\nexport class DefaultGovernanceService implements GovernanceService {\n public constructor(\n private readonly store: GovernanceStore,\n private readonly options: GovernanceServiceOptions = {}\n ) {}\n\n createProposal(input: CreateProposalInput): Proposal {\n return freeze({\n proposalId: input.proposalId ?? createProposalId(),\n baseWorld: input.baseWorld,\n branchId: input.branchId,\n actorId: input.actorId,\n authorityId: input.authorityId,\n intent: freeze({ ...input.intent }),\n status: \"submitted\" as const,\n executionKey: input.executionKey,\n submittedAt: input.submittedAt,\n epoch: input.epoch,\n });\n }\n\n beginEvaluating(proposal: Proposal): Proposal & { readonly status: \"evaluating\" } {\n return this.transitionProposal(proposal, \"evaluating\") as Proposal & {\n readonly status: \"evaluating\";\n };\n }\n\n beginExecution(proposal: Proposal): Proposal & { readonly status: \"executing\" } {\n if (!proposal.decisionId) {\n throw new Error(\n \"GOV-EXEC-1 violation: approved proposal requires decisionId before execution can begin\"\n );\n }\n\n return this.transitionProposal(proposal, \"executing\") as Proposal & {\n readonly status: \"executing\";\n };\n }\n\n failExecution(\n proposal: Proposal,\n completedAt: number,\n resultWorld?: WorldId\n ): Proposal & { readonly status: \"failed\" } {\n return this.transitionProposal(proposal, \"failed\", {\n completedAt,\n ...(resultWorld !== undefined ? { resultWorld } : {}),\n }) as Proposal & {\n readonly status: \"failed\";\n };\n }\n\n async prepareAuthorityResult(\n proposal: Proposal,\n response: Extract<AuthorityResponse, { kind: \"approved\" | \"rejected\" }>,\n options: PrepareAuthorityResultOptions\n ): Promise<PreparedAuthorityResult> {\n if (proposal.status !== \"submitted\" && proposal.status !== \"evaluating\") {\n throw new Error(\n `GOV-TRANS-1 violation: authority result requires ingress proposal, received ${proposal.status}`\n );\n }\n\n const branchInfo = await this.resolveBranchInfo(proposal.branchId);\n const currentEpoch = options.currentEpoch ?? branchInfo?.epoch ?? proposal.epoch;\n const currentHead = options.currentBranchHead ?? branchInfo?.head ?? proposal.baseWorld;\n\n if (this.shouldDiscardAuthorityResult(proposal, currentEpoch)) {\n return {\n proposal: this.prepareSupersede(proposal, \"head_advance\"),\n discarded: true,\n };\n }\n\n if (response.kind === \"approved\") {\n await this.assertBranchGateAvailable(proposal);\n if (currentHead !== proposal.baseWorld) {\n return {\n proposal: this.prepareSupersede(proposal, \"head_advance\"),\n discarded: true,\n };\n }\n\n const decisionRecord = freeze({\n decisionId: options.decisionId ?? createDecisionId(),\n proposalId: proposal.proposalId,\n authorityId: proposal.authorityId,\n decision: freeze({ kind: \"approved\" as const }),\n decidedAt: options.decidedAt,\n });\n\n return {\n proposal: this.transitionProposal(proposal, \"approved\", {\n decisionId: decisionRecord.decisionId,\n decidedAt: decisionRecord.decidedAt,\n approvedScope: response.approvedScope,\n }),\n decisionRecord,\n discarded: false,\n };\n }\n\n const decisionRecord = freeze({\n decisionId: options.decisionId ?? createDecisionId(),\n proposalId: proposal.proposalId,\n authorityId: proposal.authorityId,\n decision: freeze({\n kind: \"rejected\" as const,\n ...(response.reason ? { reason: response.reason } : {}),\n }),\n decidedAt: options.decidedAt,\n });\n\n return {\n proposal: this.transitionProposal(proposal, \"rejected\", {\n decisionId: decisionRecord.decisionId,\n decidedAt: decisionRecord.decidedAt,\n }),\n decisionRecord,\n discarded: false,\n };\n }\n\n prepareSupersede(proposal: Proposal, reason: SupersedeReason): Proposal {\n return this.transitionProposal(proposal, \"superseded\", {\n supersededReason: reason,\n });\n }\n\n async invalidateStaleIngress(\n branchId: string,\n currentEpoch?: number\n ): Promise<readonly Proposal[]> {\n const branchInfo = await this.resolveBranchInfo(branchId);\n const nextEpoch = currentEpoch ?? branchInfo?.epoch;\n if (nextEpoch == null) {\n throw new Error(`Cannot invalidate stale ingress without branch epoch for ${branchId}`);\n }\n\n return (await this.store\n .getProposalsByBranch(branchId))\n .filter((proposal) => isIngressStatus(proposal.status) && proposal.epoch < nextEpoch)\n .map((proposal) => this.prepareSupersede(proposal, \"head_advance\"));\n }\n\n shouldDiscardAuthorityResult(\n proposal: Proposal,\n currentEpoch: number\n ): boolean {\n return proposal.epoch < currentEpoch;\n }\n\n deriveOutcome(terminalSnapshot: Snapshot): \"completed\" | \"failed\" {\n if (terminalSnapshot.system.lastError != null) {\n return \"failed\";\n }\n if (terminalSnapshot.system.pendingRequirements.length > 0) {\n return \"failed\";\n }\n return \"completed\";\n }\n\n async finalize(\n executingProposal: Proposal,\n lineageCommit: PreparedLineageCommit,\n completedAt: number\n ): Promise<PreparedGovernanceCommit> {\n if (executingProposal.status !== \"executing\") {\n throw new Error(\n `GOV-SEAL-6 violation: finalize() requires executing proposal, received ${executingProposal.status}`\n );\n }\n if (!executingProposal.decisionId) {\n throw new Error(\"GOV-SEAL-6 violation: executing proposal is missing decisionId\");\n }\n\n const decisionRecord = await this.store.getDecisionRecord(executingProposal.decisionId);\n if (!decisionRecord) {\n throw new Error(\n `GOV-SEAL-6 violation: decision record ${executingProposal.decisionId} not found`\n );\n }\n\n const derivedOutcome = this.deriveOutcome(lineageCommit.terminalSnapshot);\n if (derivedOutcome !== lineageCommit.terminalStatus) {\n throw new Error(\n `GOV-SEAL-1 violation: deriveOutcome=${derivedOutcome} but lineageCommit.terminalStatus=${lineageCommit.terminalStatus}`\n );\n }\n\n const proposal = this.transitionProposal(executingProposal, derivedOutcome, {\n resultWorld: lineageCommit.worldId,\n completedAt,\n });\n\n return freeze({\n proposal,\n decisionRecord,\n });\n }\n\n createProposalSubmittedEvent(\n proposal: Proposal,\n timestamp = Date.now()\n ): ProposalSubmittedEvent {\n return freeze({\n type: \"proposal:submitted\",\n timestamp,\n proposalId: proposal.proposalId,\n actorId: proposal.actorId,\n baseWorld: proposal.baseWorld,\n branchId: proposal.branchId,\n intent: freeze({\n type: proposal.intent.type,\n intentId: proposal.intent.intentId,\n ...(proposal.intent.input !== undefined ? { input: proposal.intent.input } : {}),\n }),\n executionKey: proposal.executionKey,\n epoch: proposal.epoch,\n });\n }\n\n createProposalEvaluatingEvent(\n proposal: Proposal,\n timestamp = Date.now()\n ): ProposalEvaluatingEvent {\n return freeze({\n type: \"proposal:evaluating\",\n timestamp,\n proposalId: proposal.proposalId,\n });\n }\n\n createProposalDecidedEvent(\n proposal: Proposal,\n decisionRecord: DecisionRecord,\n timestamp = Date.now()\n ): ProposalDecidedEvent {\n return freeze({\n type: \"proposal:decided\",\n timestamp,\n proposalId: proposal.proposalId,\n decisionId: decisionRecord.decisionId,\n decision: decisionRecord.decision.kind,\n ...(decisionRecord.decision.kind === \"rejected\" && decisionRecord.decision.reason\n ? { reason: decisionRecord.decision.reason }\n : {}),\n });\n }\n\n createProposalSupersededEvent(\n proposal: Proposal,\n currentEpoch: number,\n timestamp = Date.now()\n ): ProposalSupersededEvent {\n if (proposal.status !== \"superseded\" || !proposal.supersededReason) {\n throw new Error(\n \"GOV-EPOCH-5 violation: superseded event requires proposal.status='superseded' with supersededReason\"\n );\n }\n\n return freeze({\n type: \"proposal:superseded\",\n timestamp,\n proposalId: proposal.proposalId,\n currentEpoch,\n proposalEpoch: proposal.epoch,\n reason: proposal.supersededReason,\n });\n }\n\n createExecutionCompletedEvent(\n proposal: Proposal,\n timestamp = Date.now()\n ): ExecutionCompletedEvent {\n if (!proposal.resultWorld) {\n throw new Error(\n \"GOV-EVT-6 violation: execution:completed requires proposal.resultWorld\"\n );\n }\n\n return freeze({\n type: \"execution:completed\",\n timestamp,\n proposalId: proposal.proposalId,\n executionKey: proposal.executionKey,\n resultWorld: proposal.resultWorld,\n });\n }\n\n createExecutionFailedEvent(\n proposal: Proposal,\n error: ErrorInfo,\n timestamp = Date.now()\n ): ExecutionFailedEvent {\n if (!proposal.resultWorld) {\n throw new Error(\n \"GOV-EVT-7 violation: execution:failed requires proposal.resultWorld\"\n );\n }\n\n return freeze({\n type: \"execution:failed\",\n timestamp,\n proposalId: proposal.proposalId,\n executionKey: proposal.executionKey,\n resultWorld: proposal.resultWorld,\n error: freeze({\n summary: error.summary,\n ...(error.currentError !== undefined ? { currentError: error.currentError } : {}),\n ...(error.pendingRequirements !== undefined\n ? { pendingRequirements: error.pendingRequirements }\n : {}),\n }),\n });\n }\n\n createWorldCreatedEvent(\n world: World,\n proposalId: ProposalId,\n from: WorldId,\n outcome: \"completed\" | \"failed\",\n timestamp = Date.now()\n ): WorldCreatedEvent {\n return freeze({\n type: \"world:created\",\n timestamp,\n world,\n from,\n proposalId,\n outcome,\n });\n }\n\n createWorldForkedEvent(\n branchId: BranchId,\n forkPoint: WorldId,\n timestamp = Date.now()\n ): WorldForkedEvent {\n return freeze({\n type: \"world:forked\",\n timestamp,\n branchId,\n forkPoint,\n });\n }\n\n private async resolveBranchInfo(branchId: string): Promise<BranchInfo | null> {\n return this.options.lineageService?.getBranch(branchId) ?? null;\n }\n\n private async assertBranchGateAvailable(proposal: Proposal): Promise<void> {\n const occupant = await this.store.getExecutionStageProposal(proposal.branchId);\n if (occupant && occupant.proposalId !== proposal.proposalId) {\n throw new Error(\n `GOV-BRANCH-GATE-1 violation: branch ${proposal.branchId} already occupied by ${occupant.proposalId}`\n );\n }\n }\n\n private transitionProposal(\n proposal: Proposal,\n to: Proposal[\"status\"],\n updates: {\n decisionId?: string;\n decidedAt?: number;\n completedAt?: number;\n resultWorld?: WorldId;\n supersededReason?: SupersedeReason;\n approvedScope?: unknown;\n } = {}\n ): Proposal {\n if (!isValidTransition(proposal.status, to)) {\n throw new Error(\n `GOV-TRANS-1 violation: invalid transition ${proposal.status} -> ${to}; valid targets are ${getValidTransitions(proposal.status).join(\", \")}`\n );\n }\n\n if (to === \"superseded\") {\n if (updates.decisionId != null) {\n throw new Error(\"GOV-TRANS-3 violation: superseded transition must not create DecisionRecord\");\n }\n if (!updates.supersededReason) {\n throw new Error(\"GOV-STAGE-7 violation: superseded proposal must record supersededReason\");\n }\n }\n\n if (\n transitionCreatesDecisionRecord(proposal.status, to) &&\n updates.decisionId == null\n ) {\n throw new Error(\n `GOV-TRANS-2 violation: transition ${proposal.status} -> ${to} requires decisionId`\n );\n }\n\n if (to !== \"superseded\" && updates.supersededReason != null) {\n throw new Error(\"GOV-TRANS-4 violation: supersededReason is only valid on superseded proposals\");\n }\n\n if (isExecutionStageStatus(proposal.status) && to === \"superseded\") {\n throw new Error(\"GOV-STAGE-4 violation: execution-stage proposals must not be superseded\");\n }\n\n return freeze({\n ...proposal,\n status: to,\n ...(updates.decisionId !== undefined ? { decisionId: updates.decisionId } : {}),\n ...(updates.decidedAt !== undefined ? { decidedAt: updates.decidedAt } : {}),\n ...(updates.completedAt !== undefined ? { completedAt: updates.completedAt } : {}),\n ...(updates.resultWorld !== undefined ? { resultWorld: updates.resultWorld } : {}),\n ...(updates.approvedScope !== undefined ? { approvedScope: updates.approvedScope } : {}),\n ...(updates.supersededReason !== undefined\n ? { supersededReason: updates.supersededReason }\n : {}),\n ...(to !== \"superseded\" ? { supersededReason: undefined } : {}),\n });\n }\n}\n\nexport function createGovernanceService(\n store: GovernanceStore,\n options?: GovernanceServiceOptions\n): DefaultGovernanceService {\n return new DefaultGovernanceService(store, options);\n}\n","import type {\n ErrorInfo,\n PreparedGovernanceCommit,\n PreparedLineageCommit,\n} from \"./types.js\";\nimport { createNoopGovernanceEventSink, type GovernanceEventDispatcher, type GovernanceEventSink, type GovernanceService } from \"./types.js\";\n\nexport interface CreateGovernanceEventDispatcherOptions {\n readonly service: Pick<\n GovernanceService,\n | \"createExecutionCompletedEvent\"\n | \"createExecutionFailedEvent\"\n | \"createWorldCreatedEvent\"\n | \"createWorldForkedEvent\"\n >;\n readonly sink?: GovernanceEventSink;\n readonly now?: () => number;\n}\n\nexport function createGovernanceEventDispatcher(\n options: CreateGovernanceEventDispatcherOptions\n): GovernanceEventDispatcher {\n const sink = options.sink ?? createNoopGovernanceEventSink();\n const now = options.now ?? Date.now;\n\n return {\n emitSealCompleted(\n governanceCommit: PreparedGovernanceCommit,\n lineageCommit: PreparedLineageCommit\n ): void {\n const timestamp = now();\n const outcome =\n governanceCommit.proposal.status === \"completed\" ? \"completed\" : \"failed\";\n\n sink.emit(\n options.service.createWorldCreatedEvent(\n lineageCommit.world,\n governanceCommit.proposal.proposalId,\n deriveWorldCreatedFrom(governanceCommit, lineageCommit),\n outcome,\n timestamp\n )\n );\n\n if (isTrueForkCommit(lineageCommit)) {\n sink.emit(\n options.service.createWorldForkedEvent(\n governanceCommit.proposal.branchId,\n lineageCommit.edge.from,\n timestamp\n )\n );\n }\n\n if (outcome === \"completed\") {\n sink.emit(options.service.createExecutionCompletedEvent(governanceCommit.proposal, timestamp));\n return;\n }\n\n sink.emit(\n options.service.createExecutionFailedEvent(\n governanceCommit.proposal,\n deriveExecutionFailure(lineageCommit),\n timestamp\n )\n );\n },\n };\n}\n\nfunction deriveWorldCreatedFrom(\n governanceCommit: PreparedGovernanceCommit,\n lineageCommit: PreparedLineageCommit\n): string {\n if (lineageCommit.kind === \"next\") {\n return lineageCommit.edge.from;\n }\n\n return lineageCommit.world.parentWorldId ?? governanceCommit.proposal.baseWorld;\n}\n\nfunction deriveExecutionFailure(lineageCommit: PreparedLineageCommit): ErrorInfo {\n const currentError = lineageCommit.terminalSnapshot.system.lastError ?? undefined;\n const pendingRequirements = lineageCommit.terminalSnapshot.system.pendingRequirements.map(\n (requirement) => requirement.id\n );\n\n return {\n summary: summarizeFailure(currentError ? 1 : 0, pendingRequirements.length),\n ...(currentError ? { currentError } : {}),\n ...(pendingRequirements.length > 0 ? { pendingRequirements } : {}),\n };\n}\n\nfunction isTrueForkCommit(\n lineageCommit: PreparedLineageCommit\n): lineageCommit is Extract<PreparedLineageCommit, { kind: \"next\" }> & {\n readonly forkCreated: true;\n} {\n return lineageCommit.kind === \"next\"\n && \"forkCreated\" in lineageCommit\n && lineageCommit.forkCreated === true;\n}\n\nfunction summarizeFailure(errorCount: number, pendingRequirementCount: number): string {\n if (errorCount > 0 && pendingRequirementCount > 0) {\n return `Execution failed with ${errorCount} error(s) and ${pendingRequirementCount} pending requirement(s)`;\n }\n if (errorCount > 0) {\n return `Execution failed with ${errorCount} error(s)`;\n }\n if (pendingRequirementCount > 0) {\n return `Execution failed with ${pendingRequirementCount} pending requirement(s)`;\n }\n return \"Execution failed\";\n}\n","import type { ActorAuthorityBinding, AuthorityResponse, Proposal } from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\n\nexport class AutoApproveHandler implements AuthorityHandler {\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"auto_approve\") {\n throw new Error(\n `AutoApproveHandler received non-auto_approve policy: ${binding.policy.mode}`\n );\n }\n\n return {\n kind: \"approved\",\n approvedScope: proposal.intent.scopeProposal ?? null,\n };\n }\n}\n\nexport function createAutoApproveHandler(): AutoApproveHandler {\n return new AutoApproveHandler();\n}\n","import type {\n ActorAuthorityBinding,\n AuthorityResponse,\n IntentScope,\n PolicyCondition,\n PolicyRule,\n Proposal,\n} from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\n\nexport type CustomConditionEvaluator = (\n proposal: Proposal,\n binding: ActorAuthorityBinding\n) => boolean;\n\nexport class PolicyRulesHandler implements AuthorityHandler {\n private readonly customEvaluators = new Map<string, CustomConditionEvaluator>();\n\n registerCustomEvaluator(\n name: string,\n evaluator: CustomConditionEvaluator\n ): void {\n this.customEvaluators.set(name, evaluator);\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"policy_rules\") {\n throw new Error(\n `PolicyRulesHandler received non-policy_rules policy: ${binding.policy.mode}`\n );\n }\n\n const approvedScope = proposal.intent.scopeProposal ?? null;\n for (const rule of binding.policy.rules) {\n if (this.evaluateCondition(rule.condition, proposal, binding)) {\n return this.applyDecision(rule, approvedScope);\n }\n }\n\n return this.applyDecision(\n {\n decision: binding.policy.defaultDecision,\n reason: \"Default policy decision\",\n },\n approvedScope\n );\n }\n\n private evaluateCondition(\n condition: PolicyCondition,\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): boolean {\n switch (condition.kind) {\n case \"intent_type\":\n return condition.types.includes(proposal.intent.type);\n case \"scope_pattern\":\n return this.matchPattern(proposal.intent.type, condition.pattern);\n case \"custom\": {\n const evaluator = this.customEvaluators.get(condition.evaluator);\n return evaluator ? evaluator(proposal, binding) : false;\n }\n }\n }\n\n private matchPattern(value: string, pattern: string): boolean {\n const regex = new RegExp(\n `^${pattern.replace(/\\*/g, \".*\").replace(/\\?/g, \".\")}$`\n );\n return regex.test(value);\n }\n\n private applyDecision(\n rule: Pick<PolicyRule, \"decision\" | \"reason\">,\n approvedScope: IntentScope | null\n ): AuthorityResponse {\n switch (rule.decision) {\n case \"approve\":\n return { kind: \"approved\", approvedScope };\n case \"reject\":\n return { kind: \"rejected\", reason: rule.reason ?? \"Policy rejection\" };\n case \"escalate\":\n return {\n kind: \"rejected\",\n reason: rule.reason ?? \"Policy requires escalation (not implemented)\",\n };\n }\n }\n}\n\nexport function createPolicyRulesHandler(): PolicyRulesHandler {\n return new PolicyRulesHandler();\n}\n","import type {\n ActorAuthorityBinding,\n AuthorityResponse,\n IntentScope,\n Proposal,\n} from \"../types.js\";\nimport type { AuthorityHandler, HITLPendingState } from \"./types.js\";\n\nexport type HITLNotificationCallback = (\n proposalId: string,\n proposal: Proposal,\n binding: ActorAuthorityBinding\n) => void;\n\nexport class HITLHandler implements AuthorityHandler {\n private readonly pendingDecisions = new Map<string, HITLPendingState>();\n private readonly notificationCallbacks = new Set<HITLNotificationCallback>();\n\n onPendingDecision(callback: HITLNotificationCallback): () => void {\n this.notificationCallbacks.add(callback);\n return () => {\n this.notificationCallbacks.delete(callback);\n };\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"hitl\") {\n throw new Error(`HITLHandler received non-hitl policy: ${binding.policy.mode}`);\n }\n const policy = binding.policy;\n\n const proposalId = proposal.proposalId;\n if (this.pendingDecisions.has(proposalId)) {\n throw new Error(`Proposal ${proposalId} already has a pending HITL decision`);\n }\n\n return new Promise((resolve, reject) => {\n const state: HITLPendingState = {\n proposalId,\n proposal,\n resolve,\n reject,\n };\n\n if (policy.timeout != null) {\n state.timeoutId = setTimeout(() => {\n this.pendingDecisions.delete(proposalId);\n if (policy.onTimeout === \"approve\") {\n resolve({\n kind: \"approved\",\n approvedScope: proposal.intent.scopeProposal ?? null,\n });\n return;\n }\n reject(\n new Error(\n `HITL decision timed out after ${policy.timeout}ms for proposal '${proposalId}'`\n )\n );\n }, policy.timeout);\n }\n\n this.pendingDecisions.set(proposalId, state);\n for (const callback of this.notificationCallbacks) {\n callback(proposalId, proposal, binding);\n }\n });\n }\n\n submitDecision(\n proposalId: string,\n decision: \"approved\" | \"rejected\",\n reasoning?: string,\n approvedScope?: IntentScope | null\n ): void {\n const state = this.pendingDecisions.get(proposalId);\n if (!state) {\n throw new Error(`No pending HITL decision for proposal ${proposalId}`);\n }\n\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n this.pendingDecisions.delete(proposalId);\n\n if (decision === \"approved\") {\n state.resolve({\n kind: \"approved\",\n approvedScope:\n approvedScope !== undefined\n ? approvedScope\n : state.proposal?.intent.scopeProposal ?? null,\n });\n return;\n }\n\n state.resolve({\n kind: \"rejected\",\n reason: reasoning ?? \"Human rejected\",\n });\n }\n\n isPending(proposalId: string): boolean {\n return this.pendingDecisions.has(proposalId);\n }\n\n getPendingIds(): string[] {\n return [...this.pendingDecisions.keys()];\n }\n\n clearAllPending(): void {\n for (const [proposalId, state] of this.pendingDecisions) {\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n state.reject(new Error(`HITL handler cleared pending proposal ${proposalId}`));\n }\n this.pendingDecisions.clear();\n }\n}\n\nexport function createHITLHandler(): HITLHandler {\n return new HITLHandler();\n}\n","import type {\n ActorAuthorityBinding,\n ActorRef,\n AuthorityResponse,\n Proposal,\n Vote,\n} from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\n\nexport type TribunalNotificationCallback = (\n proposalId: string,\n proposal: Proposal,\n members: readonly ActorRef[]\n) => void;\n\ninterface TribunalPendingState {\n proposalId: string;\n proposal: Proposal;\n binding: Extract<ActorAuthorityBinding, { policy: { mode: \"tribunal\" } }> | ActorAuthorityBinding;\n votes: Map<string, Vote>;\n resolve: (response: AuthorityResponse) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\nexport class TribunalHandler implements AuthorityHandler {\n private readonly pendingTribunals = new Map<string, TribunalPendingState>();\n private notificationCallback?: TribunalNotificationCallback;\n\n onPendingTribunal(callback: TribunalNotificationCallback): void {\n this.notificationCallback = callback;\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n if (binding.policy.mode !== \"tribunal\") {\n throw new Error(\n `TribunalHandler received non-tribunal policy: ${binding.policy.mode}`\n );\n }\n const policy = binding.policy;\n\n const proposalId = proposal.proposalId;\n if (this.pendingTribunals.has(proposalId)) {\n throw new Error(`Proposal ${proposalId} already has a pending tribunal`);\n }\n\n return new Promise((resolve, reject) => {\n const state: TribunalPendingState = {\n proposalId,\n proposal,\n binding,\n votes: new Map(),\n resolve,\n reject,\n };\n\n if (policy.timeout != null) {\n state.timeoutId = setTimeout(() => {\n this.pendingTribunals.delete(proposalId);\n if (policy.onTimeout === \"approve\") {\n resolve({\n kind: \"approved\",\n approvedScope: proposal.intent.scopeProposal ?? null,\n });\n return;\n }\n reject(\n new Error(\n `Tribunal decision timed out after ${policy.timeout}ms for proposal '${proposalId}'`\n )\n );\n }, policy.timeout);\n }\n\n this.pendingTribunals.set(proposalId, state);\n this.notificationCallback?.(\n proposalId,\n proposal,\n policy.members\n );\n });\n }\n\n submitVote(\n proposalId: string,\n voter: ActorRef,\n decision: \"approve\" | \"reject\" | \"abstain\",\n reasoning?: string\n ): void {\n const state = this.pendingTribunals.get(proposalId);\n if (!state) {\n throw new Error(`No pending tribunal for proposal ${proposalId}`);\n }\n\n if (state.votes.has(voter.actorId)) {\n throw new Error(`Actor ${voter.actorId} already voted on proposal ${proposalId}`);\n }\n\n const member = state.binding.policy.mode === \"tribunal\"\n ? state.binding.policy.members.some(({ actorId }) => actorId === voter.actorId)\n : false;\n if (!member) {\n throw new Error(`Actor ${voter.actorId} is not a tribunal member for proposal ${proposalId}`);\n }\n\n state.votes.set(voter.actorId, {\n voter,\n decision,\n reasoning,\n votedAt: Date.now(),\n });\n this.checkQuorum(state);\n }\n\n isPending(proposalId: string): boolean {\n return this.pendingTribunals.has(proposalId);\n }\n\n getVotes(proposalId: string): Vote[] {\n const state = this.pendingTribunals.get(proposalId);\n return state ? [...state.votes.values()] : [];\n }\n\n getPendingIds(): string[] {\n return [...this.pendingTribunals.keys()];\n }\n\n clearAllPending(): void {\n for (const [proposalId, state] of this.pendingTribunals) {\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n state.reject(new Error(`Tribunal handler cleared pending proposal ${proposalId}`));\n }\n this.pendingTribunals.clear();\n }\n\n private checkQuorum(state: TribunalPendingState): void {\n const policy = state.binding.policy;\n if (policy.mode !== \"tribunal\") {\n return;\n }\n\n const memberCount = policy.members.length;\n let approveCount = 0;\n let rejectCount = 0;\n for (const vote of state.votes.values()) {\n if (vote.decision === \"approve\") {\n approveCount++;\n } else if (vote.decision === \"reject\") {\n rejectCount++;\n }\n }\n\n let isComplete = false;\n let isApproved = false;\n switch (policy.quorum.kind) {\n case \"unanimous\":\n if (approveCount === memberCount) {\n isComplete = true;\n isApproved = true;\n } else if (rejectCount > 0 || state.votes.size === memberCount) {\n isComplete = true;\n }\n break;\n case \"majority\": {\n const majorityNeeded = Math.floor(memberCount / 2) + 1;\n if (approveCount >= majorityNeeded) {\n isComplete = true;\n isApproved = true;\n } else if (rejectCount >= majorityNeeded) {\n isComplete = true;\n } else if (state.votes.size === memberCount) {\n isComplete = true;\n isApproved = approveCount > rejectCount;\n }\n break;\n }\n case \"threshold\":\n if (approveCount >= policy.quorum.count) {\n isComplete = true;\n isApproved = true;\n } else if (rejectCount > memberCount - policy.quorum.count) {\n isComplete = true;\n } else if (state.votes.size === memberCount) {\n isComplete = true;\n isApproved = approveCount >= policy.quorum.count;\n }\n break;\n }\n\n if (!isComplete) {\n return;\n }\n\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n }\n this.pendingTribunals.delete(state.proposalId);\n\n if (isApproved) {\n state.resolve({\n kind: \"approved\",\n approvedScope: state.proposal.intent.scopeProposal ?? null,\n });\n return;\n }\n\n state.resolve({\n kind: \"rejected\",\n reason: `Tribunal rejected (${approveCount}/${memberCount} approved)`,\n });\n }\n}\n\nexport function createTribunalHandler(): TribunalHandler {\n return new TribunalHandler();\n}\n","import type {\n ActorAuthorityBinding,\n AuthorityKind,\n AuthorityResponse,\n IntentScope,\n Proposal,\n} from \"../types.js\";\nimport type { AuthorityHandler } from \"./types.js\";\nimport { AutoApproveHandler, createAutoApproveHandler } from \"./auto.js\";\nimport { HITLHandler, createHITLHandler } from \"./hitl.js\";\nimport { PolicyRulesHandler, createPolicyRulesHandler } from \"./policy.js\";\nimport { TribunalHandler, createTribunalHandler } from \"./tribunal.js\";\n\nconst POLICY_MODE_TO_KIND: Record<string, AuthorityKind> = {\n auto_approve: \"auto\",\n hitl: \"human\",\n policy_rules: \"policy\",\n tribunal: \"tribunal\",\n};\n\nexport class AuthorityEvaluator {\n private readonly handlers = new Map<string, AuthorityHandler>();\n private readonly autoHandler: AutoApproveHandler;\n private readonly policyHandler: PolicyRulesHandler;\n private readonly hitlHandler: HITLHandler;\n private readonly tribunalHandler: TribunalHandler;\n\n constructor() {\n this.autoHandler = createAutoApproveHandler();\n this.policyHandler = createPolicyRulesHandler();\n this.hitlHandler = createHITLHandler();\n this.tribunalHandler = createTribunalHandler();\n\n this.handlers.set(\"auto_approve\", this.autoHandler);\n this.handlers.set(\"hitl\", this.hitlHandler);\n this.handlers.set(\"policy_rules\", this.policyHandler);\n this.handlers.set(\"tribunal\", this.tribunalHandler);\n }\n\n async evaluate(\n proposal: Proposal,\n binding: ActorAuthorityBinding\n ): Promise<AuthorityResponse> {\n const handler = this.handlers.get(binding.policy.mode);\n if (!handler) {\n throw new Error(`Unknown policy mode: ${binding.policy.mode}`);\n }\n return handler.evaluate(proposal, binding);\n }\n\n registerHandler(policyMode: string, handler: AuthorityHandler): void {\n this.handlers.set(policyMode, handler);\n }\n\n getAutoHandler(): AutoApproveHandler {\n return this.autoHandler;\n }\n\n getPolicyHandler(): PolicyRulesHandler {\n return this.policyHandler;\n }\n\n getHITLHandler(): HITLHandler {\n return this.hitlHandler;\n }\n\n getTribunalHandler(): TribunalHandler {\n return this.tribunalHandler;\n }\n\n getAuthorityKind(policyMode: string): AuthorityKind | null {\n return POLICY_MODE_TO_KIND[policyMode] ?? null;\n }\n\n submitHITLDecision(\n proposalId: string,\n decision: \"approved\" | \"rejected\",\n reasoning?: string,\n approvedScope?: IntentScope | null\n ): void {\n this.hitlHandler.submitDecision(proposalId, decision, reasoning, approvedScope);\n }\n\n submitTribunalVote(\n proposalId: string,\n voter: {\n actorId: string;\n kind: \"human\" | \"agent\" | \"system\";\n name?: string;\n },\n decision: \"approve\" | \"reject\" | \"abstain\",\n reasoning?: string\n ): void {\n this.tribunalHandler.submitVote(proposalId, voter, decision, reasoning);\n }\n\n hasPendingHITL(): boolean {\n return this.hitlHandler.getPendingIds().length > 0;\n }\n\n hasPendingTribunal(): boolean {\n return this.tribunalHandler.getPendingIds().length > 0;\n }\n\n getPendingHITLIds(): string[] {\n return this.hitlHandler.getPendingIds();\n }\n\n getPendingTribunalIds(): string[] {\n return this.tribunalHandler.getPendingIds();\n }\n\n clearAllPending(): void {\n this.hitlHandler.clearAllPending();\n this.tribunalHandler.clearAllPending();\n }\n}\n\nexport function createAuthorityEvaluator(): AuthorityEvaluator {\n return new AuthorityEvaluator();\n}\n","import type {\n BaseLaws,\n ComposableManifesto,\n GovernanceLaws,\n LineageLaws,\n ManifestoDomainShape,\n} from \"@manifesto-ai/sdk\";\nimport {\n AlreadyActivatedError,\n DisposedError,\n ManifestoError,\n} from \"@manifesto-ai/sdk\";\nimport {\n attachRuntimeKernelFactory,\n getRuntimeKernelFactory,\n type RuntimeKernel,\n} from \"@manifesto-ai/sdk/internal\";\nimport type { Intent as CoreIntent } from \"@manifesto-ai/core\";\nimport {\n createLineageService,\n type BranchId,\n type LineageConfig,\n} from \"@manifesto-ai/lineage\";\nimport {\n createLineageRuntimeController,\n getLineageDecoration,\n type ResolvedLineageConfig,\n} from \"@manifesto-ai/lineage/internal\";\n\nimport { createAuthorityEvaluator, type AuthorityEvaluator } from \"./authority/evaluator.js\";\nimport { createGovernanceEventDispatcher } from \"./event-dispatcher.js\";\nimport { createIntentInstance } from \"./intent-instance.js\";\nimport { createGovernanceService } from \"./service/governance-service.js\";\nimport { createInMemoryGovernanceStore } from \"./store/in-memory-governance-store.js\";\nimport type {\n GovernanceComposableManifesto,\n GovernanceConfig,\n GovernanceInstance,\n GovernanceLineageConfig,\n} from \"./runtime-types.js\";\nimport type {\n ActorAuthorityBinding,\n AuthorityResponse,\n DecisionRecord,\n GovernanceStore,\n IntentScope,\n Proposal,\n ProposalId,\n} from \"./types.js\";\nimport {\n createProposalId,\n defaultExecutionKeyPolicy,\n} from \"./types.js\";\n\nconst LINEAGE_LAWS: LineageLaws = Object.freeze({ __lineageLaws: true });\nconst GOVERNANCE_LAWS: GovernanceLaws = Object.freeze({ __governanceLaws: true });\n\nexport function withGovernance<\n T extends ManifestoDomainShape,\n Laws extends BaseLaws,\n>(\n manifesto: ComposableManifesto<T, Laws>,\n config: GovernanceConfig<T, Laws>,\n): GovernanceComposableManifesto<T, Laws> {\n const createKernel = getRuntimeKernelFactory(manifesto);\n const explicitLineage = getLineageDecoration(manifesto);\n const lineageConfig = explicitLineage?.config\n ?? resolveGovernanceLineageConfig(config.lineage);\n let activated = false;\n\n const decorated: GovernanceComposableManifesto<T, Laws> = {\n _laws: Object.freeze({\n ...manifesto._laws,\n ...LINEAGE_LAWS,\n ...GOVERNANCE_LAWS,\n }) as Laws & LineageLaws & GovernanceLaws,\n schema: manifesto.schema,\n activate() {\n if (activated) {\n throw new AlreadyActivatedError();\n }\n activated = true;\n return activateGovernanceRuntime<T>(\n createKernel(),\n explicitLineage?.config ?? lineageConfig,\n config,\n );\n },\n };\n\n attachRuntimeKernelFactory(\n decorated as unknown as ComposableManifesto<T, Laws & LineageLaws & GovernanceLaws>,\n createKernel,\n );\n\n return decorated;\n}\n\nfunction activateGovernanceRuntime<T extends ManifestoDomainShape>(\n kernel: RuntimeKernel<T>,\n lineageConfig: ResolvedLineageConfig,\n config: GovernanceConfig<T, BaseLaws>,\n): GovernanceInstance<T> {\n const governanceStore = config.governanceStore ?? createInMemoryGovernanceStore();\n const governanceService = createGovernanceService(governanceStore, {\n lineageService: lineageConfig.service,\n });\n const evaluator = config.evaluator ?? createAuthorityEvaluator();\n const eventDispatcher = createGovernanceEventDispatcher({\n service: governanceService,\n sink: config.eventSink,\n now: config.now,\n });\n const now = config.now ?? Date.now;\n const lineage = createLineageRuntimeController(kernel, lineageConfig.service, lineageConfig);\n\n let bindingsReady: Promise<void> | null = null;\n\n async function ensureBindings(): Promise<void> {\n if (bindingsReady) {\n return bindingsReady;\n }\n\n bindingsReady = Promise\n .all(config.bindings.map(async (binding) => {\n await governanceStore.putActorBinding(binding);\n }))\n .then(() => undefined)\n .catch((error) => {\n bindingsReady = null;\n throw error;\n });\n\n return bindingsReady;\n }\n\n async function ensureReady(): Promise<void> {\n await lineage.ensureReady();\n await ensureBindings();\n }\n\n function getCurrentTimestamp(): number {\n return now();\n }\n\n async function invalidateStaleIngress(branchId: BranchId, epoch: number): Promise<void> {\n const stale = await governanceService.invalidateStaleIngress(branchId, epoch);\n await Promise.all(stale.map(async (proposal) => {\n await governanceStore.putProposal(proposal);\n }));\n }\n\n async function resolveBinding(\n actorId: string,\n ): Promise<ActorAuthorityBinding> {\n const binding = await governanceStore.getActorBinding(actorId);\n if (binding) {\n return binding;\n }\n\n throw new ManifestoError(\n \"GOVERNANCE_BINDING_NOT_FOUND\",\n `No actor-authority binding exists for actor \"${actorId}\"`,\n );\n }\n\n async function evaluateProposal(\n proposal: Proposal,\n binding: ActorAuthorityBinding,\n activeEvaluator: AuthorityEvaluator,\n ): Promise<AuthorityResponse> {\n switch (binding.policy.mode) {\n case \"hitl\":\n return {\n kind: \"pending\",\n waitingFor: {\n kind: \"human\",\n delegate: binding.policy.delegate,\n },\n };\n case \"tribunal\":\n return {\n kind: \"pending\",\n waitingFor: {\n kind: \"tribunal\",\n members: binding.policy.members,\n },\n };\n default:\n return activeEvaluator.evaluate(proposal, binding);\n }\n }\n\n async function finalizeApprovedExecution(\n executingProposal: Proposal & { readonly status: \"executing\" },\n intent: CoreIntent,\n ): Promise<Proposal> {\n let sealed: Awaited<ReturnType<typeof lineage.sealIntent>> | null = null;\n let proposalPersisted = false;\n\n try {\n sealed = await lineage.sealIntent(intent, {\n proposalRef: executingProposal.proposalId,\n decisionRef: executingProposal.decisionId,\n publishOnCompleted: false,\n assumeEnqueued: true,\n });\n\n const governanceCommit = await governanceService.finalize(\n executingProposal,\n sealed.preparedCommit,\n getCurrentTimestamp(),\n );\n\n await governanceStore.putProposal(governanceCommit.proposal);\n proposalPersisted = true;\n await governanceStore.putDecisionRecord(governanceCommit.decisionRecord);\n eventDispatcher.emitSealCompleted(governanceCommit, sealed.preparedCommit);\n\n if (sealed.preparedCommit.branchChange.headAdvanced) {\n const publishedSnapshot = kernel.setVisibleSnapshot(sealed.hostResult.snapshot);\n kernel.emitEvent(\"dispatch:completed\", {\n intentId: intent.intentId ?? \"\",\n intent,\n snapshot: publishedSnapshot,\n });\n return governanceCommit.proposal;\n }\n\n const failure = toGovernanceFailure(sealed.hostResult.error);\n kernel.emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId ?? \"\",\n intent,\n error: failure,\n });\n return governanceCommit.proposal;\n } catch (error) {\n const failure = toGovernanceFailure(error);\n if (!proposalPersisted) {\n try {\n const failedProposal = governanceService.failExecution(\n executingProposal,\n getCurrentTimestamp(),\n sealed?.preparedCommit.worldId,\n );\n await governanceStore.putProposal(failedProposal);\n } catch {\n // Preserve the original execution failure if compensating persistence also fails.\n }\n }\n if (!isActionUnavailable(failure)) {\n kernel.emitEvent(\"dispatch:failed\", {\n intentId: intent.intentId ?? \"\",\n intent,\n error: failure,\n });\n }\n throw failure;\n }\n }\n\n async function applyAuthorityDecision(\n proposal: Proposal & { readonly status: \"evaluating\" },\n response: Extract<AuthorityResponse, { kind: \"approved\" | \"rejected\" }>,\n ): Promise<Proposal> {\n const prepared = await governanceService.prepareAuthorityResult(\n proposal,\n response,\n {\n decidedAt: getCurrentTimestamp(),\n },\n );\n\n await governanceStore.putProposal(prepared.proposal);\n if (prepared.decisionRecord) {\n await governanceStore.putDecisionRecord(prepared.decisionRecord);\n }\n\n if (prepared.discarded || prepared.proposal.status === \"rejected\") {\n return prepared.proposal;\n }\n\n const executingProposal = governanceService.beginExecution(prepared.proposal);\n await governanceStore.putProposal(executingProposal);\n\n return finalizeApprovedExecution(executingProposal, toCoreIntent(prepared.proposal));\n }\n\n async function proposeAsync(intent: CoreIntent): Promise<Proposal> {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n return kernel.enqueue(async () => {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n await ensureReady();\n\n const enrichedIntent = kernel.ensureIntentId(intent);\n if (!kernel.isActionAvailable(enrichedIntent.type as keyof T[\"actions\"])) {\n return kernel.rejectUnavailable(enrichedIntent);\n }\n\n const branch = await lineage.getActiveBranch();\n await invalidateStaleIngress(branch.id, branch.epoch);\n\n const actor = config.execution.deriveActor(enrichedIntent);\n const binding = await resolveBinding(actor.actorId);\n const intentInstance = await createIntentInstance({\n body: {\n type: enrichedIntent.type,\n ...(enrichedIntent.input !== undefined ? { input: enrichedIntent.input } : {}),\n ...(hasScopeProposal(enrichedIntent)\n ? { scopeProposal: enrichedIntent.scopeProposal }\n : {}),\n },\n schemaHash: kernel.schema.hash,\n projectionId: config.execution.projectionId,\n source: config.execution.deriveSource(enrichedIntent),\n actor,\n intentId: enrichedIntent.intentId,\n });\n\n const proposalId = createProposalId();\n const proposal = governanceService.createProposal({\n proposalId,\n baseWorld: branch.head,\n branchId: branch.id,\n actorId: binding.actorId,\n authorityId: binding.authorityId,\n intent: {\n type: intentInstance.body.type,\n intentId: intentInstance.intentId,\n ...(intentInstance.body.input !== undefined\n ? { input: intentInstance.body.input }\n : {}),\n ...(intentInstance.body.scopeProposal !== undefined\n ? { scopeProposal: intentInstance.body.scopeProposal }\n : {}),\n },\n executionKey: defaultExecutionKeyPolicy({\n proposalId,\n actorId: binding.actorId,\n baseWorld: branch.head,\n branchId: branch.id,\n attempt: 1,\n }),\n submittedAt: getCurrentTimestamp(),\n epoch: branch.epoch,\n });\n\n await governanceStore.putProposal(proposal);\n\n const evaluatingProposal = governanceService.beginEvaluating(proposal);\n await governanceStore.putProposal(evaluatingProposal);\n\n const response = await evaluateProposal(evaluatingProposal, binding, evaluator);\n if (response.kind === \"pending\") {\n return evaluatingProposal;\n }\n\n return applyAuthorityDecision(evaluatingProposal, response);\n });\n }\n\n async function getEvaluatingProposal(proposalId: ProposalId) {\n const proposal = await governanceStore.getProposal(proposalId);\n if (!proposal) {\n throw new ManifestoError(\n \"GOVERNANCE_PROPOSAL_NOT_FOUND\",\n `Proposal \"${proposalId}\" was not found`,\n );\n }\n\n if (proposal.status !== \"evaluating\") {\n throw new ManifestoError(\n \"GOVERNANCE_PENDING_REQUIRED\",\n `Proposal \"${proposalId}\" is not pending human resolution`,\n );\n }\n\n return proposal as Proposal & { readonly status: \"evaluating\" };\n }\n\n async function approve(\n proposalId: ProposalId,\n approvedScope?: IntentScope | null,\n ): Promise<Proposal> {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n return kernel.enqueue(async () => {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n await ensureReady();\n const proposal = await getEvaluatingProposal(proposalId);\n return applyAuthorityDecision(proposal, {\n kind: \"approved\",\n approvedScope:\n approvedScope !== undefined\n ? approvedScope\n : proposal.intent.scopeProposal ?? null,\n });\n });\n }\n\n async function reject(proposalId: ProposalId, reason?: string): Promise<Proposal> {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n return kernel.enqueue(async () => {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n await ensureReady();\n const proposal = await getEvaluatingProposal(proposalId);\n return applyAuthorityDecision(proposal, {\n kind: \"rejected\",\n ...(reason ? { reason } : {}),\n });\n });\n }\n\n async function getProposal(proposalId: ProposalId): Promise<Proposal | null> {\n await ensureBindings();\n return governanceStore.getProposal(proposalId);\n }\n\n async function getProposals(branchId?: BranchId): Promise<readonly Proposal[]> {\n await ensureReady();\n const resolvedBranchId = branchId ?? (await lineage.getActiveBranch()).id;\n return governanceStore.getProposalsByBranch(resolvedBranchId);\n }\n\n async function bindActor(binding: ActorAuthorityBinding): Promise<void> {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n return kernel.enqueue(async () => {\n if (kernel.isDisposed()) {\n throw new DisposedError();\n }\n\n await ensureBindings();\n await governanceStore.putActorBinding(binding);\n });\n }\n\n async function getActorBinding(actorId: string): Promise<ActorAuthorityBinding | null> {\n await ensureBindings();\n return governanceStore.getActorBinding(actorId);\n }\n\n async function getDecisionRecord(\n decisionId: DecisionRecord[\"decisionId\"],\n ): Promise<DecisionRecord | null> {\n await ensureBindings();\n return governanceStore.getDecisionRecord(decisionId);\n }\n\n const governed = {\n createIntent: kernel.createIntent,\n subscribe: kernel.subscribe,\n on: kernel.on,\n getSnapshot: kernel.getSnapshot,\n getAvailableActions: kernel.getAvailableActions,\n isActionAvailable: kernel.isActionAvailable,\n MEL: kernel.MEL,\n schema: kernel.schema,\n dispose: kernel.dispose,\n restore: lineage.restore,\n getWorld: lineage.getWorld,\n getLatestHead: lineage.getLatestHead,\n getHeads: lineage.getHeads,\n getBranches: lineage.getBranches,\n getActiveBranch: lineage.getActiveBranch,\n switchActiveBranch: lineage.switchActiveBranch,\n createBranch: lineage.createBranch,\n proposeAsync,\n approve,\n reject,\n getProposal,\n getProposals,\n bindActor,\n getActorBinding,\n getDecisionRecord,\n };\n\n return governed satisfies GovernanceInstance<T>;\n}\n\nfunction resolveGovernanceLineageConfig(\n lineage: GovernanceLineageConfig | LineageConfig | undefined,\n): ResolvedLineageConfig {\n if (!lineage) {\n throw new ManifestoError(\n \"GOVERNANCE_LINEAGE_REQUIRED\",\n \"withGovernance() requires explicit lineage configuration when lineage is not already composed\",\n );\n }\n\n if (!lineage.service && !lineage.store) {\n throw new ManifestoError(\n \"GOVERNANCE_LINEAGE_REQUIRED\",\n \"Governance lineage configuration must provide a LineageService or LineageStore\",\n );\n }\n\n if (lineage.service) {\n return Object.freeze({\n ...lineage,\n service: lineage.service,\n });\n }\n\n const store = lineage.store;\n if (!store) {\n throw new ManifestoError(\n \"GOVERNANCE_LINEAGE_REQUIRED\",\n \"Governance lineage configuration must provide a LineageService or LineageStore\",\n );\n }\n\n return Object.freeze({\n ...lineage,\n service: createLineageService(store),\n });\n}\n\nfunction toCoreIntent(proposal: Proposal): CoreIntent {\n return {\n type: proposal.intent.type,\n intentId: proposal.intent.intentId,\n ...(proposal.intent.input !== undefined ? { input: proposal.intent.input } : {}),\n };\n}\n\nfunction hasScopeProposal(intent: CoreIntent): intent is CoreIntent & {\n readonly scopeProposal: IntentScope;\n} {\n return \"scopeProposal\" in intent && intent.scopeProposal !== undefined;\n}\n\nfunction toGovernanceFailure(error: unknown): Error {\n if (error instanceof Error) {\n return error;\n }\n\n return new ManifestoError(\n \"GOVERNANCE_EXECUTION_FAILED\",\n \"Governed proposal execution did not produce a completed result\",\n );\n}\n\nfunction isActionUnavailable(error: Error): boolean {\n return \"code\" in error\n && typeof error.code === \"string\"\n && error.code === \"ACTION_UNAVAILABLE\";\n}\n"],"mappings":"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","names":["decisionRecord"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manifesto-ai/governance",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Manifesto Governance -
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "Manifesto Governance - decorator runtime for legitimacy, approval, and governed execution",
|
|
5
5
|
"author": "eggplantiny <eggplantiny@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"@manifesto-ai/core": "^2.0.0"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@manifesto-ai/lineage": "0.
|
|
36
|
+
"@manifesto-ai/lineage": "3.0.0",
|
|
37
|
+
"@manifesto-ai/sdk": "3.0.0"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"typescript": "^5.9.3",
|