walk-the-floor · git:20261020.305ef8c · 2026-10-20 · sha256 df75290c9df7621e
walk-the-floor git:20261020.305ef8cA
Immutable. This exact content never changes and is served at /api/v1/blob/df75290c9df7621e.
--- name: walk-the-floor description: >- Check a running environment against a list of things that should now be true in it, to a sanity standard (would a user notice), on a cadence or once. Reads the list from a directory anyone can write to, walks each item with a browser or device driver, records a rung and a verdict in an append-only ledger, runs conventional on-pass and on-fail callbacks, and when something is down or absent files an incident issue and fixes it through fix-github-issue. Use when the task is "keep an eye on the deployed base branch", "smoke-check what just merged", "walk the site every ten minutes", or "tell me the moment the deployed environment goes down". Requires a per-repository walk-the-floor.config.ts, the fix-github-issue skill, and one environment driver skill (playwright-harness for web, ios-simulator or android-emulator-harness for mobile, or the stack-specific driver the config names). Skip for a rigorous integration suite, which this is not, and for environments with no reachable running instance. --- # Walk the Floor A list checker and fixer for a running environment. It wakes, reads a list of things that should now be true, goes and looks at each one to the standard **would a user notice**, writes what it found to a ledger, and when the environment is wrong it files an incident and hands the incident to `fix-github-issue`. It knows nothing about who wrote the list or why. Three things make it composable rather than a monitor: - **The floor is a directory.** `list.jsonl` in, `ledger.jsonl` out, both append only. A person, a loop, another skill, or the walker's own forge producer (it reads the code host, GitHub here, for merged pull requests) can all put items on the floor; the contract is in `references/the-floor.md`. - **Two callback slots.** `on-pass` and `on-fail`, each an executable the driver runs or a prompt the agent reads. Whoever starts the walker decides what a failure means to them; the walker does not. The issue burndown uses `on-fail` to stop its own merge queue. - **The environment is config.** Kind, base URL, health paths, how to read the deployed revision, how to log in, which endpoints are safe to post to, and the standing sanity walks all live in `walk-the-floor.config.ts` at the repository root. The skill never contains a project. ## The standard Sanity, not integration. Go to the thing and look. If the change is a label, read it; if it is behind a surface, do the ordinary user action that runs through it and see that it works; if there is no surface, hit the endpoint or read the database and say that is what you did. A site that boots, renders, and returns nothing for every search has no data, and only searching tells you. The walk proves a user would not hit a wall; it does not prove the change is correct. ## Run it From inside the target repository: ```bash bun run <this-skill-dir>/walk.ts --dir <floor> --liveness-only --once # probe the base URL and stop bun run <this-skill-dir>/walk.ts --dir <floor> --once # one full wake bun run <this-skill-dir>/walk.ts --dir <floor> --every 10 # forever, every ten minutes bun run <this-skill-dir>/walk.ts --dir <floor> --once --dry-run # probe and classify; no agent, no checkout, no list or ledger write, no callback, nothing filed bun run <this-skill-dir>/walk.ts --dir <floor> --once --walker claude:claude-opus-5 bun run <this-skill-dir>/walk.ts --dir <floor> --once --base-url https://preview.example.com # walk this URL instead of the configured one bun run <this-skill-dir>/walk.ts --dir <floor> --once --max-points 3 # cap the incident fix handed to a worker for this run ``` `<floor>` is any directory; the walker creates it. By default the walker appends an item for every pull request merged into the base since it last looked; `--no-forge` turns that off for a hand-written list, and still files incidents. ## Read next | Need | Read | |------|------| | The directory contract: files, item and entry shapes, rungs, verdicts, callbacks, incidents | `references/the-floor.md` | | Adopt it in a repository: the config template, environment kinds and their drivers, authoring standing walks, credentials, preconditions, first-run order | `references/adopting.md` | | Run it: once versus forever, reading the ledger, what an incident looks like on the forge, stopping | `references/operating.md` | ## Hard dependencies - The [`fix-github-issue`](../fix-github-issue/SKILL.md) skill, imported for the agent runner, the project config, and the fix pipeline an incident is handed to. - One environment driver skill, loaded by name in the walk prompt: by default [`playwright-harness`](../playwright-harness/SKILL.md) for `web`, [`ios-simulator`](../ios-simulator/SKILL.md) for `ios`, and [`android-emulator-harness`](../android-emulator-harness/SKILL.md) for `android`, or whatever `environment.driverSkill` names instead (an Expo app names [`expo-ios-simulator`](../expo-ios-simulator/SKILL.md)). - `gh` authenticated with issue-creation rights on the target repository, and the CLI the walker seat names on `PATH`. ## The ceiling, named The walker's judgement about what "the change is there" means is agent judgement: sharp on visible changes, blunt on behavioural ones, and honest only if it says `not-checkable` rather than `intact` when it did not reach the thing. Its writes to the environment are additive, tagged, and reverted by contract, not by sandbox; run it only against environments where a stray tagged record is tolerable. It sees an environment through the drivers it is given, so a change with no driver- reachable surface is exactly the residue that stays unverified. And a walk is a sample: something broken between two wakes is caught on the next wake, not the moment it breaks.