Skip to content

Commit ece4b4b

Browse files
authored
Merge pull request #1180 from fullsend-ai/fullsend/code/issue-1142
fix(#1142): change DefaultAppSet from "fullsend" to "fullsend-ai"
2 parents 4ec1295 + 1398da4 commit ece4b4b

9 files changed

Lines changed: 30 additions & 26 deletions

File tree

docs/ADRs/0033-per-repo-installation-mode.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ Per-repo maps to these profiles:
217217
| **Self-managed** | Per-repo user deploys own mint + own Apps | `fullsend admin install owner/repo --mint-project=my-proj` creates everything |
218218

219219
**SaaS profile (default)**: The simplest path. Shared public Apps
220-
(`fullsend-triage`, `fullsend-coder`, `fullsend-review`) are pre-created
220+
(`fullsend-ai-triage`, `fullsend-ai-coder`, `fullsend-ai-review`) are pre-created
221221
by the platform operator and installed on the per-repo user's repo (requires
222222
org admin approval). The `mint-token` composite action exchanges a GitHub
223223
OIDC token for a scoped installation token — no PEMs, client IDs, or App
@@ -263,7 +263,7 @@ Shared flags (valid for both per-org and per-repo):
263263
- `--public` — create public unlisted GitHub Apps (for multi-org)
264264
- `--mint-provider` — token mint provider backend (default: `gcf`)
265265
- `--mint-source-dir` — path to mint function source directory
266-
- `--app-set` — app set name prefix for GitHub Apps (default: `fullsend`)
266+
- `--app-set` — app set name prefix for GitHub Apps (default: `fullsend-ai`)
267267

268268
Per-org-only flags (`--vendor-fullsend-binary`, `--enroll-all`, `--enroll-none`) are rejected when an `owner/repo` argument is given. All other flags are shared between per-org and per-repo modes — per-repo can create GitHub Apps, deploy a mint, and manage public apps when existing infrastructure is not found.
269269

docs/guides/admin/installation.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ The installer automatically provisions [Workload Identity Federation (WIF)](http
7373
| `--mint-provider` | `gcf` | Token mint provider backend |
7474
| `--mint-source-dir` | `internal/mint/` | Path to mint function source directory. When the path does not exist (e.g., running from a downloaded binary), the embedded source baked into the binary is used automatically |
7575
| `--public` | `false` | Create public unlisted GitHub Apps (for multi-org) |
76-
| `--app-set` | `fullsend` | App set name prefix for GitHub Apps (see [Custom app sets](#custom-app-sets)) |
76+
| `--app-set` | `fullsend-ai` | App set name prefix for GitHub Apps (see [Custom app sets](#custom-app-sets)) |
7777
| `--skip-app-setup` | `false` | Skip GitHub App creation (reuse existing apps) |
7878
| `--skip-mint-deploy` | `false` | Skip Cloud Function deployment, reuse existing mint URL |
7979
| `--skip-mint-check` | `false` | Skip mint validation, GCP provisioning, and app setup; requires `--mint-url` |
@@ -222,7 +222,7 @@ The uninstall preflight will prompt you to add the `delete_repo` scope if it is
222222
| Flag | Default | Description |
223223
|------|---------|-------------|
224224
| `--yolo` | `false` | Skip the confirmation prompt |
225-
| `--app-set` | `fullsend` | App set name prefix for GitHub Apps (used for fallback slug generation when config is unavailable) |
225+
| `--app-set` | `fullsend-ai` | App set name prefix for GitHub Apps (used for fallback slug generation when config is unavailable) |
226226

227227
---
228228

@@ -287,7 +287,7 @@ Per-repo accepts all `admin install` flags except `--vendor-fullsend-binary`, `-
287287

288288
## Custom app sets
289289

290-
By default, the installer creates GitHub Apps with the `fullsend` prefix (e.g., `fullsend-fullsend`, `fullsend-coder`, `fullsend-review`). Organizations that need their own set of apps — for example, to use org-specific permissions or to register multiple app sets on the same mint — can pass `--app-set` to override the prefix.
290+
By default, the installer creates GitHub Apps with the `fullsend-ai` prefix (e.g., `fullsend-ai-fullsend`, `fullsend-ai-coder`, `fullsend-ai-review`). Organizations that need their own set of apps — for example, to use org-specific permissions or to register multiple app sets on the same mint — can pass `--app-set` to override the prefix.
291291

292292
### Creating a custom app set
293293

@@ -313,6 +313,8 @@ fullsend admin install "$NEW_ORG" \
313313

314314
The installer detects that the public apps are already installed in the org (matched by app ID from the mint's `ROLE_APP_IDS`), copies PEM secrets to the new org's scoped key, and skips app creation. The `--app-set` value ensures convention-based slug lookups match the existing apps.
315315

316+
> **Migration note:** Prior to this change, the default app set was `fullsend`, producing slugs like `fullsend-coder`. The default is now `fullsend-ai`, producing `fullsend-ai-coder`. Existing installations that used the old default should pass `--app-set fullsend` explicitly to continue matching their existing GitHub App slugs, or re-install with the new default.
317+
316318
### Uninstalling a custom app set
317319

318320
When uninstalling an org that used a custom app set, pass the same `--app-set` value so the CLI generates the correct fallback slugs if the config repo is unavailable:

docs/guides/dev/cli-internals.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Both per-org and per-repo modes share the same core pipeline. The code follows t
7474
│ │ Phase 2: App setup (shared: runAppSetup) │ │
7575
│ │ │ │
7676
│ │ For each role in --agents: │ │
77-
│ │ - Create/reuse GitHub App ({org}-{role} or --app-set) │ │
77+
│ │ - Create/reuse GitHub App ({appSet}-{role} via --app-set)│ │
7878
│ │ - Download PEM key from App creation flow │ │
7979
│ │ - Store PEM in GCP Secret Manager │ │
8080
│ │ - Record App ID + Client ID │ │

e2e/admin/cleanup.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func cleanupStaleResources(ctx context.Context, client forge.Client, page playwr
5252
t.Logf("[cleanup] App %s not found or could not delete: %v", slug, delErr)
5353
}
5454

55-
newSlug := appsetup.AppSlug(appsetup.DefaultAppSet, role) // current convention: fullsend-triage, etc.
55+
newSlug := appsetup.AppSlug(appsetup.DefaultAppSet, role) // current convention: fullsend-ai-triage, etc.
5656
if newSlug != slug {
5757
t.Logf("[cleanup] Attempting to delete app %s (if it exists)", newSlug)
5858
if delErr := deleteAppViaPlaywright(page, newSlug, t.Logf, screenshotDir); delErr != nil {
@@ -77,7 +77,7 @@ func cleanupStaleResources(ctx context.Context, client forge.Client, page playwr
7777
for _, inst := range installations {
7878
// Safe: testOrg is a dedicated E2E org with no production apps.
7979
isStale := strings.HasPrefix(inst.AppSlug, testOrg+"-") || // v6: halfsend-*
80-
strings.HasPrefix(inst.AppSlug, appsetup.DefaultAppSet+"-") || // current: fullsend-*
80+
strings.HasPrefix(inst.AppSlug, appsetup.DefaultAppSet+"-") || // current: fullsend-ai-*
8181
strings.HasPrefix(inst.AppSlug, "fullsend-") // legacy: fullsend-triage, fullsend-halfsend-*, etc.
8282
if isStale {
8383
t.Logf("[cleanup] Deleting stale installed app: %s", inst.AppSlug)

internal/appsetup/appsetup.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -868,9 +868,11 @@ func (s *Setup) ensureInstalled(ctx context.Context, org, slug string) error {
868868
}
869869

870870
// DefaultAppSet is the default app set prefix for GitHub Apps.
871-
// Orgs that created apps under a different prefix (e.g., "fullsend-ai")
872-
// pass --app-set explicitly.
873-
const DefaultAppSet = "fullsend"
871+
// The official GitHub Apps maintained by the fullsend-ai organization use
872+
// the "fullsend-ai" prefix (fullsend-ai-fullsend, fullsend-ai-coder, etc.).
873+
// Orgs that created apps under a different prefix (e.g., "fullsend")
874+
// must pass --app-set explicitly.
875+
const DefaultAppSet = "fullsend-ai"
874876

875877
// AppSlug returns the conventional app slug for a given app set and role.
876878
func AppSlug(appSet, role string) string {

internal/appsetup/appsetup_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -756,10 +756,10 @@ func TestSetup_CorrectPermissions_NoError(t *testing.T) {
756756
func TestSetup_DefaultAppSet(t *testing.T) {
757757
client := &forge.FakeClient{
758758
Installations: []forge.Installation{
759-
{ID: 100, AppID: 10, AppSlug: "fullsend-coder"},
759+
{ID: 100, AppID: 10, AppSlug: "fullsend-ai-coder"},
760760
},
761761
AppClientIDs: map[string]string{
762-
"fullsend-coder": "Iv1.default123",
762+
"fullsend-ai-coder": "Iv1.default123",
763763
},
764764
}
765765
printer := ui.New(&discardWriter{})
@@ -769,7 +769,7 @@ func TestSetup_DefaultAppSet(t *testing.T) {
769769

770770
creds, err := s.Run(context.Background(), "myorg", "coder")
771771
require.NoError(t, err)
772-
assert.Equal(t, "fullsend-coder", creds.Slug)
772+
assert.Equal(t, "fullsend-ai-coder", creds.Slug)
773773
assert.Equal(t, "Iv1.default123", creds.ClientID)
774774
}
775775

internal/cli/admin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ Inference authentication:
530530
cmd.Flags().BoolVar(&mintSkipDeploy, "skip-mint-deploy", false, "skip Cloud Function deployment, reuse existing mint URL")
531531
cmd.Flags().BoolVar(&skipMintCheck, "skip-mint-check", false, "skip mint validation, GCP provisioning, and app setup; requires --mint-url")
532532
cmd.Flags().BoolVar(&publicApps, "public", false, "create public (unlisted) GitHub Apps installable by other orgs")
533-
cmd.Flags().StringVar(&appSet, "app-set", appsetup.DefaultAppSet, "app set name prefix for GitHub Apps (e.g., fullsend-ai creates fullsend-ai-fullsend, fullsend-ai-coder)")
533+
cmd.Flags().StringVar(&appSet, "app-set", appsetup.DefaultAppSet, "app set name prefix for GitHub Apps (e.g., myorg creates myorg-fullsend, myorg-coder)")
534534
// Shared flags.
535535
cmd.Flags().StringVar(&mintURL, "mint-url", "", "token mint URL for OIDC token exchange")
536536

internal/cli/admin_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func TestInstallCmd_Flags(t *testing.T) {
113113

114114
appSetFlag := cmd.Flags().Lookup("app-set")
115115
require.NotNil(t, appSetFlag, "expected --app-set flag")
116-
assert.Equal(t, "fullsend", appSetFlag.DefValue)
116+
assert.Equal(t, "fullsend-ai", appSetFlag.DefValue)
117117
}
118118

119119
func TestInstallCmd_InvalidAppSet(t *testing.T) {
@@ -302,7 +302,7 @@ func TestUninstallCmd_Flags(t *testing.T) {
302302

303303
appSetFlag := cmd.Flags().Lookup("app-set")
304304
require.NotNil(t, appSetFlag, "expected --app-set flag")
305-
assert.Equal(t, "fullsend", appSetFlag.DefValue)
305+
assert.Equal(t, "fullsend-ai", appSetFlag.DefValue)
306306
}
307307

308308
func TestAnalyzeCmd_RequiresOrg(t *testing.T) {
@@ -1524,7 +1524,7 @@ func TestFilterSlugsByAppSet(t *testing.T) {
15241524
want: map[string]string{},
15251525
},
15261526
{
1527-
name: "default app-set does not match longer prefix",
1527+
name: "shorter prefix does not match longer slug",
15281528
appSet: "fullsend",
15291529
slugs: map[string]string{"coder": "fullsend-ai-coder"},
15301530
want: map[string]string{},

internal/forge/github/types_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,19 @@ func TestAgentAppConfig_UnknownRole(t *testing.T) {
114114
}
115115

116116
func TestAgentAppConfig_CustomAppSet(t *testing.T) {
117-
cfg := AgentAppConfig("myorg", "coder", "fullsend-ai")
118-
assert.Equal(t, "fullsend-ai-coder", cfg.Name)
117+
cfg := AgentAppConfig("myorg", "coder", "my-custom")
118+
assert.Equal(t, "my-custom-coder", cfg.Name)
119119

120-
cfg = AgentAppConfig("myorg", "fullsend", "fullsend-ai")
121-
assert.Equal(t, "fullsend-ai-fullsend", cfg.Name)
120+
cfg = AgentAppConfig("myorg", "fullsend", "my-custom")
121+
assert.Equal(t, "my-custom-fullsend", cfg.Name)
122122
}
123123

124124
func TestAgentAppConfig_DefaultAppSet(t *testing.T) {
125-
cfg := AgentAppConfig("myorg", "coder", "fullsend")
126-
assert.Equal(t, "fullsend-coder", cfg.Name)
125+
cfg := AgentAppConfig("myorg", "coder", "fullsend-ai")
126+
assert.Equal(t, "fullsend-ai-coder", cfg.Name)
127127

128-
cfg = AgentAppConfig("myorg", "fullsend", "fullsend")
129-
assert.Equal(t, "fullsend-fullsend", cfg.Name)
128+
cfg = AgentAppConfig("myorg", "fullsend", "fullsend-ai")
129+
assert.Equal(t, "fullsend-ai-fullsend", cfg.Name)
130130
}
131131

132132
func TestAppConfig_RedirectURL_InJSON(t *testing.T) {

0 commit comments

Comments
 (0)