Repository navigation
Description
One list of every open manual run issue, grouped so each setup happens once. Work down it, tick what passes, and report back here (a comment per section is fine). Anything that's off: note it and Claude files a bug. The original issues are closed into this one (11 Oct regroup) and keep their full steps; tick them here.
14 Oct: every other open
manual runissue is now section 9 below (25 folded in, easiest first; the contest-day items are at the top of it). Sections 1 to 8 are unchanged.
Status 12 Oct: 29 done, 30 open. Done today: #706 (traces name
src/*.tsafter #801), #559 (no subscription login on the live Worker, now enforced in code by #808), #662 (npm Trusted Publisher plus 2FA with tokens disallowed, 0.1.11 from CI). Also released at 71b462d: the site moved to codesplitter.notryanquinn.workers.dev and checks in a container are on (#806 closed). The demo video moved out to #558.
1. ✅ One release (covers #607, #499, #442, and the release steps of #407, #417, #418)
- Add the 1Password item
privacy/emailin the codesplitters vault with the address to publish (MANUAL RUN: codeSplitters privacy contact email (1Password privacy/email) + deploy #499). -
zsh ~/release-codesplitters.shfrom any folder. Sign in to Cloudflare as notryanquinn if asked, read the plan, answer yes, wait for ✔ deployed. - Deploy output ends with
Workers Logs for codesplitters keep URLs without their query strings.If awarning: worker.redactQueryStrings: ...line shows instead, paste it (MANUAL RUN: deploy codeSplitters so query strings stop being logged (#606) #607). - https://codesplitters.notryanquinn.workers.dev/#/privacy shows the contact address under "The dig site" (MANUAL RUN: codeSplitters privacy contact email (1Password privacy/email) + deploy #499).
-
/mcpleads with Connect your AI and a Copy button; the profile box has that title, theclaude mcp add --scope user …line, Apps signed in, then Tokens (MANUAL RUN: release codeSplitters so Connect your AI (#431) goes live #442). -
/mcpshows the tool list and/apireturns JSON (MANUAL RUN: list codeSplitters' MCP server and OpenAPI spec in the public directories #417, MANUAL RUN: codeSplitters mirrors on the real desktop app against a real GitHub repo #407). -
wrangler secret list --name codesplitters: ifCLAUDE_CODE_OAUTH_TOKENis there, remove it and useANTHROPIC_API_KEYfor hosted agents (MANUAL CHECK (not a bug): which login do hosted Claude agents use on the live Worker? #559). ✅ 12 Oct: the livecodesplitterWorker has noCLAUDE_CODE_OAUTH_TOKEN(dashboard secret names), and the oldcodesplittersWorker is gone.
2. Live site in a desktop browser
SOCIALCODE101 UI (#574, closed; only the code city is left)
- Handle-invite badge in the top bar, and the "Invited to" box on your profile.
-
#/feed: digest, with raw events in<details>. (followed person's edits show; AI digest not run) - Pulse: the profile box refreshes (every 15s), and faces beat on an open file's socket. (profile box checked; faces not yet)
- Code city: walk first-person in
play.html#c/, and a follower visits over the relay.
Agent GitHub button (#439, closed), signed in with two GitHubs linked:
- The dig panel's bot button starts dimmed; clicking one account lights it, clicking again clears it. (one GitHub)
- Choosing an account for agents doesn't change which account you dig as. (one GitHub: the ✓ stays; across two accounts untested)
- A hosted agent run answers
github: trueonce an account is chosen.
3. On a real phone (skipped for now)
Backrooms game (#569), on iOS Safari and Android Chrome:
- Stick walks, and runs when pushed all the way.
- Dragging elsewhere looks around; a second finger works alongside the stick.
- Swat: tap to swat, hold to press into a line in horde. Jump works.
- Page doesn't zoom or scroll during play; lobby card reachable in landscape.
Over Tailscale (Tailscale on the Mac and the phone)
- codeSplitters desktop (MANUAL RUN: pair a real phone with the codeSplitters desktop over Tailscale #457):
RB_LISTEN=127.0.0.1:4800 bun run desktopin apps/codesplitters,tailscale serve --bg http://127.0.0.1:4800, sign in, 📱, enterhttps://<mac>.<tailnet>.ts.net, open the link on the phone. Phone signs in by alias, edits a file, Agent button runs; opening the link again gives 403. Thentailscale serve --https=443 off. - Agent Office (MANUAL CHECK (not a bug): try office:phone over Tailscale from a phone #423):
bun run office, thenbun run office:phone; open the/litelink on the phone, check terminals, boards and ✨ New task over the websocket; thenbun run office:phone -- --off. If the websocket is refused, try--trust-proxy.
4. Desktop app against real GitHub
Mirrors (#407, closed): run cd apps/codesplitters && bun run desktop from main, with git config --global user.name/user.email set.
- Mirror a throwaway GitHub repo you own from the dig box (tick "Keep it in sync").
- Commit here → lands on GitHub. Push to GitHub → lands here.
- Force-push GitHub, then Re-base on upstream. Repeat with Take upstream's.
- Make a line private, Push the crew's copy: GitHub has the real text, the repo's own clone has the line blank.
Checks vs Actions (#491)
- On the RustyBuns mirror:
PUT /api/repos/<owner>/rustybuns/checks/settings {"where": "both", "required": ["typecheck"], "post_statuses": true}. - Push a branch upstream; within 5 min (or ⌘K → "Fetch GitHub's checks now") the branch shows
typecheck,apps… next to codeSplitters' own. - Write down where it beats Actions and where it falls short.
5. External tools and accounts
CI webhook (#541)
- Open https://smee.io/new (or a local Jenkins exposed with
cloudflared tunnel). On a codeSplitters repo: Settings → Webhooks, paste the URL, tick Speak GitHub, add. - Commit on main: the receiver shows a
pushwith a validX-Hub-Signature-256(Jenkins: a job pollingrepository.clone_urlstarts). ✅ Agent run 11 Oct via smee; MANUAL RUN: a real CI receiver triggers on a codeSplitters GitHub-mode webhook #541 closed.
Executor (#418) (Claude Code OAuth is already done)
-
npm install -g executor,executor web, Add Integration →https://codesplitters.notryanquinn.workers.dev/api/openapi.json. - Add account → oauth, client_id
executor→ consent page → Allow. - Policies:
codesplitters.*approve;repos.deleteRepo,branches.mergeBranch,files.commitFile,deploys.deployrequire approval. -
npx add-mcp http://127.0.0.1:4788/mcp --transport http --name executor, restart the agent. - Executor shows under "Apps signed in"; signing it out there makes its next call 401.
Directory listings (#417)
- MCP Registry:
brew install mcp-publisher,mcp-publisher init, editserver.json(nameio.github.QuinnsCode/codesplitters, one-line description, nopackages, astreamable-httpremote at/api/mcpwith anAuthorizationheader), thenvalidate,login github,publish, and search the registry for it. - Submit
/api/openapi.jsonat https://apis.guru/add-api (tick when it shows up there).
6. Costs a few cents: Hetzner box (#452)
From a throwaway app with targets.box: { provider: "hetzner" } and no native crates:
-
rustybuns login hetzner, thenrustybuns plan --stage hetzner-testandrustybuns deploy --stage hetzner-test: anhttp://<ip>:3000URL answers/health. - Deploy again:
planshows an update, not a create. -
rustybuns destroy --stage hetzner-test --yes; the Hetzner console shows no server or Volume left. - Hosted path: note run time against the 13-minute budget, check the token never shows in the log, then delete the stored key.
7. Added since: security settings and setup (#652, #653, #672, #654, #662, #635)
All free. Each is dashboard clicking or one script, no app to run.
GitHub settings (#652), on github.com/QuinnsCode/RustyBuns → Settings:
- Rules → new branch ruleset on
main: block force pushes and deletion, require a PR (0 approvals), requiretypecheckandappschecks, bypass: you only. - A tag ruleset for
*-v*: only you can create them. (release tags, 11 Oct) - Code security: Dependabot alerts + security updates, private vulnerability reporting. (Validity checks: no toggle on this plan, skipped.)
- Actions → General: require approval for all outside collaborators.
- Environments: ✅
dropsholdsDROPS_CLOUDFLARE_API_TOKEN(new R2 token, 11 Oct) andDROP_SECRET, deploys only frommainand*-v*tags, you as reviewer; repo-level copies and the old "Agentic office" R2 token deleted (MANUAL RUN: move the drop secrets into the drops environment #752). Still to see: the next tag drop waits for approval.
Cloudflare dashboard (#653, #672):
- Turnstile → Add widget for
codesplitters.notryanquinn.workers.dev(Managed). Save its secret in 1Password: vaultcodesplitters, itemturnstile, fieldsecret. Paste the site key (public) to Claude, who puts it in the config. ✅ widget made, secret in 1Password, site key in PR codeSplitters: Turnstile site key in the config (#672) #720 (live at next release). - [~] Bot Fight Mode on (skip it if it blocks MCP or the CLI). Skipped: needs a zone you own; workers.dev has none.
- [~] One rate-limiting rule:
/api/auth/*, 20 requests / 10s per IP → block. Skipped: needs a zone you own; workers.dev has none. - [~] Access (Zero Trust, free) on
/admin*and/api/admin*, with a one-time PIN to your admin email. Skipped: needs a zone you own; workers.dev has none. - Notifications: Security Events Alert and Workers usage to your email; delete stale API tokens at dash.cloudflare.com/profile/api-tokens. ✅ $10 billing budget alert by email; tokens reviewed, kept the June "Cloudflare Agent Token".
On this Mac (#654), with Agent Office stopped:
-
zsh ~/office-hygiene-654.shfrom the terminal that starts the office. Then start the office, and save its new password in 1Password. (Rotate once more after Agent Office: any agent can read every worker's hook token, the pty token and the office session secret #642 lands.)
npm (#662), signed in at npmjs.com:
- For
@rustybuns/ports,shell-bun,nativeandcli: Settings → Trusted Publisher → GitHub Actions,QuinnsCode/RustyBuns/npm-publish.yml/ environmentnpm. ✅ 0.1.11 published from CI on tagv0.1.11(12 Oct) with provenance on all four. - After the next CI release: set each to "Require 2FA and disallow tokens". ✅ 12 Oct, all four.
After the release (#635, #706): released at b7d2628, so these can be done now.
- MANUAL RUN: codeSplitters search-move after the per-repo search deploy, then drop file_search #635: paste the console one-liner from MANUAL RUN: codeSplitters search-move after the per-repo search deploy, then drop file_search #635 on the live site as admin, until
leftis 0. ✅ left: 0 (11 Oct); codeSplitters: drop the old file_search table (#635) #724 merged; MANUAL RUN: codeSplitters search-move after the per-repo search deploy, then drop file_search #635 closed. - MANUAL RUN: codeSplitters, confirm minified Worker traces name the source after a live deploy #706: after that release, find an error in Workers Logs and check its stack trace names
src/*.tsfiles, notworker.js:1:<huge column>. ✅ 12 Oct on codesplitter (version 6ca8b0f9):at async kK (src/branches.ts:162:26),src/worker.ts:373. Fixed by rustybuns deploy: shape Worker source maps as wrangler does (#799) #801 (codeSplitters: Workers Logs traces still minified after the source-map release (#706) #799). - MANUAL RUN: turn on search across repos (CODESPLITTERS_VECTORS=1) and backfill #704 (costs a little, decide first): turning on search across repos adds a Vectorize index and Workers AI, so the release script will stop on the new resources. That one needs its own planned release with
CODESPLITTERS_VECTORS=1, then a backfill.
8. Live checks folded in on 11 Oct (no deadline)
Each needs the live site, the desktop or a person at the keys. Full steps are in the linked issue.
- codeSplitters: check live output, the key form and key rotation on the live site #350: live output, the key form and key rotation on the live site (do it with codeSplitters: one real desktop Deploy run and one real dependency doctor run on live #300's first hosted deploy).
- codeSplitters: one real desktop Deploy run and one real dependency doctor run on live #300: one real desktop Deploy run and one real dependency doctor run on live.
- codeSplitters limits: try the queue action in a browser and on the live Worker #284: limits' "Queue it" action in a browser and on the live Worker.
- codeSplitters fresh start: check it on real Cloudflare Artifacts #314: fresh start on real Cloudflare Artifacts (what a full repo's push error says).
- hippo-tycoon: re-measure the in-play sim bench on a quiet machine #182: re-run
bun bench/sim.ts 200in apps/hippo-tycoon on an idle machine and update the README table. - park-hide-seek: playtest what needs a person (feel, balance, LAN) #67: park-hide-seek playtest: feel, balance, LAN.
9. Folded in 14 Oct: every other open manual run, easiest first
The 25 separate MANUAL RUN issues are closed into this section and keep their full steps; tick them here. Times are rough.
Today: the contest closes 14 Oct 11:59 PM PDT
- ~10 min, MANUAL RUN: merge #1480, push tag v0.1.12, approve the npm publish #1513: merge Release 0.1.12 #1480 (Release 0.1.12), tag
v0.1.12onorigin/mainand push the tag, approve thenpmenvironment, check all four@rustybuns/*land at 0.1.12. - ~2 min, MANUAL RUN: npm deprecate @rustybuns/* 0.1.11 with a minimum-release-age note #1514: after 0.1.12 is published,
npm deprecate "@rustybuns/<cli|ports|shell-bun|native>@0.1.11" "Newer 0.1.12 may be held by your minimum release age; 0.1.11 still works, or exempt @rustybuns/* to take 0.1.12."for each of the four.
A. Free, dashboard or one command (5 to 20 min each)
- MANUAL RUN: apply the tag ruleset (.github/rulesets/tags.json) and decide on required review for main #1575 (5 min): import
.github/rulesets/tags.json(Settings → Rules → Rulesets → New tag ruleset → Import), thengh api repos/QuinnsCode/RustyBuns/rulesetslists two. Required review onmainwaits for group D. - MANUAL RUN: set the account-level spend caps (Cloudflare alert, LLM key limits, Railway hard limit, Actions $0 budget) #798 (20 min): Cloudflare Usage Based Billing alert; monthly spend limits on the Anthropic and OpenAI keys hosted agents use; Railway hard usage limit; GitHub Actions budget $0 with stop-at-limit; look at R2 usage for
druids-curse-assets. COSTS.md has the long list. - MANUAL RUN: watch scenes (play_scene, scene_step, the queue) in a real browser #1611 (10 min): in a real browser, watch
play_scene/scene_step, the Queue button and shift-click queue, slices likecode:2-3, the palette's Play/Queue a scene: cursor, held steps,skip, reduced motion. - MANUAL RUN: codeSplitter tags on a hosted (Cloudflare Artifacts) repo #892 (10 min): on a deployed codeSplitter repo with a commit or two, tag a dot in the git map (
v0.1),git ls-remote --tags <clone URL>shows it, delete it with the × on its chip. If the list is empty, Artifacts may answer protocol v2 only (remoteRefsinsrc/git.ts). - MANUAL RUN: check codex, pi and opencode JSON usage against a live run #1135 (15 min): with codex, pi and opencode each logged in, run one agent task through codeSplitter; the
~N tokensline is near the provider's dashboard and the reply comes through as text, not JSON. If off, fixusageOfinapps/codesplitter/src/budget.ts. - MANUAL RUN: first signed Mac drop after Apple enrollment #1261 (20 min, after Apple enrollment and the APPLE_SIGNING.md step 7 secrets in
drops): run desktop-drop for one app,Sign and notarize the Mac binariessays Accepted,spctl --assess --type execute -vvshowsNotarized Developer ID, run it once to confirm the JIT entitlements.
B. On this Mac or two machines (15 to 60 min)
- MANUAL RUN: codeSplitter checks as a sandbox user on a real Mac (#1010) #1031 (15 min): make standard user
cs-checks, sudoers rule$USER ALL=(cs-checks) NOPASSWD: ALL, start the desktop withCODESPLITTER_CHECKS_USER=cs-checks, required checkwhoami; echo $HOME; bun test. Log sayscs-checksand/tmp/cs-checks-…/home, run passes, nothing left in/tmp/cs-checks-*;bunis on that user's PATH. - MANUAL RUN: git-recon battles: feel lag compensation and replay on a real LAN #1215 (20 min, two machines on a LAN): host a git-recon ffa battle and join from the other. Strafing doesn't rubber-band, hits land without leading, and "shot behind cover" isn't bad (else lower
MAX_REWINDinapps/git-recon/src/sim/game.ts). - MANUAL RUN: dogfood the office on a local codeSplitter desktop (RustyBuns as a pull-only mirror) #1551 (30 min): dogfood the office on a local codeSplitter desktop (
apps/agent-office/DOGFOOD.md). Open the launch URL fromRB_NO_BROWSER=1 ./dist/app-darwin-arm64and sign in;quinn/rustybuns-csis already dug up as a pull-only mirror; in the office, Settings > You > codeSplitter on with that repo; check the three board marks and a queue dispatch hint; file each rough edge as its own issue. - MANUAL RUN: try the dependency doctor's on-fail chain for real (#869) #873 + MANUAL RUN: dependency doctor on-fail chain, what needs a real claude and a browser (#873) #1642 (30 to 45 min): dependency doctor on-fail chain on a repo whose tests break on
clsx2 (pin~1.2.1,1.3.0to roll back to). Chips toggle, ‹ moves earlier, order survives save and reload, nothing wraps at phone width; real claude with--output-format jsonbrings edits back and shows$on 🤖 and 🔎 hover, 🔎 names a source; one macOS notification for 🔔, not repeated; hosted (admins): redeploy for the newsandbox/server.mjs, 🔎 passes the egress gate with no new hosts. (Rollback, hold-back, dollar cap and report text are covered by tests.) - MANUAL RUN: run codeSplitter editing codeSplitter for real, once #1581 (60+ min): codeSplitter editing codeSplitter for real, once, following
apps/codesplitter/docs/self-edit.md: RustyBuns mirrored pull-only, an agent edits a small file on a branch, checks run, Mervin merges, you deploy (DEPLOYS=1 AGENTS=1 CHECKS=1, varlock), and the watchdog rolls back a deliberately bad deploy (needs its Workers API token). Watch it with the tour's Edit itself chapter and Play. Not done: scenes driven by a queue or an agent.
C. Deploys that cost cents (15 to 45 min each, destroy after)
- MANUAL RUN: deploy git-recon battles online (first live room) #1204 (15 min):
cd apps/git-recon && bun run deploy, then Host in one browser and Join with the code in another. About $0.03 an hour for 32 players; an idle room closes after 5 minutes. Compare the first bill. - MANUAL RUN: check the real Alchemy stops cleanly when a deploy is interrupted (#930) #931 (15 min): throwaway stage
interrupt_test:rustybuns deploy --stage interrupt_test --yes, Ctrl-C mid-create, exits within 10s and.alchemy/statestill plans; repeat with SIGTERM;rustybuns destroy --stage interrupt_test. If Alchemy needs longer, raise the grace. - MANUAL RUN: deploy What Would Fantano Say #916 (20 min): vault
fantanowithturnstile/secret; Turnstile widget andturnstileSiteKeyinapps/what-would-fantano-say/rustybuns.config.ts;bun run gen && bun run deploy; one live review parses (card not "Estimated"); compare the Workers AI bill to ~$0.00004 a review. A meme domain is optional. - MANUAL RUN: codeSplitter release after the Alchemy queue-consumer patch (#1482) #1496 (15 min):
zsh ~/release-codesplitters.shafter Patch Alchemy so replacing a consumer on a deleted queue doesn't fail the release #1482 merges: the Alchemy wait after deleting a consumer on a gone queue doesn't hang, the 3 consumers (HOOKS, JOBS, LEVEL_DIGS) are created on the current queues,/api/levelsstill returns ready levels, and a message through each is consumed. - MANUAL RUN: switch on borg-edge (environment, Cloudflare secrets, BORG_EDGE=1) #878 (30 min):
borg-edgeon a Free-plan account: environmentborg-edgewith reviewers, secretsCLOUDFLARE_API_TOKENandCLOUDFLARE_ACCOUNT_ID, variableBORG_EDGE=1, run it once from Actions and approve. Every check ✓ and every limit ✓ (refused); paste the grid; destroy and sweep left nothing. Also covers MANUAL RUN: deploy slim borg on a Free-plan account and record the edge grid #865. - MANUAL RUN: hosted deploy of an x86 Hetzner box with uncommitted native/ crates (#760) #762 (30 min): after the next deploy ships the new image, deploy from the site a repo with a
cpxHetzner box and an uncommittednative/crate:[native] building ... with cargo, inside the 13-minute budget; acaxbox is still refused before anything is created; note the container start time with the ~1.2 GB image. - MANUAL RUN: Astro IMAGES on the edge and a box, and EmDash on the edge #845 (45 min): Astro
IMAGESon the edge (/_image?href=…&w=32&f=webpreturns a resized WebP), on a Railway box (200 with the original PNG, byte-identical), and EmDash'sblog-cloudflaretemplate on the edge (posts seeded to D1, images to R2). Note each in FRAMEWORKS.md. - MANUAL RUN: copy codeSplitter's data to the codesplitter names and deploy (#809) #825 (check first): the move of codeSplitter's data to the
codesplitternames looks done (thecodesplitterWorker is live and MANUAL RUN: codeSplitter release after the Alchemy queue-consumer patch (#1482) #1496 talks about the move as past), so confirm nothing is left and tick it. If not, follow the issue's steps in order:move-resources.ts, then--copy, thenrustybuns plan, thendeploy --allow-delete.
D. Agents get their own GitHub identity (do in order, when no worker is mid-task)
- MANUAL RUN: MAKE AGENT OFFICE AGENT AGAIN #942: replace
~/office-as-bot-754.shwith the fixed version in that issue (it stops if the token read fails or gh isn'tquinnscode-bot; the item iscodesplitter/github-bot, fieldtoken). - MANUAL RUN: restart Agent Office as quinnscode-bot (#754 step 2) #819: stop the office, start it with
zsh ~/office-as-bot-754.sh, hire a worker, checkgh api user --jq .loginprintsquinnscode-bot. Decide whether the bot token keeps theworkflowscope or is reissued withrepoonly. - MANUAL RUN: give agents their own GitHub identity, then require review #754: the worker opens the PR setting
.github/rulesets/main.jsonto 1 approval, code-owner review and last-push approval; after it merges, apply the same to the livemainruleset (this is also MANUAL RUN: apply the tag ruleset (.github/rulesets/tags.json) and decide on required review for main #1575 step 2). Never before the identity works, or every merge blocks.
The full steps and the fixed script are in each closed issue; follow the link.
Optional tidying
- Legal once-over of #/privacy: controller name (QNTBR), DPF/SCC transfer claims, D1 backup retention (MANUAL RUN: codeSplitters privacy contact email (1Password privacy/email) + deploy #499).
- Switch your user-scope
codesplittersMCP entry from a token to sign-in, delete the old "claude code" token, remove~/cs-oauth-test(MANUAL RUN: codeSplitters Executor hookup on the live site (OAuth sign-in) #418).
Bugs and polish found while testing: #628 #629 #630 #631 #659 #678 #693 (all fixed), #701 and #710 (open).
Rolls up: #1513 #1514 #1575 #798 #1611 #892 #1135 #1261 #1031 #1215 #1551 #873 #1642 #1581 #1204 #931 #916 #1496 #878 #865 #762 #845 #825 #942 #819 #754 #704 #706 #652 #653 #654 #662 #672 #635 #607 #574 #569 #559 #541 #499 #491 #457 #452 #442 #439 #423 #418 #417 #407 #350 #300 #284 #314 #182 #67
🤖 Generated with Claude Code
Activity
QuinnsCode commentedon Oct 11, 2026
Three more from the security audit: #652 (GitHub ruleset and tags), #653 (free Cloudflare protections), #654 (rotate the office password, clean the office shell, gh scopes).
[-]MANUAL RUN: the full hands-on checklist (rolls up all 16 manual-run issues)[/-][+]MANUAL RUN: the full hands-on checklist (rolls up every manual-run issue)[/+]QuinnsCode commentedon Oct 11, 2026
#653 closed: the workers.dev-only parts are done. The steps that need a custom domain moved to #722. #672 is half done (widget and secret exist; site key and deploy still to do).
QuinnsCode commentedon Oct 12, 2026
Reopened: #808 closed this by accident (its description said "Doesn't close #609", and GitHub read that as a closing keyword). Status at the top is updated for 12 Oct.
Docs: cut nine stale snapshot notes, untangle three AGENTS.md rules (#…
QuinnsCode commentedon Nov 9, 2026
Done, from the 2026-11-09 board scan (notes/audit/2026-11-09-*.json): The old roll-up checklist is retired: AGENTS.md says each manual run is its own issue and names 'the old #609 roll-up' as the thing not to do; bun run manual walks them now