@contractspec/lib.execution-lanes 0.1.1

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 (103) hide show
  1. package/README.md +27 -0
  2. package/dist/adapters/in-process.d.ts +4 -0
  3. package/dist/adapters/index.d.ts +6 -0
  4. package/dist/adapters/queue.d.ts +7 -0
  5. package/dist/adapters/subagent.d.ts +10 -0
  6. package/dist/adapters/tmux.d.ts +10 -0
  7. package/dist/adapters/types.d.ts +16 -0
  8. package/dist/adapters/workflow-engine.d.ts +10 -0
  9. package/dist/defaults/defaults.test.d.ts +1 -0
  10. package/dist/defaults/index.d.ts +3 -0
  11. package/dist/defaults/index.js +2 -0
  12. package/dist/defaults/lanes.d.ts +2 -0
  13. package/dist/defaults/roles.d.ts +2 -0
  14. package/dist/defaults/transitions.d.ts +2 -0
  15. package/dist/evidence/bundle.d.ts +13 -0
  16. package/dist/evidence/bundle.test.d.ts +1 -0
  17. package/dist/evidence/gate.d.ts +10 -0
  18. package/dist/evidence/gate.test.d.ts +1 -0
  19. package/dist/index.d.ts +32 -0
  20. package/dist/index.js +4 -0
  21. package/dist/interop/commands.d.ts +18 -0
  22. package/dist/interop/commands.test.d.ts +1 -0
  23. package/dist/interop/index.d.ts +1 -0
  24. package/dist/interop/index.js +2 -0
  25. package/dist/lanes/clarify/clarify.d.ts +11 -0
  26. package/dist/lanes/clarify/clarify.test.d.ts +1 -0
  27. package/dist/lanes/complete/completion-loop-authority.test.d.ts +1 -0
  28. package/dist/lanes/complete/completion-loop-failures.test.d.ts +1 -0
  29. package/dist/lanes/complete/completion-loop-progress.d.ts +7 -0
  30. package/dist/lanes/complete/completion-loop-shared.d.ts +24 -0
  31. package/dist/lanes/complete/completion-loop-terminal.d.ts +12 -0
  32. package/dist/lanes/complete/completion-loop.d.ts +31 -0
  33. package/dist/lanes/complete/completion-loop.test.d.ts +1 -0
  34. package/dist/lanes/complete/failure-class.d.ts +7 -0
  35. package/dist/lanes/plan/consensus-authority.d.ts +10 -0
  36. package/dist/lanes/plan/consensus-authority.test.d.ts +1 -0
  37. package/dist/lanes/plan/consensus.d.ts +54 -0
  38. package/dist/lanes/plan/consensus.test.d.ts +1 -0
  39. package/dist/lanes/team/finalize.d.ts +4 -0
  40. package/dist/lanes/team/team-run-authority.test.d.ts +1 -0
  41. package/dist/lanes/team/team-run-control.d.ts +4 -0
  42. package/dist/lanes/team/team-run-control.test.d.ts +1 -0
  43. package/dist/lanes/team/team-run-core.d.ts +19 -0
  44. package/dist/lanes/team/team-run-lifecycle.d.ts +7 -0
  45. package/dist/lanes/team/team-run-operations.d.ts +10 -0
  46. package/dist/lanes/team/team-run-scope.test.d.ts +1 -0
  47. package/dist/lanes/team/team-run-shared.d.ts +23 -0
  48. package/dist/lanes/team/team-run.d.ts +48 -0
  49. package/dist/lanes/team/team-run.test.d.ts +1 -0
  50. package/dist/lanes/team/worker-launch.d.ts +3 -0
  51. package/dist/node/defaults/index.js +1 -0
  52. package/dist/node/index.js +3 -0
  53. package/dist/node/interop/index.js +1 -0
  54. package/dist/node/types/index.js +1 -0
  55. package/dist/package-exports.test.d.ts +1 -0
  56. package/dist/registry/execution-lane-registry.d.ts +9 -0
  57. package/dist/registry/role-profile-registry.d.ts +10 -0
  58. package/dist/registry/verification-policy-registry.d.ts +10 -0
  59. package/dist/runtime/authority-hooks.d.ts +14 -0
  60. package/dist/runtime/in-memory-store.d.ts +34 -0
  61. package/dist/runtime/lane-runtime-authority.test.d.ts +1 -0
  62. package/dist/runtime/lane-runtime-options.d.ts +11 -0
  63. package/dist/runtime/lane-runtime-terminal.d.ts +5 -0
  64. package/dist/runtime/lane-runtime.d.ts +20 -0
  65. package/dist/runtime/lane-runtime.test.d.ts +1 -0
  66. package/dist/runtime/persistence-bundle.d.ts +2 -0
  67. package/dist/runtime/persistence-bundle.test.d.ts +1 -0
  68. package/dist/runtime/persistence-files-codec.d.ts +6 -0
  69. package/dist/runtime/persistence-files.d.ts +4 -0
  70. package/dist/runtime/persistence-files.test.d.ts +1 -0
  71. package/dist/runtime/readiness.d.ts +16 -0
  72. package/dist/runtime/role-guard.d.ts +12 -0
  73. package/dist/runtime/role-guard.test.d.ts +1 -0
  74. package/dist/runtime/selector.d.ts +12 -0
  75. package/dist/runtime/selector.test.d.ts +1 -0
  76. package/dist/runtime/state-sync.d.ts +5 -0
  77. package/dist/runtime/status-views.d.ts +5 -0
  78. package/dist/runtime/store.d.ts +22 -0
  79. package/dist/types/completion.d.ts +60 -0
  80. package/dist/types/core.d.ts +19 -0
  81. package/dist/types/evidence.d.ts +64 -0
  82. package/dist/types/failures.d.ts +8 -0
  83. package/dist/types/failures.test.d.ts +1 -0
  84. package/dist/types/identifiers.d.ts +12 -0
  85. package/dist/types/index.d.ts +10 -0
  86. package/dist/types/index.js +2 -0
  87. package/dist/types/lanes.d.ts +65 -0
  88. package/dist/types/plan.d.ts +46 -0
  89. package/dist/types/roles.d.ts +24 -0
  90. package/dist/types/runtime.d.ts +123 -0
  91. package/dist/types/team.d.ts +128 -0
  92. package/dist/utils/deep-clone.d.ts +1 -0
  93. package/dist/utils/id.d.ts +1 -0
  94. package/dist/validation/clarification-artifact.d.ts +4 -0
  95. package/dist/validation/completion-loop-spec.d.ts +4 -0
  96. package/dist/validation/contracts.test.d.ts +1 -0
  97. package/dist/validation/issues.d.ts +6 -0
  98. package/dist/validation/lane-spec.d.ts +3 -0
  99. package/dist/validation/plan-pack.d.ts +3 -0
  100. package/dist/validation/role-profile.d.ts +3 -0
  101. package/dist/validation/team-run-spec.d.ts +4 -0
  102. package/dist/validation/verification-policy.d.ts +5 -0
  103. package/package.json +105 -0
@@ -0,0 +1,16 @@
1
+ import type { ExecutionLaneSpec, LaneKey, LaneRuntimeSnapshot, TerminalReadiness } from '../types';
2
+ export interface LaneReadinessOptions {
3
+ laneRegistry?: {
4
+ get(key: LaneKey): ExecutionLaneSpec | undefined;
5
+ };
6
+ now?: () => Date;
7
+ }
8
+ export interface LaneReadinessEvaluation {
9
+ missingArtifacts: string[];
10
+ missingEvidence: string[];
11
+ missingApprovals: string[];
12
+ blockingRisks: string[];
13
+ missingNextLane: boolean;
14
+ terminalReadiness: TerminalReadiness;
15
+ }
16
+ export declare function evaluateLaneReadiness(snapshot: LaneRuntimeSnapshot, options?: LaneReadinessOptions): LaneReadinessEvaluation;
@@ -0,0 +1,12 @@
1
+ import { RoleProfileRegistry } from '../registry/role-profile-registry';
2
+ import type { LaneKey, RoleProfile, RoleToolPermission, RoleWriteScope } from '../types';
3
+ export interface RoleGuardInput {
4
+ roleKey: string;
5
+ lane: LaneKey;
6
+ requiredTools?: RoleToolPermission[];
7
+ allowedWriteScopes?: RoleWriteScope[];
8
+ }
9
+ export declare function createRoleGuard(registry: RoleProfileRegistry): {
10
+ get(roleKey: string): RoleProfile;
11
+ assert(input: RoleGuardInput): RoleProfile;
12
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { ExecutionPlanPack, LaneKey } from '../types';
2
+ export interface LaneSelectionInput {
3
+ preferredLane?: LaneKey;
4
+ hasPlanPack?: boolean;
5
+ ambiguityScore?: number;
6
+ parallelizableTaskCount?: number;
7
+ requiresDurableClosure?: boolean;
8
+ planPack?: ExecutionPlanPack;
9
+ }
10
+ export declare function createLaneSelector(): {
11
+ select(input: LaneSelectionInput): LaneKey;
12
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { ApprovalRecord, CompletionLoopState, TeamRunState } from '../types';
2
+ import type { LaneRuntimeStore } from './store';
3
+ export declare function syncLaneRunFromCompletion(store: LaneRuntimeStore, state: CompletionLoopState, terminalReason?: string): Promise<import("..").LaneRunState | undefined>;
4
+ export declare function syncLaneRunFromTeam(store: LaneRuntimeStore, state: TeamRunState): Promise<import("..").LaneRunState | undefined>;
5
+ export declare function syncLaneApprovalState(store: LaneRuntimeStore, approval: ApprovalRecord): Promise<import("..").LaneRunState | undefined>;
@@ -0,0 +1,5 @@
1
+ import type { CompletionStatusView, LaneRuntimeSnapshot, LaneStatusView, TeamStatusView } from '../types';
2
+ export declare const TEAM_STALE_HEARTBEAT_MS = 90000;
3
+ export declare function buildLaneStatusView(snapshot: LaneRuntimeSnapshot, now?: Date): LaneStatusView;
4
+ export declare function buildCompletionStatusView(snapshot: LaneRuntimeSnapshot, now?: Date): CompletionStatusView | undefined;
5
+ export declare function buildTeamStatusView(snapshot: LaneRuntimeSnapshot, now?: Date): TeamStatusView | undefined;
@@ -0,0 +1,22 @@
1
+ import type { ApprovalRecord, CompletionLoopState, EvidenceBundleRef, LaneArtifactRecord, LaneEventRecord, LaneRunState, LaneRuntimeSnapshot, LaneTransitionRecord, TeamRunState } from '../types';
2
+ export interface LaneRuntimeStore {
3
+ createRun(run: LaneRunState): Promise<void>;
4
+ getRun(runId: string): Promise<LaneRunState | undefined>;
5
+ updateRun(runId: string, updater: (current: LaneRunState) => LaneRunState): Promise<LaneRunState>;
6
+ listRuns(): Promise<LaneRunState[]>;
7
+ saveArtifact(artifact: LaneArtifactRecord): Promise<void>;
8
+ listArtifacts(runId: string): Promise<LaneArtifactRecord[]>;
9
+ appendEvent(event: LaneEventRecord): Promise<void>;
10
+ listEvents(runId: string): Promise<LaneEventRecord[]>;
11
+ saveTransition(transition: LaneTransitionRecord): Promise<void>;
12
+ listTransitions(runId: string): Promise<LaneTransitionRecord[]>;
13
+ saveEvidence(bundle: EvidenceBundleRef): Promise<void>;
14
+ listEvidence(runId: string): Promise<EvidenceBundleRef[]>;
15
+ saveApproval(approval: ApprovalRecord): Promise<void>;
16
+ listApprovals(runId: string): Promise<ApprovalRecord[]>;
17
+ saveCompletion(state: CompletionLoopState): Promise<void>;
18
+ getCompletion(runId: string): Promise<CompletionLoopState | undefined>;
19
+ saveTeam(state: TeamRunState): Promise<void>;
20
+ getTeam(runId: string): Promise<TeamRunState | undefined>;
21
+ getSnapshot(runId: string): Promise<LaneRuntimeSnapshot | undefined>;
22
+ }
@@ -0,0 +1,60 @@
1
+ import type { EvidenceGateResult, VerificationPolicy, VerificationPolicySource } from './evidence';
2
+ import type { ExecutionLaneFailureClass, ExecutionLaneFailureClassInput } from './failures';
3
+ export type CompletionLoopPhase = 'initialized' | 'working' | 'waiting_for_evidence' | 'remediating' | 'awaiting_signoff' | 'completed' | 'blocked' | 'failed' | 'aborted';
4
+ export type CompletionFailureClass = ExecutionLaneFailureClass;
5
+ export type CompletionFailureClassInput = ExecutionLaneFailureClassInput;
6
+ export interface CompletionLoopSpec {
7
+ id: string;
8
+ ownerRole: string;
9
+ sourcePlanPackId?: string;
10
+ snapshotRef: string;
11
+ iterationLimit?: number;
12
+ delegateRoles: string[];
13
+ progressLedgerRef: string;
14
+ verificationPolicy: VerificationPolicySource;
15
+ signoff: {
16
+ verifierRole: string;
17
+ requireArchitectReview: boolean;
18
+ requireHumanApproval?: boolean;
19
+ };
20
+ terminalConditions: Array<'done' | 'blocked' | 'failed' | 'aborted'>;
21
+ }
22
+ export interface CompletionLedgerEntry {
23
+ id: string;
24
+ iteration: number;
25
+ createdAt: string;
26
+ message: string;
27
+ classification?: CompletionFailureClass;
28
+ metadata?: Record<string, unknown>;
29
+ }
30
+ export interface CompletionLoopState {
31
+ runId: string;
32
+ spec: Omit<CompletionLoopSpec, 'verificationPolicy'> & {
33
+ verificationPolicy: VerificationPolicy;
34
+ };
35
+ phase: CompletionLoopPhase;
36
+ iteration: number;
37
+ retryCount: number;
38
+ progressLedger: CompletionLedgerEntry[];
39
+ evidenceBundleIds: string[];
40
+ pendingApprovalRoles: string[];
41
+ contextSnapshotArtifactId?: string;
42
+ progressLedgerArtifactId?: string;
43
+ loopStateArtifactId?: string;
44
+ signoffArtifactId?: string;
45
+ terminalRecordArtifactId?: string;
46
+ lastGateResult?: EvidenceGateResult;
47
+ lastFailureClass?: CompletionFailureClass;
48
+ createdAt: string;
49
+ updatedAt: string;
50
+ }
51
+ export interface CompletionRecord {
52
+ runId: string;
53
+ status: Extract<CompletionLoopPhase, 'completed' | 'blocked' | 'failed' | 'aborted'>;
54
+ completedAt: string;
55
+ iterationCount: number;
56
+ evidenceBundleIds: string[];
57
+ approvalIds: string[];
58
+ unresolvedRisks: string[];
59
+ terminalReason?: string;
60
+ }
@@ -0,0 +1,19 @@
1
+ export type LaneKey = 'clarify' | 'plan.consensus' | 'complete.persistent' | 'team.coordinated';
2
+ export type ExecutionScopeClass = 'small' | 'medium' | 'large' | 'high-risk';
3
+ export type LaneParallelism = 'none' | 'bounded' | 'durable';
4
+ export type LanePersistence = 'ephemeral' | 'checkpointed' | 'durable';
5
+ export type LaneRunStatus = 'initialized' | 'running' | 'waiting' | 'paused' | 'completed' | 'blocked' | 'failed' | 'aborted' | 'superseded';
6
+ export type LaneTerminalStatus = Extract<LaneRunStatus, 'completed' | 'blocked' | 'failed' | 'aborted' | 'superseded'>;
7
+ export type ApprovalVerdict = 'approve' | 'acknowledge';
8
+ export interface AuthorityContextRefs {
9
+ policyRefs: string[];
10
+ ruleContextRefs: string[];
11
+ approvalRefs?: string[];
12
+ }
13
+ export interface RuntimeContextRefs {
14
+ sessionId?: string;
15
+ traceId?: string;
16
+ workflowId?: string;
17
+ checkpointId?: string;
18
+ snapshotRef?: string;
19
+ }
@@ -0,0 +1,64 @@
1
+ import type { ApprovalVerdict } from './core';
2
+ import type { ExecutionLaneArtifactIdentifier, ExecutionLaneEvidenceIdentifier } from './identifiers';
3
+ export interface EvidenceBundleRef {
4
+ id: string;
5
+ runId: string;
6
+ artifactIds: string[];
7
+ classes: ExecutionLaneEvidenceIdentifier[];
8
+ createdAt: string;
9
+ freshUntil?: string;
10
+ replayBundleUri?: string;
11
+ summary?: string;
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ export interface ApprovalRequirement {
15
+ role: string;
16
+ verdict: ApprovalVerdict;
17
+ }
18
+ export interface VerificationPolicy {
19
+ key: string;
20
+ requiredEvidence: ExecutionLaneEvidenceIdentifier[];
21
+ minimumApprovals: ApprovalRequirement[];
22
+ failOnMissingEvidence: boolean;
23
+ allowConditionalCompletion: boolean;
24
+ maxEvidenceAgeMinutes?: number;
25
+ }
26
+ export type VerificationPolicySource = string | VerificationPolicy;
27
+ export type ApprovalState = 'requested' | 'approved' | 'rejected' | 'expired' | 'superseded';
28
+ export type TerminalReadiness = 'ready' | 'missing_artifact' | 'missing_evidence' | 'missing_approval' | 'stale_evidence' | 'blocked' | 'cleanup_pending' | 'not_ready';
29
+ export interface ApprovalRecord {
30
+ id: string;
31
+ runId: string;
32
+ role: string;
33
+ verdict: ApprovalVerdict;
34
+ state: ApprovalState;
35
+ comment?: string;
36
+ requestedAt: string;
37
+ decidedAt?: string;
38
+ decidedBy?: string;
39
+ }
40
+ export interface LaneArtifactRecord {
41
+ id: string;
42
+ runId: string;
43
+ artifactType: ExecutionLaneArtifactIdentifier;
44
+ createdAt: string;
45
+ body: unknown;
46
+ summary?: string;
47
+ }
48
+ export interface LaneEventRecord {
49
+ id: string;
50
+ runId: string;
51
+ type: string;
52
+ createdAt: string;
53
+ phase?: string;
54
+ message?: string;
55
+ metadata?: Record<string, unknown>;
56
+ }
57
+ export interface EvidenceGateResult {
58
+ passed: boolean;
59
+ conditionallyPassed?: boolean;
60
+ missingEvidence: string[];
61
+ missingApprovals: string[];
62
+ staleEvidence: string[];
63
+ blockingRisks: string[];
64
+ }
@@ -0,0 +1,8 @@
1
+ export declare const EXECUTION_LANE_FAILURE_CLASSES: readonly ["missing_evidence", "failing_evidence", "policy_blocked", "approval_denied", "runtime_failure", "worker_timeout", "lease_conflict"];
2
+ export type ExecutionLaneFailureClass = (typeof EXECUTION_LANE_FAILURE_CLASSES)[number];
3
+ export type LegacyExecutionLaneFailureAlias = 'retryable' | 'blocked' | 'fatal';
4
+ export type ExecutionLaneFailureClassInput = ExecutionLaneFailureClass | LegacyExecutionLaneFailureAlias;
5
+ export declare function normalizeExecutionLaneFailureClass(value: ExecutionLaneFailureClassInput): ExecutionLaneFailureClass;
6
+ export declare function isExecutionLaneFailureClass(value: string): value is ExecutionLaneFailureClass;
7
+ export declare function isRetryableExecutionLaneFailureClass(value: ExecutionLaneFailureClassInput): boolean;
8
+ export declare function isBlockingExecutionLaneFailureClass(value: ExecutionLaneFailureClassInput): boolean;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ export declare const EXECUTION_LANE_ARTIFACT_TYPES: readonly ["architect_review", "clarification_artifact", "completion_record", "context_snapshot", "critique_verdict", "evidence_bundle_ref", "evidence_gate_result", "loop_state", "operator_action", "plan_pack", "planner_draft", "planner_revision", "progress_ledger", "signoff_record", "signoff_request", "team_cleanup_state", "team_snapshot", "terminal_state", "tradeoff_record", "verification_lane_evidence"];
2
+ export type ExecutionLaneArtifactType = (typeof EXECUTION_LANE_ARTIFACT_TYPES)[number];
3
+ export type ExecutionLaneArtifactIdentifier = ExecutionLaneArtifactType | (string & {});
4
+ export declare const EXECUTION_LANE_EVIDENCE_CLASSES: readonly ["architect_review", "clarification_artifact", "completion_record", "critique_verdict", "plan_pack", "progress_ledger", "signoff_record", "team_snapshot", "tradeoff_record", "verification_lane_evidence", "verification_results"];
5
+ export type ExecutionLaneEvidenceClass = (typeof EXECUTION_LANE_EVIDENCE_CLASSES)[number];
6
+ export type ExecutionLaneEvidenceIdentifier = ExecutionLaneEvidenceClass | (string & {});
7
+ export declare function normalizeExecutionLaneArtifactType(value: string): ExecutionLaneArtifactIdentifier;
8
+ export declare function normalizeExecutionLaneEvidenceClass(value: string): ExecutionLaneEvidenceIdentifier;
9
+ export declare function normalizeExecutionLaneArtifactTypes(values: readonly string[]): ExecutionLaneArtifactIdentifier[];
10
+ export declare function normalizeExecutionLaneEvidenceClasses(values: readonly string[]): ExecutionLaneEvidenceIdentifier[];
11
+ export declare function isExecutionLaneArtifactType(value: string): value is ExecutionLaneArtifactType;
12
+ export declare function isExecutionLaneEvidenceClass(value: string): value is ExecutionLaneEvidenceClass;
@@ -0,0 +1,10 @@
1
+ export * from './completion';
2
+ export * from './core';
3
+ export * from './evidence';
4
+ export * from './failures';
5
+ export * from './identifiers';
6
+ export * from './lanes';
7
+ export * from './plan';
8
+ export * from './roles';
9
+ export * from './runtime';
10
+ export * from './team';
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var n=["missing_evidence","failing_evidence","policy_blocked","approval_denied","runtime_failure","worker_timeout","lease_conflict"],i={retryable:"runtime_failure",blocked:"policy_blocked",fatal:"runtime_failure"};function r(e){return a(e)?e:i[e]}function a(e){return n.includes(e)}function g(e){switch(r(e)){case"missing_evidence":case"failing_evidence":case"runtime_failure":case"worker_timeout":case"lease_conflict":return!0;default:return!1}}function m(e){switch(r(e)){case"policy_blocked":case"approval_denied":return!0;default:return!1}}var o=["architect_review","clarification_artifact","completion_record","context_snapshot","critique_verdict","evidence_bundle_ref","evidence_gate_result","loop_state","operator_action","plan_pack","planner_draft","planner_revision","progress_ledger","signoff_record","signoff_request","team_cleanup_state","team_snapshot","terminal_state","tradeoff_record","verification_lane_evidence"],s=["architect_review","clarification_artifact","completion_record","critique_verdict","plan_pack","progress_ledger","signoff_record","team_snapshot","tradeoff_record","verification_lane_evidence","verification_results"],c={"architect-review":"architect_review","clarification-artifact":"clarification_artifact","completion-record":"completion_record","context-snapshot":"context_snapshot","critic-review":"critique_verdict","evidence-bundle-ref":"evidence_bundle_ref","evidence-gate-result":"evidence_gate_result","execution-plan-pack":"plan_pack","loop-state":"loop_state","operator-action":"operator_action","plan-pack":"plan_pack","planner-draft":"planner_draft","planner-revision":"planner_revision","progress-ledger":"progress_ledger","review-record":"architect_review","signoff-record":"signoff_record","signoff-request":"signoff_request","team-cleanup-state":"team_cleanup_state","team-completion-snapshot":"team_snapshot","team-snapshot":"team_snapshot","terminal-record":"completion_record","terminal-state":"terminal_state","tradeoff-record":"tradeoff_record","verification-lane-evidence":"verification_lane_evidence"},d={"architect-review":"architect_review","clarification-artifact":"clarification_artifact","completion-record":"completion_record","critic-review":"critique_verdict","execution-plan-pack":"plan_pack","plan-pack":"plan_pack","progress-ledger":"progress_ledger","signoff-record":"signoff_record","team-completion-snapshot":"team_snapshot","team-snapshot":"team_snapshot","terminal-record":"completion_record","tradeoff-record":"tradeoff_record","verification-lane-evidence":"verification_lane_evidence","verification-results":"verification_results"};function p(e){return c[e]??e}function l(e){return d[e]??e}function f(e){return e.map((t)=>p(t))}function R(e){return e.map((t)=>l(t))}function x(e){return o.includes(e)}function y(e){return s.includes(e)}export{r as normalizeExecutionLaneFailureClass,R as normalizeExecutionLaneEvidenceClasses,l as normalizeExecutionLaneEvidenceClass,f as normalizeExecutionLaneArtifactTypes,p as normalizeExecutionLaneArtifactType,g as isRetryableExecutionLaneFailureClass,a as isExecutionLaneFailureClass,y as isExecutionLaneEvidenceClass,x as isExecutionLaneArtifactType,m as isBlockingExecutionLaneFailureClass,n as EXECUTION_LANE_FAILURE_CLASSES,s as EXECUTION_LANE_EVIDENCE_CLASSES,o as EXECUTION_LANE_ARTIFACT_TYPES};
@@ -0,0 +1,65 @@
1
+ import type { AuthorityContextRefs, ExecutionScopeClass, LaneKey, LaneParallelism, LanePersistence, LaneRunStatus, RuntimeContextRefs } from './core';
2
+ import type { VerificationPolicySource } from './evidence';
3
+ import type { ExecutionLaneArtifactIdentifier } from './identifiers';
4
+ export interface ExecutionLaneSpec {
5
+ key: LaneKey;
6
+ description: string;
7
+ entryCriteria: string[];
8
+ exitCriteria: string[];
9
+ allowedTransitions: LaneKey[];
10
+ compatibleRoles: string[];
11
+ requiredArtifacts: ExecutionLaneArtifactIdentifier[];
12
+ verificationPolicy: VerificationPolicySource;
13
+ capabilities: {
14
+ parallelism: LaneParallelism;
15
+ persistence: LanePersistence;
16
+ approvals: boolean;
17
+ mailbox: boolean;
18
+ taskLeasing: boolean;
19
+ };
20
+ }
21
+ export interface ClarificationArtifact {
22
+ meta: {
23
+ id: string;
24
+ createdAt: string;
25
+ sourceRequest: string;
26
+ scopeClass: ExecutionScopeClass;
27
+ ambiguityScore: number;
28
+ recommendedNextLane: LaneKey;
29
+ };
30
+ objective: string;
31
+ constraints: string[];
32
+ assumptions: string[];
33
+ openQuestions: string[];
34
+ conflictSignals: string[];
35
+ authorityContext: AuthorityContextRefs;
36
+ }
37
+ export interface LaneTransitionRecord {
38
+ id: string;
39
+ runId: string;
40
+ from?: LaneKey;
41
+ to: LaneKey;
42
+ reason: string;
43
+ createdAt: string;
44
+ actorId?: string;
45
+ }
46
+ export interface LaneRunState {
47
+ runId: string;
48
+ lane: LaneKey;
49
+ objective: string;
50
+ sourceRequest: string;
51
+ scopeClass: ExecutionScopeClass;
52
+ status: LaneRunStatus;
53
+ currentPhase: string;
54
+ ownerRole: string;
55
+ authorityContext: AuthorityContextRefs;
56
+ verificationPolicyKey: string;
57
+ blockingRisks: string[];
58
+ pendingApprovalRoles: string[];
59
+ evidenceBundleIds: string[];
60
+ runtimeContext?: RuntimeContextRefs;
61
+ createdAt: string;
62
+ updatedAt: string;
63
+ terminalReason?: string;
64
+ recommendedNextLane?: LaneKey;
65
+ }
@@ -0,0 +1,46 @@
1
+ import type { AuthorityContextRefs, ExecutionScopeClass, LaneKey } from './core';
2
+ export interface ExecutionPlanTradeoff {
3
+ topic: string;
4
+ tension: string;
5
+ chosenDirection: string;
6
+ rejectedAlternatives: string[];
7
+ }
8
+ export interface ExecutionPlanStep {
9
+ id: string;
10
+ title: string;
11
+ description: string;
12
+ acceptanceCriteria: string[];
13
+ dependencies?: string[];
14
+ roleHints?: string[];
15
+ }
16
+ export interface ExecutionPlanPack {
17
+ meta: {
18
+ id: string;
19
+ createdAt: string;
20
+ sourceRequest: string;
21
+ scopeClass: ExecutionScopeClass;
22
+ };
23
+ objective: string;
24
+ constraints: string[];
25
+ assumptions: string[];
26
+ nonGoals: string[];
27
+ tradeoffs: ExecutionPlanTradeoff[];
28
+ staffing: {
29
+ availableRoleProfiles: string[];
30
+ recommendedLanes: Array<{
31
+ lane: LaneKey;
32
+ why: string;
33
+ }>;
34
+ handoffRecommendation: {
35
+ nextLane: LaneKey;
36
+ launchHints: string[];
37
+ };
38
+ };
39
+ planSteps: ExecutionPlanStep[];
40
+ verification: {
41
+ requiredEvidence: string[];
42
+ requiredApprovals: string[];
43
+ blockingRisks: string[];
44
+ };
45
+ authorityContext: AuthorityContextRefs;
46
+ }
@@ -0,0 +1,24 @@
1
+ import type { LaneKey } from './core';
2
+ import type { ExecutionLaneEvidenceIdentifier } from './identifiers';
3
+ export type RoleRoutingRole = 'leader' | 'specialist' | 'executor' | 'reviewer';
4
+ export type RolePosture = 'orchestrator' | 'critic' | 'builder' | 'verifier' | 'researcher';
5
+ export type RoleToolPermission = 'read' | 'analyze' | 'execute' | 'network' | 'review';
6
+ export type RoleWriteScope = 'none' | 'artifacts-only' | 'workspace' | 'scoped-worktree';
7
+ export interface RoleProfile {
8
+ key: string;
9
+ description: string;
10
+ routingRole: RoleRoutingRole;
11
+ posture: RolePosture;
12
+ allowedTools: RoleToolPermission[];
13
+ writeScope: RoleWriteScope;
14
+ laneCompatibility: LaneKey[];
15
+ evidenceObligations: ExecutionLaneEvidenceIdentifier[];
16
+ escalationTriggers: string[];
17
+ modelProfileHint?: string;
18
+ }
19
+ export interface StaffingRecommendation {
20
+ lane: LaneKey;
21
+ roleKeys: string[];
22
+ launchHints: string[];
23
+ why: string;
24
+ }
@@ -0,0 +1,123 @@
1
+ import type { CompletionLoopState } from './completion';
2
+ import type { LaneKey, LaneRunStatus } from './core';
3
+ import type { ApprovalRecord, EvidenceBundleRef, LaneArtifactRecord, LaneEventRecord, TerminalReadiness } from './evidence';
4
+ import type { LaneRunState, LaneTransitionRecord } from './lanes';
5
+ import type { TeamCleanupStatus, TeamHeartbeatRecord, TeamLeaseRecord, TeamMailboxMessage, TeamRunState, TeamTaskRecord, TeamWorkerState } from './team';
6
+ export interface LaneRuntimeSnapshot {
7
+ run: LaneRunState;
8
+ events: LaneEventRecord[];
9
+ transitions: LaneTransitionRecord[];
10
+ artifacts: LaneArtifactRecord[];
11
+ evidence: EvidenceBundleRef[];
12
+ approvals: ApprovalRecord[];
13
+ completion?: CompletionLoopState;
14
+ team?: TeamRunState;
15
+ }
16
+ export interface LanePersistenceBundle {
17
+ exportedAt: string;
18
+ run: LaneRunState;
19
+ state: {
20
+ completion?: CompletionLoopState;
21
+ team?: TeamRunState;
22
+ };
23
+ events: LaneEventRecord[];
24
+ transitions: LaneTransitionRecord[];
25
+ artifacts: LaneArtifactRecord[];
26
+ evidence: EvidenceBundleRef[];
27
+ approvals: ApprovalRecord[];
28
+ }
29
+ export interface TeamPersistenceStateSlice {
30
+ runId: TeamRunState['runId'];
31
+ spec: TeamRunState['spec'];
32
+ status: TeamRunState['status'];
33
+ cleanup: TeamRunState['cleanup'];
34
+ evidenceBundleIds: TeamRunState['evidenceBundleIds'];
35
+ createdAt: TeamRunState['createdAt'];
36
+ updatedAt: TeamRunState['updatedAt'];
37
+ terminalReason?: TeamRunState['terminalReason'];
38
+ terminalStateArtifactId?: TeamRunState['terminalStateArtifactId'];
39
+ }
40
+ export interface LanePersistenceStateFile {
41
+ completion?: CompletionLoopState;
42
+ team?: TeamPersistenceStateSlice;
43
+ }
44
+ export interface TeamTaskLeaseFileRecord {
45
+ taskId: TeamTaskRecord['taskId'];
46
+ lease: TeamLeaseRecord;
47
+ }
48
+ export type TeamTaskFileRecord = Omit<TeamTaskRecord, 'lease'>;
49
+ export interface LanePersistenceFiles {
50
+ 'laneRun.json': string;
51
+ 'state.json': string;
52
+ 'events.ndjson': string;
53
+ 'artifacts.json': string;
54
+ 'evidence.json': string;
55
+ 'approvals.json': string;
56
+ 'transitions.json': string;
57
+ 'workers.json'?: string;
58
+ 'tasks.json'?: string;
59
+ 'leases.json'?: string;
60
+ 'mailbox.ndjson'?: string;
61
+ 'heartbeats.ndjson'?: string;
62
+ 'terminal-state.json'?: string;
63
+ }
64
+ export interface LanePersistenceHydrationPayload {
65
+ run: LaneRunState;
66
+ state: LanePersistenceStateFile;
67
+ events: LaneEventRecord[];
68
+ transitions: LaneTransitionRecord[];
69
+ artifacts: LaneArtifactRecord[];
70
+ evidence: EvidenceBundleRef[];
71
+ approvals: ApprovalRecord[];
72
+ workers: TeamWorkerState[];
73
+ tasks: TeamTaskFileRecord[];
74
+ leases: TeamTaskLeaseFileRecord[];
75
+ mailbox: TeamMailboxMessage[];
76
+ heartbeats: TeamHeartbeatRecord[];
77
+ terminalState: unknown;
78
+ }
79
+ export interface LaneStatusView {
80
+ runId: string;
81
+ lane: LaneKey;
82
+ objective: string;
83
+ status: LaneRunStatus;
84
+ currentPhase: string;
85
+ ownerRole: string;
86
+ evidenceCompleteness: number;
87
+ missingArtifacts: string[];
88
+ pendingApprovals: string[];
89
+ missingEvidence: string[];
90
+ missingApprovals: string[];
91
+ blockingRisks: string[];
92
+ terminalReadiness: TerminalReadiness;
93
+ recommendedNextLane?: LaneKey;
94
+ updatedAt: string;
95
+ }
96
+ export interface TeamStatusView {
97
+ runId: string;
98
+ status: TeamRunState['status'];
99
+ totalTasks: number;
100
+ completedTasks: number;
101
+ activeWorkers: number;
102
+ staleWorkers: number;
103
+ staleLeaseCount: number;
104
+ staleWorkerIds: string[];
105
+ pendingEvidence: number;
106
+ queueSkew: number;
107
+ verificationReady: boolean;
108
+ cleanupStatus: TeamCleanupStatus;
109
+ updatedAt: string;
110
+ }
111
+ export interface CompletionStatusView {
112
+ runId: string;
113
+ phase: CompletionLoopState['phase'];
114
+ iteration: number;
115
+ retryCount: number;
116
+ snapshotRef: string;
117
+ pendingApprovals: string[];
118
+ evidenceBundles: number;
119
+ lastFailureClass?: CompletionLoopState['lastFailureClass'];
120
+ missingEvidence: string[];
121
+ terminalReadiness: TerminalReadiness;
122
+ updatedAt: string;
123
+ }