Skip to content

Commit 84d6e43

Browse files
committed
Omit undefined onInboundMail and record the workflow-host hash
exactOptionalPropertyTypes rejects passing the optional key as undefined. Vendored tree edits must update kill-dates.txt and VENDORED-FROM together.
1 parent 00f3c20 commit 84d6e43

4 files changed

Lines changed: 16 additions & 6 deletions

File tree

‎VENDORED.md‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ never a convenience.
3030
| `vendor/intx/hub-sessions` | `@intx/hub-sessions` source (`src/`, manifest, tsconfig) | [faremeter/interchange](https://github.com/faremeter/interchange) @ `b5580a02` (v0.3.0) | npm 0.3.0 covers the base package but not the usage forward (CL-5879), pack-acceptance fixes, adopted deploy front, wire-projection writer, event-collector serialization, anchor ordering, or malformed tool-call-name sanitization (CL-6478) | sawyer | 2026-09-19 | `check:killdates` |
3131
| `vendor/intx/workflow` | `@intx/workflow` source (`src/`, manifest, tsconfig) | [faremeter/interchange](https://github.com/faremeter/interchange) @ `b5580a02` (v0.3.0) | npm 0.3.0 covers the base package but not the `onBodyFailure` trigger policy and its projection (CL-6326, CL-6324); retired when upstream absorbs the delta | sawyer | 2026-09-19 | `check:killdates` |
3232
| `vendor/intx/workflow-deploy` | `@intx/workflow-deploy` source (`src/`, manifest, tsconfig) | [faremeter/interchange](https://github.com/faremeter/interchange) @ `b5580a02` (v0.3.0) | Carries no delta of its own, but must bind against the vendored `@intx/workflow` (whose `onBodyFailure` field flows through the projection it hashes); retired with the workflow delta | sawyer | 2026-09-19 | `check:killdates` |
33-
| `vendor/intx/workflow-host` | `@intx/workflow-host` source (`src/`, manifest, tsconfig) | [faremeter/interchange](https://github.com/faremeter/interchange) @ `b5580a02` (v0.3.0) | npm 0.3.0 covers the base package but not the empty-mail drop (CL-6164), the action/loop runtime bind (CL-6325; its adapters live in `packages/workflow-host-actions` since CL-6435), or the body-spawn authorize/credential threading (CL-6448); retired when upstream absorbs the deltas | sawyer | 2026-09-19 | `check:killdates` |
33+
| `vendor/intx/workflow-host` | `@intx/workflow-host` source (`src/`, manifest, tsconfig) | [faremeter/interchange](https://github.com/faremeter/interchange) @ `b5580a02` (v0.3.0) | npm 0.3.0 covers the base package but not the empty-mail drop (CL-6164), the action/loop runtime bind (CL-6325; its adapters live in `packages/workflow-host-actions` since CL-6435), or the body-spawn authorize/credential threading (CL-6448), or the per-message inbound-mail From hook (CL-7168); retired when upstream absorbs the deltas | sawyer | 2026-09-19 | `check:killdates` |
3434

3535
The pinned commit `b5580a02` is upstream's `v0.3.0` release tag, 16 commits
3636
past the previous pin `4ed8baf4`: a workflow-host supervisor
@@ -142,7 +142,13 @@ seam: `RunSuspendableChild`'s input and
142142
building the body resolver, so a body agent's tool calls gate through the
143143
same per-step grant snapshot a top-level step's do instead of the host's
144144
throwing authorize stub. Upstream never runs tool-bearing body agents, so
145-
the seam has no upstream analog yet. `vendor/intx/workflow` (CL-6326, CL-6324) gives
145+
the seam has no upstream analog yet. `vendor/intx/workflow-host`
146+
(CL-7168) also threads an optional `onInboundMail` hook through
147+
`RunWorkflowChildBindings`: `trigger.fire` and `signal.deliver` recover
148+
THIS message's MIME bytes from the claim-check processing entry and hand
149+
them to the sidecar so conversation state binds to this message's From,
150+
not a latest-wins origin file. Call sites omit the key when the binding
151+
is absent (`exactOptionalPropertyTypes`). `vendor/intx/workflow` (CL-6326, CL-6324) gives
146152
`onTrigger` an `onBodyFailure?: "end" | "continue"` policy: absent or `"end"`
147153
preserves terminal-is-final, while `"continue"` lets a long-lived section
148154
re-arm past a `failed` body occurrence instead of one bad turn permanently

‎scripts/checks/kill-dates.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ vendor/intx/hub-api | sawyer | 2026-09-19 | 8449bf150e0253ca5d5eb26450c3ce2e5ff8
1919
vendor/intx/hub-sessions | sawyer | 2026-09-19 | df5f1d275e197668851c53f58c51182d8bc455f3585e2ed65784d3687a856001
2020
vendor/intx/workflow | sawyer | 2026-09-19 | 34628e7bbd0587f131a07e3a206141983881106963a20ab607e68aeed1135593
2121
vendor/intx/workflow-deploy | sawyer | 2026-09-19 | 95711adf282180852b0daec1cac39d00a4dc24aff15f9a515e07eb3d2ca749f9
22-
vendor/intx/workflow-host | sawyer | 2026-09-19 | 6e6717e784cc55035a595320b2b8e6ea01b49ac42d4c77b444a0dc59e354b8d0
22+
vendor/intx/workflow-host | sawyer | 2026-09-19 | c8fa57ab993fc816976bdc33f68f60787e33973d64d0001dac4bcf181e7582a4
2323

2424
packages/folded-runs | sawyer | 2026-11-01
2525

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
Source: https://github.com/faremeter/interchange (packages/workflow-host)
22
Commit: b5580a02fb918eebccc33ded7727ffee781ffbd1 (tag v0.3.0)
33
License: LGPL-2.1-only (see vendor/intx/LICENSE)
4-
Local modifications: exports map repointed from the upstream intx-src condition to direct TypeScript source resolution (types/default -> ./src/...); dist references removed. CL-6164: the supervisor's signal.deliver branch drops mail whose extracted conversation body is empty (the new hasConversationText gate in conversation-text.ts), recording an empty_conversation_content rejection, instead of delivering "" -- which throws in agent.send and kills the run with StepFailed/retriesExhausted. Attachments-only conversation.message mail (e.g. @corbits/chat's workbench.agent-joined event send) is exactly that shape. CL-6325: adds the action-primitive adapters (adapters/action-invoker.ts, adapters/effect-ledger.ts, adapters/run-blobs.ts and their tests) -- copied from gtm-workbench's packages/workflow-host workspace fork, not from upstream, which has no action-primitive adapters at the pinned commit (see VENDORED.md) -- and the completed run-child bind in child/run-child.ts: RunWorkflowChildBindings gains resolveActionHandler (awaited once per child with the re-verified definition and the live CredentialWiring) and loopFns (both defaulting to the fail-closed empty registries), and buildRuntimeEnv wires effects, invokeAction, loopFns, and runLoopIteration (createLoopIteration) into every run's WorkflowRuntimeEnv. buildRuntimeEnv is exported (child/index.ts, index.ts) so a host's runtime-env-level probe can exercise the bind without the full control-channel harness.
4+
Local modifications: exports map repointed from the upstream intx-src condition to direct TypeScript source resolution (types/default -> ./src/...); dist references removed. CL-6164: the supervisor's signal.deliver branch drops mail whose extracted conversation body is empty (the new hasConversationText gate in conversation-text.ts), recording an empty_conversation_content rejection, instead of delivering "" -- which throws in agent.send and kills the run with StepFailed/retriesExhausted. Attachments-only conversation.message mail (e.g. @corbits/chat's workbench.agent-joined event send) is exactly that shape. CL-6325: adds the action-primitive adapters (adapters/action-invoker.ts, adapters/effect-ledger.ts, adapters/run-blobs.ts and their tests) -- copied from gtm-workbench's packages/workflow-host workspace fork, not from upstream, which has no action-primitive adapters at the pinned commit (see VENDORED.md) -- and the completed run-child bind in child/run-child.ts: RunWorkflowChildBindings gains resolveActionHandler (awaited once per child with the re-verified definition and the live CredentialWiring) and loopFns (both defaulting to the fail-closed empty registries), and buildRuntimeEnv wires effects, invokeAction, loopFns, and runLoopIteration (createLoopIteration) into every run's WorkflowRuntimeEnv. buildRuntimeEnv is exported (child/index.ts, index.ts) so a host's runtime-env-level probe can exercise the bind without the full control-channel harness. CL-7168: RunWorkflowChildBindings gains optional onInboundMail; trigger.fire and signal.deliver omit the key when the binding is absent (`exactOptionalPropertyTypes` — do not pass `onInboundMail: undefined`). The sidecar parses From from those MIME bytes so conversation state binds to THIS message's workbench, not a latest-wins side-channel.

‎vendor/intx/workflow-host/src/child/run-child.ts‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,9 @@ async function handleControlPayload(
10971097
workflowRunRepoId: ctx.bindings.workflowRunRepoId,
10981098
mailboxAddress: ctx.env.mailboxAddress,
10991099
messageId: payload.data.messageId,
1100-
onInboundMail: ctx.bindings.onInboundMail,
1100+
...(ctx.bindings.onInboundMail !== undefined
1101+
? { onInboundMail: ctx.bindings.onInboundMail }
1102+
: {}),
11011103
});
11021104
const env = buildRuntimeEnv({
11031105
runId: payload.data.runId,
@@ -1210,7 +1212,9 @@ async function handleControlPayload(
12101212
workflowRunRepoId: ctx.bindings.workflowRunRepoId,
12111213
mailboxAddress: ctx.env.mailboxAddress,
12121214
messageId: payload.data.signalId,
1213-
onInboundMail: ctx.bindings.onInboundMail,
1215+
...(ctx.bindings.onInboundMail !== undefined
1216+
? { onInboundMail: ctx.bindings.onInboundMail }
1217+
: {}),
12141218
});
12151219
// Land the signal as a `SignalReceived` commit on the run's
12161220
// event log. The signal-channel substrate's `subscribeKind`

0 commit comments

Comments
 (0)