FLOW v1 production rollout result¶
Date: 2026-09-23. HeyAira task: 93a9ed34-5bb3-4cbd-ab69-cbe253cee22d.
The owner explicitly approved merge, deployment and production testing after
green checks. The scoped workflow is now deployed and verified through public
HTTPS and the installed macOS Bridge using actual Codex and Claude sessions.
Released versions¶
- Server PR #26, candidate
7352f1e1f51702bce66a8814e27de612ba8af859, merged and deployed ase3827cbabf2be85328c3ee5e6cfd5903d463617c. - Bridge PR #3, candidate
e14cb956484d12d6635dc712e9164746a3bb2909, merged intocodex/bridge-project-awarenessasfb590bd3f4a7113c44fada4847c726af9c2e91a2. - Both merged trees exactly matched their reviewed PR heads. The installed
Bridge package was built from runtime commit
cd6abefa951da5c64fe1f2149ca7a3fc98cd2297; e14cb95 adds only packaging and release documentation. The Rust/native runtime files match the merged tree. - Installed CLI SHA-256:
8198b1c4c94729a10073784bbe15621f75c0dcef483b865e4cbbd1b116ded705. Displayed version remains 0.0.9; use the commit and digest as release identity. - Previous server
99c1b04f2a24c625442316c9273fa0d967b76271and matching macOS app/CLI/LaunchAgent backups were retained for rollback.
Observed gates¶
| Gate | Actual result |
|---|---|
| Server PR CI | 278 tests passed in 35.57 s, zero skips; contracts, runtime, website and docs checks passed |
| Merged server CI | 35847575644: 278 passed in 40.22 s, zero skips |
| Merged documentation CI | 35847575438: success |
| Bridge PR CI | 35847239224: success |
| Merged Bridge CI | 35847577491: 93 Rust tests, fmt/clippy, strict Swift and model checks passed |
| Immutable server deployment | Dedicated HeyAira user, clean standalone checkout, mandatory OpenBao overlay; preflight and health passed; exact runtime revision verified |
| Public route canary | All 10 expected health/method/authentication statuses passed |
| Old installed client compatibility | Authenticated synthetic execution passed against the new server; one receipt, no automatic task completion; exact fixture removed |
| Actual production workflow | Four fresh provider sessions, two real agent commits, reject/correct/accept, independent unchanged test PASS, exactly one acceptance receipt; 131.84 s |
| Replay after workflow completion | Zero attempts |
| Production fixture cleanup | Exact synthetic workflow project deleted; temporary transport credential and local fixture removed |
| Installed client reads | Doctor 0.67 s, projects 0.16 s, bounded Work Center snapshot 0.33 s, one heartbeat 0.22 s; all passed |
| Native application | Synchronized production task list rendered; one app and one background daemon verified |
| Backup and vault | Backup healthy with no alerts before and after rollout; OpenBao unsealed after the operational recovery below |
Production workflow task identifier was
762194de-2e9e-4226-823c-96c7b21e53f9; its synthetic project was deleted after
all assertions. The worker used Codex gpt-5.6-luna/default, and independent
read-only verifiers used Claude sonnet/default. The first worker committed
41, its verifier rejected it, a fresh worker committed 42, and a fresh verifier
accepted. The unchanged test was independently executed after acceptance.
The server recorded four execution receipts plus exactly one acceptance.
The test used an isolated, operator-seeded synthetic Bridge identity and short-lived transport token with only the default account allowed. It proves the installed binary and public production protocol, not fresh enrollment or dispatch through the user's regular node identity. That node's own project reads and heartbeat were verified separately after recovery.
Operational issues handled¶
The initial standalone clone from a Git bundle containing a remote-tracking ref was empty. An explicit fetch of that exact bundled ref repaired the source checkout before preflight; no production change occurred during that failed preparation step.
Recreation of the OpenBao container sealed it. The HTTP health check alone did not detect this. The existing offline unseal key was sent through stdin to the private unseal endpoint; no key, root token or policy was changed, and no credential was printed or copied to a new persistent location. Final status was initialized and unsealed. Future release gates must check vault status explicitly; automatic unseal is not part of this release.
The installed Bridge's transport token had already expired at 08:25 UTC,
before rollout. Project feeds initially returned 401 bridge_token_expired.
The documented admin recovery command issued a replacement fenced to the
same project and Bridge identity; token recover validated it before replacing
Keychain state. A normal explicit rotation also passed. The temporary recovery
file was deleted, app/daemon restarted, and authenticated reads/heartbeat
passed. This does not identify why the earlier token expired or prove recovery
after arbitrary future sleep/offline periods.
The native UI automation initially held a stale app handle across replacement; reacquiring the installed app allowed the task view to render and synchronize. This tool incident is not used as an application latency measurement.
Repeatable acceptance and remaining scope¶
scripts/production_workflow_canary.py retains the actual test with explicit
SSH identity, endpoint, expected instance/revision and installed binary
arguments. It runs real paid provider sessions; invocation must be authorized.
It never prints credentials, sends the Bridge token through stdin, and cleans
up only the exact synthetic project UUID and name. The generated seed and
cleanup code is tested against disposable PostgreSQL, including refusal to
delete a different project name and default-account scope. Both canary variants
passed locally in 1.27 s. The first local runner omitted PYTHONPATH and loaded
the stale editable checkout; setting it to this source fixed that fixture
error without changing production or weakening assertions.
The server owns workflow phases and acceptance. Agents edit, test and commit;
Bridge validates local scope and supervises sessions. Activation is still an
explicit bounded workflow --policy command. Installing the ordinary app does
not create an unattended worker or wake a sleeping Mac. The agent catalog
provisioning task and live ChatGPT web continuity test remain separate.
This report and canary follow-up do not change the deployed runtime beyond e3827cb. No DNS, GitHub settings, unrelated infrastructure, provider credentials or agent-account permissions were changed.