Skip to content

chore(seed): project first-party apps into Installable collection (closes #445)#446

Closed
samxu01 wants to merge 1 commit into
mainfrom
worktree-sprint-2026-05-24-installable-projection
Closed

chore(seed): project first-party apps into Installable collection (closes #445)#446
samxu01 wants to merge 1 commit into
mainfrom
worktree-sprint-2026-05-24-installable-projection

Conversation

@samxu01
Copy link
Copy Markdown
Contributor

@samxu01 samxu01 commented May 24, 2026

Summary

  • Extend backend/scripts/seed-native-agents.ts so each FIRST_PARTY_APPS entry also upserts an Installable row alongside its existing AgentRegistry row.
  • This unblocks PR feat(v2-marketplace): manifest detail page at /v2/marketplace/:installableId #439's v2 marketplace detail page (/v2/marketplace/:installableId) for first-party apps like pod-welcomer / task-clerk / pod-summarizer. Before this, the installables collection was empty on dev and the detail page only ever showed the not-found state.

Shape

{
  installableId: 'pod-welcomer',
  name: 'Pod Welcomer',
  description: '...',
  version: '1.0.0',
  kind: 'app',
  source: 'builtin',
  scope: 'instance',
  status: 'active',
  components: [{ name, type: 'agent', runtime: 'native', persona: { displayName } }],
}

source: 'builtin' is intentional — /api/marketplace/browse filters source: 'marketplace' only (community-published items). First-party apps appear via the Agent Hub or direct URL, not the marketplace browse page.

Test plan

  • Diff is structurally identical to the existing AgentRegistry upsert pattern in the same function, idempotent on every server boot.
  • CI: backend type-check + unit suite passes
  • Post-Deploy Dev: kubectl exec -n commonly-dev deploy/backend -- node -e 'mongo query installables count' shows 3 rows; GET /api/marketplace/manifests/pod-welcomer returns a populated body; /v2/marketplace/pod-welcomer renders identity/description on app-dev.commonly.me.

Closes #445.

🤖 Generated with Claude Code

Extends `seed-native-agents.ts` so each FIRST_PARTY_APPS entry also
upserts an Installable row alongside its AgentRegistry row. Marketplace
detail page (PR #439) reads from this collection — without the
projection, no first-party app could be resolved by direct URL.

Source set to `builtin`, kind `app`, scope `instance`. Browse continues
to filter `source: 'marketplace'` (the marketplace page is for
community-published items only by design); detail page reads any source.

Idempotent: subsequent boots refresh display metadata via $set without
touching stats.

Closes #445.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
samxu01 added a commit that referenced this pull request May 24, 2026
…, closes #445)

Extends seed-native-agents.ts so each FIRST_PARTY_APPS entry also upserts an
Installable row (source='builtin', kind='app', scope='instance') alongside
its existing AgentRegistry row. Unblocks PR #439 v2 marketplace detail page —
without the projection, /v2/marketplace/:installableId could never resolve
a first-party app like pod-welcomer / task-clerk / pod-summarizer by direct
URL.

Browse continues to filter source='marketplace' (community-published items
only); detail page reads any source.

Idempotent — subsequent boots refresh display metadata via \$set without
touching stats.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@samxu01
Copy link
Copy Markdown
Contributor Author

samxu01 commented May 24, 2026

Squash-merged to main as 24a5fe8 per feedback-pr-merge-pattern.

@samxu01 samxu01 closed this May 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dev cluster has no marketplace manifests — browse/detail pages render empty

1 participant