github_apps bindings: key by full org/repo slug (short-name keys collide across orgs) #6

Closed
opened 2026-07-12 11:44:21 +00:00 by dan-claude-bot · 0 comments
dan-claude-bot commented 2026-07-12 11:44:21 +00:00 (Migrated from github.com)

Problem

bindings.github_apps is keyed by repo short name (cli.ts: bindings.github_apps[repoShort] where repoShort = orgRepo.split('/')[1]).

In the incubator deployment (D-219, 2026-07-12) two different repos share the short name incubator:

  • prod clones heavy-duty/incubator (canonical; operator-gated promotion PRs) via a GitHub App on the heavy-duty org
  • staging clones claude-hdb/incubator (the fork; agent integration) via a GitHub App on claude-hdb

One github_apps.incubator entry can only name one of them. Workaround until fixed: the state file carries whichever App the next cast apply needs — fine while only prod is cast-managed, breaks the day the staging environment joins the control plane.

Proposal

Resolve github_apps[orgRepo] (full slug) first, fall back to github_apps[repoShort] for backward compatibility:

github_apps:
  heavy-duty/incubator: hdb-coolify-prod
  claude-hdb/incubator: hdb-coolify-staging

One-line resolution change + schema stays z.record(z.string()); existing short-name state files keep working.

🤖 Generated with Claude Code

## Problem `bindings.github_apps` is keyed by repo **short name** (`cli.ts`: `bindings.github_apps[repoShort]` where `repoShort = orgRepo.split('/')[1]`). In the incubator deployment (D-219, 2026-07-12) two different repos share the short name `incubator`: - **prod** clones `heavy-duty/incubator` (canonical; operator-gated promotion PRs) via a GitHub App on the `heavy-duty` org - **staging** clones `claude-hdb/incubator` (the fork; agent integration) via a GitHub App on `claude-hdb` One `github_apps.incubator` entry can only name one of them. Workaround until fixed: the state file carries whichever App the next `cast apply` needs — fine while only prod is cast-managed, breaks the day the staging environment joins the control plane. ## Proposal Resolve `github_apps[orgRepo]` (full slug) first, fall back to `github_apps[repoShort]` for backward compatibility: ```yaml github_apps: heavy-duty/incubator: hdb-coolify-prod claude-hdb/incubator: hdb-coolify-staging ``` One-line resolution change + schema stays `z.record(z.string())`; existing short-name state files keep working. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/cast#6
No description provided.