Skip to content

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 as e3827cbabf2be85328c3ee5e6cfd5903d463617c.
  • Bridge PR #3, candidate e14cb956484d12d6635dc712e9164746a3bb2909, merged into codex/bridge-project-awareness as fb590bd3f4a7113c44fada4847c726af9c2e91a2.
  • 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 99c1b04f2a24c625442316c9273fa0d967b76271 and 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.