Skip to content

v2 catalogs: implement official and remote catalog management with write gates #229

Description

@shpoont

Parent: #214
Project record: #209 and docs/internal/project/v2-reset-execution-record.md
Depends on: #227 catalog trust/origin model and #228 official-catalog discovery baseline.

Purpose

Implement official-catalog download/update behavior and remote catalog lifecycle only after trust and origin rules are accepted and after #228 establishes the official-catalog discovery baseline.

This issue owns the normal extension path beyond the current official catalog metadata:

  • updating the preconfigured official catalog from its remote origin;
  • adding additional remote catalogs using Homebrew-like syntax such as catalog add <owner>/<repo>;
  • listing, updating, disabling, and removing additional remote catalogs;
  • enforcing write-authority gates before recipes from updated or additional remote catalog data can write live app settings.

Risk tier

Tier 2.

This work introduces remote origin/trust/update behavior and can affect which recipes are visible before write-capable workflows. Remote or updated catalog data must not gain live-write authority without explicit gates.

Scope

  • Update the preconfigured official catalog from its remote origin, with identity/integrity/cache rules.
  • Add, list, update, disable, and remove additional remote catalogs.
  • Surface recipe origin, catalog identity, update metadata, and whether data comes from current or updated catalog data.
  • Enforce write-authority gates before updated official recipes or additional remote recipes can write live app settings.
  • Show affected managed apps/settings when a catalog is disabled, removed, blocked, or updated.

Non-goals

  • No local catalog lifecycle in the normal v2 user path.
  • No internal/generated public pseudo-app path.
  • No live settings writes merely because a catalog is added, updated, or enabled.
  • No accepting remote recipe command execution beyond the catalog trust/command-boundary model.

Acceptance criteria

  • Depends on accepted catalog/tap trust and origin model, updated for the official catalog metadata model.
  • Official-catalog download/update behavior is explicit, cache/offline behavior is safe, and failure leaves the last successful local catalog version usable.
  • Users can add, list, update, disable, and remove additional remote catalogs.
  • Users can see affected recipes/apps when a catalog changes state.
  • Remote or updated catalog writes are blocked until origin/trust/write authority is explicit.
  • Tests cover official-catalog update fixtures, additional remote catalog fixtures, disable/remove behavior, and write gating.

Evidence

Split from #214 by the #219 audit: docs/internal/project/v2-reset-audit-issue-219.md.
#228 recontract moved the default support model to a preconfigured official catalog with concise version/last-updated state; #229 is the download/update/add/remove/write-gate follow-up.

Project Execution Standards alignment

Latest standard read for this update: /Users/shpoont/Work/shpoont/project-execution-standards/project-execution-standard.md, last-updated 2026-06-29.

Delivery type: Tier 2 delivery work after #228 discovery baseline is accepted.

Documentation/design-first requirements before implementation:

  • Draft user-facing docs or equivalent usage guide for official-catalog update and remote catalog lifecycle.
  • Runnable/replayable CLI mock or fixture transcript covering catalog list, update behavior, add/remove/disable flows, affected-app reporting, offline/cache failure paths, and write-gate messaging.
  • Internal model/control review for origin identity, integrity/cache, stale data, disable/remove orphan behavior, and write-authority transitions.

Implementation-start gate requirements:

Real-result verification required:

  • Targeted catalog lifecycle tests, fixture remote catalogs, offline/cache failure tests, and write-gate tests.
  • go test ./... unless a narrower set is justified in the PR evidence.
  • Temp-home/fixture CLI transcripts proving real output matches accepted docs/mock.

Change rule:

  • Changes to remote syntax, trust model, cache/integrity behavior, write authority, or remove/disable/orphan behavior are managed changes requiring Project Owner decision before implementation continues.

Acceptance / closure rule:

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions