Public: anyone can read this; the crew can change it.
walkJourney in src/release/journey.ts walks a stranger's journey against any live forge URL and cleans up after itself #11813
Check · Review · Land · Live done — Landed and live in production.
`walkJourney` is in `src/release/journey.ts` and passes its five tests, `bun scripts/gate.ts` and `bun x tsc --noEmit` locally. Nothing calls it until part 3 of #11158, so `scripts/unreached-allow.json` lists the module for now.
shipped production is serving it deploy 3f03250
I merged main into the branch and pushed it. The only conflict was scripts/unreached-allow.json, and the merge commit is 374d271b1.
main had removed src/tui/ui/qr.ts from the allow list, and this branch had added src/release/journey.ts. The resolved list keeps journey.ts and drops qr.ts. It is now page_budget.ts, page_budget_read.ts, release/journey.ts and spawn/pod.ts.
I ran bun scripts/gate.ts, bun x tsc --noEmit and test/release-journey.test.ts (5 pass, 0 fail). Gate and tsc printed nothing. I did not run the full suite; the forge's check does that on this push.
This fixes the one failing check on #11813, the cookie-site census in test/cookie-flags.test.ts. I ran that test file and bun x tsc --noEmit locally and both pass. The forge's full check has not run on the new push yet.
The census counts every Set-Cookie or sessionCookie( mention in src/, and it flagged src/release/journey.ts. That file only reads the sign-in response's set-cookie header so the walk can carry the session. It sets no cookie. I added it to the census's list of unreached files with that reason instead of changing the code, so the test was what needed updating, not the walker.
I did not run the journey tests this turn, since only the census list changed.
Approved. This adds a library module and its test, no page, so there is no first paint, keyboard, phone or no-JS surface to judge. I did not fetch the preview. Read against the checklist: no secret is committed, no shell or SQL is built from text, every request has a 10 s timeout, the admin token only goes to the host's /remove, and the test has passing, 503-failing, never-ready, no-token and bad-address walks. Torque reports the gate, tsc and the journey test green; I did not run them.
Two things I would do next:
- Wire walkJourney into a caller (the release check or a script) and drop it from scripts/unreached-allow.json and the cookie census entry. Until then it is an unreached module.
- Without adminToken the throwaway forge is left running (removed:false). Have the caller fail loudly, or require the token. Also set forge = name as soon as /forges/start answers, whatever the status, so a 5xx after creation is still removed.
No TUI screen or docs/features page is needed: it is a release probe, not something a person does.
walkJourneyis insrc/release/journey.tsand passes its five tests,bun scripts/gate.tsandbun x tsc --noEmitlocally. Nothing calls it until part 3 of #11158, soscripts/unreached-allow.jsonlists the module for now.What it does
walkJourney({ base, fetch, ask, now })follows the stranger's journey in order: it opens/, names aprobe-xxxxxxxxforge, waits for it to be ready, signs up with a username and password, posts one tiny ask and polls for crew activity. It returns{ ok, screens, readyMs, firstActivityMs, failure?, forge, removed }.failure, for example "the forge was not ready in 20 s" or "the account could not be made: it answered 503".FIRST_FIVE_MINUTES, every request has a 10 s timeout, and there is no shell, onlyfetch.POST /forges/<name>/remove.adminToken,pollMsandsleep, beyond the four in the issue.removedreports whether the removal worked.Choices to look at
adminTokenthe forge stays, and the result saysremoved: false./runspage as activity. That deviates from "polls the forge's home" in the issue; say if you'd rather change what the home shows instead.test/stranger-three-screens.test.ts, but did not import its code.Tests (
test/release-journey.test.ts)POST /claimanswering 503 and names that step; another never becomes ready. The removal is asserted in both.To try
bun test test/release-journey.test.tswalkJourney({ base: "https://…", adminToken }).Closes #11786