@flowdesk/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/agent-profiles.d.ts +38 -0
  2. package/dist/agent-profiles.d.ts.map +1 -0
  3. package/dist/agent-profiles.js +138 -0
  4. package/dist/agent-profiles.js.map +1 -0
  5. package/dist/audit.d.ts +11 -0
  6. package/dist/audit.d.ts.map +1 -0
  7. package/dist/audit.js +65 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/bootstrap-foundation.d.ts +83 -0
  10. package/dist/bootstrap-foundation.d.ts.map +1 -0
  11. package/dist/bootstrap-foundation.js +773 -0
  12. package/dist/bootstrap-foundation.js.map +1 -0
  13. package/dist/chat-routing.d.ts +15 -0
  14. package/dist/chat-routing.d.ts.map +1 -0
  15. package/dist/chat-routing.js +172 -0
  16. package/dist/chat-routing.js.map +1 -0
  17. package/dist/command-manifest.d.ts +39 -0
  18. package/dist/command-manifest.d.ts.map +1 -0
  19. package/dist/command-manifest.js +240 -0
  20. package/dist/command-manifest.js.map +1 -0
  21. package/dist/config-policy.d.ts +31 -0
  22. package/dist/config-policy.d.ts.map +1 -0
  23. package/dist/config-policy.js +341 -0
  24. package/dist/config-policy.js.map +1 -0
  25. package/dist/fake-runtime.d.ts +68 -0
  26. package/dist/fake-runtime.d.ts.map +1 -0
  27. package/dist/fake-runtime.js +285 -0
  28. package/dist/fake-runtime.js.map +1 -0
  29. package/dist/guard-boundary.d.ts +53 -0
  30. package/dist/guard-boundary.d.ts.map +1 -0
  31. package/dist/guard-boundary.js +220 -0
  32. package/dist/guard-boundary.js.map +1 -0
  33. package/dist/guarded-dry-run.d.ts +46 -0
  34. package/dist/guarded-dry-run.d.ts.map +1 -0
  35. package/dist/guarded-dry-run.js +111 -0
  36. package/dist/guarded-dry-run.js.map +1 -0
  37. package/dist/hook-harness.d.ts +8 -0
  38. package/dist/hook-harness.d.ts.map +1 -0
  39. package/dist/hook-harness.js +130 -0
  40. package/dist/hook-harness.js.map +1 -0
  41. package/dist/index.d.ts +41 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +51 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/lane-observability.d.ts +22 -0
  46. package/dist/lane-observability.d.ts.map +1 -0
  47. package/dist/lane-observability.js +138 -0
  48. package/dist/lane-observability.js.map +1 -0
  49. package/dist/plan.d.ts +37 -0
  50. package/dist/plan.d.ts.map +1 -0
  51. package/dist/plan.js +137 -0
  52. package/dist/plan.js.map +1 -0
  53. package/dist/production-enablement.d.ts +57 -0
  54. package/dist/production-enablement.d.ts.map +1 -0
  55. package/dist/production-enablement.js +259 -0
  56. package/dist/production-enablement.js.map +1 -0
  57. package/dist/provider-failures.d.ts +19 -0
  58. package/dist/provider-failures.d.ts.map +1 -0
  59. package/dist/provider-failures.js +116 -0
  60. package/dist/provider-failures.js.map +1 -0
  61. package/dist/provider-usage-collector.d.ts +60 -0
  62. package/dist/provider-usage-collector.d.ts.map +1 -0
  63. package/dist/provider-usage-collector.js +502 -0
  64. package/dist/provider-usage-collector.js.map +1 -0
  65. package/dist/redaction.d.ts +5 -0
  66. package/dist/redaction.d.ts.map +1 -0
  67. package/dist/redaction.js +11 -0
  68. package/dist/redaction.js.map +1 -0
  69. package/dist/release1-contracts.d.ts +1203 -0
  70. package/dist/release1-contracts.d.ts.map +1 -0
  71. package/dist/release1-contracts.js +256 -0
  72. package/dist/release1-contracts.js.map +1 -0
  73. package/dist/retry.d.ts +21 -0
  74. package/dist/retry.d.ts.map +1 -0
  75. package/dist/retry.js +107 -0
  76. package/dist/retry.js.map +1 -0
  77. package/dist/reviewer-lane-conformance.d.ts +35 -0
  78. package/dist/reviewer-lane-conformance.d.ts.map +1 -0
  79. package/dist/reviewer-lane-conformance.js +124 -0
  80. package/dist/reviewer-lane-conformance.js.map +1 -0
  81. package/dist/schema-artifacts.d.ts +19 -0
  82. package/dist/schema-artifacts.d.ts.map +1 -0
  83. package/dist/schema-artifacts.js +182 -0
  84. package/dist/schema-artifacts.js.map +1 -0
  85. package/dist/schema-registry.d.ts +32 -0
  86. package/dist/schema-registry.d.ts.map +1 -0
  87. package/dist/schema-registry.js +163 -0
  88. package/dist/schema-registry.js.map +1 -0
  89. package/dist/session-evidence.d.ts +71 -0
  90. package/dist/session-evidence.d.ts.map +1 -0
  91. package/dist/session-evidence.js +336 -0
  92. package/dist/session-evidence.js.map +1 -0
  93. package/dist/state-paths.d.ts +20 -0
  94. package/dist/state-paths.d.ts.map +1 -0
  95. package/dist/state-paths.js +72 -0
  96. package/dist/state-paths.js.map +1 -0
  97. package/dist/state-store.d.ts +75 -0
  98. package/dist/state-store.d.ts.map +1 -0
  99. package/dist/state-store.js +567 -0
  100. package/dist/state-store.js.map +1 -0
  101. package/dist/status.d.ts +37 -0
  102. package/dist/status.d.ts.map +1 -0
  103. package/dist/status.js +304 -0
  104. package/dist/status.js.map +1 -0
  105. package/dist/tool-contract-fixtures.d.ts +134 -0
  106. package/dist/tool-contract-fixtures.d.ts.map +1 -0
  107. package/dist/tool-contract-fixtures.js +389 -0
  108. package/dist/tool-contract-fixtures.js.map +1 -0
  109. package/dist/top-tier-reviewer-lane-probe.d.ts +10 -0
  110. package/dist/top-tier-reviewer-lane-probe.d.ts.map +1 -0
  111. package/dist/top-tier-reviewer-lane-probe.js +76 -0
  112. package/dist/top-tier-reviewer-lane-probe.js.map +1 -0
  113. package/dist/usage-health.d.ts +44 -0
  114. package/dist/usage-health.d.ts.map +1 -0
  115. package/dist/usage-health.js +105 -0
  116. package/dist/usage-health.js.map +1 -0
  117. package/dist/validators.d.ts +142 -0
  118. package/dist/validators.d.ts.map +1 -0
  119. package/dist/validators.js +1690 -0
  120. package/dist/validators.js.map +1 -0
  121. package/package.json +37 -0
@@ -0,0 +1,285 @@
1
+ import { preparePreRunAuditWriteIntent } from "./audit.js";
2
+ import { getFlowDeskCommandManifestEntry } from "./command-manifest.js";
3
+ import { validateNonDispatchPermissionV1 } from "./config-policy.js";
4
+ import { evaluateGuardBoundaryV1 } from "./guard-boundary.js";
5
+ import { createFlowDeskLaneObservabilityArtifactV1, validateFlowDeskLaneObservabilityArtifactV1 } from "./lane-observability.js";
6
+ import { prepareAttemptRecordWriteIntent, prepareLaneRecordWriteIntent } from "./state-store.js";
7
+ import { laneRecordToStatusLaneSummaryV1 } from "./status.js";
8
+ import { validateLaneSummaryArtifactV1, validateOpaqueId, validateRunRequestV1, validateRunResponseV1, validateSchemaArtifactValue } from "./validators.js";
9
+ function validateBoundPermission(input, permission, permissionClass) {
10
+ return validateNonDispatchPermissionV1(permission, {
11
+ expectedConfigHash: input.guardBoundary.configHash,
12
+ expectedPolicyPackHashes: input.guardBoundary.policy?.policy_pack_hashes,
13
+ expectedPermissionClass: permissionClass,
14
+ expectedWorkflowId: input.request.workflow_id,
15
+ expectedScopeRef: input.guardBoundary.scopeRef,
16
+ expectedAuditRef: input.guardBoundary.auditRef,
17
+ requireWorkflowId: true,
18
+ requireAuditRef: true,
19
+ forbiddenGrantSources: ["policy_pack"],
20
+ now: input.guardBoundary.now
21
+ });
22
+ }
23
+ const inertRuntime = {
24
+ realOpenCodeDispatch: false,
25
+ actualLaneLaunch: false,
26
+ providerCall: false,
27
+ automaticFallbackOrReselection: false,
28
+ hardCancelOrNoReply: false,
29
+ stateWriteApplied: false
30
+ };
31
+ function resultErrors(...results) {
32
+ return results.flatMap((result) => result.errors);
33
+ }
34
+ function redactedError(category, safeRemediation) {
35
+ return { category, safe_remediation: safeRemediation };
36
+ }
37
+ function optionalFakeRuntimeLane(input, workflowId) {
38
+ const provided = [input.laneId, input.laneTaskRef, input.laneSummaryRef, input.laneObservabilityRef, input.laneEventRef].filter((value) => value !== undefined).length;
39
+ if (provided === 0)
40
+ return { errors: [] };
41
+ if (provided !== 5)
42
+ return { errors: ["fake-runtime lane output requires lane id, task ref, summary ref, observability ref, and event ref together"] };
43
+ const laneRecord = {
44
+ schema_version: "flowdesk.lane_record.v1",
45
+ lane_id: input.laneId,
46
+ workflow_id: workflowId,
47
+ plan_revision_id: input.request.plan_revision_id,
48
+ attempt_id: input.attemptId,
49
+ task_ref: input.laneTaskRef,
50
+ lane_class: "verification",
51
+ state: "completed",
52
+ created_at: input.nowIso,
53
+ started_at: input.nowIso,
54
+ updated_at: input.nowIso,
55
+ completed_at: input.nowIso,
56
+ safe_next_action: "/flowdesk-status",
57
+ refs: [input.laneSummaryRef, input.laneObservabilityRef],
58
+ event_refs: [input.laneEventRef],
59
+ audit_refs: [input.guardBoundary.auditRef ?? input.decisionRef],
60
+ observability_ref: input.laneObservabilityRef,
61
+ ...(input.laneDebugRef === undefined ? {} : { debug_ref: input.laneDebugRef })
62
+ };
63
+ const laneSummaryArtifact = {
64
+ schema_version: "flowdesk.lane_summary.v1",
65
+ ...laneRecordToStatusLaneSummaryV1(laneRecord, { planRevisionId: input.request.plan_revision_id })
66
+ };
67
+ const laneObservabilityArtifact = createFlowDeskLaneObservabilityArtifactV1({
68
+ observabilityId: input.laneObservabilityRef,
69
+ statusSummaryRef: input.laneSummaryRef,
70
+ laneSummary: laneSummaryArtifact,
71
+ observabilityLevel: "openable_refs",
72
+ inspectionState: "inspectable",
73
+ detailRef: input.laneSummaryRef,
74
+ debugRef: input.laneDebugRef,
75
+ redactionStatus: "passed"
76
+ });
77
+ const laneSummaryResult = validateLaneSummaryArtifactV1(laneSummaryArtifact);
78
+ const laneObservabilityResult = validateFlowDeskLaneObservabilityArtifactV1(laneObservabilityArtifact);
79
+ const laneIntentResult = prepareLaneRecordWriteIntent(input.sessionId, laneRecord);
80
+ return {
81
+ laneRecord,
82
+ laneSummaryArtifact,
83
+ laneObservabilityArtifact,
84
+ laneRecordIntent: laneIntentResult.writeIntent,
85
+ errors: [...laneSummaryResult.errors, ...laneObservabilityResult.errors, ...laneIntentResult.errors]
86
+ };
87
+ }
88
+ function responseFor(input, ok, status, userMessage, safeNextActions, error) {
89
+ return {
90
+ schema_version: "flowdesk.run.response.v1",
91
+ ok,
92
+ status,
93
+ safe_next_actions: safeNextActions,
94
+ user_message: userMessage,
95
+ ...(error === undefined ? {} : { error }),
96
+ run_result_ref: input.runResultRef,
97
+ verification_summary_ref: input.verificationSummaryRef,
98
+ artifact_disposition: ok ? "quarantined" : "none"
99
+ };
100
+ }
101
+ function blockedDecision(category, reason) {
102
+ return {
103
+ status: "blocked",
104
+ reason_category: category,
105
+ redacted_reason: reason,
106
+ required_checks: [],
107
+ safe_next_actions: ["/flowdesk-doctor", "/flowdesk-status"]
108
+ };
109
+ }
110
+ export function evaluateFlowDeskFakeRuntimeCommandV1(input) {
111
+ const manifestEntry = getFlowDeskCommandManifestEntry(input.commandName);
112
+ const requestResult = validateRunRequestV1(input.request);
113
+ const idErrors = resultErrors(validateOpaqueId(input.sessionId, "session_id"), validateOpaqueId(input.attemptId, "attempt_id"), validateOpaqueId(input.auditEventId, "audit_event_id"), validateOpaqueId(input.outcomeAuditEventId, "outcome_audit_event_id"), validateOpaqueId(input.decisionRef, "decision_ref"), validateOpaqueId(input.routeRef, "route_ref"), validateOpaqueId(input.commandShapeHash, "command_shape_hash"), validateOpaqueId(input.runResultRef, "run_result_ref"), validateOpaqueId(input.runtimeEchoEvidenceRef, "runtime_echo_evidence_ref"), validateOpaqueId(input.verificationSummaryRef, "verification_summary_ref"), validateOpaqueId(input.outcomeAuditRef, "outcome_audit_ref"));
114
+ const baseErrors = [...requestResult.errors, ...idErrors];
115
+ if (manifestEntry === undefined || input.commandName !== "/flowdesk-run" || manifestEntry.toolName !== "flowdesk_run")
116
+ baseErrors.push("fake-runtime evaluator only accepts the /flowdesk-run command");
117
+ if (manifestEntry !== undefined && (manifestEntry.actualLaneLaunch || manifestEntry.providerCall || manifestEntry.dispatchApprovalEligible || manifestEntry.fallbackAuthority || manifestEntry.hardCancelOrNoReplyAuthority))
118
+ baseErrors.push("command manifest is not inert for Release 1 fake-runtime evaluation");
119
+ if (input.request.run_mode !== "fake-runtime")
120
+ baseErrors.push("fake-runtime evaluator requires run_mode fake-runtime");
121
+ if (input.request.workflow_id === undefined)
122
+ baseErrors.push("fake-runtime evaluator requires workflow_id for guard binding");
123
+ if (baseErrors.length > 0) {
124
+ const guardDecision = blockedDecision("schema", "Run command request failed closed before Guard evaluation.");
125
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request before execution planning.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("schema", "Run doctor or status, then retry with a schema-valid fake-runtime request."));
126
+ const responseResult = validateRunResponseV1(response);
127
+ return { ok: false, errors: [...baseErrors, ...responseResult.errors], commandName: input.commandName, guardDecision, response, runtime: inertRuntime };
128
+ }
129
+ const workflowId = input.request.workflow_id;
130
+ if (workflowId === undefined) {
131
+ const guardDecision = blockedDecision("schema", "Run command request failed closed before Guard evaluation.");
132
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request before execution planning.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("schema", "Run doctor or status, then retry with an explicitly scoped fake-runtime request."));
133
+ const responseResult = validateRunResponseV1(response);
134
+ return { ok: false, errors: responseResult.errors, commandName: input.commandName, guardDecision, response, runtime: inertRuntime };
135
+ }
136
+ const guardDecision = evaluateGuardBoundaryV1({ ...input.guardBoundary, operation: "fake-runtime", workflowId });
137
+ if (guardDecision.status !== "eligible") {
138
+ const response = responseFor(input, false, "blocked", guardDecision.redacted_reason, [...guardDecision.safe_next_actions], redactedError(guardDecision.reason_category, "Use FlowDesk doctor or status to refresh the missing fake-runtime evidence."));
139
+ const responseResult = validateRunResponseV1(response);
140
+ return { ok: false, errors: responseResult.errors, commandName: input.commandName, guardDecision, response, runtime: inertRuntime };
141
+ }
142
+ const runtimeCapabilityRef = input.guardBoundary.runtimeCapabilityRef;
143
+ if (runtimeCapabilityRef === undefined) {
144
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because runtime capability evidence is unavailable.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("conformance", "Refresh runtime capability evidence before retrying fake-runtime."));
145
+ const responseResult = validateRunResponseV1(response);
146
+ return { ok: false, errors: responseResult.errors, commandName: input.commandName, guardDecision: blockedDecision("conformance", "Runtime capability evidence is required."), response, runtime: inertRuntime };
147
+ }
148
+ const auditPermissionResult = validateBoundPermission(input, input.auditWritePermission, "audit_write");
149
+ const statePermissionResult = validateBoundPermission(input, input.stateWritePermission, "state_write");
150
+ const supplementalPermissionErrors = [...auditPermissionResult.errors, ...statePermissionResult.errors];
151
+ if (supplementalPermissionErrors.length > 0) {
152
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because required audit or state write permission is unavailable.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("policy", "Refresh scoped audit_write and state_write permissions before retrying fake-runtime."));
153
+ const responseResult = validateRunResponseV1(response);
154
+ return { ok: false, errors: [...supplementalPermissionErrors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("policy", "Scoped audit_write and state_write permissions are required."), response, runtime: inertRuntime };
155
+ }
156
+ const auditEvent = {
157
+ schema_version: "flowdesk.audit_event.v1",
158
+ event_id: input.auditEventId,
159
+ event_type: "pre_run_fake_runtime",
160
+ workflow_id: workflowId,
161
+ attempt_id: input.attemptId,
162
+ ...(input.request.step_id === undefined ? {} : { step_id: input.request.step_id }),
163
+ created_at: input.nowIso,
164
+ actor_class: "flowdesk",
165
+ decision_ref: input.decisionRef,
166
+ redaction_version: input.redactionVersion,
167
+ summary_label: "Fake runtime planned without real dispatch.",
168
+ artifact_refs: [input.runResultRef, input.runtimeEchoEvidenceRef, input.verificationSummaryRef]
169
+ };
170
+ const auditIntentResult = preparePreRunAuditWriteIntent(input.sessionId, auditEvent, {
171
+ auditRef: input.guardBoundary.auditRef ?? input.decisionRef,
172
+ evidenceRefs: [input.routeRef, input.decisionRef, input.guardBoundary.conformanceRef, input.guardBoundary.runtimeCapabilityRef, input.runtimeEchoEvidenceRef].filter((ref) => ref !== undefined)
173
+ });
174
+ if (!auditIntentResult.ok || auditIntentResult.writeIntent === undefined) {
175
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because pre-run audit evidence could not be prepared.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("audit", "Refresh audit evidence before retrying fake-runtime."));
176
+ const responseResult = validateRunResponseV1(response);
177
+ return { ok: false, errors: [...auditIntentResult.errors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("audit", "Pre-run audit evidence preparation failed."), response, runtime: inertRuntime };
178
+ }
179
+ const verificationSummaryArtifact = {
180
+ schema_version: "flowdesk.verification_summary.v1",
181
+ verification_id: input.verificationSummaryRef,
182
+ workflow_id: workflowId,
183
+ attempt_id: input.attemptId,
184
+ result: "passed",
185
+ check_labels: ["fake-runtime-deterministic", "no-real-dispatch", "redacted-audit-intent"],
186
+ artifact_refs: [input.runResultRef, input.runtimeEchoEvidenceRef],
187
+ safe_next_actions: ["/flowdesk-status", "/flowdesk-export-debug"]
188
+ };
189
+ const verificationResult = validateSchemaArtifactValue("flowdesk.verification_summary.v1", verificationSummaryArtifact);
190
+ if (!verificationResult.ok) {
191
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because verification summary evidence could not be prepared.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("state", "Refresh fake-runtime verification evidence before retrying."));
192
+ const responseResult = validateRunResponseV1(response);
193
+ return { ok: false, errors: [...verificationResult.errors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("state", "Verification summary evidence preparation failed."), response, runtime: inertRuntime };
194
+ }
195
+ const outcomeAuditEvent = {
196
+ schema_version: "flowdesk.audit_event.v1",
197
+ event_id: input.outcomeAuditEventId,
198
+ event_type: "fake_runtime_outcome_audit",
199
+ workflow_id: workflowId,
200
+ attempt_id: input.attemptId,
201
+ ...(input.request.step_id === undefined ? {} : { step_id: input.request.step_id }),
202
+ created_at: input.nowIso,
203
+ actor_class: "flowdesk",
204
+ decision_ref: input.decisionRef,
205
+ redaction_version: input.redactionVersion,
206
+ summary_label: "Fake runtime outcome recorded without real dispatch.",
207
+ artifact_refs: [input.runResultRef, input.runtimeEchoEvidenceRef, input.verificationSummaryRef]
208
+ };
209
+ const outcomeAuditResult = preparePreRunAuditWriteIntent(input.sessionId, { ...outcomeAuditEvent, event_type: "pre_run_fake_runtime_outcome_audit" }, {
210
+ auditRef: input.outcomeAuditRef,
211
+ evidenceRefs: [input.routeRef, input.decisionRef, runtimeCapabilityRef, input.runtimeEchoEvidenceRef, input.verificationSummaryRef]
212
+ });
213
+ if (!outcomeAuditResult.ok || outcomeAuditResult.writeIntent === undefined) {
214
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because outcome audit evidence could not be prepared.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("audit", "Refresh outcome audit evidence before retrying fake-runtime."));
215
+ const responseResult = validateRunResponseV1(response);
216
+ return { ok: false, errors: [...outcomeAuditResult.errors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("audit", "Outcome audit evidence preparation failed."), response, runtime: inertRuntime };
217
+ }
218
+ const attemptRecord = {
219
+ schema_version: "flowdesk.attempt_record.v1",
220
+ attempt_id: input.attemptId,
221
+ workflow_id: workflowId,
222
+ ...(input.request.step_id === undefined ? {} : { step_id: input.request.step_id }),
223
+ created_at: input.nowIso,
224
+ updated_at: input.nowIso,
225
+ run_mode: "fake-runtime",
226
+ state_at_start: "ready_to_run",
227
+ state_at_end: "complete",
228
+ attempt_state: "complete",
229
+ guard_decision_ref: input.decisionRef,
230
+ non_dispatch_permission_ref: input.guardBoundary.nonDispatchPermission?.permission_id,
231
+ command_shape_hash: input.commandShapeHash,
232
+ runtime_capability_ref: runtimeCapabilityRef,
233
+ pre_run_audit_ref: input.guardBoundary.auditRef ?? input.decisionRef,
234
+ runtime_echo_validation: "not_applicable",
235
+ verification_ref: input.verificationSummaryRef,
236
+ artifact_disposition: "quarantined",
237
+ outcome_audit_ref: input.outcomeAuditRef,
238
+ safe_next_actions: ["/flowdesk-status", "/flowdesk-export-debug"]
239
+ };
240
+ const attemptResult = prepareAttemptRecordWriteIntent(attemptRecord);
241
+ if (!attemptResult.ok || attemptResult.writeIntent === undefined) {
242
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because authoritative attempt state could not be prepared.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("state", "Refresh workflow attempt state evidence before retrying fake-runtime."));
243
+ const responseResult = validateRunResponseV1(response);
244
+ return { ok: false, errors: [...attemptResult.errors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("state", "Attempt state preparation failed."), response, runtime: inertRuntime };
245
+ }
246
+ const laneOutput = optionalFakeRuntimeLane(input, workflowId);
247
+ if (laneOutput.errors.length > 0) {
248
+ const response = responseFor(input, false, "blocked", "FlowDesk blocked this fake-runtime request because lane summary evidence could not be prepared.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("state", "Refresh redacted lane summary evidence before retrying fake-runtime."));
249
+ const responseResult = validateRunResponseV1(response);
250
+ return { ok: false, errors: [...laneOutput.errors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("state", "Lane summary evidence preparation failed."), response, runtime: inertRuntime };
251
+ }
252
+ const response = responseFor(input, true, "fake_runtime_complete", "FlowDesk completed deterministic fake-runtime evaluation. No OpenCode dispatch, lane launch, provider call, fallback, cancellation authority, or state write occurred.", ["/flowdesk-status", "/flowdesk-export-debug"], undefined);
253
+ const responseResult = validateRunResponseV1(response);
254
+ const evidenceRefs = {
255
+ plan_revision_id: input.request.plan_revision_id,
256
+ route_ref: input.routeRef,
257
+ guard_decision_ref: input.decisionRef,
258
+ command_shape_hash: input.commandShapeHash,
259
+ runtime_capability_ref: runtimeCapabilityRef,
260
+ fake_runtime_result_ref: input.runResultRef,
261
+ runtime_echo_evidence_ref: input.runtimeEchoEvidenceRef,
262
+ verification_summary_ref: input.verificationSummaryRef,
263
+ pre_run_audit_ref: input.guardBoundary.auditRef ?? input.decisionRef,
264
+ request_schema_id: "flowdesk.run.request.v1",
265
+ response_schema_id: "flowdesk.run.response.v1"
266
+ };
267
+ return {
268
+ ok: responseResult.ok,
269
+ errors: responseResult.errors,
270
+ commandName: input.commandName,
271
+ guardDecision,
272
+ response,
273
+ evidenceRefs,
274
+ verificationSummaryArtifact,
275
+ laneRecord: laneOutput.laneRecord,
276
+ laneSummaryArtifact: laneOutput.laneSummaryArtifact,
277
+ laneObservabilityArtifact: laneOutput.laneObservabilityArtifact,
278
+ preRunAuditIntent: auditIntentResult.writeIntent,
279
+ outcomeAuditIntent: outcomeAuditResult.writeIntent,
280
+ attemptRecordIntent: attemptResult.writeIntent,
281
+ laneRecordIntent: laneOutput.laneRecordIntent,
282
+ runtime: inertRuntime
283
+ };
284
+ }
285
+ //# sourceMappingURL=fake-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-runtime.js","sourceRoot":"","sources":["../src/fake-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { FlowDeskConformanceRuntimeMetadataV1, FlowDeskEffectivePolicyV1, FlowDeskManagedDispatchBetaBindingEvidenceV1, FlowDeskManagedDispatchBetaPolicyV1, FlowDeskManagedDispatchBetaRuntimeEchoEvidenceV1, FlowDeskManagedDispatchBetaTelemetryCorrelationV1, FlowDeskManagedDispatchBetaUsageAuthorityEvidenceV1, FlowDeskNonDispatchPermissionV1, FlowDeskProviderHealthSnapshotV1, FlowDeskUsageSnapshotV1, GuardApprovedDispatchV1, GuardCheckV1, GuardRequestV1, OpaqueRef, RedactedErrorCategory } from "./release1-contracts.js";
2
+ export type GuardBoundaryOperationV1 = "real-opencode-dispatch" | "guarded-dry-run" | "fake-runtime" | "command-steering";
3
+ export type GuardBoundaryStatusV1 = "blocked" | "eligible" | "diagnostic_only";
4
+ export interface GuardBoundaryInputV1 {
5
+ operation: GuardBoundaryOperationV1;
6
+ configHash?: string;
7
+ workflowId?: string;
8
+ scopeRef?: OpaqueRef;
9
+ policy?: FlowDeskEffectivePolicyV1;
10
+ usageSnapshot?: FlowDeskUsageSnapshotV1;
11
+ providerHealthSnapshot?: FlowDeskProviderHealthSnapshotV1;
12
+ auditRef?: OpaqueRef;
13
+ conformanceRef?: OpaqueRef;
14
+ runtimeCapabilityRef?: OpaqueRef;
15
+ nonDispatchPermission?: FlowDeskNonDispatchPermissionV1;
16
+ now?: number;
17
+ }
18
+ export interface GuardBoundaryDecisionV1 {
19
+ status: GuardBoundaryStatusV1;
20
+ reason_category: RedactedErrorCategory;
21
+ redacted_reason: string;
22
+ required_checks: GuardCheckV1[];
23
+ safe_next_actions: readonly ["/flowdesk-doctor", "/flowdesk-status"];
24
+ }
25
+ export interface ManagedDispatchBetaBoundaryInputV1 {
26
+ configHash: string;
27
+ policyPackHashes: readonly string[];
28
+ workflowId: string;
29
+ stepId: string;
30
+ attemptId: string;
31
+ betaPolicy?: FlowDeskManagedDispatchBetaPolicyV1;
32
+ guardApproval?: GuardApprovedDispatchV1;
33
+ bindingEvidence?: FlowDeskManagedDispatchBetaBindingEvidenceV1;
34
+ usageSnapshot?: FlowDeskUsageSnapshotV1;
35
+ usageAuthorityEvidence?: FlowDeskManagedDispatchBetaUsageAuthorityEvidenceV1;
36
+ expectedAuthProfileRef?: OpaqueRef;
37
+ expectedCredentialScopeRef?: OpaqueRef;
38
+ expectedAccountBoundaryRef?: OpaqueRef;
39
+ providerHealthSnapshot?: FlowDeskProviderHealthSnapshotV1;
40
+ runtimeEchoEvidence?: FlowDeskManagedDispatchBetaRuntimeEchoEvidenceV1;
41
+ conformanceRuntimeMetadata?: FlowDeskConformanceRuntimeMetadataV1;
42
+ telemetryCorrelation?: FlowDeskManagedDispatchBetaTelemetryCorrelationV1;
43
+ preDispatchAuditRef?: OpaqueRef;
44
+ configuredVerificationRef?: OpaqueRef;
45
+ fallbackOrReselectionAllowed?: boolean;
46
+ hardChatAuthorityAllowed?: boolean;
47
+ ambiguityQuarantined?: boolean;
48
+ now?: number;
49
+ }
50
+ export declare function evaluateGuardBoundaryV1(input: GuardBoundaryInputV1): GuardBoundaryDecisionV1;
51
+ export declare function evaluateRealDispatchPreconditionsV1(request: GuardRequestV1, usage?: FlowDeskUsageSnapshotV1, providerHealth?: FlowDeskProviderHealthSnapshotV1): GuardBoundaryDecisionV1;
52
+ export declare function evaluateManagedDispatchBetaGuardBoundaryV1(input: ManagedDispatchBetaBoundaryInputV1): GuardBoundaryDecisionV1;
53
+ //# sourceMappingURL=guard-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-boundary.d.ts","sourceRoot":"","sources":["../src/guard-boundary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oCAAoC,EACpC,yBAAyB,EACzB,4CAA4C,EAC5C,mCAAmC,EACnC,gDAAgD,EAChD,iDAAiD,EACjD,mDAAmD,EACnD,+BAA+B,EAC/B,gCAAgC,EAChC,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAejC,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,GAAG,iBAAiB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAC1H,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,wBAAwB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,sBAAsB,CAAC,EAAE,gCAAgC,CAAC;IAC1D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,qBAAqB,CAAC,EAAE,+BAA+B,CAAC;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,eAAe,EAAE,qBAAqB,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,iBAAiB,EAAE,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,kCAAkC;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,mCAAmC,CAAC;IACjD,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,eAAe,CAAC,EAAE,4CAA4C,CAAC;IAC/D,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,sBAAsB,CAAC,EAAE,mDAAmD,CAAC;IAC7E,sBAAsB,CAAC,EAAE,SAAS,CAAC;IACnC,0BAA0B,CAAC,EAAE,SAAS,CAAC;IACvC,0BAA0B,CAAC,EAAE,SAAS,CAAC;IACvC,sBAAsB,CAAC,EAAE,gCAAgC,CAAC;IAC1D,mBAAmB,CAAC,EAAE,gDAAgD,CAAC;IACvE,0BAA0B,CAAC,EAAE,oCAAoC,CAAC;IAClE,oBAAoB,CAAC,EAAE,iDAAiD,CAAC;IACzE,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,yBAAyB,CAAC,EAAE,SAAS,CAAC;IACtC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAqBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,uBAAuB,CA8D5F;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,uBAAuB,EAAE,cAAc,CAAC,EAAE,gCAAgC,GAAG,uBAAuB,CASxL;AAED,wBAAgB,0CAA0C,CAAC,KAAK,EAAE,kCAAkC,GAAG,uBAAuB,CA0I7H"}
@@ -0,0 +1,220 @@
1
+ import { validateEffectivePolicyV1, validateNonDispatchPermissionV1 } from "./config-policy.js";
2
+ import { validateManagedDispatchBetaApprovalFreshnessV1, validateManagedDispatchBetaBindingEvidenceV1, validateManagedDispatchBetaPolicyV1, validateManagedDispatchBetaProviderHealthEvidenceV1, validateManagedDispatchBetaRuntimeEchoEvidenceV1, validateManagedDispatchBetaTelemetryCorrelationV1, validateManagedDispatchBetaUsageAuthorityEvidenceV1, validateManagedDispatchBetaUsageEvidenceV1, validateOpaqueRef, validateProviderHealthSnapshotV1, validateUsageSnapshotV1 } from "./validators.js";
3
+ function fail(check, ref) {
4
+ return { check, result: "fail", ...(ref === undefined ? {} : { ref }) };
5
+ }
6
+ function modelFamilyFromProviderQualifiedModelId(value) {
7
+ if (value === undefined)
8
+ return undefined;
9
+ const separator = value.indexOf("/");
10
+ if (separator <= 0 || separator === value.length - 1)
11
+ return undefined;
12
+ return value.slice(separator + 1);
13
+ }
14
+ function pass(check, ref) {
15
+ return { check, result: "pass", ...(ref === undefined ? {} : { ref }) };
16
+ }
17
+ function boundaryDecision(status, reason_category, redacted_reason, required_checks) {
18
+ return { status, reason_category, redacted_reason, required_checks, safe_next_actions: ["/flowdesk-doctor", "/flowdesk-status"] };
19
+ }
20
+ export function evaluateGuardBoundaryV1(input) {
21
+ const checks = [];
22
+ if (input.policy === undefined || input.configHash === undefined) {
23
+ checks.push(fail("policy"));
24
+ return boundaryDecision("blocked", "policy", "Missing validated Release 1 config or effective policy.", checks);
25
+ }
26
+ const policyResult = validateEffectivePolicyV1(input.policy, { expectedConfigHash: input.configHash });
27
+ if (!policyResult.ok) {
28
+ checks.push(fail("policy"));
29
+ return boundaryDecision("blocked", "policy", "Effective policy failed closed validation.", checks);
30
+ }
31
+ checks.push(pass("policy"));
32
+ if (input.operation === "real-opencode-dispatch") {
33
+ checks.push(fail("conformance", input.conformanceRef), fail("audit", input.auditRef), fail("approval"));
34
+ return boundaryDecision("blocked", "policy", "Release 1 blocks real OpenCode dispatch regardless of diagnostic evidence.", checks);
35
+ }
36
+ if (input.operation === "command-steering") {
37
+ return boundaryDecision("diagnostic_only", "runtime", "Command steering is diagnostic and command-backed only.", checks);
38
+ }
39
+ const permission = input.nonDispatchPermission;
40
+ if (permission === undefined) {
41
+ checks.push(fail("approval"));
42
+ return boundaryDecision("blocked", "policy", "Guard-approved non-dispatch permission is required.", checks);
43
+ }
44
+ if (input.workflowId === undefined || input.scopeRef === undefined) {
45
+ checks.push(fail("approval"));
46
+ return boundaryDecision("blocked", "policy", "Guard boundary requires explicit workflow and scope binding.", checks);
47
+ }
48
+ const expectedPermissionClass = input.operation === "fake-runtime" ? "fake_runtime_write" : "audit_write";
49
+ const permissionResult = validateNonDispatchPermissionV1(permission, {
50
+ expectedConfigHash: input.configHash,
51
+ expectedPolicyPackHashes: input.policy.policy_pack_hashes,
52
+ expectedPermissionClass,
53
+ expectedWorkflowId: input.workflowId,
54
+ expectedScopeRef: input.scopeRef,
55
+ expectedAuditRef: input.auditRef,
56
+ requireWorkflowId: true,
57
+ requireAuditRef: true,
58
+ forbiddenGrantSources: ["policy_pack"],
59
+ now: input.now
60
+ });
61
+ if (!permissionResult.ok) {
62
+ checks.push(fail("approval"));
63
+ return boundaryDecision("blocked", "policy", "Non-dispatch permission is missing, stale, mismatched, or out of scope.", checks);
64
+ }
65
+ checks.push(pass("approval", permission.audit_ref));
66
+ if (input.auditRef === undefined) {
67
+ checks.push(fail("audit"));
68
+ return boundaryDecision("blocked", "audit", "Durable redacted audit reference is required before dry-run or fake-runtime writes.", checks);
69
+ }
70
+ checks.push(pass("audit", input.auditRef));
71
+ if (input.runtimeCapabilityRef === undefined) {
72
+ checks.push(fail("conformance", input.conformanceRef));
73
+ return boundaryDecision("blocked", "conformance", "Runtime capability evidence is required for guarded dry-run or fake-runtime.", checks);
74
+ }
75
+ checks.push(pass("conformance", input.conformanceRef), pass("runtime_compatibility", input.runtimeCapabilityRef));
76
+ return boundaryDecision("eligible", "runtime", "Eligible only for Release 1 non-dispatch guarded execution.", checks);
77
+ }
78
+ export function evaluateRealDispatchPreconditionsV1(request, usage, providerHealth) {
79
+ const checks = [];
80
+ if (request.requested_operation !== "real-opencode-dispatch")
81
+ return boundaryDecision("diagnostic_only", "runtime", "Request is not a real dispatch request.", checks);
82
+ if (usage === undefined || !validateUsageSnapshotV1(usage).ok || usage.dispatchability !== "dispatchable")
83
+ checks.push(fail("usage", request.usage_snapshot_ref));
84
+ else
85
+ checks.push(pass("usage", request.usage_snapshot_ref));
86
+ if (providerHealth === undefined || !validateProviderHealthSnapshotV1(providerHealth).ok || providerHealth.dispatchability !== "dispatchable")
87
+ checks.push(fail("provider_health", request.provider_health_snapshot_ref));
88
+ else
89
+ checks.push(pass("provider_health", request.provider_health_snapshot_ref));
90
+ checks.push(fail("policy"));
91
+ return boundaryDecision("blocked", "policy", "Release 1 real dispatch remains blocked even when diagnostic snapshots are present.", checks);
92
+ }
93
+ export function evaluateManagedDispatchBetaGuardBoundaryV1(input) {
94
+ const checks = [];
95
+ const providerFamily = input.guardApproval?.provider_family;
96
+ const providerQualifiedModelId = input.guardApproval?.provider_qualified_model_id;
97
+ const modelFamily = modelFamilyFromProviderQualifiedModelId(providerQualifiedModelId);
98
+ const usageSnapshotRef = input.usageSnapshot?.snapshot_id;
99
+ const providerHealthSnapshotRef = input.providerHealthSnapshot?.snapshot_id;
100
+ const runtimeCapabilityRef = input.guardApproval?.runtime_capability_ref ?? input.runtimeEchoEvidence?.runtime_capability_ref;
101
+ const preDispatchAuditRef = input.preDispatchAuditRef;
102
+ const evidenceOptions = {
103
+ expectedConfigHash: input.configHash,
104
+ expectedPolicyPackHashes: input.policyPackHashes,
105
+ expectedWorkflowId: input.workflowId,
106
+ expectedStepId: input.stepId,
107
+ expectedAttemptId: input.attemptId,
108
+ expectedProviderFamily: providerFamily,
109
+ expectedProviderQualifiedModelId: providerQualifiedModelId,
110
+ expectedModelFamily: modelFamily,
111
+ expectedUsageSnapshotRef: usageSnapshotRef,
112
+ expectedProviderHealthSnapshotRef: providerHealthSnapshotRef,
113
+ expectedRuntimeCapabilityRef: runtimeCapabilityRef,
114
+ expectedPreDispatchAuditRef: preDispatchAuditRef,
115
+ expectedConformanceRef: input.runtimeEchoEvidence?.conformance_ref,
116
+ expectedAuthProfileRef: input.expectedAuthProfileRef,
117
+ expectedCredentialScopeRef: input.expectedCredentialScopeRef,
118
+ expectedAccountBoundaryRef: input.expectedAccountBoundaryRef,
119
+ now: input.now
120
+ };
121
+ if (input.betaPolicy === undefined) {
122
+ checks.push(fail("policy"));
123
+ return boundaryDecision("blocked", "policy", "Managed-dispatch beta policy mode is required.", checks);
124
+ }
125
+ const policyResult = validateManagedDispatchBetaPolicyV1(input.betaPolicy, evidenceOptions);
126
+ if (!policyResult.ok) {
127
+ checks.push(fail("policy", input.betaPolicy.audit_ref));
128
+ return boundaryDecision("blocked", "policy", "Managed-dispatch beta policy failed closed validation.", checks);
129
+ }
130
+ checks.push(pass("policy", input.betaPolicy.audit_ref));
131
+ if (input.fallbackOrReselectionAllowed === true || input.hardChatAuthorityAllowed === true || input.ambiguityQuarantined !== true) {
132
+ checks.push(fail("policy"));
133
+ return boundaryDecision("blocked", "policy", "Managed-dispatch beta forbids fallback, hard chat authority, and non-quarantined ambiguity.", checks);
134
+ }
135
+ if (input.guardApproval === undefined) {
136
+ checks.push(fail("approval"));
137
+ return boundaryDecision("blocked", "policy", "GuardApprovedDispatch evidence is required.", checks);
138
+ }
139
+ const approvalResult = validateManagedDispatchBetaApprovalFreshnessV1(input.guardApproval, evidenceOptions);
140
+ if (!approvalResult.ok) {
141
+ checks.push(fail("approval"));
142
+ return boundaryDecision("blocked", "policy", "GuardApprovedDispatch is stale, mismatched, replay-like, or malformed.", checks);
143
+ }
144
+ checks.push(pass("approval", input.guardApproval.guard_decision_id));
145
+ if (input.bindingEvidence === undefined) {
146
+ checks.push(fail("conformance"));
147
+ return boundaryDecision("blocked", "conformance", "Trusted provider/model binding evidence is required.", checks);
148
+ }
149
+ const bindingResult = validateManagedDispatchBetaBindingEvidenceV1(input.bindingEvidence, evidenceOptions);
150
+ if (!bindingResult.ok) {
151
+ checks.push(fail("conformance", input.bindingEvidence.binding_ref));
152
+ return boundaryDecision("blocked", "conformance", "Provider/model binding evidence is missing, untrusted, stale, or mismatched.", checks);
153
+ }
154
+ checks.push(pass("conformance", input.bindingEvidence.binding_ref));
155
+ if (input.usageSnapshot === undefined) {
156
+ checks.push(fail("usage", usageSnapshotRef));
157
+ return boundaryDecision("blocked", "usage", "Fresh dispatchable usage evidence is required.", checks);
158
+ }
159
+ const usageResult = validateManagedDispatchBetaUsageEvidenceV1(input.usageSnapshot, evidenceOptions);
160
+ if (!usageResult.ok) {
161
+ checks.push(fail("usage", usageSnapshotRef));
162
+ return boundaryDecision("blocked", "usage", "Usage evidence is missing, stale, ambiguous, or non-dispatchable.", checks);
163
+ }
164
+ checks.push(pass("usage", usageSnapshotRef));
165
+ if (input.usageAuthorityEvidence === undefined) {
166
+ checks.push(fail("usage", usageSnapshotRef));
167
+ return boundaryDecision("blocked", "usage", "Pinned usage authority evidence is required for managed-dispatch beta.", checks);
168
+ }
169
+ if (input.expectedAuthProfileRef === undefined || input.expectedCredentialScopeRef === undefined || input.expectedAccountBoundaryRef === undefined) {
170
+ checks.push(fail("usage", input.usageAuthorityEvidence.authority_ref));
171
+ return boundaryDecision("blocked", "usage", "Explicit auth profile, credential scope, and account boundary refs are required for exact model eligibility.", checks);
172
+ }
173
+ const usageAuthorityResult = validateManagedDispatchBetaUsageAuthorityEvidenceV1(input.usageAuthorityEvidence, input.usageSnapshot, evidenceOptions);
174
+ if (!usageAuthorityResult.ok) {
175
+ checks.push(fail("usage", input.usageAuthorityEvidence.authority_ref));
176
+ return boundaryDecision("blocked", "usage", "Usage authority evidence is missing, stale, mismatched, or untrusted.", checks);
177
+ }
178
+ checks.push(pass("usage", input.usageAuthorityEvidence.authority_ref));
179
+ if (input.providerHealthSnapshot === undefined) {
180
+ checks.push(fail("provider_health", providerHealthSnapshotRef));
181
+ return boundaryDecision("blocked", "provider_health", "Fresh dispatchable provider health evidence is required.", checks);
182
+ }
183
+ const healthResult = validateManagedDispatchBetaProviderHealthEvidenceV1(input.providerHealthSnapshot, evidenceOptions);
184
+ if (!healthResult.ok) {
185
+ checks.push(fail("provider_health", providerHealthSnapshotRef));
186
+ return boundaryDecision("blocked", "provider_health", "Provider health evidence is missing, stale, unhealthy, or non-dispatchable.", checks);
187
+ }
188
+ checks.push(pass("provider_health", providerHealthSnapshotRef));
189
+ if (input.runtimeEchoEvidence === undefined || input.conformanceRuntimeMetadata === undefined) {
190
+ checks.push(fail("runtime_compatibility", runtimeCapabilityRef), fail("conformance"));
191
+ return boundaryDecision("blocked", "conformance", "Trusted runtime echo and conformance metadata are required.", checks);
192
+ }
193
+ const runtimeEchoResult = validateManagedDispatchBetaRuntimeEchoEvidenceV1(input.runtimeEchoEvidence, input.conformanceRuntimeMetadata, evidenceOptions);
194
+ if (!runtimeEchoResult.ok) {
195
+ checks.push(fail("runtime_compatibility", runtimeCapabilityRef), fail("conformance", input.runtimeEchoEvidence.conformance_ref));
196
+ return boundaryDecision("blocked", "conformance", "Runtime echo or conformance metadata is untrusted, stale, mismatched, or insufficient.", checks);
197
+ }
198
+ checks.push(pass("runtime_compatibility", runtimeCapabilityRef), pass("conformance", input.runtimeEchoEvidence.conformance_ref));
199
+ if (input.telemetryCorrelation === undefined) {
200
+ checks.push(fail("conformance"));
201
+ return boundaryDecision("blocked", "conformance", "Sufficient telemetry correlation evidence is required.", checks);
202
+ }
203
+ const telemetryResult = validateManagedDispatchBetaTelemetryCorrelationV1(input.telemetryCorrelation, evidenceOptions);
204
+ if (!telemetryResult.ok) {
205
+ checks.push(fail("conformance", input.telemetryCorrelation.telemetry_ref));
206
+ return boundaryDecision("blocked", "conformance", "Telemetry correlation is insufficient, ambiguous, or mismatched.", checks);
207
+ }
208
+ checks.push(pass("conformance", input.telemetryCorrelation.telemetry_ref));
209
+ if (preDispatchAuditRef === undefined || !validateOpaqueRef(preDispatchAuditRef, "pre_dispatch_audit_ref").ok || input.guardApproval.pre_dispatch_audit_ref !== preDispatchAuditRef) {
210
+ checks.push(fail("audit", preDispatchAuditRef));
211
+ return boundaryDecision("blocked", "audit", "Durable pre-dispatch audit reference is required and must match Guard approval.", checks);
212
+ }
213
+ checks.push(pass("audit", preDispatchAuditRef));
214
+ if (input.configuredVerificationRef === undefined || !validateOpaqueRef(input.configuredVerificationRef, "configured_verification_ref").ok) {
215
+ checks.push(fail("conformance"));
216
+ return boundaryDecision("blocked", "conformance", "Configured verification reference is required before managed dispatch beta eligibility.", checks);
217
+ }
218
+ return boundaryDecision("eligible", "runtime", "Eligible for managed-dispatch beta only; evaluator does not perform dispatch.", checks);
219
+ }
220
+ //# sourceMappingURL=guard-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-boundary.js","sourceRoot":"","sources":["../src/guard-boundary.ts"],"names":[],"mappings":"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"}