test(demo): walk every main journey of the demo with TesterArmy e2e
Why
The demo's alert creation broke on the hosted demo (THE-2150), and no check noticed it: browser tests only run on a throwaway local copy. Spec 26 planned TesterArmy e2e journeys that walk the demo like a visitor, on a local copy or on the live demo. Until now only sign-in and the Fil existed.
What changes
Journeys (quivr-search/journeys/tests), following the table of Spec 26:
| Tag | Journey | Checks |
|---|---|---|
live | Read | the newest article opens in the reader named after its headline; the link to the original is checked when the article came from a source; Escape closes the reader |
live | Search | a word from the newest headline gives "N articles sur « word »", with "Idées proches" on and off |
live | Explorer | a document count above zero, then a document opens with its versions |
live | Sources | the list of sources |
live | Alert preview | a "Tous ces mots" preview ends in "… sur les N derniers"; on THE-2150's demo it showed an error instead; Annuler closes the form |
live | Admin | the pipeline steps |
local | Add a source | from the local test site, then removed |
local | Alert lifecycle | saved, paused, deleted |
local | Add a text | a pasted note is found by search |
- Safe on the live demo:
localjourneys calltest.skipunless the target is loopback, whatever the tag filter says;- live journeys never assert counts or specific articles: they search for a word read from the screen.
- No model needed: every outcome is an exact locator. Agent steps and
e2e exploreremain available once a model is configured. make demo-journeys(scripts/demo_journeys.py,scripts/demo.py journeys):- starts an isolated stack, like
demo-perf, with a generated password and the local fake feeds site; - seeds one 30-article source;
- runs every journey, prints the report path, and removes the stack.
- It is not part of
verify.
- starts an isolated stack, like
npm run journeys:live: runs only--tag live, and refuses to start withoutQUIVR_DEMO_URL.quivr-search/README.md: describes both commands and the password handling (environment variable or macOS keychain, never a model).
Verification
make demo-journeyson this machine: 11/11 passed in 5.3 s, sign-in with the generated password included.- No container or volume of the run was left afterwards.
npm run journeys:livewithoutQUIVR_DEMO_URLexits 2 with its message.scripts/docs.pyand the denylist pass.
Not run here: journeys:live against the hosted demo. It needs the demo password on the owner's machine, and agents do not sign in to shared deployments.
Linear: THE-1342, THE-1343, THE-1344, THE-1345 (Spec 26, THE-1340)
🤖 Generated with Claude Code
Summary by cubic
The demo's alert creation broke on the hosted demo (THE-2150) with no check noticing it, since browser tests only ran on a throwaway local copy. This implements Spec 26's TesterArmy e2e journeys (THE-1340) that walk the demo's main journeys like a visitor, on a local copy or on the live demo.
Journeys
- Eight new journeys cover reading, search, the Explorer, sources, the alert preview, Admin, adding a source, the alert lifecycle, and pasting a text; searches and alert previews use a word read from the newest headline, never a fixed article or count.
- Journeys tagged
liveonly read and run anywhere;localjourneys write and skip themselves on any non-loopback address, so the live demo never collects test data. - Outcomes use exact locators, so no model is needed; agent steps and
e2e exploreremain available once a model is configured.
Commands
make demo-journeysstarts an isolated stack with a generated password and the local fake feeds site, seeds one 30-article source, runs every journey, prints the report path, and removes the stack; it is not part ofverify.npm run journeys:liveruns only--tag liveand refuses to start withoutQUIVR_DEMO_URL.