@sublang/playbook 8.0.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +3 -3
  2. package/docs/cli.md +66 -23
  3. package/docs/configuration.md +13 -8
  4. package/docs/embedding.md +45 -14
  5. package/package.json +7 -3
  6. package/reference/sdlc/captain.md +14 -10
  7. package/reference/sdlc/captain.playbook/captain.fsm.d.ts +33 -13
  8. package/reference/sdlc/captain.playbook/captain.fsm.js +80 -9
  9. package/reference/sdlc/captain.playbook/captain.fsm.ts +137 -18
  10. package/reference/sdlc/captain.playbook/captain.gears.md +10 -6
  11. package/reference/sdlc/captain.playbook/captain.playbook.d.ts +5 -1
  12. package/reference/sdlc/captain.playbook/captain.playbook.js +151 -10
  13. package/reference/sdlc/captain.playbook/captain.playbook.ts +200 -14
  14. package/reference/sdlc/code.md +0 -1
  15. package/reference/sdlc/code.playbook/bin/interactive-session.js +170 -17
  16. package/reference/sdlc/code.playbook/bin/launch-config.js +136 -4
  17. package/reference/sdlc/code.playbook/bin/playbook.js +81 -4
  18. package/reference/sdlc/code.playbook/bin/repository-effects.js +2930 -0
  19. package/reference/sdlc/code.playbook/bin/run.js +365 -63
  20. package/reference/sdlc/code.playbook/bin/session-store.js +2877 -209
  21. package/reference/sdlc/code.playbook/code.fsm.d.ts +11 -1
  22. package/reference/sdlc/code.playbook/code.fsm.js +85 -29
  23. package/reference/sdlc/code.playbook/code.fsm.ts +95 -33
  24. package/reference/sdlc/code.playbook/code.gears.md +0 -2
  25. package/reference/sdlc/code.playbook/code.playbook.d.ts +5 -2
  26. package/reference/sdlc/code.playbook/code.playbook.js +67 -4
  27. package/reference/sdlc/code.playbook/code.playbook.ts +87 -8
  28. package/reference/sdlc/code.playbook/code.registry.d.ts +10 -3
  29. package/reference/sdlc/code.playbook/code.registry.js +10 -3
  30. package/reference/sdlc/code.playbook/code.registry.ts +23 -5
  31. package/reference/sdlc/code.playbook/playbook-captain.d.ts +99 -7
  32. package/reference/sdlc/code.playbook/playbook-captain.js +1894 -82
  33. package/reference/sdlc/code.playbook/playbook-captain.ts +2809 -109
  34. package/reference/sdlc/decide.md +0 -1
  35. package/reference/sdlc/decide.playbook/decide.fsm.d.ts +8 -1
  36. package/reference/sdlc/decide.playbook/decide.fsm.js +80 -29
  37. package/reference/sdlc/decide.playbook/decide.fsm.ts +89 -31
  38. package/reference/sdlc/decide.playbook/decide.gears.md +0 -1
  39. package/reference/sdlc/decide.playbook/decide.playbook.d.ts +15 -5
  40. package/reference/sdlc/decide.playbook/decide.playbook.js +1994 -191
  41. package/reference/sdlc/decide.playbook/decide.playbook.ts +3209 -404
  42. package/reference/sdlc/decide.playbook/decide.registry.d.ts +7 -3
  43. package/reference/sdlc/decide.playbook/decide.registry.js +10 -3
  44. package/reference/sdlc/decide.playbook/decide.registry.ts +20 -5
  45. package/reference/sdlc/review.playbook/review.fsm.d.ts +7 -0
  46. package/reference/sdlc/review.playbook/review.fsm.js +133 -12
  47. package/reference/sdlc/review.playbook/review.fsm.ts +140 -12
  48. package/reference/sdlc/review.playbook/review.playbook.d.ts +5 -2
  49. package/reference/sdlc/review.playbook/review.playbook.js +78 -4
  50. package/reference/sdlc/review.playbook/review.playbook.ts +95 -8
  51. package/reference/sdlc/review.playbook/review.registry.d.ts +10 -3
  52. package/reference/sdlc/review.playbook/review.registry.js +10 -3
  53. package/reference/sdlc/review.playbook/review.registry.ts +23 -5
  54. package/slc/gears2fsm.md +25 -7
  55. package/slc/link.md +727 -82
  56. package/src/accepted-outcome.d.ts +18 -0
  57. package/src/accepted-outcome.js +94 -0
  58. package/src/accepted-outcome.ts +140 -0
  59. package/src/runtime.d.ts +165 -3
  60. package/src/runtime.ts +214 -2
  61. package/src/xstate-playbook-runtime.d.ts +162 -13
  62. package/src/xstate-playbook-runtime.js +3344 -564
  63. package/src/xstate-playbook-runtime.ts +4873 -637
  64. package/src/xstate-runtime.d.ts +76 -8
  65. package/src/xstate-runtime.js +1001 -64
  66. package/src/xstate-runtime.ts +1640 -91
@@ -1,6 +1,14 @@
1
1
  import { type AnyActorRef, type PromiseActorLogic, type SnapshotFrom } from 'xstate';
2
- import type { CaptainResult, JsonValue, NormalizedError, PlaybookCallRequest, PlaybookCallResult, PlaybookCallStart, PlaybookPendingCall, PlaybookRuntimeSnapshot, PlaybookSession, PlaybookState, PlaybookSuspendedCall, PlayerResult } from './runtime.js';
2
+ import type { CaptainResult, JsonValue, NormalizedError, PlaybookCallRequest, PlaybookCallResult, PlaybookCallStart, PlaybookPendingCall, PlaybookEffectLedger, PlaybookRepositoryDisposition, PlaybookRuntimeSnapshot, PlaybookSession, PlaybookState, PlaybookSuspendedCall, PlayerResult } from './runtime.js';
3
3
  export * from './xstate-playbook-runtime.js';
4
+ /**
5
+ * Immutable cancellation provenance for one runtime operation. The captured
6
+ * signal identities do not change when a mutable runtime advances to another
7
+ * public boundary, while each signal's eventual reason remains observable.
8
+ */
9
+ interface AbortReasonClassifier {
10
+ isAbortReason(error: unknown): boolean;
11
+ }
4
12
  /**
5
13
  * Compose invocation-lifetime and imperative-boundary cancellation without
6
14
  * installing a second forwarding listener in each generated runtime.
@@ -22,7 +30,7 @@ export declare function hiddenControlEnvelope(prompt: string): string;
22
30
  export declare function normalizeError(error: unknown): NormalizedError;
23
31
  export interface PlaybookStateMetadata {
24
32
  stateId: string;
25
- description: string;
33
+ description?: string;
26
34
  }
27
35
  /** Read stable state identity without consulting XState's private `_nodes`. */
28
36
  export declare function activePlaybookStateMetadata(snapshot: unknown): readonly PlaybookStateMetadata[];
@@ -31,6 +39,64 @@ export interface SnapshotNormalizationOptions {
31
39
  }
32
40
  export declare function normalizePlaybookSnapshot(snapshot: unknown, options?: SnapshotNormalizationOptions): PlaybookState;
33
41
  export declare function detachPersistedMachineSnapshot(persisted: unknown): JsonValue;
42
+ /** Authority for one governed delegated-player output field (DR-040 §1). */
43
+ export type PlaybookSemanticFieldAuthority = 'presentation' | 'semantic' | 'effect' | 'runtime';
44
+ /** One already-validated state-local governed outcome declaration. */
45
+ export interface PlaybookSemanticOutcomeSpec {
46
+ readonly fields: Readonly<Record<string, PlaybookSemanticFieldAuthority>>;
47
+ readonly repositoryDisposition: PlaybookRepositoryDisposition;
48
+ }
49
+ /** Evidence available when one governed semantic candidate is reconciled. */
50
+ export interface PlaybookSemanticEvidenceInput {
51
+ readonly outcomes: Readonly<Record<string, PlaybookSemanticOutcomeSpec>>;
52
+ readonly semanticCandidate: unknown;
53
+ readonly finalText?: unknown;
54
+ readonly receipt?: unknown;
55
+ readonly runtimeFields?: unknown;
56
+ }
57
+ /** The exact detached actor output admitted to FSM delivery. */
58
+ export type PlaybookReconciledSemanticOutput = Readonly<Record<string, string>> & {
59
+ readonly guard: string;
60
+ };
61
+ /** Retained presentation and semantic evidence, kept separate from output. */
62
+ export interface PlaybookRetainedSemanticEvidence {
63
+ readonly finalText?: string;
64
+ readonly semanticCandidate: Readonly<Record<string, string>> & {
65
+ readonly guard: string;
66
+ };
67
+ }
68
+ export type PlaybookSemanticReconciliationReason = 'missing-presentation-evidence' | 'missing-repository-receipt' | 'invalid-repository-receipt' | 'repository-disposition-mismatch' | 'missing-effect-evidence' | 'missing-runtime-evidence' | 'inconsistent-runtime-evidence';
69
+ /** A fail-closed semantic/effect reconciliation decision. */
70
+ export type PlaybookSemanticReconciliation = {
71
+ readonly status: 'resolved' | 'deferred';
72
+ readonly output: PlaybookReconciledSemanticOutput;
73
+ readonly evidence: PlaybookRetainedSemanticEvidence;
74
+ } | {
75
+ readonly status: 'unresolved';
76
+ readonly reason: PlaybookSemanticReconciliationReason;
77
+ readonly evidence: PlaybookRetainedSemanticEvidence;
78
+ };
79
+ /**
80
+ * A judge candidate is structurally invalid, rather than merely awaiting or
81
+ * conflicting with effect evidence. Callers use this distinction to spend at
82
+ * most one durable correction budget before asking another hidden judge.
83
+ */
84
+ export declare class PlaybookSemanticCandidateStructureError extends TypeError {
85
+ constructor(message: string);
86
+ }
87
+ /**
88
+ * Reconcile one exact semantic candidate with host-owned effect evidence.
89
+ * Presentation prose remains opaque: it is retained verbatim and only its
90
+ * trimmed value is copied into linker-declared presentation fields. No
91
+ * repository fact is inferred from that prose or from the semantic candidate.
92
+ */
93
+ export declare function reconcilePlaybookSemanticEvidence(input: PlaybookSemanticEvidenceInput): PlaybookSemanticReconciliation;
94
+ /** Return the canonical empty host-owned effect-ledger mirror. */
95
+ export declare function emptyPlaybookEffectLedger(): PlaybookEffectLedger;
96
+ /** Validate, detach, and recursively freeze one effect-ledger mirror. */
97
+ export declare function assertPlaybookEffectLedger(value: unknown, path?: string): PlaybookEffectLedger;
98
+ /** Whether current preserves every durable fact in baseline and only extends it. */
99
+ export declare function isPlaybookEffectLedgerMonotonicExtension(baselineValue: unknown, currentValue: unknown): boolean;
34
100
  export interface PlaybookRuntimeSnapshotValidationOptions {
35
101
  /**
36
102
  * Opt in only when the restore path will prepare and confirm the suspended
@@ -59,12 +125,14 @@ export interface NestedPlaybookBridgeOptions {
59
125
  /** Active public runtime boundary whose abort also owns a new child call. */
60
126
  getBoundarySignal?(): AbortSignal | undefined;
61
127
  callPlaybook(request: PlaybookCallRequest, signal: AbortSignal): Promise<PlaybookCallStart>;
62
- emitStarted(event: PlaybookCallStarted): Promise<void>;
63
- emitFinished(event: PlaybookCallFinished): Promise<void>;
64
- drain(): Promise<void>;
65
- bindResumeSignal?(signal: AbortSignal): void;
66
- onControlPlaneError?(error: unknown): void;
67
- onBackgroundError?(error: unknown): void;
128
+ emitStarted(event: PlaybookCallStarted, aborts?: AbortReasonClassifier): Promise<void>;
129
+ emitFinished(event: PlaybookCallFinished, aborts?: AbortReasonClassifier): Promise<void>;
130
+ drain(aborts?: AbortReasonClassifier): Promise<void>;
131
+ bindResumeSignal?(signal: AbortSignal, aborts?: AbortReasonClassifier): void;
132
+ /** Bind provenance to the root transition caused by this child result. */
133
+ bindActorSettlement?(aborts: AbortReasonClassifier): void;
134
+ onControlPlaneError?(error: unknown, aborts?: AbortReasonClassifier): void;
135
+ onBackgroundError?(error: unknown, aborts?: AbortReasonClassifier): void;
68
136
  }
69
137
  export declare class NestedPlaybookCallError extends Error {
70
138
  readonly result: PlaybookCallResult;