The Claude Code setup becomes a thin layer over the shared user-level set (#1037) #1038

Merged
claude-bot merged 6 commits from chore/global-tooling-wrappers into main 2026-10-03 13:53:47 +00:00
Collaborator

Do not merge yet. It depends on the global set in Rhoving/iac-repo#586 being merged and synced to the machine a session runs on, and nothing here has run in a real session. It should stay open until /qb-verify has run end to end through the wrappers.

What changes

  • CLAUDE.md gains a ## Project profile (the last section): the test recipes that were in qb-test, the Quest Board preflight items, release and version-sync facts, the dev deploy facts, the contract and frontend review dimensions, security invariants and UI settings. Each value names the file it came from.
  • Skills keep their names and delegate: qb-test → run-tests, qb-ci-log → ci-log, qb-preflight → preflight, qb-deploy-dev → dev-server (with a four-item Quest Board addendum). qb-render keeps the app-specific recipes (prototype pages in headless Edge, the journeys stack) and forks to the global render-check agent.
  • Agents removed: qb-test-runner, qb-ci-triage, qb-preflight, qb-render-check. qb-implementer and qb-frontend stay.
  • Workflows delegate: qb-verify → verify; qb-review → review-branch plus the two Quest Board dimensions; qb-build-slice → build-slice with qb-implementer, qb-frontend for frontend tasks, and the same two dimensions.
  • PR template asks for a changelog.d/ fragment, as CLAUDE.md already required.
  • The dev server is called docker-test; ai-dev-server was the old alias for the same machine.

Behaviour that differs from before

  • qb-build-slice no longer checks out the branch: the caller must already be on it. maxFixRounds is fixed at 1 (the old default) and a different value is logged as ignored.
  • Review verifiers inherit the session's model instead of being pinned to Opus. A PR is read by fetching its ref, never by checking it out.
  • Test results use the global format (SUITE <name>: PASS|FAIL|ENV, up to 15 lines of the first failure). The runner no longer tries to fix the environment; it reports ENV.
  • Without arguments qb-verify runs the profile's default suites (lint, checks, backend, bot, frontend), which is what it ran before.

Checked

  • The three wrapper workflows pass 10 checks against stubbed agents, run over the real global workflows.
  • Frontmatter of the 5 skills and 2 kept agents parses; scripts/changelog.py check passes with the new fragment.

Not checked: no recipe in the profile was executed; they were transcribed from the old skill and compared with ci.yml and the Makefile.

Open questions in the profile (TODO(ask))

  1. Which CI jobs does branch protection require, and is main protected?
  2. Should python -m evals.synthetic_session verify count as a generated-artifact check?
  3. How is a prerelease recorded in CHANGELOG.md?
  4. Is production updated only by a source build, or does it ever pull the published images?
  5. Is there an endpoint that reports the running version without shell access?
  6. The dev compose project name (probably quest-board; unconfirmed on the host).
  7. Is there a long-lived dev URL to render? The profile uses the seeded journeys stack.
  8. Is there a tablet viewport to add?
  9. Which built-app routes are the default pages to render?

Closes #1037 when merged.

🤖 Generated with Claude Code

**Do not merge yet.** It depends on the global set in Rhoving/iac-repo#586 being merged and synced to the machine a session runs on, and nothing here has run in a real session. It should stay open until `/qb-verify` has run end to end through the wrappers. **What changes** - **`CLAUDE.md`** gains a `## Project profile` (the last section): the test recipes that were in `qb-test`, the Quest Board preflight items, release and version-sync facts, the dev deploy facts, the `contract` and `frontend` review dimensions, security invariants and UI settings. Each value names the file it came from. - **Skills keep their names and delegate:** `qb-test` → `run-tests`, `qb-ci-log` → `ci-log`, `qb-preflight` → `preflight`, `qb-deploy-dev` → `dev-server` (with a four-item Quest Board addendum). `qb-render` keeps the app-specific recipes (prototype pages in headless Edge, the journeys stack) and forks to the global `render-check` agent. - **Agents removed:** `qb-test-runner`, `qb-ci-triage`, `qb-preflight`, `qb-render-check`. `qb-implementer` and `qb-frontend` stay. - **Workflows delegate:** `qb-verify` → `verify`; `qb-review` → `review-branch` plus the two Quest Board dimensions; `qb-build-slice` → `build-slice` with `qb-implementer`, `qb-frontend` for frontend tasks, and the same two dimensions. - **PR template** asks for a `changelog.d/` fragment, as `CLAUDE.md` already required. - The dev server is called `docker-test`; `ai-dev-server` was the old alias for the same machine. **Behaviour that differs from before** - `qb-build-slice` no longer checks out the branch: the caller must already be on it. `maxFixRounds` is fixed at 1 (the old default) and a different value is logged as ignored. - Review verifiers inherit the session's model instead of being pinned to Opus. A PR is read by fetching its ref, never by checking it out. - Test results use the global format (`SUITE <name>: PASS|FAIL|ENV`, up to 15 lines of the first failure). The runner no longer tries to fix the environment; it reports `ENV`. - Without arguments `qb-verify` runs the profile's `default suites` (lint, checks, backend, bot, frontend), which is what it ran before. **Checked** - The three wrapper workflows pass 10 checks against stubbed agents, run over the real global workflows. - Frontmatter of the 5 skills and 2 kept agents parses; `scripts/changelog.py check` passes with the new fragment. **Not checked:** no recipe in the profile was executed; they were transcribed from the old skill and compared with `ci.yml` and the `Makefile`. **Open questions in the profile (`TODO(ask)`)** 1. Which CI jobs does branch protection require, and is `main` protected? 2. Should `python -m evals.synthetic_session verify` count as a generated-artifact check? 3. How is a prerelease recorded in `CHANGELOG.md`? 4. Is production updated only by a source build, or does it ever pull the published images? 5. Is there an endpoint that reports the running version without shell access? 6. The dev compose project name (probably `quest-board`; unconfirmed on the host). 7. Is there a long-lived dev URL to render? The profile uses the seeded journeys stack. 8. Is there a tablet viewport to add? 9. Which built-app routes are the default pages to render? Closes #1037 when merged. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The Claude Code setup becomes a thin layer over the shared user-level set (#1037)
All checks were successful
CI / Does this change touch the recording path? (pull_request) Successful in 27s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Docker image build (pull_request) Successful in 49s
CI / Feedback site tests (pull_request) Successful in 54s
CI / Bot/backend version sync (pull_request) Successful in 1m6s
CI / Backend lint (ruff) (pull_request) Successful in 1m14s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 2m47s
CI / Bot tests and audit (pull_request) Successful in 4m29s
CI / Frontend (shard 1/2) (pull_request) Successful in 9m42s
CI / End-to-end journeys (phone) (pull_request) Successful in 10m30s
CI / End-to-end journeys (desktop) (pull_request) Successful in 20m47s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 20m41s
CI / Frontend (shard 2/2) (pull_request) Successful in 9m23s
CI / Backend migration, tests, and audit (pull_request) Successful in 47m56s
4e03dd225c
CLAUDE.md gains a Project profile holding the test recipes, preflight
checks, release and deploy facts, review dimensions and UI settings.
The qb-* skills and workflows keep their names and delegate to the
global ones; four agents are replaced by their global equivalents.
The PR template now asks for a changelog.d fragment.

The wrapper workflows pass 10 checks against stubbed agents over the
global workflows. Nothing has run in a real session yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Deploy.compose project is quest-board (read from `docker compose ls` on
  docker-test); the global dev-server skill stops without it.
- Deploy.health probes /ready from inside the backend container. Port 8000 is
  not published on the dev host, so the curl carried over from the old
  qb-deploy-dev skill could never answer.
- Test recipes gain a dev-server alternative, so `claude-dev` (Linux, no
  Docker) runs the same commands on docker-test from a work directory instead
  of reporting every suite as ENV.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found by running /qb-verify through the wrappers on the dev host.

- The sheet tests read webapp/backend/app/sheets by the repository layout,
  which from /app is /backend/app/sheets. The recipe mounted only
  webapp/frontend, so about 130 of them failed with a missing file. It now
  mounts the sheets read-only. Run alone with the mount: 238 files, 3719
  passed, 1 skipped.
- The run's container is named with the suffix and cleanup removes it first.
  Over SSH a run whose client timed out kept going on the host for 54 minutes
  and held the node_modules volume, so the volume could not be removed.
- Gotchas say what the missing mount looks like, and that a handful of
  timeouts on a busy dev host is load, not the branch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into chore/global-tooling-wrappers
Some checks failed
CI / Does this change touch the recording path? (pull_request) Successful in 22s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot/backend version sync (pull_request) Successful in 32s
CI / End-to-end journeys (desktop) (pull_request) Has been cancelled
CI / End-to-end journeys (keyboard) (pull_request) Has been cancelled
CI / End-to-end journeys (phone) (pull_request) Has been cancelled
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
CI / Frontend (shard 2/2) (pull_request) Has been cancelled
CI / Frontend (shard 1/2) (pull_request) Has been cancelled
CI / Bot tests and audit (pull_request) Has been cancelled
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Has been cancelled
CI / Backend lint (ruff) (pull_request) Has been cancelled
CI / Feedback site tests (pull_request) Has been cancelled
CI / Docker image build (pull_request) Has been cancelled
30d444b573
Author
Collaborator

Exercised through the wrappers on 2026-10-02 (from claude-dev, suites on docker-test)

Both conditions in the description are now met: Rhoving/iac-repo#586 is merged and the global set is synced on claude-dev, and /qb-verify has run end to end through the wrappers. Four defects turned up and are fixed on the branch (commits 96ee8069, 483f397d, ed8e91fc, then a merge of main).

What was wrong

  1. qb-verify.js and qb-build-slice.js did not parse. whenToUse was a single-quoted string containing "the profile's default suites", so the apostrophe ended it. Neither workflow could start. All six workflow scripts (three wrappers, three global) now pass a syntax check.
  2. Deploy.health could never answer. curl http://localhost:8000/ready on the dev host returns nothing: the backend's port 8000 is not published there (only the frontend is, on 18081). Carried over from the old qb-deploy-dev skill. It now runs the compose healthcheck's own probe inside the backend container, which printed {"status":"ok"}.
  3. Deploy.compose project was a TODO, and the global dev-server skill stops when that key is missing, so /qb-deploy-dev would have stopped at once. It is quest-board (from docker compose ls on the host).
  4. The frontend recipe did not mount the backend's sheet files. The lane 11 sheet tests read webapp/backend/app/sheets by the repository layout (/backend/app/sheets from /app); the recipe mounted only webapp/frontend, so about 130 of them failed with a missing file. This is true of the qb-test skill on main today as well. The recipe now mounts the sheets read-only.

What was added

  • A dev-server alternative for the test recipes. Every recipe is local-docker in PowerShell, and claude-dev has no Docker, so every suite would have been ENV there. The profile now says how the same commands run on docker-test from a work directory.
  • The frontend container is named with the suffix and cleanup removes it first. Over SSH, the first run's container kept going on the host for 54 minutes after its client timed out and held the node_modules volume. I removed both by name; nothing from these runs is left on the host.
  • Two gotchas: what the missing sheets mount looks like, and that a handful of timeouts on a busy dev host is load.

Results

Check Result
/qb-verify (default suites + preflight), first full run lint PASS; checks PASS; backend PASS (6812 of 6826, 38 min on a loaded host); bot PASS (690 of 691); preflight READY; frontend FAIL (defect 4, plus about eight load timeouts at a load average of 25 to 30)
frontend recipe run alone by hand with the sheets mount 238 files, 3719 passed, 1 skipped
/qb-verify with {suites: ["frontend"], preflight: false} after the fix and the merge of main green: 3724 of 3725
/qb-ci-log 1034 returned the same two failures as the raw job log

A single /qb-verify run with every default suite green at once has not been seen: the full run had frontend red, and only frontend was re-run after the fix.

Not exercised

  • /qb-review and /qb-build-slice: read and syntax-checked only. Their arguments match what the global review-branch and build-slice accept, and neither global workflow calls workflow() itself, so the one-level nesting limit is not hit. Neither was run.
  • /qb-deploy-dev: not run (it changes the dev stack). Its profile values were checked read-only against the host: dev path, compose project, health, version probe (prints 4.4.1).
  • /qb-render: not run.
  • The PowerShell forms of the recipes on the Windows desktop: not run. The two changes to the frontend recipe (--name, the second -v) are untested there.

Still open in the profile

The remaining TODO(ask) lines are the owner's to answer: required checks (the branch protection API refuses claude-bot), how a prerelease is recorded in the changelog, whether production ever pulls images, a version endpoint, the generated-artifact question, and the UI questions (dev URL, tablet viewport, key routes).

The red CI job on the earlier head

Not this PR: Preview.test.jsx is a flaky test (#1039, fixed in PR #1041). It may turn this push's run red too until #1041 is on main.

## Exercised through the wrappers on 2026-10-02 (from `claude-dev`, suites on `docker-test`) Both conditions in the description are now met: Rhoving/iac-repo#586 is merged and the global set is synced on `claude-dev`, and `/qb-verify` has run end to end through the wrappers. Four defects turned up and are fixed on the branch (commits 96ee8069, 483f397d, ed8e91fc, then a merge of main). ### What was wrong 1. **`qb-verify.js` and `qb-build-slice.js` did not parse.** `whenToUse` was a single-quoted string containing "the profile's default suites", so the apostrophe ended it. Neither workflow could start. All six workflow scripts (three wrappers, three global) now pass a syntax check. 2. **`Deploy.health` could never answer.** `curl http://localhost:8000/ready` on the dev host returns nothing: the backend's port 8000 is not published there (only the frontend is, on 18081). Carried over from the old `qb-deploy-dev` skill. It now runs the compose healthcheck's own probe inside the backend container, which printed `{"status":"ok"}`. 3. **`Deploy.compose project` was a TODO**, and the global `dev-server` skill stops when that key is missing, so `/qb-deploy-dev` would have stopped at once. It is `quest-board` (from `docker compose ls` on the host). 4. **The `frontend` recipe did not mount the backend's sheet files.** The lane 11 sheet tests read `webapp/backend/app/sheets` by the repository layout (`/backend/app/sheets` from `/app`); the recipe mounted only `webapp/frontend`, so about 130 of them failed with a missing file. This is true of the `qb-test` skill on main today as well. The recipe now mounts the sheets read-only. ### What was added - **A dev-server alternative for the test recipes.** Every recipe is `local-docker` in PowerShell, and `claude-dev` has no Docker, so every suite would have been `ENV` there. The profile now says how the same commands run on `docker-test` from a work directory. - **The frontend container is named with the suffix and cleanup removes it first.** Over SSH, the first run's container kept going on the host for 54 minutes after its client timed out and held the `node_modules` volume. I removed both by name; nothing from these runs is left on the host. - Two gotchas: what the missing sheets mount looks like, and that a handful of timeouts on a busy dev host is load. ### Results | Check | Result | |---|---| | `/qb-verify` (default suites + preflight), first full run | lint PASS; checks PASS; backend PASS (6812 of 6826, 38 min on a loaded host); bot PASS (690 of 691); preflight READY; **frontend FAIL** (defect 4, plus about eight load timeouts at a load average of 25 to 30) | | `frontend` recipe run alone by hand with the sheets mount | 238 files, 3719 passed, 1 skipped | | `/qb-verify` with `{suites: ["frontend"], preflight: false}` after the fix and the merge of main | **green**: 3724 of 3725 | | `/qb-ci-log 1034` | returned the same two failures as the raw job log | A single `/qb-verify` run with every default suite green at once has **not** been seen: the full run had frontend red, and only frontend was re-run after the fix. ### Not exercised - `/qb-review` and `/qb-build-slice`: read and syntax-checked only. Their arguments match what the global `review-branch` and `build-slice` accept, and neither global workflow calls `workflow()` itself, so the one-level nesting limit is not hit. Neither was run. - `/qb-deploy-dev`: not run (it changes the dev stack). Its profile values were checked read-only against the host: dev path, compose project, health, version probe (prints 4.4.1). - `/qb-render`: not run. - The PowerShell forms of the recipes on the Windows desktop: not run. The two changes to the `frontend` recipe (`--name`, the second `-v`) are untested there. ### Still open in the profile The remaining `TODO(ask)` lines are the owner's to answer: required checks (the branch protection API refuses `claude-bot`), how a prerelease is recorded in the changelog, whether production ever pulls images, a version endpoint, the generated-artifact question, and the UI questions (dev URL, tablet viewport, key routes). ### The red CI job on the earlier head Not this PR: `Preview.test.jsx` is a flaky test (#1039, fixed in PR #1041). It may turn this push's run red too until #1041 is on main.
Merge remote-tracking branch 'origin/main' into chore/global-tooling-wrappers
All checks were successful
CI / Does this change touch the recording path? (pull_request) Successful in 32s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot/backend version sync (pull_request) Successful in 1m10s
CI / Backend lint (ruff) (pull_request) Successful in 1m15s
CI / Feedback site tests (pull_request) Successful in 2m0s
CI / Docker image build (pull_request) Successful in 1m56s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 2m33s
CI / Bot tests and audit (pull_request) Successful in 4m41s
CI / Frontend (shard 2/2) (pull_request) Successful in 9m32s
CI / Frontend (shard 1/2) (pull_request) Successful in 10m58s
CI / End-to-end journeys (phone) (pull_request) Successful in 10m31s
CI / End-to-end journeys (desktop) (pull_request) Successful in 11m14s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 20m38s
CI / Backend migration, tests, and audit (pull_request) Successful in 54m50s
d2bc8cee42
claude-bot changed title from WIP: the Claude Code setup becomes a thin layer over the shared user-level set (#1037) to The Claude Code setup becomes a thin layer over the shared user-level set (#1037) 2026-10-03 13:53:40 +00:00
claude-bot deleted branch chore/global-tooling-wrappers 2026-10-03 13:53:48 +00:00
Sign in to join this conversation.
No description provided.