Playbook: Submitting Cross-Project Infra Task Requests
Audience: Claude agents in non-p24-infra repos (et-operational-platform, Art-Agency, brandpilot, radekkonarski-personal-brand, etc.) that need infrastructure work done. For how requests are processed, see
docs/playbooks/infra-task-executor.md.
When to use
Use this system when your session needs infrastructure work it cannot do itself:
- Any server-side change (restart, deploy, config edit, credential rotation)
- Any Supabase admin operation (schema change, RLS update, user grant)
- Any DNS or Cloudflare change
- Spinning up background workers for feature implementation in any repo
Do NOT use for:
- Code edits and PRs in the current repo
- Vercel env var changes (use Vercel dashboard or
vercel envCLI) - Supabase migrations in the current repo (use
supabase db push)
Before you submit — create a tracking issue in your own repo
Every infra request needs a Return-To issue in the originating repo. This is what p24-infra
uses to post its callback comment and remove the waiting-infra label when the work is done.
Before submitting the infra request:
- If an issue already exists (e.g. a feature tracking issue like
#27) — use it as Return-To. - If no issue exists — create one first in your own repo:
gh issue create `
--repo radieu/<your-repo> `
--title "<short description of what you're waiting on infra for>" `
--label "waiting-infra" `
--body "Tracking issue for infra work. Callback from radieu/p24-infra will be posted here."- Add the
waiting-infralabel to the issue (signals the pipeline it’s blocked on infra):
# Create the label if it doesn't exist yet in the repo
gh label create "waiting-infra" --color "0075ca" --description "Blocked on infra work in radieu/p24-infra" --repo radieu/<your-repo>
# Add to the issue
gh issue edit <N> --repo radieu/<your-repo> --add-label "waiting-infra"- Use that issue number as
Return-To: radieu/<your-repo>#<N>in the infra request body.
When p24-infra completes the work it will:
- Post a callback comment on your Return-To issue
- Remove the
waiting-infralabel so the pipeline knows it can proceed
Never use Return-To: none unless there is genuinely no downstream work waiting — workers
flag none for human review to prevent silently lost results.
How to submit
Using the /request-infra skill (preferred)
/request-infra
The skill guides you through confirming the Return-To reference, choosing a priority, writing a clear task description, and submitting the issue.
Manual submission
gh issue create `
--repo radieu/p24-infra `
--title "[infra-task] <short description>" `
--label "infra-task-request" `
--body @"
Return-To: radieu/<your-repo>#<your-issue-number>
Priority: normal
E2E/Browser: no
## Task description
<Specific description of exactly what needs to be done — include service names,
container names, file paths, or SQL statements as appropriate. Never include
credential values.>
"@Priority values: normal (default, processed in order) or urgent (processed first, use
sparingly — for outages and data-loss risk only).
Issue body format (required)
Every infra-task-request issue body must include these lines at the top:
Return-To: radieu/<repo>#<issue-number>
Priority: normal|urgent
E2E/Browser: yes|no
## Task description
<specific description of what needs to be done>
Rules:
Return-Tomust reference a real issue in the originating repo (e.g.radieu/et-operational-platform#742). UseReturn-To: noneonly if there is genuinely no issue to callback — workers flagnonefor human review to prevent lost results.E2E/Browser— required field. Set toyesif the task includes running end-to-end tests or a browser (Playwright, Cypress, Puppeteer, headed Chrome, etc.). Set tonootherwise. The dispatcher uses this to classify worker weight:yes→ heavy client (needs display/GPU resources, longer timeout);no→ light client (CLI/API-only, standard timeout). Omitting this field defaults tonobut logs a warning.- Never include credential values, passwords, API keys, or tokens in the issue body. Reference
variable names only (e.g.
rotate SUPABASE_SERVICE_KEY in secrets/brandpilot.env.sops). - For destructive operations — any task containing the words
delete,drop,wipe,remove,truncate, orreset— the worker will automatically add ahuman-actionlabel and pause before executing. A human must review the issue and removehuman-actionto unblock.
What to expect after submission
Your issue is picked up by the p24-infra worker infrastructure within ~2 minutes and executed
autonomously. When done, the worker posts a callback comment on your Return-To issue and removes
the waiting-infra label.
Track progress via GH labels on the p24-infra issue:
| Label | Meaning |
|---|---|
infra-task-request | Submitted, awaiting pickup |
wip | Worker running |
human-action | Worker paused — human review needed (see below) |
infra-done | Task complete, callback posted |
What to do while waiting
Do not block on the infra task. After submitting:
- Continue with all other tasks that do not depend on the infra result.
- Note the
waiting-infralabel on your Return-To issue — it will be removed when the callback arrives. - Watch the Return-To issue for a new comment from the p24-infra worker.
- Once the callback comment arrives and
waiting-infrais removed, resume dependent work.
Do not poll the p24-infra issue repeatedly — one status check after ~5 minutes is enough. The callback is the signal.
If the task gets stuck or human-action is added
You do not have the access to investigate or unblock the worker yourself. Post a comment on the
p24-infra issue describing the situation and mention @radieu so a p24-infra admin picks it up.
If human-action was added because of a destructive keyword:
- Read the comment the worker posted — it explains what triggered the gate.
- If the operation is intentional: add a comment confirming approval (
Approved — proceed), then ask a p24-infra admin to removehuman-actionand re-addinfra-task-request. - If the description needs clarification: edit the issue body, then ask an admin to re-queue.
Multi-step tasks — Orchestrator pattern
When a task has internal dependencies (step B needs step A, but step C is independent of step B), submit one orchestrator issue describing the full dependency graph — not multiple separate issues.
Why not multiple issues? The worker queue has no guaranteed ordering. Submitting 4 issues means up to 4 workers pick them up in unknown order — sequencing is broken. One orchestrator issue lets a single worker manage parallelism and sequencing correctly.
Format the dependency graph in the issue body:
## Dependency graph
Parallel (wave 1 — no mutual dependencies):
[A] Supabase: run migrations user_storage + user_devices with RLS
[B] Wasabi: create IAM policy wa-per-user-provisioning
Sequential (wave 2 — after A completes):
[C] CF Worker wa-app-api: wrangler deploy (needs tables from A to write to)
Sequential (wave 3 — after C completes):
[D] Vercel project p24-wa-a: create project, set root=web/, add env vars
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
NEXT_PUBLIC_API_URL=<CF Worker URL from step C>
## Tasks
### [A] Supabase migrations
<specific SQL / migration file path>
### [B] Wasabi IAM
<policy JSON or reference to file in repo>
### [C] CF Worker deploy
<wrangler deploy command, secrets to inject>
### [D] Vercel project
<vercel project link command, env vars to set>
When to use multiple issues instead:
- Tasks are genuinely unrelated (different services, no data flow between them)
- Each task could succeed or fail independently without affecting the others
- You want separate callbacks per task
Prevention
- Always include a specific Return-To. Lost callbacks mean dependent work is never resumed.
- Be specific. Name exact container names, service names, file paths, table names.
Vague tasks always get
human-action-gated. - Avoid unnecessary destructive-op keywords. If the operation is additive (restart,
reload, add row, update config), do not use
deleteorremoveunless you mean it. - One issue per logical operation group. For dependent multi-step work use the Orchestrator pattern above. For unrelated operations (different services, independent outcomes) submit separate issues. Never mix both patterns — a single issue covering unrelated operations that independently succeed/fail makes partial-failure handling impossible.
- Do not submit the same task twice — check the p24-infra issue list for your Return-To first. Duplicate requests will both execute.
Related
/request-infraskill —~/.claude/commands/request-infra.md- Executor playbook (p24-infra admin):
docs/playbooks/infra-task-executor.md