forgetest: cloud.service-protocol, the service answered by the emulator in this machine's identity

The service-protocol half of the cloud catalog on its own test: the cloud
client restarted as gfutilities' emulator under the /run/gfcloud-emulate
marker signs in, passes the firmware check, opens the WebSocket, answers
the connect-time hunt and the image requests with the dev image's canned
frames, and runs a print from the app through the real download path to
':completed' - nothing moves, nothing arms, and only the app has to be
driven, by a person or an agent through the prompt API. The real client
is restarted afterward and its hunt waited out. session_live now knows
the emulator's session is not the machine's, so enter_cloud restarts it
rather than reusing it; restart_client is the one restart the offline
and emulator entries share.

The dev image adds python3-gfutilities-emulator (the fixtures, packaged
on their own in meta-openglow); forgefirm-app moves to 12ad3b1 (gfcloud
--emulate). Catalog: 44 tests, 27 auto / 9 operator / 8 live; the new
test covers the gfutilities service layer and examples/, which step 4
will take off the other cloud tests. Replays over the prompt script;
contract and BRINGUP updated. A layer change (the dev image recipe):
everything re-requires on the next image.
This commit is contained in:
ScottW514
2026-08-22 20:19:46 -04:00
parent 0cb9044e1d
commit 1c8197faa3
6 changed files with 281 additions and 40 deletions
+10 -3
View File
@@ -150,9 +150,16 @@ bench, or one whose `/data` has been wiped, starts from a full campaign.
hunt run with the lid open, and the web-service homing (`$H` with
`homing_mode = gfcloud`) after the switch back.
The cloud tests split by what they prove. The service protocol (sign-in,
the WebSocket, the hunt, the print from the app, progress, the job's
limits reaching the engine) is `cloud.mode-switch` and one real print,
`cloud.pause-resume`. The machine's print behavior (the lid and
the firmware check, the WebSocket, the hunt, the image uploads, a
print's download and lifecycle as the app sees them) is
`cloud.service-protocol`: the cloud client restarted as gfutilities'
emulator in this machine's identity under the `/run/gfcloud-emulate`
marker, answering the real service with the dev image's canned frames
and running the print from the app without hardware, so only the app
has to be driven (by a person or an agent, anywhere). The service and
the machine together are `cloud.mode-switch` and one real print,
`cloud.pause-resume` (progress, the button wait, the job's limits
reaching the engine). The machine's print behavior (the lid and
interlock aborts, the button-wait cancel, a paused print ended by the
lid, a print longer than the ring with the app's cancel) runs under the
**offline service** (`enter_offline`: the cloud client restarted with