Skip to content

feat(queen): the runners cabinet says how to take tasks - #1230

Open
dmitrii-f-t27 wants to merge 4 commits into
mainfrom
claude/runner-claim-complete
Open

dmitrii-f-t27 wants to merge 4 commits into
mainfrom
claude/runner-claim-complete

Conversation

@dmitrii-f-t27

@dmitrii-f-t27 dmitrii-f-t27 commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Description

This follows #1205, now merged, which added the MY RUNNERS cabinet. The server side is gHashTag/BrowserOS#518 (the cabinet) and gHashTag/BrowserOS#521 (runners take tasks). Both now target fix/queen-worker-provider-and-prompt-size, the branch the deployed Queen is built from, and this page downloads the runner script from that same branch. Merge #518, then #521, and deploy before merging this, so the download link resolves and the page doesn't promise work the server can't hand out yet.

The cabinet used to say "there is nothing to take". It now tells people how to run a runner:

  • The one-time setup lines name the person's public fork, download queen-runner.mjs and run it.
  • The closing note explains what happens to a task and links the runner's README.
{
  "version": 1,
  "head_sha": "26586e20e8f273768b03b5ceb8ce6c619fc7cf45",
  "summary": "The MY RUNNERS cabinet stops saying runners have nothing to take. Its setup lines now download and run queen-runner.mjs against the person's public fork, and it explains that the Queen's review judges the pushed branch.",
  "changes": [
    "apps/website/src/lib/queenRunners.ts: setupLines adds TRIOS_RUNNER_REMOTE, downloads the runner script from the BrowserOS repository and runs it. RUNNER_SCRIPT_URL and RUNNER_README_URL are built from one RUNNER_BRANCH constant, fix/queen-worker-provider-and-prompt-size, the production branch the runner PRs now target.",
    "apps/website/src/components/QueenRunners.tsx: the EN/RU nextStage note is replaced by a how-it-works note with a link to the runner README.",
    "apps/website/qa/queen-runners-contract.mjs: the setup lines must still carry no provider key, and must name the fork and run the runner script from the production branch. The provider-key check now matches a key in any spelling (API_KEY, sk-, provider key) rather than the bare word provider, which the branch name contains, and asserts it still catches each spelling.",
    "Merged main after #1205 was squash-merged. The add/add conflicts were resolved to this branch's version, since main's copies of those three files are byte-identical to #1205's head. The diff against main is these three files only."
  ],
  "tests": [
    {
      "command": "cd apps/website && npm run check:queen-runners",
      "status": "passed",
      "result": "queen-runners contract: ok",
      "evidence": "Local run on head 26586e2 in the authoring session"
    },
    {
      "command": "cd apps/website && npm run typecheck:ratchet && npm run check:queen-contrast && npm run check:queen-fallback-parity",
      "status": "passed",
      "result": "Ratchet: 179 errors across 26 files, equal to the baseline, and no file gained errors. Contrast: 24 pairs, worst 5.39:1. Fallback parity: PASS 217/217.",
      "evidence": "Local run on head 26586e2 in the authoring session"
    },
    {
      "command": "cd apps/website && npx vite build && npx eslint src/components/QueenRunners.tsx src/lib/queenRunners.ts",
      "status": "passed",
      "result": "Build succeeded. ESLint clean on both files.",
      "evidence": "Local run on head 26586e2 in the authoring session"
    },
    {
      "command": "Manual check of the panel in a browser on https://app.t27.ai/queen/",
      "status": "not_run",
      "result": "The panel needs the app.t27.ai session and a deployed server.",
      "evidence": "Not run: requires the app.t27.ai origin and a deployed server"
    }
  ],
  "limitations": [
    "The download link points at fix/queen-worker-provider-and-prompt-size in gHashTag/BrowserOS. The script reaches that branch when gHashTag/BrowserOS#518 and #521 merge; until then the link returns 404, so this PR should merge after them.",
    "The fork address in the setup lines is a placeholder the person edits."
  ],
  "tags": ["Engineering", "Queen"],
  "blog": {
    "title": "A runner that takes tasks",
    "summary": "Runners registered in the cabinet now take the Queen's tasks, run them with the lender's own agent and key, and push to the lender's fork, and the Queen's review judges the work.",
    "outline": [
      "Phase 1 let a person register a runner in the cabinet. It could come online and show on the board, but it had nothing to do.",
      "The server now offers tasks to idle runners. It fetches the branch a runner pushed to its own fork, and the Queen's review judges it.",
      "The cabinet's setup lines name the person's public fork, download queen-runner.mjs, and run it with the person's own agent and key."
    ]
  }
}

Related Issue

None filed. Server counterparts: gHashTag/BrowserOS#518 and gHashTag/BrowserOS#521. Follows #1205.

Specification Link

Not applicable. This is a hand-written change in apps/website.

Changes Made

  • Feature: The cabinet's setup lines run the runner, and its note explains what a runner does.
  • Tests: The contract asserts the new lines.

Files Changed

  • apps/website/src/lib/queenRunners.ts: setup lines, script and README URLs
  • apps/website/src/components/QueenRunners.tsx: EN/RU copy and README link
  • apps/website/qa/queen-runners-contract.mjs: assertions

Testing Checklist

  • Build: npx vite build passes
  • Contracts: check:queen-runners, contrast, fallback parity and the typecheck ratchet pass locally
  • Manual Testing: not done in a live browser

Breaking Changes

  • No

🔥 TOXIC VERDICT

What Works

What Doesn't Work

  • Not viewed live.

Known Issues

Overall Assessment: APPROVE after gHashTag/BrowserOS#518 and #521 are merged and deployed.

Self-Score: 8/10

Deployment Notes

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • My changes generate no new warnings
  • I have tested this PR locally (contracts and build; not in a live browser)

🤖 Generated with Claude Code

https://claude.ai/code/session_01SJ8KjRoGNBoHBoDR92fAo2

claude added 2 commits October 1, 2026 14:08
The LEADERBOARD tab invited people to "lend the swarm a key" and had no
door. It now carries a cabinet where the person signed in on
app.t27.ai mints, lists and revokes runner tokens (trios-agent-server
/queen/me/runners). A runner runs on the lender's own machine with the
lender's own provider key; this page has no field for a key and never
sees one.

- lib/queenRunners.ts: pure decisions with an injected fetch; the
  session token rides only as a bearer with credentials omitted and
  exactly two headers; a runner token is accepted only in the shape the
  Queen mints and shown once.
- On t27.ai (bridge path) the panel points to app.t27.ai/queen instead
  of forwarding the read-only game token.
- Leaderboard rows are keyed by lane kind + first lane, since a runner's
  Telegram name can equal an operator's lane name.
- qa/queen-runners-contract.mjs wired into website-checks; the new sheet
  is registered with the contrast contract and uses opaque inner grounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SJ8KjRoGNBoHBoDR92fAo2
The server now hands tasks to runners and takes their work back for
review, so the cabinet stops saying there is nothing to take:

- The setup lines name the person's public fork, download
  queen-runner.mjs and run it, instead of a single heartbeat curl.
- The closing note explains what a runner does with a task and links
  the runner's README.
- The contract checks the new lines still carry no provider key and do
  point at the runner script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SJ8KjRoGNBoHBoDR92fAo2
@github-actions github-actions Bot added the status:in-progress 🔵 Agent working label Oct 1, 2026

Copy link
Copy Markdown
Collaborator Author

The pr-opened check failed with gh: Bad credentials (HTTP 401). This is the job's project-board GraphQL call: the GH_TOKEN it uses is rejected before any repository code runs. This PR doesn't cause it, and it fails identically on #1205. No code fix exists. A maintainer needs to refresh the token used by that workflow. I don't have permission to re-run checks here.


Generated by Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SJ8KjRoGNBoHBoDR92fAo2

# Conflicts:
#	apps/website/qa/queen-runners-contract.mjs
#	apps/website/src/components/QueenRunners.tsx
#	apps/website/src/lib/queenRunners.ts
@dmitrii-f-t27
dmitrii-f-t27 changed the base branch from claude/gallant-bardeen-h2hgaa to main October 1, 2026 22:13
@gHashTag

gHashTag commented Oct 2, 2026

Copy link
Copy Markdown
Owner

Reviewer bee Y: not merging at 10c8946 -- blocked on its own stated dependency.

Copy link
Copy Markdown
Collaborator Author

Agreed. This PR should wait. The 404 is expected for now: queen-runner.mjs and its README reach feat/queen-supervisor only when gHashTag/BrowserOS#521 lands there. #521 is stacked on gHashTag/BrowserOS#518, which is why its base isn't feat/queen-supervisor yet.

I'm leaving the URLs pointing at feat/queen-supervisor rather than at the PR branch, so that a working link can't later turn into a dead one. If the runner work instead lands on fix/queen-worker-provider-and-prompt-size, the branch production builds from, I'll update RUNNER_SCRIPT_URL and RUNNER_README_URL to that branch in the same change. Either way I'll push here and ask for re-review once the file exists at the URL the page shows.


Generated by Claude Code

@gHashTag

gHashTag commented Oct 2, 2026

Copy link
Copy Markdown
Owner

bee review: not merged, held. Head 10c8946, MERGEABLE/CLEAN, all checks green, no credentials.

Held on its own stated precondition: the setup lines tell people to curl RUNNER_SCRIPT_URL, and that path (trios/agent-server/tools/queen-runner/queen-runner.mjs on gHashTag/BrowserOS@feat/queen-supervisor) returns 404 today. gHashTag/BrowserOS#521 is still OPEN, and its base is claude/gallant-bardeen-h2hgaa, not feat/queen-supervisor -- so even merging #521 would not make this URL resolve. Merge this once the script exists at the URL the page prints (or point the URL at where #521 actually lands).

The setup lines fetched queen-runner.mjs from feat/queen-supervisor,
where it does not exist (a 404, as the review found). The runner PRs
(gHashTag/BrowserOS#518, #521) now target
fix/queen-worker-provider-and-prompt-size, the branch the deployed
Queen is built from, so the script and its README are linked there,
through one RUNNER_BRANCH constant.

The contract's "no provider key" check matched the bare word
"provider", which that branch name contains. It now matches a key in
any spelling (API_KEY, sk-, provider key) and proves it still catches
each of them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SJ8KjRoGNBoHBoDR92fAo2

Copy link
Copy Markdown
Collaborator Author

The review is addressed in 26586e2. The URL now points to the branch where the script will actually land:

The link will still return 404 until #518 and then #521 merge. Merging this PR still has to wait for them, as the description says.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

⚡ Brain Health Check is red, but this PR doesn't cause it. The job runs tri stress --health, which prints stress-test: TODO - not implemented yet and no Score: line. The workflow then fails with its own message: "brain health was NOT MEASURED ... This is not a health regression." This PR touches only apps/website, and the same check failed the same way on #1205. No fix exists yet; it needs tri stress --health to be implemented. I can't re-run checks here.


Generated by Claude Code

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status:in-progress 🔵 Agent working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants