This week in OutcomeCI: who decides, and your own APIs
Name the people a workflow talks to and whose word decides a step, bind any HTTPS API without a connector, and a fix for Codex on ChatGPT accounts.
This week, October 16 and 17, we shipped the piece that makes a Slack discussion a team decision rather than a one-person approval, and a way to call your own APIs from a workflow without waiting for a connector.
Name the people, then say whose word decides
A workflow now declares who it talks to in a humans block: a Slack user, an
email address, a user group, or a whole channel. An await or converse
step names one of them with decided_by, and three more fields say how.
humans:
requester: { system: slack, type: user, identifier: trigger.user }
pod: { system: slack, type: group, identifier: "@product-eng" }
owner: { system: slack, type: email, identifier: owner@example.com }
- sign_off:
converse: slack.thread(draft.calls.slack.post)
decided_by: pod
rule: all
override: owner
otherwise: { ask: requester, timeout: 1d }Everyone in the thread takes part: the agent answers questions from anyone
and revises the plan on anyone's ask. Only the people named can approve or
reject it. rule is any, majority, all, or a count, and each person's
latest word on the current version counts, so minds can change until the
rule is met. override lets one person close it whatever the tally, and
otherwise says what the deadline does: stop, continue as it stands, ask
someone whose word then decides, or recount under a looser rule. The step
returns a verdict that says how it closed, so an announcement can say
"approved by 2 of 3" or "went ahead at the deadline" instead of pretending
everyone agreed.
The old by field is gone. Replacing it is a two-line change; see
Upgrade to 0.69.1. Naming people by email, group,
or channel needs four new Slack app scopes; the
Slack app guide lists them.
Bind any HTTPS API
uses: custom binds an API by its origin, with a bearer token, an API key in
the header you choose, or a username and password from the Vault. Steps are
granted read and write on it, optionally pinned to a path prefix, and the
runtime refuses anything outside the origin or the grant. See
custom API.
Codex on a ChatGPT account
Our example workflows pinned a Codex model, and a Codex connection signed in with a ChatGPT account refuses that. The examples and guides now leave the model out, and Codex uses the one your plan provides.