@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
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # @contractspec/lib.execution-lanes
2
+
3
+ Website: https://contractspec.io
4
+
5
+ Typed execution-lane contracts, registries, runtimes, evidence gating, and backend adapter ports for ContractSpec.
6
+
7
+ ## What It Provides
8
+
9
+ - Lane contracts for `clarify`, `plan.consensus`, `complete.persistent`, and `team.coordinated`.
10
+ - Typed handoff artifacts including clarification artifacts, plan packs, completion records, team snapshots, and lane runtime state.
11
+ - Runtime primitives for consensus planning, persistent completion loops, coordinated team runs, lane selection, evidence gating, and in-memory persistence.
12
+ - Backend-neutral adapter ports for in-process, subagent, tmux, queue, and workflow-engine execution.
13
+
14
+ ## Public Entry Points
15
+
16
+ - `.` resolves through `./src/index.ts`
17
+ - `./types` resolves through `./src/types/index.ts`
18
+ - `./defaults` resolves through `./src/defaults/index.ts`
19
+ - `./interop` resolves through `./src/interop/index.ts`
20
+
21
+ ## Notes
22
+
23
+ - The package stays runtime- and backend-neutral; storage-backed operator persistence belongs in integration and app layers.
24
+ - Evidence normalization and replay references align with `@contractspec/lib.harness`; this package does not introduce a second proof model.
25
+ - Role semantics live in typed role profiles, not prompt prose.
26
+ - Canonical artifact and evidence identifiers use spec-style snake_case names; readers normalize older hyphenated aliases for persisted compatibility.
27
+ - Command semantics for `/clarify`, `/plan`, `/plan --consensus`, `/complete`, and `/team` live in the typed `./interop` surface rather than in prompt prose alone.
@@ -0,0 +1,4 @@
1
+ import type { CompletionBackendAdapter, TeamBackendAdapter } from './types';
2
+ export declare function createInProcessCompletionBackend(): CompletionBackendAdapter;
3
+ export declare function createInProcessTeamBackend(): TeamBackendAdapter;
4
+ export declare const createInMemoryTeamBackend: typeof createInProcessTeamBackend;
@@ -0,0 +1,6 @@
1
+ export * from './in-process';
2
+ export * from './queue';
3
+ export * from './subagent';
4
+ export * from './tmux';
5
+ export * from './types';
6
+ export * from './workflow-engine';
@@ -0,0 +1,7 @@
1
+ import type { TeamWorkerLaunchSpec } from '../types';
2
+ import type { TeamBackendAdapter } from './types';
3
+ export interface QueueDriver {
4
+ enqueueWorker(input: TeamWorkerLaunchSpec): Promise<void>;
5
+ cancelWorker(runId: string, workerId: string): Promise<void>;
6
+ }
7
+ export declare function createQueueTeamBackend(driver: QueueDriver): TeamBackendAdapter;
@@ -0,0 +1,10 @@
1
+ import type { TeamWorkerLaunchSpec } from '../types';
2
+ import type { TeamBackendAdapter } from './types';
3
+ export interface SubagentDriver {
4
+ spawnWorker(input: TeamWorkerLaunchSpec): Promise<void>;
5
+ stopWorker(runId: string, workerId: string): Promise<void>;
6
+ pauseWorker?(runId: string, workerId: string): Promise<void>;
7
+ resumeWorker?(runId: string, workerId: string): Promise<void>;
8
+ nudgeWorker?(runId: string, workerId: string, message: string): Promise<void>;
9
+ }
10
+ export declare function createSubagentTeamBackend(driver: SubagentDriver): TeamBackendAdapter;
@@ -0,0 +1,10 @@
1
+ import type { TeamWorkerLaunchSpec } from '../types';
2
+ import type { TeamBackendAdapter } from './types';
3
+ export interface TmuxDriver {
4
+ startPane(input: TeamWorkerLaunchSpec): Promise<void>;
5
+ stopPane(runId: string, workerId: string): Promise<void>;
6
+ pausePane?(runId: string, workerId: string): Promise<void>;
7
+ resumePane?(runId: string, workerId: string): Promise<void>;
8
+ sendKeys?(runId: string, workerId: string, message: string): Promise<void>;
9
+ }
10
+ export declare function createTmuxTeamBackend(driver: TmuxDriver): TeamBackendAdapter;
@@ -0,0 +1,16 @@
1
+ import type { TeamWorkerLaunchSpec } from '../types';
2
+ export interface CompletionBackendAdapter {
3
+ key: string;
4
+ createSnapshot(runId: string, snapshotRef: string): Promise<void>;
5
+ restoreSnapshot(runId: string, snapshotRef: string): Promise<void>;
6
+ }
7
+ export interface TeamBackendAdapter {
8
+ key: string;
9
+ startWorker(input: TeamWorkerLaunchSpec): Promise<void>;
10
+ stopWorker(runId: string, workerId: string): Promise<void>;
11
+ pauseWorker?(runId: string, workerId: string): Promise<void>;
12
+ resumeWorker?(runId: string, workerId: string): Promise<void>;
13
+ nudgeWorker?(runId: string, workerId: string, message: string): Promise<void>;
14
+ }
15
+ export declare function createCompletionBackendAdapter(adapter: CompletionBackendAdapter): CompletionBackendAdapter;
16
+ export declare function createTeamBackendAdapter(adapter: TeamBackendAdapter): TeamBackendAdapter;
@@ -0,0 +1,10 @@
1
+ import type { TeamWorkerLaunchSpec } from '../types';
2
+ import type { CompletionBackendAdapter, TeamBackendAdapter } from './types';
3
+ export interface WorkflowEngineDriver {
4
+ startWorker(input: TeamWorkerLaunchSpec): Promise<void>;
5
+ stopWorker(runId: string, workerId: string): Promise<void>;
6
+ createSnapshot(runId: string, snapshotRef: string): Promise<void>;
7
+ restoreSnapshot(runId: string, snapshotRef: string): Promise<void>;
8
+ }
9
+ export declare function createWorkflowEngineTeamBackend(driver: WorkflowEngineDriver): TeamBackendAdapter;
10
+ export declare function createWorkflowEngineCompletionBackend(driver: WorkflowEngineDriver): CompletionBackendAdapter;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './lanes';
2
+ export * from './roles';
3
+ export * from './transitions';
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var e={clarify:["plan.consensus"],"plan.consensus":["complete.persistent","team.coordinated"],"complete.persistent":[],"team.coordinated":["complete.persistent"]};var t=[{key:"clarify",description:"Reduces ambiguity and produces a clarification artifact.",entryCriteria:["request is ambiguous or conflicting"],exitCriteria:["ambiguity score recorded","next lane recommended"],allowedTransitions:e.clarify,compatibleRoles:["planner","researcher"],requiredArtifacts:["clarification_artifact"],verificationPolicy:{key:"lane.clarify",requiredEvidence:["clarification_artifact"],minimumApprovals:[],failOnMissingEvidence:!0,allowConditionalCompletion:!1},capabilities:{parallelism:"none",persistence:"checkpointed",approvals:!1,mailbox:!1,taskLeasing:!1}},{key:"plan.consensus",description:"Runs planner, architect, and critic to produce a plan pack.",entryCriteria:["clarity sufficient to plan"],exitCriteria:["plan pack approved","next lane justified"],allowedTransitions:e["plan.consensus"],compatibleRoles:["planner","architect","critic","researcher"],requiredArtifacts:["plan_pack","architect_review","critique_verdict","tradeoff_record"],verificationPolicy:{key:"lane.plan.consensus",requiredEvidence:["plan_pack","architect_review","critique_verdict","tradeoff_record"],minimumApprovals:[],failOnMissingEvidence:!0,allowConditionalCompletion:!1},capabilities:{parallelism:"bounded",persistence:"checkpointed",approvals:!0,mailbox:!1,taskLeasing:!1}},{key:"complete.persistent",description:"Runs a durable single-owner completion loop.",entryCriteria:["plan pack available"],exitCriteria:["evidence satisfied","signoff complete"],allowedTransitions:e["complete.persistent"],compatibleRoles:["executor","verifier","architect","test-engineer"],requiredArtifacts:["completion_record","progress_ledger","signoff_record"],verificationPolicy:{key:"lane.complete.persistent",requiredEvidence:["progress_ledger","verification_results"],minimumApprovals:[{role:"verifier",verdict:"approve"}],failOnMissingEvidence:!0,allowConditionalCompletion:!1},capabilities:{parallelism:"bounded",persistence:"durable",approvals:!0,mailbox:!1,taskLeasing:!1}},{key:"team.coordinated",description:"Runs coordinated multi-worker execution with leases.",entryCriteria:["plan pack available","parallel fanout justified"],exitCriteria:["tasks terminal","shutdown policy passes"],allowedTransitions:e["team.coordinated"],compatibleRoles:["executor","verifier","test-engineer","writer"],requiredArtifacts:["team_snapshot","verification_lane_evidence","team_cleanup_state"],verificationPolicy:{key:"lane.team.coordinated",requiredEvidence:["verification_results"],minimumApprovals:[],failOnMissingEvidence:!0,allowConditionalCompletion:!0},capabilities:{parallelism:"durable",persistence:"durable",approvals:!0,mailbox:!0,taskLeasing:!0}}];var o=[{key:"planner",description:"Produces structured execution plans without implementing.",routingRole:"leader",posture:"orchestrator",allowedTools:["read","analyze","review"],writeScope:"artifacts-only",laneCompatibility:["clarify","plan.consensus","team.coordinated"],evidenceObligations:["plan_pack","tradeoff_record"],escalationTriggers:["scope_conflict","missing_acceptance_criteria"],modelProfileHint:"frontier-planner"},{key:"architect",description:"Checks boundaries, tradeoffs, and architecture soundness.",routingRole:"specialist",posture:"critic",allowedTools:["read","analyze","review"],writeScope:"none",laneCompatibility:["plan.consensus","complete.persistent"],evidenceObligations:["architect_review"],escalationTriggers:["boundary_violation","policy_risk"],modelProfileHint:"frontier-architect"},{key:"critic",description:"Rejects vague plans and incomplete verification paths.",routingRole:"reviewer",posture:"critic",allowedTools:["read","analyze","review"],writeScope:"artifacts-only",laneCompatibility:["plan.consensus"],evidenceObligations:["critique_verdict"],escalationTriggers:["untestable_plan","scope_creep"],modelProfileHint:"critic"},{key:"executor",description:"Executes implementation work in an assigned scope.",routingRole:"executor",posture:"builder",allowedTools:["read","analyze","execute","review"],writeScope:"workspace",laneCompatibility:["complete.persistent","team.coordinated"],evidenceObligations:["completion_record","verification_results"],escalationTriggers:["shared_conflict","destructive_change"],modelProfileHint:"executor"},{key:"verifier",description:"Owns completion gates and evidence sufficiency.",routingRole:"reviewer",posture:"verifier",allowedTools:["read","analyze","review","execute"],writeScope:"artifacts-only",laneCompatibility:["complete.persistent","team.coordinated"],evidenceObligations:["verification_results","signoff_record"],escalationTriggers:["missing_evidence","failing_checks"],modelProfileHint:"verifier"},{key:"test-engineer",description:"Designs and runs regression coverage.",routingRole:"specialist",posture:"verifier",allowedTools:["read","analyze","execute","review"],writeScope:"workspace",laneCompatibility:["complete.persistent","team.coordinated"],evidenceObligations:["verification_results"],escalationTriggers:["flaky_suite","coverage_gap"],modelProfileHint:"test-engineer"},{key:"security-reviewer",description:"Checks trust boundaries and policy-sensitive changes.",routingRole:"specialist",posture:"critic",allowedTools:["read","analyze","review"],writeScope:"none",laneCompatibility:["plan.consensus","complete.persistent","team.coordinated"],evidenceObligations:["architect_review"],escalationTriggers:["secret_exposure","approval_required"],modelProfileHint:"security-reviewer"},{key:"researcher",description:"Performs bounded read-only investigation.",routingRole:"specialist",posture:"researcher",allowedTools:["read","analyze","network"],writeScope:"none",laneCompatibility:["clarify","plan.consensus","team.coordinated"],evidenceObligations:["clarification_artifact"],escalationTriggers:["source_conflict","missing_primary_source"],modelProfileHint:"researcher"},{key:"writer",description:"Produces docs, migration notes, and operator guidance.",routingRole:"specialist",posture:"builder",allowedTools:["read","analyze","execute","review"],writeScope:"workspace",laneCompatibility:["team.coordinated","complete.persistent"],evidenceObligations:["completion_record"],escalationTriggers:["public_api_change","migration_gap"],modelProfileHint:"writer"}];export{e as DEFAULT_TRANSITIONS,o as DEFAULT_ROLE_PROFILES,t as DEFAULT_LANES};
@@ -0,0 +1,2 @@
1
+ import type { ExecutionLaneSpec } from '../types';
2
+ export declare const DEFAULT_LANES: ExecutionLaneSpec[];
@@ -0,0 +1,2 @@
1
+ import type { RoleProfile } from '../types';
2
+ export declare const DEFAULT_ROLE_PROFILES: RoleProfile[];
@@ -0,0 +1,2 @@
1
+ import type { LaneKey } from '../types';
2
+ export declare const DEFAULT_TRANSITIONS: Record<LaneKey, LaneKey[]>;
@@ -0,0 +1,13 @@
1
+ import type { HarnessCapturedArtifact } from '@contractspec/lib.harness';
2
+ import { type EvidenceBundleRef } from '../types';
3
+ export interface CreateEvidenceBundleInput {
4
+ runId: string;
5
+ classes: string[];
6
+ artifacts: HarnessCapturedArtifact[];
7
+ freshForMinutes?: number;
8
+ replayBundleUri?: string;
9
+ summary?: string;
10
+ metadata?: Record<string, unknown>;
11
+ now?: () => Date;
12
+ }
13
+ export declare function createEvidenceBundle(input: CreateEvidenceBundleInput): EvidenceBundleRef;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { ApprovalRecord, EvidenceBundleRef, EvidenceGateResult, VerificationPolicy } from '../types';
2
+ export declare function createEvidenceGate(): {
3
+ evaluate(input: {
4
+ policy: VerificationPolicy;
5
+ evidence: EvidenceBundleRef[];
6
+ approvals: ApprovalRecord[];
7
+ blockingRisks?: string[];
8
+ now?: () => Date;
9
+ }): EvidenceGateResult;
10
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ export * from './adapters';
2
+ export * from './defaults';
3
+ export * from './evidence/bundle';
4
+ export * from './evidence/gate';
5
+ export * from './interop';
6
+ export * from './lanes/clarify/clarify';
7
+ export * from './lanes/complete/completion-loop';
8
+ export * from './lanes/plan/consensus';
9
+ export * from './lanes/team/team-run';
10
+ export * from './registry/execution-lane-registry';
11
+ export * from './registry/role-profile-registry';
12
+ export * from './registry/verification-policy-registry';
13
+ export * from './runtime/authority-hooks';
14
+ export * from './runtime/in-memory-store';
15
+ export * from './runtime/lane-runtime';
16
+ export * from './runtime/persistence-bundle';
17
+ export * from './runtime/persistence-files';
18
+ export * from './runtime/readiness';
19
+ export * from './runtime/role-guard';
20
+ export * from './runtime/selector';
21
+ export * from './runtime/state-sync';
22
+ export * from './runtime/status-views';
23
+ export * from './runtime/store';
24
+ export * from './types';
25
+ export * from './validation/clarification-artifact';
26
+ export * from './validation/completion-loop-spec';
27
+ export * from './validation/issues';
28
+ export * from './validation/lane-spec';
29
+ export * from './validation/plan-pack';
30
+ export * from './validation/role-profile';
31
+ export * from './validation/team-run-spec';
32
+ export * from './validation/verification-policy';
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ // @bun
2
+ var _={clarify:["plan.consensus"],"plan.consensus":["complete.persistent","team.coordinated"],"complete.persistent":[],"team.coordinated":["complete.persistent"]};var se=[{key:"clarify",description:"Reduces ambiguity and produces a clarification artifact.",entryCriteria:["request is ambiguous or conflicting"],exitCriteria:["ambiguity score recorded","next lane recommended"],allowedTransitions:_.clarify,compatibleRoles:["planner","researcher"],requiredArtifacts:["clarification_artifact"],verificationPolicy:{key:"lane.clarify",requiredEvidence:["clarification_artifact"],minimumApprovals:[],failOnMissingEvidence:!0,allowConditionalCompletion:!1},capabilities:{parallelism:"none",persistence:"checkpointed",approvals:!1,mailbox:!1,taskLeasing:!1}},{key:"plan.consensus",description:"Runs planner, architect, and critic to produce a plan pack.",entryCriteria:["clarity sufficient to plan"],exitCriteria:["plan pack approved","next lane justified"],allowedTransitions:_["plan.consensus"],compatibleRoles:["planner","architect","critic","researcher"],requiredArtifacts:["plan_pack","architect_review","critique_verdict","tradeoff_record"],verificationPolicy:{key:"lane.plan.consensus",requiredEvidence:["plan_pack","architect_review","critique_verdict","tradeoff_record"],minimumApprovals:[],failOnMissingEvidence:!0,allowConditionalCompletion:!1},capabilities:{parallelism:"bounded",persistence:"checkpointed",approvals:!0,mailbox:!1,taskLeasing:!1}},{key:"complete.persistent",description:"Runs a durable single-owner completion loop.",entryCriteria:["plan pack available"],exitCriteria:["evidence satisfied","signoff complete"],allowedTransitions:_["complete.persistent"],compatibleRoles:["executor","verifier","architect","test-engineer"],requiredArtifacts:["completion_record","progress_ledger","signoff_record"],verificationPolicy:{key:"lane.complete.persistent",requiredEvidence:["progress_ledger","verification_results"],minimumApprovals:[{role:"verifier",verdict:"approve"}],failOnMissingEvidence:!0,allowConditionalCompletion:!1},capabilities:{parallelism:"bounded",persistence:"durable",approvals:!0,mailbox:!1,taskLeasing:!1}},{key:"team.coordinated",description:"Runs coordinated multi-worker execution with leases.",entryCriteria:["plan pack available","parallel fanout justified"],exitCriteria:["tasks terminal","shutdown policy passes"],allowedTransitions:_["team.coordinated"],compatibleRoles:["executor","verifier","test-engineer","writer"],requiredArtifacts:["team_snapshot","verification_lane_evidence","team_cleanup_state"],verificationPolicy:{key:"lane.team.coordinated",requiredEvidence:["verification_results"],minimumApprovals:[],failOnMissingEvidence:!0,allowConditionalCompletion:!0},capabilities:{parallelism:"durable",persistence:"durable",approvals:!0,mailbox:!0,taskLeasing:!0}}];var q=[{key:"planner",description:"Produces structured execution plans without implementing.",routingRole:"leader",posture:"orchestrator",allowedTools:["read","analyze","review"],writeScope:"artifacts-only",laneCompatibility:["clarify","plan.consensus","team.coordinated"],evidenceObligations:["plan_pack","tradeoff_record"],escalationTriggers:["scope_conflict","missing_acceptance_criteria"],modelProfileHint:"frontier-planner"},{key:"architect",description:"Checks boundaries, tradeoffs, and architecture soundness.",routingRole:"specialist",posture:"critic",allowedTools:["read","analyze","review"],writeScope:"none",laneCompatibility:["plan.consensus","complete.persistent"],evidenceObligations:["architect_review"],escalationTriggers:["boundary_violation","policy_risk"],modelProfileHint:"frontier-architect"},{key:"critic",description:"Rejects vague plans and incomplete verification paths.",routingRole:"reviewer",posture:"critic",allowedTools:["read","analyze","review"],writeScope:"artifacts-only",laneCompatibility:["plan.consensus"],evidenceObligations:["critique_verdict"],escalationTriggers:["untestable_plan","scope_creep"],modelProfileHint:"critic"},{key:"executor",description:"Executes implementation work in an assigned scope.",routingRole:"executor",posture:"builder",allowedTools:["read","analyze","execute","review"],writeScope:"workspace",laneCompatibility:["complete.persistent","team.coordinated"],evidenceObligations:["completion_record","verification_results"],escalationTriggers:["shared_conflict","destructive_change"],modelProfileHint:"executor"},{key:"verifier",description:"Owns completion gates and evidence sufficiency.",routingRole:"reviewer",posture:"verifier",allowedTools:["read","analyze","review","execute"],writeScope:"artifacts-only",laneCompatibility:["complete.persistent","team.coordinated"],evidenceObligations:["verification_results","signoff_record"],escalationTriggers:["missing_evidence","failing_checks"],modelProfileHint:"verifier"},{key:"test-engineer",description:"Designs and runs regression coverage.",routingRole:"specialist",posture:"verifier",allowedTools:["read","analyze","execute","review"],writeScope:"workspace",laneCompatibility:["complete.persistent","team.coordinated"],evidenceObligations:["verification_results"],escalationTriggers:["flaky_suite","coverage_gap"],modelProfileHint:"test-engineer"},{key:"security-reviewer",description:"Checks trust boundaries and policy-sensitive changes.",routingRole:"specialist",posture:"critic",allowedTools:["read","analyze","review"],writeScope:"none",laneCompatibility:["plan.consensus","complete.persistent","team.coordinated"],evidenceObligations:["architect_review"],escalationTriggers:["secret_exposure","approval_required"],modelProfileHint:"security-reviewer"},{key:"researcher",description:"Performs bounded read-only investigation.",routingRole:"specialist",posture:"researcher",allowedTools:["read","analyze","network"],writeScope:"none",laneCompatibility:["clarify","plan.consensus","team.coordinated"],evidenceObligations:["clarification_artifact"],escalationTriggers:["source_conflict","missing_primary_source"],modelProfileHint:"researcher"},{key:"writer",description:"Produces docs, migration notes, and operator guidance.",routingRole:"specialist",posture:"builder",allowedTools:["read","analyze","execute","review"],writeScope:"workspace",laneCompatibility:["team.coordinated","complete.persistent"],evidenceObligations:["completion_record"],escalationTriggers:["public_api_change","migration_gap"],modelProfileHint:"writer"}];var it=["missing_evidence","failing_evidence","policy_blocked","approval_denied","runtime_failure","worker_timeout","lease_conflict"],ot={retryable:"runtime_failure",blocked:"policy_blocked",fatal:"runtime_failure"};function b(e){return st(e)?e:ot[e]}function st(e){return it.includes(e)}function ce(e){switch(b(e)){case"missing_evidence":case"failing_evidence":case"runtime_failure":case"worker_timeout":case"lease_conflict":return!0;default:return!1}}function le(e){switch(b(e)){case"policy_blocked":case"approval_denied":return!0;default:return!1}}var ct=["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"],lt=["architect_review","clarification_artifact","completion_record","critique_verdict","plan_pack","progress_ledger","signoff_record","team_snapshot","tradeoff_record","verification_lane_evidence","verification_results"],mt={"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"},ut={"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 W(e){return mt[e]??e}function V(e){return ut[e]??e}function er(e){return e.map((t)=>W(t))}function me(e){return e.map((t)=>V(t))}function tr(e){return ct.includes(e)}function rr(e){return lt.includes(e)}var ue=[{usage:"/clarify",alias:"/clarify",lane:"clarify",mode:"default",acceptsTask:!0,summary:"Reduce ambiguity and capture a clarification artifact."},{usage:"/plan",alias:"/plan",lane:"plan.consensus",mode:"default",acceptsTask:!0,summary:"Draft a consensus-ready execution plan pack."},{usage:"/plan --consensus",alias:"/plan",lane:"plan.consensus",mode:"consensus",acceptsTask:!0,summary:"Run the deliberate consensus-planning variant."},{usage:"/complete",alias:"/complete",lane:"complete.persistent",mode:"default",acceptsTask:!0,summary:"Start or resume the persistent completion loop."},{usage:"/team",alias:"/team",lane:"team.coordinated",mode:"default",acceptsTask:!0,summary:"Start coordinated multi-worker execution."}],dt={clarify:"/clarify","plan.consensus":"/plan","complete.persistent":"/complete","team.coordinated":"/team"};function pr(e){let t=e.startsWith("/")?e:dt[e],r=ue.find((a)=>a.usage===t);if(!r)throw Error(`Unsupported execution lane command: ${e}`);return r}function wr(e){let t=e.trim();if(!t.startsWith("/"))return;let[r="",a="",...i]=t.split(/\s+/);if(r==="/plan"&&a.startsWith("--")&&a!=="--consensus")return;let n=r==="/plan"&&a==="--consensus"?"/plan --consensus":r,o=ue.find((u)=>u.usage===n);if(!o)return;let s=n==="/plan --consensus"?["--consensus"]:[],l=n==="/plan --consensus"?i.join(" ").trim():[a,...i].join(" ").trim();return{...o,raw:e,task:l,flags:s}}function Tr(){let e=new Map;return{key:"in-process",async createSnapshot(t,r){e.set(t,r)},async restoreSnapshot(t,r){if(e.get(t)!==r)throw Error(`Missing in-process snapshot "${r}" for run ${t}.`)}}}function ft(){let e=new Map;return{key:"in-process",async startWorker(t){e.set(`${t.runId}:${t.workerId}`,"running")},async stopWorker(t,r){e.delete(`${t}:${r}`)},async pauseWorker(t,r){let a=`${t}:${r}`;if(!e.has(a))throw Error(`Worker ${r} is not running for run ${t}.`);e.set(a,"paused")},async resumeWorker(t,r){let a=`${t}:${r}`;if(!e.has(a))throw Error(`Worker ${r} is not running for run ${t}.`);e.set(a,"running")},async nudgeWorker(t,r){let a=`${t}:${r}`;if(!e.has(a))throw Error(`Worker ${r} is not running for run ${t}.`)}}}var vr=ft;function xr(e){return{key:"remote-queue",startWorker(t){return e.enqueueWorker(t)},stopWorker:e.cancelWorker}}function hr(e){return{key:"subagent",startWorker(t){return e.spawnWorker(t)},stopWorker:e.stopWorker,pauseWorker:e.pauseWorker,resumeWorker:e.resumeWorker,nudgeWorker:e.nudgeWorker}}function Pr(e){return{key:"tmux",startWorker(t){return e.startPane(t)},stopWorker:e.stopPane,pauseWorker:e.pausePane,resumeWorker:e.resumePane,nudgeWorker:e.sendKeys}}function Cr(e){return de(e.key,"completion"),e}function Er(e){return de(e.key,"team"),e}function de(e,t){if(!e.trim())throw Error(`Execution-lanes ${t} backend adapters require a key.`)}function Wr(e){return{key:"workflow-engine",startWorker(t){return e.startWorker(t)},stopWorker:e.stopWorker}}function Br(e){return{key:"workflow-engine",createSnapshot:e.createSnapshot,restoreSnapshot:e.restoreSnapshot}}import{normalizeArtifacts as pt}from"@contractspec/lib.harness/evidence/normalizer";function p(e){if(e instanceof Date)return new Date(e.getTime());if(Array.isArray(e))return e.map((t)=>p(t));if(e&&typeof e==="object"){let t={};for(let[r,a]of Object.entries(e))t[r]=p(a);return t}return e}import{randomUUID as gt}from"crypto";function m(e){return`${e}_${gt()}`}function Jr(e){let t=pt({runId:e.runId,artifacts:e.artifacts,now:e.now,idFactory:()=>m("artifact")});return{id:m("evidence"),runId:e.runId,artifactIds:t.map((r)=>r.artifactId),classes:me(e.classes),createdAt:(e.now?.()??new Date).toISOString(),freshUntil:e.freshForMinutes===void 0?void 0:new Date((e.now?.()??new Date).getTime()+e.freshForMinutes*60000).toISOString(),replayBundleUri:e.replayBundleUri,summary:e.summary,metadata:e.metadata?p(e.metadata):void 0}}function H(){return{evaluate(e){let t=e.now?.()??new Date,r=new Set(e.evidence.flatMap((u)=>u.classes.map((x)=>V(String(x))))),a=e.policy.requiredEvidence.map((u)=>V(String(u))).filter((u)=>!r.has(u)).map((u)=>String(u)),i=e.policy.minimumApprovals.filter((u)=>{return!e.approvals.some((x)=>x.role===u.role&&x.verdict===u.verdict&&x.state==="approved")}).map((u)=>`${u.role}:${u.verdict}`),n=e.policy.maxEvidenceAgeMinutes===void 0?[]:e.evidence.filter((u)=>{if(u.freshUntil&&new Date(u.freshUntil).getTime()<t.getTime())return!0;return t.getTime()-new Date(u.createdAt).getTime()>e.policy.maxEvidenceAgeMinutes*60000}).map((u)=>u.id),o=e.blockingRisks??[],s=e.policy.allowConditionalCompletion&&a.length>0&&i.length===0&&n.length===0&&o.length===0;return{passed:(e.policy.failOnMissingEvidence?a.length===0:!0)&&i.length===0&&n.length===0&&o.length===0,conditionallyPassed:s,missingEvidence:a,missingApprovals:i,staleEvidence:n,blockingRisks:o}}}}function c(e,t,r){e.push({path:t,message:r})}function k(e,t){if(e.length===0)return;let r=e.map((a)=>`${a.path}: ${a.message}`).join("; ");throw Error(`${t}: ${r}`)}function F(e){let t=[];if(!e.meta.id.trim())c(t,"meta.id","Clarification artifact id is required.");if(!e.meta.sourceRequest.trim())c(t,"meta.sourceRequest","Clarification source request is required.");if(e.meta.ambiguityScore<0||e.meta.ambiguityScore>1)c(t,"meta.ambiguityScore","Clarification ambiguity score must be between 0 and 1.");if(!e.objective.trim())c(t,"objective","Clarification objective is required.");if(!e.meta.recommendedNextLane)c(t,"meta.recommendedNextLane","Clarification next lane is required.");return t}function fe(e){return k(F(e),"Invalid clarification artifact"),e}function na(){return{run(e){let t=wt(e);return fe({meta:{id:m("clarify"),createdAt:new Date().toISOString(),sourceRequest:e.request,scopeClass:yt(e.request),ambiguityScore:t,recommendedNextLane:"plan.consensus"},objective:e.objective??kt(e.request),constraints:e.constraints??[],assumptions:e.assumptions??[],openQuestions:ge(e),conflictSignals:pe(e.request),authorityContext:e.authorityContext??{policyRefs:[],ruleContextRefs:[]}})}}}function wt(e){let t=[e.request.includes("?"),!e.objective,pe(e.request).length>0,ge(e).length>0];return t.filter(Boolean).length/t.length}function ge(e){let t=[];if(!e.objective)t.push("What is the concrete objective and success condition?");if((e.constraints??[]).length===0)t.push("Which constraints or compatibility surfaces are non-negotiable?");if(e.request.includes("maybe")||e.request.includes("probably"))t.push("Which tentative assumptions should be confirmed before planning?");return t}function pe(e){return["but","except","unless"].filter((t)=>e.toLowerCase().includes(` ${t} `)).map((t)=>`Detected branching language around "${t}".`)}function kt(e){return e.trim().replace(/\s+/g," ").slice(0,180)}function yt(e){let t=e.toLowerCase();if(t.includes("migration")||t.includes("security"))return"high-risk";if(t.includes("team")||t.includes("parallel"))return"large";if(e.length>180)return"medium";return"small"}function we(e){let t=[];if(!e.key.trim())c(t,"key","Verification policy key is required.");for(let r of e.minimumApprovals)if(!r.role.trim())c(t,"minimumApprovals[].role","Approval requirement role is required.");if(e.maxEvidenceAgeMinutes!==void 0&&e.maxEvidenceAgeMinutes<=0)c(t,"maxEvidenceAgeMinutes","Maximum evidence age must be greater than zero.");return t}function ke(e){if(typeof e==="string")return e.trim()?[]:[{path:"key",message:"Verification policy key is required."}];return we(e)}function ye(e){return k(we(e),`Invalid verification policy "${e.key}"`),e}class Rt{items=new Map;register(e){return Re(e),this.items.set(e.key,e),this}get(e){return this.items.get(e)}require(e){let t=this.get(e);if(!t)throw Error(`Missing verification policy "${e}".`);return t}resolve(e){return Q(e,this)}list(){return Array.from(this.items.values())}}function Q(e,t){if(typeof e!=="string")return Re(e),e;if(!t)throw Error(`Verification policy "${e}" requires a registry for resolution.`);return t.require(e)}function Re(e){ye(e)}function O(e){return{get(t){return e.require(t)},assert(t){let r=e.require(t.roleKey);if(!r.laneCompatibility.includes(t.lane))throw Error(`Role "${t.roleKey}" is not compatible with lane "${t.lane}".`);for(let a of t.requiredTools??[])if(!r.allowedTools.includes(a))throw Error(`Role "${t.roleKey}" does not allow required tool "${a}".`);if(t.allowedWriteScopes&&!t.allowedWriteScopes.includes(r.writeScope))throw Error(`Role "${t.roleKey}" write scope "${r.writeScope}" is not allowed here.`);return r}}}async function R(e,t,r){if(!await e.getRun(t.runId))return;return e.updateRun(t.runId,(i)=>({...i,status:Tt(t.phase),currentPhase:t.phase,pendingApprovalRoles:[...t.pendingApprovalRoles],evidenceBundleIds:[...t.evidenceBundleIds],blockingRisks:t.lastGateResult?.blockingRisks??i.blockingRisks,terminalReason:r??i.terminalReason,updatedAt:t.updatedAt}))}async function Te(e,t){if(!await e.getRun(t.runId))return;return e.updateRun(t.runId,(a)=>({...a,status:vt(t.status),currentPhase:t.cleanup.status==="in_progress"?"shutdown":t.status,evidenceBundleIds:[...t.evidenceBundleIds],recommendedNextLane:t.status==="completed_with_followup_recommended"?"complete.persistent":a.recommendedNextLane,terminalReason:t.terminalReason??a.terminalReason,updatedAt:t.updatedAt}))}async function C(e,t){if(!await e.getRun(t.runId))return;return e.updateRun(t.runId,(a)=>{let i=t.state==="requested"?Array.from(new Set([...a.pendingApprovalRoles,t.role])):a.pendingApprovalRoles.filter((n)=>n!==t.role);return{...a,pendingApprovalRoles:i,updatedAt:t.decidedAt??t.requestedAt}})}function Tt(e){switch(e){case"initialized":return"initialized";case"working":case"remediating":return"running";case"waiting_for_evidence":case"awaiting_signoff":return"waiting";case"completed":return"completed";case"blocked":return"blocked";case"failed":return"failed";case"aborted":return"aborted"}}function vt(e){switch(e){case"initialized":return"initialized";case"running":return"running";case"paused":return"paused";case"completed":case"completed_with_followup_recommended":return"completed";case"blocked":return"blocked";case"failed":return"failed";case"aborted":return"aborted"}}function St(e){let t=[];if(!e.id.trim())c(t,"id","Completion loop id is required.");if(!e.ownerRole.trim())c(t,"ownerRole","Completion loop owner role is required.");if(!e.snapshotRef.trim())c(t,"snapshotRef","Completion loop snapshot ref is required.");if(!e.progressLedgerRef.trim())c(t,"progressLedgerRef","Completion loop progress ledger ref is required.");if(!e.signoff.verifierRole.trim())c(t,"signoff.verifierRole","Completion loop verifier role is required.");if(e.terminalConditions.length===0)c(t,"terminalConditions","Completion loop terminal conditions are required.");for(let r of ke(e.verificationPolicy))c(t,`verificationPolicy.${r.path}`,r.message);return t}function ve(e){return k(St(e),`Invalid completion loop "${e.id}"`),e}function Y(e){let t=[];if(!e.key.trim())c(t,"key","Role key is required.");if(!e.description.trim())c(t,"description","Description is required.");if(e.allowedTools.length===0)c(t,"allowedTools","At least one tool permission is required.");if(e.laneCompatibility.length===0)c(t,"laneCompatibility","At least one compatible lane is required.");return t}class B{items=new Map;register(e){return k(Y(e),`Invalid role profile "${e.key}"`),this.items.set(e.key,e),this}get(e){return this.items.get(e)}list(){return Array.from(this.items.values())}listForLane(e){return this.list().filter((t)=>t.laneCompatibility.includes(e))}require(e){let t=this.get(e);if(!t)throw Error(`Missing role profile "${e}".`);return t}}function Ra(e){return k(Y(e),`Invalid role profile "${e.key}"`),e}async function w(e,t){await e?.beforeAction?.(t)}async function T(e,t,r,a,i){await w(e.hooks,{action:t,runId:r,lane:"complete.persistent",actorId:a,reason:i?.reason,metadata:i?.metadata})}function Se(e,t){e.assert({roleKey:t.ownerRole,lane:"complete.persistent",requiredTools:["execute"]});for(let r of t.delegateRoles)if(r!=="human")e.assert({roleKey:r,lane:"complete.persistent"});if(t.signoff.verifierRole!=="human")e.assert({roleKey:t.signoff.verifierRole,lane:"complete.persistent",requiredTools:["review"]})}async function y(e,t){let r=await e.getCompletion(t);if(!r)throw Error(`Completion loop not found: ${t}`);return r}async function v(e,t,r){if(t.progressLedgerArtifactId)await e.saveArtifact({id:t.progressLedgerArtifactId,runId:t.runId,artifactType:"progress_ledger",createdAt:t.updatedAt,body:t.progressLedger,summary:r??t.progressLedger.at(-1)?.message??"Completion progress ledger."});if(t.loopStateArtifactId)await e.saveArtifact({id:t.loopStateArtifactId,runId:t.runId,artifactType:"loop_state",createdAt:t.updatedAt,body:t,summary:`Completion loop phase ${t.phase}.`})}function M(e){return[e.verifierRole,...e.requireArchitectReview?["architect"]:[],...e.requireHumanApproval?["human"]:[]]}function xe(e){return[e.missingEvidence.length>0?`missing evidence: ${e.missingEvidence.join(", ")}`:void 0,e.staleEvidence.length>0?`stale evidence: ${e.staleEvidence.join(", ")}`:void 0,e.missingApprovals.length>0?`missing approvals: ${e.missingApprovals.join(", ")}`:void 0,e.blockingRisks.length>0?`blocking risks: ${e.blockingRisks.join(", ")}`:void 0].filter((t)=>Boolean(t)).join("; ")}function Le(){let e=new B;for(let t of q)e.register(t);return e}async function he(e,t,r,a,i){await T(e,"complete.progress",t,i,{reason:r,metadata:{classification:a}});let n=await y(e.store,t),o=a?b(a):void 0,s={...n,phase:"working",iteration:n.iteration+1,progressLedger:[...n.progressLedger,{id:m("ledger"),iteration:n.iteration+1,createdAt:new Date().toISOString(),message:r,classification:o}],lastFailureClass:o,updatedAt:new Date().toISOString()};return await e.store.saveCompletion(s),await v(e.store,s,r),await e.store.appendEvent({id:m("event"),runId:t,type:"completion.progress",createdAt:s.updatedAt,phase:s.phase,message:r}),await R(e.store,s),s}async function Ae(e,t,r,a){await T(e,"complete.attach_evidence",t,a,{metadata:{classes:r.classes}});let i=await y(e.store,t),n={...i,phase:"waiting_for_evidence",evidenceBundleIds:Array.from(new Set([...i.evidenceBundleIds,r.id])),updatedAt:new Date().toISOString()};return await e.store.saveCompletion(n),await e.store.saveEvidence(r),await e.store.saveArtifact({id:m("artifact"),runId:t,artifactType:"evidence_bundle_ref",createdAt:n.updatedAt,body:r,summary:r.summary}),await v(e.store,n),await R(e.store,n),n}async function Pe(e,t,r,a){await T(e,"complete.request_approval",t,a,{metadata:{role:r.role,state:r.state}});let i=await y(e.store,t),n={...i,phase:"awaiting_signoff",pendingApprovalRoles:Array.from(new Set([...i.pendingApprovalRoles,r.role])),updatedAt:new Date().toISOString()};return await e.store.saveCompletion(n),await e.store.saveApproval(r),await C(e.store,r),await e.store.saveArtifact({id:m("artifact"),runId:t,artifactType:"signoff_request",createdAt:n.updatedAt,body:r,summary:`Requested ${r.role} sign-off.`}),await v(e.store,n),await R(e.store,n),n}async function be(e,t,r,a){await T(e,"complete.evaluate_evidence",t,a,{metadata:{blockingRisks:r}});let i=await y(e.store,t),n=e.gate.evaluate({policy:i.spec.verificationPolicy,evidence:await e.store.listEvidence(t),approvals:await e.store.listApprovals(t),blockingRisks:r}),o=n.missingEvidence.length>0||n.staleEvidence.length>0,s=n.passed||n.conditionallyPassed===!0,l={...i,phase:n.blockingRisks.length>0?"blocked":s?"awaiting_signoff":o?"remediating":n.missingApprovals.length>0?"awaiting_signoff":"remediating",lastGateResult:n,lastFailureClass:!s?n.blockingRisks.length>0?"policy_blocked":n.missingEvidence.length>0?"missing_evidence":o?"failing_evidence":void 0:void 0,updatedAt:new Date().toISOString()};return await e.store.saveCompletion(l),await v(e.store,l),await e.store.saveArtifact({id:m("artifact"),runId:t,artifactType:"evidence_gate_result",createdAt:l.updatedAt,body:n,summary:n.passed?"Evidence gate passed.":"Evidence gate requires remediation."}),await R(e.store,l),n}async function Ce(e,t,r){await T(e,"complete.resume",t,r);let a=await y(e.store,t);if(["completed","blocked","failed","aborted"].includes(a.phase))return a;await e.backend?.restoreSnapshot(t,a.spec.snapshotRef);let i={...a,phase:a.phase==="waiting_for_evidence"||a.phase==="remediating"?"remediating":a.phase==="awaiting_signoff"?"awaiting_signoff":"working",updatedAt:new Date().toISOString()};return await e.store.saveCompletion(i),await v(e.store,i),await R(e.store,i),i}function Ee(e){let t=b(e);if(e==="fatal")return{normalized:t,phase:"failed",retryable:!1};if(e==="retryable")return{normalized:t,phase:"remediating",retryable:!0};if(le(t))return{normalized:t,phase:"blocked",retryable:!1};if(t==="runtime_failure")return{normalized:t,phase:"failed",retryable:!1};if(ce(t))return{normalized:t,phase:"remediating",retryable:!0};return{normalized:t,phase:"failed",retryable:!1}}async function _e(e,t,r,a){await T(e,"complete.decide_approval",t,a,{metadata:{role:r.role,state:r.state}});let i=await y(e.store,t),n={id:m("approval"),runId:t,role:r.role,verdict:r.verdict,state:r.state,comment:r.comment,requestedAt:r.requestedAt??new Date().toISOString(),decidedAt:r.decidedAt,decidedBy:r.decidedBy},o={...i,pendingApprovalRoles:i.pendingApprovalRoles.filter((s)=>s!==n.role),lastFailureClass:n.state==="rejected"?"approval_denied":i.lastFailureClass,phase:n.state==="rejected"?"blocked":"awaiting_signoff",signoffArtifactId:i.signoffArtifactId??m("signoff"),updatedAt:new Date().toISOString()};return await e.store.saveApproval(n),await C(e.store,n),await e.store.saveCompletion(o),await e.store.saveArtifact({id:o.signoffArtifactId,runId:t,artifactType:"signoff_record",createdAt:o.updatedAt,body:n,summary:`${n.role} ${n.state}.`}),await v(e.store,o),await R(e.store,o),n}async function We(e,t,r,a,i){await T(e,"complete.record_failure",t,i,{reason:a,metadata:{classification:r}});let n=await y(e.store,t),o=Ee(r),s={...n,phase:o.phase,retryCount:o.retryable?n.retryCount+1:n.retryCount,lastFailureClass:o.normalized,updatedAt:new Date().toISOString()};return await e.store.saveCompletion(s),await v(e.store,s,a),await e.store.appendEvent({id:m("event"),runId:t,type:"completion.failure",createdAt:s.updatedAt,phase:s.phase,message:a,metadata:{classification:o.normalized,sourceClassification:r}}),await R(e.store,s),s}async function Be(e,t,r,a){await T(e,"complete.finalize",t,a,{reason:r.terminalReason,metadata:{status:r.status}});let i=await y(e.store,t),n=await e.store.listApprovals(t);if(r.status==="completed"){let u=e.gate.evaluate({policy:i.spec.verificationPolicy,evidence:await e.store.listEvidence(t),approvals:n,blockingRisks:r.unresolvedRisks});if(!u.passed&&u.conditionallyPassed!==!0)throw Error(xe(u));for(let x of M(i.spec.signoff))if(!n.some((oe)=>oe.role===x&&oe.state==="approved"))throw Error(`Missing required sign-off for role ${x}.`)}let o=new Date().toISOString(),s={...i,phase:r.status,pendingApprovalRoles:[],terminalRecordArtifactId:m("terminal"),updatedAt:o},l={runId:t,status:r.status,completedAt:o,iterationCount:i.iteration,evidenceBundleIds:i.evidenceBundleIds,approvalIds:r.approvalIds,unresolvedRisks:r.unresolvedRisks,terminalReason:r.terminalReason};return await e.store.saveCompletion(s),await v(e.store,s),await e.store.saveArtifact({id:s.terminalRecordArtifactId,runId:t,artifactType:"completion_record",createdAt:o,body:l,summary:l.terminalReason??`Completion loop ${l.status}.`}),await R(e.store,s,r.terminalReason),l}function Za(e,t){let r={store:e,backend:t?.backend,hooks:t?.hooks,gate:H(),roleGuard:O(t?.roleRegistry??Le())};return{async create(a,i,n){await T(r,"complete.create",a.id,n,{metadata:{ownerRole:a.ownerRole}}),ve(a);let o=Q(a.verificationPolicy,t?.policyRegistry);Se(r.roleGuard,a);let s=new Date().toISOString(),l={runId:a.id,spec:{...a,verificationPolicy:o},phase:"initialized",iteration:0,retryCount:0,progressLedger:[],evidenceBundleIds:[],pendingApprovalRoles:M(a.signoff),contextSnapshotArtifactId:m("context"),progressLedgerArtifactId:m("ledger-artifact"),loopStateArtifactId:m("loop-state"),createdAt:s,updatedAt:s};return await r.backend?.createSnapshot(a.id,a.snapshotRef),await e.saveCompletion(l),await e.saveArtifact({id:l.contextSnapshotArtifactId,runId:a.id,artifactType:"context_snapshot",createdAt:s,body:{spec:l.spec,contextSnapshot:i},summary:"Initial completion loop context snapshot."}),await v(e,l),await R(e,l),l},addProgress(a,i,n,o){return he(r,a,i,n,o)},attachEvidence(a,i,n){return Ae(r,a,i,n)},requestApproval(a,i,n){return Pe(r,a,i,n)},evaluateEvidence(a,i,n){return be(r,a,i,n)},resume(a,i){return Ce(r,a,i)},decideApproval(a,i,n){return _e(r,a,i,n)},recordFailure(a,i,n,o){return We(r,a,i,n,o)},finalize(a,i,n){return Be(r,a,i,n)},async getState(a){return y(e,a)},async require(a){return y(e,a)}}}function j(e){let t=[];if(!e.meta.id.trim())c(t,"meta.id","Plan id is required.");if(!e.objective.trim())c(t,"objective","Objective is required.");if(e.planSteps.length===0)c(t,"planSteps","At least one plan step is required.");for(let r of e.planSteps){if(!r.id.trim())c(t,"planSteps[].id","Plan step id is required.");if(r.acceptanceCriteria.length===0)c(t,`planSteps.${r.id}.acceptanceCriteria`,"Each plan step requires at least one acceptance criterion.")}if(e.authorityContext.policyRefs.length===0)c(t,"authorityContext.policyRefs","At least one policy ref is required.");if(e.authorityContext.ruleContextRefs.length===0)c(t,"authorityContext.ruleContextRefs","At least one rule-context ref is required.");if(!e.staffing.handoffRecommendation.nextLane)c(t,"staffing.handoffRecommendation.nextLane","Next lane is required.");if(!e.staffing.recommendedLanes.some((r)=>r.lane===e.staffing.handoffRecommendation.nextLane))c(t,"staffing.recommendedLanes","Handoff lane must be represented in the recommended lane set.");if(e.meta.scopeClass==="high-risk"){if(!e.constraints.some((r)=>r.toLowerCase().includes("rollback"))&&!e.assumptions.some((r)=>r.toLowerCase().includes("rollback")))c(t,"constraints","High-risk plans must describe rollback expectations.");if(e.verification.requiredApprovals.length<2)c(t,"verification.requiredApprovals","High-risk plans require expanded approval coverage.");if(e.verification.blockingRisks.length===0)c(t,"verification.blockingRisks","High-risk plans must name blocking risks explicitly.")}return t}async function De(e,t,r){await w(e?.hooks,{action:"append_artifact",runId:t,lane:"plan.consensus",actorId:e?.actorId,reason:`Persist ${r}`,metadata:{artifactType:r}})}async function Z(e,t,r){await w(e?.hooks,{action:"handoff",runId:e?.runId??t.meta.id,lane:"plan.consensus",actorId:e?.actorId,reason:`Emit ${r} consensus handoff`,metadata:{nextLane:t.staffing.handoffRecommendation.nextLane}})}function rn(e){return{async run(){let t=e.mode??"short",r=e.maxIterations??(t==="deliberate"?5:3),a=e.enforceReadOnly?await e.purityGuard?.capture():void 0;if(e.enforceReadOnly&&!e.purityGuard)throw Error("Consensus planning in read-only mode requires a purity guard.");try{let i=await e.planner.draft(),n=[],o=[];await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("planner_draft",0),type:"planner_draft",iteration:0,createdAt:new Date().toISOString(),body:{mode:t,plan:i}});for(let s=1;s<=r;s+=1){let l=await e.architect.review(i),u=xt(await e.critic.review(i),i,t);if(n.push(l,u),await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("architect_review",s),type:"architect_review",iteration:s,createdAt:l.createdAt,body:l}),await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("critique_verdict",s),type:"critique_verdict",iteration:s,createdAt:u.createdAt,body:u}),await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("tradeoff_record",s),type:"tradeoff_record",iteration:s,createdAt:new Date().toISOString(),body:i.tradeoffs}),l.verdict==="approve"&&u.verdict==="approve")return await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("plan_pack",s),type:"plan_pack",iteration:s,createdAt:new Date().toISOString(),body:i}),await Z(e.authority,i,t),{mode:t,plan:i,reviews:n,artifacts:o,approved:!0,iterations:s};i=await e.planner.revise({iteration:s,currentPlan:i,reviews:[l,u]}),await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("planner_revision",s),type:"planner_revision",iteration:s,createdAt:new Date().toISOString(),body:{mode:t,plan:i,reviews:[l,u]}})}return await A(o,e,{runId:e.authority?.runId??i.meta.id,id:P("plan_pack",r),type:"plan_pack",iteration:r,createdAt:new Date().toISOString(),body:i}),await Z(e.authority,i,t),{mode:t,plan:i,reviews:n,artifacts:o,approved:!1,iterations:r}}finally{if(e.enforceReadOnly)await e.purityGuard?.assertUnchanged(a)}}}}function xt(e,t,r){let a=j(t).map((i)=>i.message);if(r==="deliberate"){if(!t.constraints.some((i)=>i.toLowerCase().includes("rollback"))&&!t.assumptions.some((i)=>i.toLowerCase().includes("rollback")))a.push("Deliberate plans must describe rollback expectations.");if(!t.planSteps.some((i)=>i.acceptanceCriteria.some((n)=>n.toLowerCase().includes("test"))))a.push("Deliberate plans must include explicit test hardening.")}if(a.length===0)return e;return{...e,verdict:e.verdict==="reject"?"reject":"revise",findings:[...e.findings,...a],recommendedChanges:[...e.recommendedChanges,...a]}}async function A(e,t,r){let{runId:a,...i}=r;await De(t.authority,a,i.type),e.push(i),await t.artifactSink?.persist(i)}function P(e,t){return`${e}-${t}-${Date.now()}`}var Lt=["completed","failed","blocked","cancelled"];function K(e){if(!e.spec.shutdownPolicy.requireTerminalTasks)return!0;return e.tasks.every((t)=>Lt.includes(t.status))}function N(e){if(!e.spec.shutdownPolicy.requireEvidenceGate)return!0;if(e.spec.verificationLane.required)return e.evidenceBundleIds.length>0;return e.evidenceBundleIds.length>0||e.tasks.some((t)=>t.evidenceBundleIds.length>0)}function $e(e,t){return{runId:e.runId,status:t?"completed_with_followup_recommended":"completed",completedAt:new Date().toISOString(),evidenceBundleIds:e.evidenceBundleIds,cleanupStatus:e.cleanup.status,taskStatuses:e.tasks.map((r)=>({taskId:r.taskId,status:r.status})),followupRecommendation:t}}var qe=H(),ht=new Map(se.map((e)=>[e.key,e]));function D(e,t={}){let r=t.now?.()??new Date,a=t.laneRegistry?.get(e.run.lane)??ht.get(e.run.lane),i=(a?.requiredArtifacts??[]).filter((o)=>!At(e.artifacts,o)).map((o)=>String(o)),n=(a?.allowedTransitions.length??0)>0&&!e.run.recommendedNextLane;if(e.completion){let o=e.completion.lastGateResult??qe.evaluate({policy:e.completion.spec.verificationPolicy,evidence:e.evidence,approvals:e.approvals,blockingRisks:e.run.blockingRisks,now:()=>r});return{missingArtifacts:i,missingEvidence:[...o.missingEvidence,...o.staleEvidence],missingApprovals:o.missingApprovals,blockingRisks:o.blockingRisks,missingNextLane:n,terminalReadiness:J({missingArtifacts:i,missingEvidence:o.missingEvidence,missingApprovals:o.missingApprovals,blockingRisks:o.blockingRisks,hasStaleEvidence:o.staleEvidence.length>0,missingNextLane:n})}}if(e.team&&a&&typeof a.verificationPolicy!=="string"){let o=qe.evaluate({policy:a.verificationPolicy,evidence:e.evidence,approvals:e.approvals,blockingRisks:e.run.blockingRisks,now:()=>r}),s=o.missingApprovals.length>0?o.missingApprovals:e.run.pendingApprovalRoles.map((l)=>`${l}:approve`);return{missingArtifacts:i,missingEvidence:[...o.missingEvidence,...o.staleEvidence],missingApprovals:s,blockingRisks:o.blockingRisks,missingNextLane:n,terminalReadiness:J({missingArtifacts:i,missingEvidence:o.missingEvidence,missingApprovals:s,blockingRisks:o.blockingRisks,hasStaleEvidence:o.staleEvidence.length>0,missingNextLane:n,requiresCleanup:!0,cleanupInProgress:e.team.cleanup.status==="in_progress",fullyReady:K(e.team)&&N(e.team)&&(e.team.cleanup.status==="completed"||e.team.cleanup.status==="partial")})}}return{missingArtifacts:i,missingEvidence:[],missingApprovals:e.run.pendingApprovalRoles.map((o)=>`${o}:approve`),blockingRisks:e.run.blockingRisks,missingNextLane:n,terminalReadiness:J({missingArtifacts:i,missingEvidence:[],missingApprovals:e.run.pendingApprovalRoles.map((o)=>`${o}:approve`),blockingRisks:e.run.blockingRisks,hasStaleEvidence:!1,missingNextLane:n})}}function At(e,t){return e.some((r)=>{if(W(String(r.artifactType))!==t)return!1;return Pt(t,r.body)})}function Pt(e,t){switch(e){case"clarification_artifact":return typeof t==="object"&&t!==null&&F(t).length===0;case"plan_pack":return typeof t==="object"&&t!==null&&j(t).length===0;case"tradeoff_record":case"progress_ledger":return Array.isArray(t);case"architect_review":case"critique_verdict":case"completion_record":case"signoff_record":case"team_snapshot":case"verification_lane_evidence":return typeof t==="object"&&t!==null;default:return!0}}function J(e){if(e.requiresCleanup&&e.cleanupInProgress)return"cleanup_pending";if(e.blockingRisks.length>0)return"blocked";if(e.missingArtifacts.length>0)return"missing_artifact";if(e.hasStaleEvidence)return"stale_evidence";if(e.missingEvidence.length>0)return"missing_evidence";if(e.missingApprovals.length>0)return"missing_approval";if(e.missingNextLane)return"not_ready";if(e.requiresCleanup&&!e.fullyReady)return"not_ready";return"ready"}var G=90000;function Ve(e,t=new Date){let r=D(e,{now:()=>t}),a=e.run.evidenceBundleIds.length===0?0:e.evidence.length/Math.max(e.run.evidenceBundleIds.length,1);return{runId:e.run.runId,lane:e.run.lane,objective:e.run.objective,status:e.run.status,currentPhase:e.run.currentPhase,ownerRole:e.run.ownerRole,evidenceCompleteness:Math.min(1,a),missingArtifacts:r.missingArtifacts,pendingApprovals:e.run.pendingApprovalRoles,missingEvidence:r.missingEvidence,missingApprovals:r.missingApprovals,blockingRisks:r.blockingRisks,terminalReadiness:r.terminalReadiness,recommendedNextLane:e.run.recommendedNextLane,updatedAt:e.run.updatedAt}}function gn(e,t=new Date){let r=e.completion;if(!r)return;let a=D(e,{now:()=>t});return{runId:r.runId,phase:r.phase,iteration:r.iteration,retryCount:r.retryCount,snapshotRef:r.spec.snapshotRef,pendingApprovals:r.pendingApprovalRoles,evidenceBundles:r.evidenceBundleIds.length,lastFailureClass:r.lastFailureClass,missingEvidence:a.missingEvidence,terminalReadiness:a.terminalReadiness,updatedAt:r.updatedAt}}function pn(e,t=new Date){let r=e.team;if(!r)return;let a=r.workers.filter((s)=>s.status==="running").length,i=Ct(r,t),n=r.tasks.filter((s)=>Et(s.lease?.expiresAt,t)).length,o=r.tasks.filter((s)=>s.status==="ready").length;return{runId:r.runId,status:r.status,totalTasks:r.tasks.length,completedTasks:r.tasks.filter((s)=>s.status==="completed").length,activeWorkers:a,staleWorkers:i.length,staleLeaseCount:n,staleWorkerIds:i,pendingEvidence:r.tasks.filter((s)=>s.evidenceBundleIds.length===0).length,queueSkew:Math.max(o-a,0),verificationReady:bt(r),cleanupStatus:r.cleanup.status,updatedAt:r.updatedAt}}function bt(e){if(!e.spec.verificationLane.required)return!0;return e.evidenceBundleIds.length>0}function Ct(e,t){return e.workers.filter((r)=>{if(!r.lastHeartbeatAt)return!1;return t.getTime()-new Date(r.lastHeartbeatAt).getTime()>G}).map((r)=>r.workerId)}function Et(e,t){if(!e)return!1;return new Date(e).getTime()<t.getTime()}async function f(e,t,r,a,i){await w(e.hooks,{action:t,runId:r,lane:"team.coordinated",actorId:a,reason:i?.reason,metadata:i?.metadata})}async function d(e,t){let r=await e.getTeam(t);if(!r)throw Error(`Team run not found: ${t}`);return r}async function g(e,t){t.updatedAt=new Date().toISOString(),await e.saveTeam(t),await Te(e,t)}function L(e,t,r="idle"){if(!t)return;let a=e.workers.find((i)=>i.workerId===t);if(a)a.status=r,a.currentTaskId=void 0}function E(e,t){let r=e.tasks.find((a)=>a.taskId===t);if(!r)throw Error(`Task not found: ${t}`);return r}function He(e,t){let r=e.get(t);e.assert({roleKey:t,lane:"team.coordinated",requiredTools:r.routingRole==="executor"||r.posture==="builder"?["execute"]:r.key==="planner"?["read","analyze","review"]:["review"]})}function Oe(){let e=new B;for(let t of q)e.register(t);return e}async function X(e,t,r){await f(e,"pause",t,r);let a=await d(e.store,t),i=a.workers.filter((n)=>n.status==="running");if(i.length>0&&!e.adapter.pauseWorker)throw I(a.spec.backendKey,"pause");for(let n of i)await e.adapter.pauseWorker?.(t,n.workerId),n.status="paused";return a.status="paused",a.updatedAt=new Date().toISOString(),await e.store.appendEvent({id:m("event"),runId:t,type:"team.paused",createdAt:a.updatedAt,phase:a.status,message:"Team run paused."}),await g(e.store,a),a}async function z(e,t,r){await f(e,"resume",t,r);let a=await d(e.store,t),i=a.workers.filter((n)=>n.status==="paused");if(i.length>0&&!e.adapter.resumeWorker)throw I(a.spec.backendKey,"resume");for(let n of i)await e.adapter.resumeWorker?.(t,n.workerId),n.status=_t(n);return a.status="running",a.updatedAt=new Date().toISOString(),await e.store.appendEvent({id:m("event"),runId:t,type:"team.resumed",createdAt:a.updatedAt,phase:a.status,message:"Team run resumed."}),await g(e.store,a),a}async function Me(e,t,r,a,i){await f(e,"nudge",t,i,{reason:a,metadata:{workerId:r}});let n=await d(e.store,t);if(!n.workers.find((l)=>l.workerId===r))throw Error(`Worker not found: ${r}`);if(!n.spec.coordination.mailbox&&!e.adapter.nudgeWorker)throw I(n.spec.backendKey,"nudge");let s=new Date().toISOString();return n.mailbox.push({id:m("mail"),from:"system",to:r,scope:"system",createdAt:s,body:a}),await e.adapter.nudgeWorker?.(t,r,a),n.updatedAt=s,await e.store.appendEvent({id:m("event"),runId:t,type:"team.nudged",createdAt:s,phase:n.status,message:a,metadata:{workerId:r}}),await g(e.store,n),n.mailbox.at(-1)}function _t(e){return e.currentTaskId?"running":"idle"}function I(e,t){return Error(`Team backend "${e??"unknown"}" does not support ${t==="pause"?"pausing":t==="resume"?"resuming":"nudging"} workers.`)}function Wt(e){let t=[];if(!e.id.trim())c(t,"id","Team run id is required.");if(!e.objective.trim())c(t,"objective","Team run objective is required.");if(e.workers.length===0)c(t,"workers","Team run requires at least one worker.");let r=new Set;for(let n of e.workers){if(!n.workerId.trim())c(t,"workers[].workerId","Worker id is required.");if(r.has(n.workerId))c(t,`workers.${n.workerId}`,"Worker ids must be unique.");if(r.add(n.workerId),!n.roleProfile.trim())c(t,`workers.${n.workerId}.roleProfile`,"Worker role profile is required.")}let a=new Set(e.backlog.map((n)=>n.taskId)),i=new Set(e.workers.map((n)=>n.roleProfile));for(let n of e.backlog){if(!n.taskId.trim())c(t,"backlog[].taskId","Task id is required.");if(!n.title.trim())c(t,`backlog.${n.taskId}.title`,"Task title is required.");if(n.roleHint&&!i.has(n.roleHint))c(t,`backlog.${n.taskId}.roleHint`,`No worker is available for role "${n.roleHint}".`);for(let o of n.dependencies??[])if(!a.has(o))c(t,`backlog.${n.taskId}.dependencies`,`Unknown dependency "${o}".`);if(n.writePaths&&n.writePaths.some((o)=>!o.trim()))c(t,`backlog.${n.taskId}.writePaths`,"Write paths must be non-empty strings.")}if(e.verificationLane.required&&!e.verificationLane.ownerRole.trim())c(t,"verificationLane.ownerRole","Verification lane owner role is required.");return t}function je(e){return k(Wt(e),`Invalid team run "${e.id}"`),e}var Bt=["workspace","scoped-worktree"];function Ke(e,t){for(let r of e.workers)if(t(r.roleProfile).writeScope==="scoped-worktree"&&r.worktreeMode!=="isolated")throw Error(`Worker "${r.workerId}" requires isolated worktree mode for scoped-worktree writes.`);for(let r of e.backlog){if(!r.writePaths||r.writePaths.length===0)continue;if(!r.roleHint)throw Error(`Task "${r.taskId}" declares write paths and must declare a roleHint.`);let a=t(r.roleHint);if(!Bt.includes(a.writeScope))throw Error(`Role "${r.roleHint}" cannot own write paths for task "${r.taskId}".`)}}function Ne(e,t,r,a){let i=Array.from(new Set(t.backlog.filter((n)=>n.roleHint===r.roleProfile&&n.writePaths&&n.writePaths.length>0).flatMap((n)=>n.writePaths??[])));return{runId:e,workerId:r.workerId,roleKey:r.roleProfile,writeScope:a.writeScope,worktreeMode:r.worktreeMode,writePaths:i.length>0?i:void 0}}async function Ue(e,t,r){await f(e,"team.create",t.id,r,{metadata:{workerCount:t.workers.length,taskCount:t.backlog.length}}),je(t),Ke(t,(n)=>e.roleGuard.get(n));for(let n of t.workers)He(e.roleGuard,n.roleProfile);if(t.verificationLane.ownerRole!=="human")e.roleGuard.assert({roleKey:t.verificationLane.ownerRole,lane:"team.coordinated",requiredTools:["review"]});let a=new Date().toISOString(),i={runId:t.id,spec:t,status:"initialized",tasks:t.backlog.map((n)=>({taskId:n.taskId,title:n.title,description:n.description,roleHint:n.roleHint,dependencies:n.dependencies??[],writePaths:n.writePaths,status:(n.dependencies?.length??0)>0?"pending":"ready",evidenceBundleIds:[],retryHistory:[]})),workers:t.workers.map((n)=>({workerId:n.workerId,roleProfile:n.roleProfile,status:"idle"})),mailbox:[],heartbeatLog:[],cleanup:{status:"not_requested",failures:[]},evidenceBundleIds:[],createdAt:a,updatedAt:a};return await e.store.saveTeam(i),i}async function Fe(e,t,r){await f(e,"team.start",t,r);let a=await d(e.store,t);for(let i of a.workers){let n=a.spec.workers.find((o)=>o.workerId===i.workerId);if(!n)throw Error(`Worker spec not found: ${i.workerId}`);await e.adapter.startWorker(Ne(t,a.spec,n,e.roleGuard.get(i.roleProfile))),i.status="running"}return a.status="running",await g(e.store,a),a}async function Qe(e,t){let r=await d(e.store,t),a=new Date,i=r.workers.filter((n)=>{if(!n.lastHeartbeatAt)return!1;return a.getTime()-new Date(n.lastHeartbeatAt).getTime()>e.heartbeatStaleMs}).map((n)=>n.workerId);return{runId:t,status:r.status,totalTasks:r.tasks.length,completedTasks:r.tasks.filter((n)=>n.status==="completed").length,activeWorkers:r.workers.filter((n)=>n.status==="running").length,staleWorkers:i.length,staleLeaseCount:r.tasks.filter((n)=>n.lease&&new Date(n.lease.expiresAt).getTime()<a.getTime()).length,staleWorkerIds:i,pendingEvidence:r.tasks.filter((n)=>n.evidenceBundleIds.length===0).length,queueSkew:Math.max(r.tasks.filter((n)=>n.status==="ready").length-r.workers.filter((n)=>n.status==="running").length,0),verificationReady:!r.spec.verificationLane.required||r.evidenceBundleIds.length>0,cleanupStatus:r.cleanup.status,updatedAt:r.updatedAt}}async function Ye(e,t,r,a=new Date,i){await f(e,"team.rebalance",t,i,{reason:r});let n=await ee(e,t,a,i);return n=await te(e,t,a,i),n}async function ee(e,t,r=new Date,a){await f(e,"team.reclaim_expired_leases",t,a);let i=await d(e.store,t);for(let n of i.tasks)if(n.lease&&new Date(n.lease.expiresAt).getTime()<r.getTime())n.status="ready",n.lease=void 0,n.retryHistory.push("lease expired"),L(i,n.claimedBy);return await g(e.store,i),i}async function te(e,t,r=new Date,a){await f(e,"team.reconcile_worker_liveness",t,a);let i=await d(e.store,t);for(let n of i.workers)if(n.lastHeartbeatAt&&r.getTime()-new Date(n.lastHeartbeatAt).getTime()>e.heartbeatStaleMs){n.status="offline",i.heartbeatLog.push({id:m("heartbeat"),workerId:n.workerId,createdAt:r.toISOString(),currentTaskId:n.currentTaskId,health:"stale",progressSummary:n.progressSummary});for(let o of i.tasks.filter((s)=>s.claimedBy===n.workerId))o.status="ready",o.lease=void 0,o.retryHistory.push("worker heartbeat expired");L(i,n.workerId,"offline")}return await g(e.store,i),i}async function Ze(e,t,r,a){await f(e,"team.shutdown",t,a,{reason:r});let i=await d(e.store,t);i.cleanup={...i.cleanup,status:"in_progress",requestedAt:new Date().toISOString(),reason:r,failures:[]};for(let n of i.workers)try{await e.adapter.stopWorker(t,n.workerId),n.status="completed"}catch(o){n.status="failed",i.cleanup.failures.push({workerId:n.workerId,message:o instanceof Error?o.message:"Unknown cleanup failure"})}return i.cleanup.status=i.cleanup.failures.length===0?"completed":"partial",i.cleanup.completedAt=new Date().toISOString(),i.status=i.status==="running"?"paused":i.status,i.terminalReason=r,await e.store.saveArtifact({id:m("artifact"),runId:t,artifactType:"team_cleanup_state",createdAt:i.cleanup.completedAt,body:i.cleanup,summary:i.cleanup.status==="completed"?"Team cleanup completed.":"Team cleanup completed with partial failures."}),await g(e.store,i),i}async function Je(e,t,r,a){await f(e,"team.finalize",t,a,{reason:r});let i=await d(e.store,t);if(!["completed","partial"].includes(i.cleanup.status))throw Error(`Team run ${t} has not completed worker cleanup.`);if(!K(i))throw Error(`Team run ${t} still has non-terminal tasks.`);if(!N(i))throw Error(`Team run ${t} is missing required evidence.`);let n=$e(i,r);return i.status=n.status,i.updatedAt=n.completedAt,i.terminalStateArtifactId=m("terminal"),await e.store.saveArtifact({id:m("artifact"),runId:t,artifactType:"team_snapshot",createdAt:n.completedAt,body:n,summary:r??"Team run completed."}),await e.store.saveArtifact({id:i.terminalStateArtifactId,runId:t,artifactType:"terminal_state",createdAt:n.completedAt,body:n,summary:n.status}),await g(e.store,i),n}async function Ge(e,t,r,a=60000,i){await f(e,"team.claim_task",t,i,{metadata:{workerId:r,leaseMs:a}});let n=await d(e.store,t),o=n.workers.find((l)=>l.workerId===r),s=n.tasks.find((l)=>l.status==="ready"&&l.roleHint===o?.roleProfile)??n.tasks.find((l)=>l.status==="ready");if(!s)return;if(s.status="leased",s.claimedBy=r,s.lease={workerId:r,leasedAt:new Date().toISOString(),expiresAt:new Date(Date.now()+a).toISOString(),renewCount:0},o)o.status="running",o.currentTaskId=s.taskId;return await g(e.store,n),s}async function Xe(e,t,r,a=60000,i){await f(e,"team.renew_lease",t,i,{metadata:{taskId:r,leaseMs:a}});let n=await d(e.store,t),o=n.tasks.find((s)=>s.taskId===r);if(!o?.lease)throw Error(`Task lease not found: ${r}`);return o.lease.expiresAt=new Date(Date.now()+a).toISOString(),o.lease.renewCount+=1,await g(e.store,n),o}async function ze(e,t,r,a){await f(e,"team.complete_task",t,a,{metadata:{taskId:r}});let i=await d(e.store,t),n=E(i,r);n.status="completed",n.lease=void 0;for(let o of i.tasks.filter((s)=>s.dependencies.includes(r)))if(o.dependencies.every((s)=>i.tasks.some((l)=>l.taskId===s&&l.status==="completed")))o.status="ready";return L(i,n.claimedBy),await g(e.store,i),i}async function Ie(e,t,r,a,i){await f(e,"team.attach_task_evidence",t,i,{metadata:{taskId:r,bundleId:a}});let n=await d(e.store,t),o=E(n,r);return o.evidenceBundleIds=Array.from(new Set([...o.evidenceBundleIds,a])),await g(e.store,n),o}async function et(e,t,r,a){await f(e,"team.attach_run_evidence",t,a,{metadata:{bundleId:r}});let i=await d(e.store,t);return i.evidenceBundleIds=Array.from(new Set([...i.evidenceBundleIds,r])),await e.store.saveArtifact({id:m("artifact"),runId:t,artifactType:"verification_lane_evidence",createdAt:new Date().toISOString(),body:{bundleId:r},summary:`Attached verification evidence bundle ${r}.`}),await g(e.store,i),i}async function tt(e,t,r,a,i){await f(e,"team.fail_task",t,i,{reason:a,metadata:{taskId:r}});let n=await d(e.store,t),o=E(n,r);return o.status="failed",o.retryHistory.push(a),o.lease=void 0,L(n,o.claimedBy),await g(e.store,n),n}async function rt(e,t,r,a,i){await f(e,"team.heartbeat",t,i,{reason:a,metadata:{workerId:r}});let n=await d(e.store,t),o=n.workers.find((s)=>s.workerId===r);if(!o)throw Error(`Worker not found: ${r}`);return o.lastHeartbeatAt=new Date().toISOString(),o.progressSummary=a,n.heartbeatLog.push({id:m("heartbeat"),workerId:r,createdAt:o.lastHeartbeatAt,currentTaskId:o.currentTaskId,health:"healthy",progressSummary:a}),await g(e.store,n),o}async function re(e,t,r,a){await f(e,"team.send_message",t,a,{reason:r.body,metadata:{from:r.from,to:r.to,scope:r.scope}});let i=await d(e.store,t);return i.mailbox.push({...r,id:m("mail"),createdAt:new Date().toISOString()}),await g(e.store,i),i.mailbox.at(-1)}function Yn(e,t,r){let a={store:e,adapter:t,hooks:r?.hooks,roleGuard:O(r?.roleRegistry??Oe()),heartbeatStaleMs:r?.heartbeatStaleMs??G};return{create(i,n){return Ue(a,i,n)},start(i,n){return Fe(a,i,n)},claimNextTask(i,n,o=60000,s){return Ge(a,i,n,o,s)},renewLease(i,n,o=60000,s){return Xe(a,i,n,o,s)},completeTask(i,n,o){return ze(a,i,n,o)},attachTaskEvidence(i,n,o,s){return Ie(a,i,n,o,s)},attachRunEvidence(i,n,o){return et(a,i,n,o)},failTask(i,n,o,s){return tt(a,i,n,o,s)},heartbeat(i,n,o,s){return rt(a,i,n,o,s)},sendMessage(i,n,o){return re(a,i,n,o)},async rebalance(i,n,o=new Date,s){let l=await Ye(a,i,n,o,s);return await re(a,i,{from:"system",to:"leader",scope:"system",body:`Rebalance requested: ${n}`},s),l},reclaimExpiredLeases(i,n=new Date,o){return ee(a,i,n,o)},reconcileWorkerLiveness(i,n=new Date,o){return te(a,i,n,o)},pause(i,n){return X(a,i,n)},resume(i,n){return z(a,i,n)},nudge(i,n,o,s){return Me(a,i,n,o,s)},shutdown(i,n,o){return Ze(a,i,n,o)},finalize(i,n,o){return Je(a,i,n,o)},getStatusView(i){return Qe(a,i)},require(i){return d(e,i)},persist(i){return g(e,i)},releaseWorker:L,requireTask:E}}function ae(e){let t=[];if(!e.key)c(t,"key","Lane key is required.");if(!e.description.trim())c(t,"description","Description is required.");if(e.allowedTransitions.includes(e.key))c(t,"allowedTransitions","A lane cannot directly transition to itself.");if(e.requiredArtifacts.length===0)c(t,"requiredArtifacts","At least one required artifact must be declared.");if(typeof e.verificationPolicy==="string"?!e.verificationPolicy.trim():!e.verificationPolicy.key)c(t,"verificationPolicy","Verification policy key is required.");return t}class Dt{items=new Map;register(e){return k(ae(e),`Invalid execution lane spec "${e.key}"`),this.items.set(e.key,e),this}get(e){return this.items.get(e)}list(){return Array.from(this.items.values())}canTransition(e,t){let r=this.items.get(e);return r?r.allowedTransitions.includes(t):!1}}function In(e){return k(ae(e),`Invalid execution lane spec "${e.key}"`),e}class $t{runs=new Map;artifacts=new Map;events=new Map;transitions=new Map;evidence=new Map;approvals=new Map;completions=new Map;teams=new Map;async createRun(e){this.runs.set(e.runId,p(e))}async getRun(e){let t=this.runs.get(e);return t?p(t):void 0}async updateRun(e,t){let r=this.runs.get(e);if(!r)throw Error(`Lane run not found: ${e}`);let a=p(t(p(r)));return this.runs.set(e,a),p(a)}async listRuns(){return Array.from(this.runs.values()).map((e)=>p(e))}async saveArtifact(e){this.upsert(this.artifacts,e.runId,e)}async listArtifacts(e){return this.cloneList(this.artifacts,e)}async appendEvent(e){this.upsert(this.events,e.runId,e)}async listEvents(e){return this.cloneList(this.events,e)}async saveTransition(e){this.upsert(this.transitions,e.runId,e)}async listTransitions(e){return this.cloneList(this.transitions,e)}async saveEvidence(e){this.upsert(this.evidence,e.runId,e)}async listEvidence(e){return this.cloneList(this.evidence,e)}async saveApproval(e){this.upsert(this.approvals,e.runId,e)}async listApprovals(e){return this.cloneList(this.approvals,e)}async saveCompletion(e){this.completions.set(e.runId,p(e))}async getCompletion(e){let t=this.completions.get(e);return t?p(t):void 0}async saveTeam(e){this.teams.set(e.runId,p(e))}async getTeam(e){let t=this.teams.get(e);return t?p(t):void 0}async getSnapshot(e){let t=await this.getRun(e);if(!t)return;return{run:t,events:await this.listEvents(e),transitions:await this.listTransitions(e),artifacts:await this.listArtifacts(e),evidence:await this.listEvidence(e),approvals:await this.listApprovals(e),completion:await this.getCompletion(e),team:await this.getTeam(e)}}push(e,t,r){let a=e.get(t)??[];a.push(p(r)),e.set(t,a)}upsert(e,t,r){let a=e.get(t)??[],i=a.findIndex((n)=>n.id===r.id);if(i===-1)a.push(p(r));else a[i]=p(r);e.set(t,a)}cloneList(e,t){return(e.get(t)??[]).map((r)=>p(r))}}async function at(e,t,r){let a=await e.getSnapshot(t);if(!a)throw Error(`Execution lane run ${t} cannot be marked terminal.`);let i=D(a,{laneRegistry:r.laneRegistry,now:r.now});if(i.terminalReadiness!=="ready")throw Error(Vt(t,i))}function nt(e,t,r){if(t!=="completed")return;if(r.allowTerminalForRun?.(e,t))return;let a=r.laneRegistry?.get(e.lane),i=e.recommendedNextLane;if(!a)return;qt(a,e,i)}function qt(e,t,r){if(e.allowedTransitions.length===0){if(r)throw Error(`Execution lane run ${t.runId} cannot complete with a follow-up lane from "${t.lane}".`);return}if(!r)throw Error(`Execution lane run ${t.runId} must record a next lane before completing "${t.lane}".`);if(!e.allowedTransitions.includes(r))throw Error(`Execution lane run ${t.runId} cannot complete with follow-up lane "${r}" from "${t.lane}".`)}function Vt(e,t){return[`Execution lane run ${e} is not ready for terminal completion.`,t.missingArtifacts.length>0?`missing artifacts: ${t.missingArtifacts.join(", ")}`:void 0,t.missingEvidence.length>0?`missing evidence: ${t.missingEvidence.join(", ")}`:void 0,t.missingApprovals.length>0?`missing approvals: ${t.missingApprovals.join(", ")}`:void 0,t.blockingRisks.length>0?`blocking risks: ${t.blockingRisks.join(", ")}`:void 0,t.missingNextLane?"recommended next lane is missing":void 0].filter((r)=>Boolean(r)).join(" ")}function mi(e,t={}){return{async startRun(r,a){return await w(t.hooks,{action:"start_run",runId:r.runId,lane:r.lane,actorId:a}),await e.createRun(r),r},async transitionRun(r,a,i){let n=await e.getRun(r);if(!n)throw Error(`Execution lane run ${r} cannot hand off.`);return await w(t.hooks,{action:"transition_run",runId:r,lane:n.lane,actorId:i,reason:a.terminalReason,metadata:{status:a.status,currentPhase:a.currentPhase,recommendedNextLane:a.recommendedNextLane}}),e.updateRun(r,(o)=>({...o,status:a.status??o.status,currentPhase:a.currentPhase??o.currentPhase,recommendedNextLane:a.recommendedNextLane??o.recommendedNextLane,terminalReason:a.terminalReason??o.terminalReason,updatedAt:new Date().toISOString()}))},async markTerminal(r,a,i,n){let o=await e.getRun(r);if(!o)throw Error(`Execution lane run ${r} cannot be marked terminal.`);if(nt(o,a,t),await w(t.hooks,{action:"transition_run",runId:r,lane:o.lane,actorId:n,reason:i,metadata:{status:a}}),a==="completed")await at(e,r,t);return this.transitionRun(r,{status:a,currentPhase:a,terminalReason:i},n)},async appendArtifact(r,a,i){let n=await e.getRun(r);await w(t.hooks,{action:"append_artifact",runId:r,lane:n?.lane,actorId:i,metadata:{artifactType:a.artifactType}}),await e.saveArtifact({...a,id:m("artifact"),runId:r})},async appendEvidence(r,a,i){let n=await e.getRun(r);await w(t.hooks,{action:"append_evidence",runId:r,lane:n?.lane,actorId:i,metadata:{classes:a.classes}}),await e.saveEvidence(a),await e.updateRun(r,(o)=>({...o,evidenceBundleIds:Array.from(new Set([...o.evidenceBundleIds,a.id])),updatedAt:new Date().toISOString()}))},async appendApproval(r,a,i){let n=await e.getRun(r);await w(t.hooks,{action:"append_approval",runId:r,lane:n?.lane,actorId:i,metadata:{role:a.role,state:a.state}}),await e.saveApproval(a),await C(e,a)},async appendEvent(r,a,i,n){let o=await e.getRun(r);await w(t.hooks,{action:"append_event",runId:r,lane:o?.lane,actorId:n,reason:i,metadata:{type:a}}),await e.appendEvent({id:m("event"),runId:r,type:a,createdAt:new Date().toISOString(),message:i})},async handoffToLane(r,a,i,n){let o=await e.getRun(r);if(!o||!a)throw Error(`Execution lane run ${r} cannot hand off.`);if(await w(t.hooks,{action:"handoff",runId:r,lane:o.lane,actorId:n,reason:i,metadata:{to:a}}),o.lane===a)throw Error(`Execution lane run ${r} cannot hand off to itself.`);if(t.laneRegistry&&!t.laneRegistry.canTransition(o.lane,a))throw Error(`Execution lane run ${r} cannot transition from "${o.lane}" to "${a}".`);let s={id:m("transition"),runId:r,from:o.lane,to:a,reason:i,createdAt:new Date().toISOString(),actorId:n};return await e.saveTransition(s),await e.updateRun(r,(l)=>({...l,recommendedNextLane:a,updatedAt:new Date().toISOString()})),s},async getStatusView(r){let a=await e.getSnapshot(r);if(!a)return;return Ve(a)},async getSnapshot(r){return e.getSnapshot(r)}}}function di(e){return{exportedAt:new Date().toISOString(),run:e.run,state:{completion:e.completion,team:e.team},events:e.events,transitions:e.transitions,artifacts:e.artifacts,evidence:e.evidence,approvals:e.approvals}}function S(e){return JSON.stringify(e,null,2)}function U(e){return e.map((t)=>JSON.stringify(t)).join(`
3
+ `)}function h(e,t){try{return JSON.parse(t)}catch(r){throw Error(`Invalid JSON in ${e}: ${r instanceof Error?r.message:"unknown parse failure"}`)}}function $(e,t,r){if(t===void 0)return r;return h(e,t)}function ne(e,t){let r=t.trim();if(!r)return[];return r.split(`
4
+ `).map((a,i)=>{try{return JSON.parse(a)}catch(n){throw Error(`Invalid NDJSON in ${e} at line ${i+1}: ${n instanceof Error?n.message:"unknown parse failure"}`)}})}function ie(e,t,r){if(t===void 0)return r;return ne(e,t)}function ki(e){let t={"laneRun.json":S(e.run),"state.json":S(Ht(e)),"events.ndjson":U(e.events),"artifacts.json":S(e.artifacts),"evidence.json":S(e.evidence),"approvals.json":S(e.approvals),"transitions.json":S(e.transitions)};if(e.team){let r=Mt(e);t["workers.json"]=S(r.workers),t["tasks.json"]=S(r.tasks),t["leases.json"]=S(r.leases),t["mailbox.ndjson"]=U(r.mailbox),t["heartbeats.ndjson"]=U(r.heartbeats),t["terminal-state.json"]=S(r.terminalState)}return t}async function yi(e,t){let r=Kt(t);await e.createRun(r.run);for(let i of r.events)await e.appendEvent(i);for(let i of r.transitions)await e.saveTransition(i);for(let i of r.artifacts)await e.saveArtifact(i);for(let i of r.evidence)await e.saveEvidence(i);for(let i of r.approvals)await e.saveApproval(i);if(r.state.completion)await e.saveCompletion(r.state.completion);if(r.state.team)await e.saveTeam(Nt(r));let a=await e.getSnapshot(r.run.runId);if(!a)throw Error(`Failed to hydrate lane runtime store for run ${r.run.runId}.`);return a}function Ht(e){return{completion:e.completion,team:e.team?Ot(e.team):void 0}}function Ot(e){return{runId:e.runId,spec:e.spec,status:e.status,cleanup:e.cleanup,evidenceBundleIds:e.evidenceBundleIds,createdAt:e.createdAt,updatedAt:e.updatedAt,terminalReason:e.terminalReason,terminalStateArtifactId:e.terminalStateArtifactId}}function Mt(e){let t=e.team,r=t.tasks.map(({lease:i,...n})=>n),a=t.tasks.filter((i)=>i.lease).map((i)=>({taskId:i.taskId,lease:i.lease}));return{workers:t.workers,tasks:r,leases:a,mailbox:t.mailbox,heartbeats:t.heartbeatLog,terminalState:jt(e)}}function jt(e){if(!e.team)return null;return((e.team.terminalStateArtifactId?e.artifacts.find((r)=>r.id===e.team?.terminalStateArtifactId):void 0)??[...e.artifacts].reverse().find((r)=>W(String(r.artifactType))==="terminal_state"))?.body??null}function Kt(e){return{run:h("laneRun.json",e["laneRun.json"]),state:h("state.json",e["state.json"]),events:ne("events.ndjson",e["events.ndjson"]),transitions:h("transitions.json",e["transitions.json"]),artifacts:h("artifacts.json",e["artifacts.json"]),evidence:h("evidence.json",e["evidence.json"]),approvals:h("approvals.json",e["approvals.json"]),workers:$("workers.json",e["workers.json"],[]),tasks:$("tasks.json",e["tasks.json"],[]),leases:$("leases.json",e["leases.json"],[]),mailbox:ie("mailbox.ndjson",e["mailbox.ndjson"],[]),heartbeats:ie("heartbeats.ndjson",e["heartbeats.ndjson"],[]),terminalState:$("terminal-state.json",e["terminal-state.json"],null)}}function Nt(e){let t=e.state.team,r=new Map(e.leases.map((a)=>[a.taskId,a.lease]));return{...t,workers:e.workers,tasks:e.tasks.map((a)=>({...a,lease:r.get(a.taskId)})),mailbox:e.mailbox,heartbeatLog:e.heartbeats}}function Ti(){return{select(e){if(e.preferredLane)return e.preferredLane;if(e.planPack)return Ut(e.planPack,e.parallelizableTaskCount);if((e.ambiguityScore??0)>=0.45)return"clarify";if(e.hasPlanPack){if(e.parallelizableTaskCount&&e.parallelizableTaskCount>2)return"team.coordinated";return"complete.persistent"}return"plan.consensus"}}}function Ut(e,t){let r=e.staffing.handoffRecommendation.nextLane;if(r)return r;if((t??e.planSteps.length)>3)return"team.coordinated";return"complete.persistent"}export{ke as validateVerificationPolicySource,we as validateVerificationPolicy,Wt as validateTeamRunSpec,Y as validateRoleProfile,j as validateExecutionPlanPack,ae as validateExecutionLaneSpec,St as validateCompletionLoopSpec,F as validateClarificationArtifact,Te as syncLaneRunFromTeam,R as syncLaneRunFromCompletion,C as syncLaneApprovalState,Q as resolveVerificationPolicySource,pr as resolveExecutionLaneCommand,c as pushIssue,wr as parseExecutionLaneCommand,b as normalizeExecutionLaneFailureClass,me as normalizeExecutionLaneEvidenceClasses,V as normalizeExecutionLaneEvidenceClass,er as normalizeExecutionLaneArtifactTypes,W as normalizeExecutionLaneArtifactType,ce as isRetryableExecutionLaneFailureClass,st as isExecutionLaneFailureClass,rr as isExecutionLaneEvidenceClass,tr as isExecutionLaneArtifactType,le as isBlockingExecutionLaneFailureClass,yi as hydrateLaneRuntimeStore,D as evaluateLaneReadiness,Ra as defineRoleProfile,In as defineExecutionLane,Wr as createWorkflowEngineTeamBackend,Br as createWorkflowEngineCompletionBackend,Pr as createTmuxTeamBackend,Yn as createTeamRun,Er as createTeamBackendAdapter,hr as createSubagentTeamBackend,O as createRoleGuard,xr as createQueueTeamBackend,Ti as createLaneSelector,mi as createLaneRuntime,ki as createLanePersistenceFiles,di as createLanePersistenceBundle,ft as createInProcessTeamBackend,Tr as createInProcessCompletionBackend,vr as createInMemoryTeamBackend,H as createEvidenceGate,Jr as createEvidenceBundle,rn as createConsensusPlanningLane,Za as createCompletionLoop,Cr as createCompletionBackendAdapter,na as createClarifyLane,pn as buildTeamStatusView,Ve as buildLaneStatusView,gn as buildCompletionStatusView,ye as assertValidVerificationPolicy,je as assertValidTeamRunSpec,ve as assertValidCompletionLoopSpec,fe as assertValidClarificationArtifact,k as assertValid,w as assertLaneAuthority,Rt as VerificationPolicyRegistry,G as TEAM_STALE_HEARTBEAT_MS,B as RoleProfileRegistry,$t as InMemoryLaneRuntimeStore,Dt as ExecutionLaneRegistry,it as EXECUTION_LANE_FAILURE_CLASSES,lt as EXECUTION_LANE_EVIDENCE_CLASSES,ue as EXECUTION_LANE_COMMANDS,ct as EXECUTION_LANE_ARTIFACT_TYPES,_ as DEFAULT_TRANSITIONS,q as DEFAULT_ROLE_PROFILES,se as DEFAULT_LANES};
@@ -0,0 +1,18 @@
1
+ import type { LaneKey } from '../types';
2
+ export type ExecutionLaneCommandUsage = '/clarify' | '/plan' | '/plan --consensus' | '/complete' | '/team';
3
+ export interface ExecutionLaneCommandDescriptor {
4
+ usage: ExecutionLaneCommandUsage;
5
+ alias: '/clarify' | '/plan' | '/complete' | '/team';
6
+ lane: LaneKey;
7
+ mode: 'default' | 'consensus';
8
+ acceptsTask: boolean;
9
+ summary: string;
10
+ }
11
+ export interface ParsedExecutionLaneCommand extends ExecutionLaneCommandDescriptor {
12
+ raw: string;
13
+ task: string;
14
+ flags: string[];
15
+ }
16
+ export declare const EXECUTION_LANE_COMMANDS: ExecutionLaneCommandDescriptor[];
17
+ export declare function resolveExecutionLaneCommand(input: ExecutionLaneCommandUsage | LaneKey): ExecutionLaneCommandDescriptor;
18
+ export declare function parseExecutionLaneCommand(input: string): ParsedExecutionLaneCommand | undefined;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './commands';
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var c=[{usage:"/clarify",alias:"/clarify",lane:"clarify",mode:"default",acceptsTask:!0,summary:"Reduce ambiguity and capture a clarification artifact."},{usage:"/plan",alias:"/plan",lane:"plan.consensus",mode:"default",acceptsTask:!0,summary:"Draft a consensus-ready execution plan pack."},{usage:"/plan --consensus",alias:"/plan",lane:"plan.consensus",mode:"consensus",acceptsTask:!0,summary:"Run the deliberate consensus-planning variant."},{usage:"/complete",alias:"/complete",lane:"complete.persistent",mode:"default",acceptsTask:!0,summary:"Start or resume the persistent completion loop."},{usage:"/team",alias:"/team",lane:"team.coordinated",mode:"default",acceptsTask:!0,summary:"Start coordinated multi-worker execution."}],l={clarify:"/clarify","plan.consensus":"/plan","complete.persistent":"/complete","team.coordinated":"/team"};function d(e){let s=e.startsWith("/")?e:l[e],a=c.find((n)=>n.usage===s);if(!a)throw Error(`Unsupported execution lane command: ${e}`);return a}function p(e){let s=e.trim();if(!s.startsWith("/"))return;let[a="",n="",...o]=s.split(/\s+/);if(a==="/plan"&&n.startsWith("--")&&n!=="--consensus")return;let t=a==="/plan"&&n==="--consensus"?"/plan --consensus":a,r=c.find((u)=>u.usage===t);if(!r)return;let i=t==="/plan --consensus"?["--consensus"]:[],m=t==="/plan --consensus"?o.join(" ").trim():[n,...o].join(" ").trim();return{...r,raw:e,task:m,flags:i}}export{d as resolveExecutionLaneCommand,p as parseExecutionLaneCommand,c as EXECUTION_LANE_COMMANDS};
@@ -0,0 +1,11 @@
1
+ import type { AuthorityContextRefs, ClarificationArtifact } from '../../types';
2
+ export interface ClarifyInput {
3
+ request: string;
4
+ objective?: string;
5
+ constraints?: string[];
6
+ assumptions?: string[];
7
+ authorityContext?: AuthorityContextRefs;
8
+ }
9
+ export declare function createClarifyLane(): {
10
+ run(input: ClarifyInput): ClarificationArtifact;
11
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { ApprovalRecord, CompletionFailureClassInput, CompletionLoopState, EvidenceBundleRef } from '../../types';
2
+ import { type CompletionLoopDependencies } from './completion-loop-shared';
3
+ export declare function addCompletionProgress(dependencies: CompletionLoopDependencies, runId: string, message: string, classification?: CompletionFailureClassInput, actorId?: string): Promise<CompletionLoopState>;
4
+ export declare function attachCompletionEvidence(dependencies: CompletionLoopDependencies, runId: string, bundle: EvidenceBundleRef, actorId?: string): Promise<CompletionLoopState>;
5
+ export declare function requestCompletionApproval(dependencies: CompletionLoopDependencies, runId: string, approval: ApprovalRecord, actorId?: string): Promise<CompletionLoopState>;
6
+ export declare function evaluateCompletionEvidence(dependencies: CompletionLoopDependencies, runId: string, blockingRisks?: string[], actorId?: string): Promise<import("../..").EvidenceGateResult>;
7
+ export declare function resumeCompletionLoop(dependencies: CompletionLoopDependencies, runId: string, actorId?: string): Promise<CompletionLoopState>;
@@ -0,0 +1,24 @@
1
+ import type { CompletionBackendAdapter } from '../../adapters/types';
2
+ import { createEvidenceGate } from '../../evidence/gate';
3
+ import { RoleProfileRegistry } from '../../registry/role-profile-registry';
4
+ import { type LaneAuthorityAction, type LaneAuthorityHooks } from '../../runtime/authority-hooks';
5
+ import { createRoleGuard } from '../../runtime/role-guard';
6
+ import type { LaneRuntimeStore } from '../../runtime/store';
7
+ import type { CompletionLoopSpec, CompletionLoopState, EvidenceGateResult } from '../../types';
8
+ export interface CompletionLoopDependencies {
9
+ store: LaneRuntimeStore;
10
+ backend?: CompletionBackendAdapter;
11
+ hooks?: LaneAuthorityHooks;
12
+ gate: ReturnType<typeof createEvidenceGate>;
13
+ roleGuard: ReturnType<typeof createRoleGuard>;
14
+ }
15
+ export declare function assertCompletionAuthority(dependencies: CompletionLoopDependencies, action: LaneAuthorityAction, runId: string, actorId?: string, input?: {
16
+ reason?: string;
17
+ metadata?: Record<string, unknown>;
18
+ }): Promise<void>;
19
+ export declare function assertCompletionRoles(roleGuard: ReturnType<typeof createRoleGuard>, spec: CompletionLoopSpec): void;
20
+ export declare function requireCompletionState(store: LaneRuntimeStore, runId: string): Promise<CompletionLoopState>;
21
+ export declare function persistCompletionArtifacts(store: LaneRuntimeStore, state: CompletionLoopState, progressSummary?: string): Promise<void>;
22
+ export declare function requiredSignoffRoles(signoff: CompletionLoopSpec['signoff']): string[];
23
+ export declare function formatGateFailure(result: EvidenceGateResult): string;
24
+ export declare function createDefaultRoleRegistry(): RoleProfileRegistry;
@@ -0,0 +1,12 @@
1
+ import type { ApprovalRecord, CompletionFailureClassInput, CompletionLoopState, CompletionRecord } from '../../types';
2
+ import { type CompletionLoopDependencies } from './completion-loop-shared';
3
+ export declare function decideCompletionApproval(dependencies: CompletionLoopDependencies, runId: string, inputApproval: Omit<ApprovalRecord, 'id' | 'runId' | 'requestedAt'> & {
4
+ requestedAt?: string;
5
+ }, actorId?: string): Promise<ApprovalRecord>;
6
+ export declare function recordCompletionFailure(dependencies: CompletionLoopDependencies, runId: string, classification: CompletionFailureClassInput, message: string, actorId?: string): Promise<CompletionLoopState>;
7
+ export declare function finalizeCompletionLoop(dependencies: CompletionLoopDependencies, runId: string, inputFinalize: {
8
+ status: CompletionRecord['status'];
9
+ terminalReason?: string;
10
+ approvalIds: string[];
11
+ unresolvedRisks: string[];
12
+ }, actorId?: string): Promise<CompletionRecord>;
@@ -0,0 +1,31 @@
1
+ import type { CompletionBackendAdapter } from '../../adapters/types';
2
+ import { RoleProfileRegistry } from '../../registry/role-profile-registry';
3
+ import { VerificationPolicyRegistry } from '../../registry/verification-policy-registry';
4
+ import type { LaneRuntimeStore } from '../../runtime/store';
5
+ import type { ApprovalRecord, CompletionFailureClassInput, CompletionLoopSpec, CompletionLoopState, CompletionRecord, EvidenceBundleRef } from '../../types';
6
+ import { type CompletionLoopDependencies } from './completion-loop-shared';
7
+ export declare function createCompletionLoop(store: LaneRuntimeStore, input?: {
8
+ roleRegistry?: RoleProfileRegistry;
9
+ policyRegistry?: VerificationPolicyRegistry;
10
+ backend?: CompletionBackendAdapter;
11
+ hooks?: CompletionLoopDependencies['hooks'];
12
+ }): {
13
+ create(spec: CompletionLoopSpec, contextSnapshot?: Record<string, unknown>, actorId?: string): Promise<CompletionLoopState>;
14
+ addProgress(runId: string, message: string, classification?: CompletionFailureClassInput, actorId?: string): Promise<CompletionLoopState>;
15
+ attachEvidence(runId: string, bundle: EvidenceBundleRef, actorId?: string): Promise<CompletionLoopState>;
16
+ requestApproval(runId: string, approval: ApprovalRecord, actorId?: string): Promise<CompletionLoopState>;
17
+ evaluateEvidence(runId: string, blockingRisks?: string[], actorId?: string): Promise<import("../..").EvidenceGateResult>;
18
+ resume(runId: string, actorId?: string): Promise<CompletionLoopState>;
19
+ decideApproval(runId: string, inputApproval: Omit<ApprovalRecord, "id" | "runId" | "requestedAt"> & {
20
+ requestedAt?: string;
21
+ }, actorId?: string): Promise<ApprovalRecord>;
22
+ recordFailure(runId: string, classification: CompletionFailureClassInput, message: string, actorId?: string): Promise<CompletionLoopState>;
23
+ finalize(runId: string, inputFinalize: {
24
+ status: CompletionRecord["status"];
25
+ terminalReason?: string;
26
+ approvalIds: string[];
27
+ unresolvedRisks: string[];
28
+ }, actorId?: string): Promise<CompletionRecord>;
29
+ getState(runId: string): Promise<CompletionLoopState>;
30
+ require(runId: string): Promise<CompletionLoopState>;
31
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { type CompletionFailureClassInput, type CompletionLoopPhase, type ExecutionLaneFailureClass } from '../../types';
2
+ export interface ResolvedCompletionFailure {
3
+ normalized: ExecutionLaneFailureClass;
4
+ phase: Extract<CompletionLoopPhase, 'remediating' | 'blocked' | 'failed'>;
5
+ retryable: boolean;
6
+ }
7
+ export declare function resolveCompletionFailure(input: CompletionFailureClassInput): ResolvedCompletionFailure;
@@ -0,0 +1,10 @@
1
+ import { type LaneAuthorityHooks } from '../../runtime/authority-hooks';
2
+ import type { ExecutionPlanPack } from '../../types';
3
+ import type { ConsensusPlanningArtifact, ConsensusPlanningMode } from './consensus';
4
+ export interface ConsensusPlanningAuthority {
5
+ hooks?: LaneAuthorityHooks;
6
+ runId?: string;
7
+ actorId?: string;
8
+ }
9
+ export declare function assertConsensusArtifactPersistence(authority: ConsensusPlanningAuthority | undefined, runId: string, artifactType: ConsensusPlanningArtifact['type']): Promise<void>;
10
+ export declare function assertConsensusPlanHandoff(authority: ConsensusPlanningAuthority | undefined, plan: ExecutionPlanPack, mode: ConsensusPlanningMode): Promise<void>;
@@ -0,0 +1 @@
1
+ export {};