docs: record cloud Box 2-way fan-out attempt for issue #255

6a8d05ee2e8a · AtlantisPleb · · parent 40dbd83268a6

docs: record cloud Box 2-way fan-out attempt for issue #255

Append the Cloud Box section to the Ox Alpha stress-test log: exact
CLI invocations, deterministic 401 refusals on the box:control scope
gate with request ids, the conversation-bootstrap gap, substrate test
evidence (80 server tests, 4 CLI tests), and per-criterion status.
Blockers are tracked in OpenAgentsInc/openagents#58.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SoZMfWRSGnf6FZX2Ar9rQ2
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified docs/2026-08-25-ox-alpha-stress-test-log.md

Diff

1 file changed, +75 -0

docs/2026-08-25-ox-alpha-stress-test-log.md modified +75

@@ -92,3 +92,78 @@ The backend in `openagents.com` already holds the complete Box runtime and deleg

92 92
  - Effective aggregate generation rate: **~350–410 tokens/sec** across 8 parallel streams.
93 93
  - Machine state: Load average 4.75, memory healthy, zero HTTP 429s or rate limit errors.
94 94
  - Error rate: 0.0% (0 / 8 failed).
95
96
## 6. Cloud Box 2-way fan-out attempt (2026-08-25)
97
98
Live qualification of the new `openagents box` CLI (openagents monorepo commit
99
`6f575f466a`, issue OpenAgentsInc/openagents#58) against production, scoped to
100
the owner-directed maximum of 2 boxes. No live Box VM was provisioned. The
101
dispatch path is blocked by production credential and bootstrap configuration,
102
not by the CLI or the server substrate. This section records the exact
103
refusals as the current-state evidence for issue #255 acceptance criterion (a).
104
105
### Commands and observed behavior
106
107
The globally installed `openagents` binary predates the `box` subcommand, so
108
every invocation ran from monorepo source:
109
`tsx src/main.ts box ...` in `packages/openagents-cli` (read-only use of the
110
canonical checkout).
111
112
| Invocation | Result |
113
| --- | --- |
114
| `openagents box list` (no `--conversation`) | `api_error: Could not find an active conversation for this account.` The CLI resolves the default conversation from `GET /api/v1/user`, but production's `ForgeUserController` does not return a `conversation_id`, and no API route exposes one. |
115
| `openagents box list --conversation <uuid> --json` | HTTP `401`, request id `GM8i9RIHftp1gmgAAA7B` |
116
| `openagents box fanout --count 2 --labels ox-alpha-1,ox-alpha-2 --conversation <uuid> --json` | HTTP `401`, request id `GM8i9Tzl5IUatR8AABIx` |
117
| `GET /api/v1/conversations/<uuid>/boxes` (raw, via `openagents api`) | `401 {"error":{"code":"invalid_api_token"}}`, request id `GM8i9ohpRAEvOXYAAA8x` |
118
| `POST /api/v1/conversations/<uuid>/boxes/fanout` body `{"count":2,"labels":["ox-alpha-1","ox-alpha-2"]}` (raw) | `401 {"error":{"code":"invalid_api_token"}}`, request id `GM8i9-XmhZyTFNYAAAOC` |
119
120
The `401` is deterministic, not transient: every `/api/v1/conversations/:id/boxes*`
121
route sits behind the `box_control_api` pipeline
122
(`OpenAgentsWeb.Plugs.AssignmentControlAuth`, `scope: "box:control"`), and the
123
CLI session token carries only the sign-in defaults
124
(`OpenAgents.ApiTokens.default_scopes/0` = `["chat:account", "forge:write"]`).
125
A `box:control` token exists in `allowed_scopes` but is only mintable from the
126
browser-session `POST /api/tokens` route, not from the CLI session. The scope
127
gate refuses before conversation lookup, so the placeholder conversation UUID
128
in the requests above does not change the observed behavior.
129
130
### What this blocks and what it does not
131
132
Because authentication refuses before admission, none of the downstream
133
machinery was exercised live: no fanout plan row, no VM provisioning (so the
134
production `BOX_API_KEY` provider credential also remains unverified), no
135
isolated clone, no Ox Alpha turn on a box, and no server-side run output or
136
receipts. Tokens generated on boxes: 0. Wall time to refusal: sub-second per
137
request.
138
139
The substrate below the auth gate is verified by test evidence on the same
140
tree the site runs:
141
142
- Server: 80 tests, 0 failures across `box_test.exs`, `box_fanout_test.exs`,
143
  `box_fleet_test.exs`, `box_runs_test.exs`, `box_client_runs_test.exs`,
144
  `box_reconciler_test.exs`, and the `BoxController`, `BoxFanoutController`,
145
  and `BoxRunController` controller tests — covering the 2-box default cap
146
  admission, queueing beyond the cap, durable run lifecycle, bounded output,
147
  and cancellation.
148
- CLI: `test/box-command.test.ts` passes (4 tests) against the same
149
  request/response contract the live calls used.
150
151
### Acceptance criteria status for issue #255
152
153
1. Multi-box dispatch provisions/queues up to the cap: demonstrated at the
154
   contract level only (fanout controller tests admit up to the default cap of
155
   2 and queue the rest). Live dispatch refused with `401` as recorded above.
156
2. Isolated repo clones and asynchronous Ox Alpha turns per box: not
157
   demonstrated live; covered by `OpenAgents.Forge.Assignments` and
158
   `OpenAgents.BoxRuns` tests only.
159
3. Output logs, tokens, and push receipts on the server: not demonstrated
160
   live; run output and receipt persistence covered by tests only.
161
162
### Blockers (tracked in OpenAgentsInc/openagents#58 — do not duplicate)
163
164
1. `box:control` scope grant for CLI sessions (`openagents auth login` or
165
   `Agents.grant_box_control`).
166
2. Conversation discovery/bootstrap when `--conversation` is omitted
167
   (`GET /api/v1/user` returns no `conversation_id`).
168
3. `BOX_API_KEY` provider credential configuration in production, verifiable
169
   only after 1 and 2.

This page updates live while a promote is in flight · changelog