OUT-4015: gate Client Home Actions dropdown on app install published status - #230
Merged
Conversation
Add an AppInstallStatus enum (draft/published) and expose the new `status` field on AppInstallsDataSchema, surfaced by the /installs endpoint via POR-21837. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Only surface installs with status = published in getActionableInstalls, the single choke point feeding both the client "Your Actions" card and the editor Actions toggle list. App-builder drafts no longer appear until published. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Assert getActionableInstalls hides only explicit drafts while missing/null status is treated as non-draft and shown, matching the status != draft gate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryAdds app-install lifecycle status validation and excludes explicit app-builder drafts from the shared actionable-installs pipeline.
Confidence Score: 5/5The PR appears safe to merge with no concrete blocking or independently actionable non-blocking issue identified. The new guard excludes explicit drafts before notification-settings fan-out, preserves installs with missing status as intended, and is covered across the relevant eligibility cases. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[GET /api/installed-apps] --> B[Fetch app installs]
B --> C{Eligible install?}
C -->|Disabled, internal, legacy draft, tasks app, or status=draft| D[Exclude]
C -->|Otherwise| E[Fetch notification settings]
E --> F{Complete registered action label?}
F -->|No| D
F -->|Yes| G[Return in Your Actions]
Reviews (1): Last reviewed commit: "test(OUT-4015): cover non-draft install ..." | Re-trigger Greptile |
arpandhakal
approved these changes
Aug 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
AppInstallStatusenum (draft/published) and expose the newstatusfield onAppInstallsDataSchema— surfaced on the/installsendpoint by POR-21837.InstalledAppsService.getActionableInstalls()onstatus !== AppInstallStatus.DRAFT, so app-builder draft apps no longer appear in the Client Home "Your Actions" dropdown. This is the single choke point feeding both the client-facing card and the editor's Actions toggle list, so drafts drop off both surfaces.draftstatus is hidden; missing/nullstatus is treated as non-draft and shown (avoids regressing installs without a status).Testing Criteria
tests/unit/installed-apps.service.test.tscovering:undefined/nullstatus is shown (denylist)pnpm vitest run tests/unit→ 28 passed ·pnpm typecheckclean ·pnpm lintclean.Notes
statusto the app-install model / installs endpoint. Frontend should not deploy ahead of that backend change.statusis populated for non-app-builder installs (legacy marketplace/native Studio apps) as well, not just newly created app-builder installs.Impact & Surface Area of Change
GET /api/installed-apps. Built-in rows (Invoices, Contracts, Tasks, Forms) are unaffected.statusis parsed via a strictz.enumon the whole installs array — a future third status value would fail the list parse; onlydraft/publishedexist today.