Skip to content

Proposal: establish the Community Catalog foundation #249

Description

@kattsushi

Context

In your Stack Effect write-up, you mentioned opening the module registry so the community can contribute targets and modules.

I've been looking at what it would take to build on that direction without adding another architecture branch or a parallel scaffolding system. Before implementing anything, I'd like to check whether the boundary below matches what you had in mind for Community Catalogs.

What seems to be missing today

The existing target, module, and contribution models already cover most of the interesting behavior. Blueprint and Plan also work from catalog definitions rather than knowing about individual modules.

The closed part appears to be catalog assembly:

  • CatalogService is built from the fixed target and module registries.
  • Adding a module still requires changing the core registry aggregation.
  • Several service layers provide the built-in catalog internally, so supplying a composed catalog at only one boundary may not reach the full pipeline.
  • There is no defined collision policy for independently authored definitions.

A possible first step

My suggestion is to start with explicitly imported catalog fragments rather than package discovery or dynamic plugins.

A host application could import a trusted fragment containing declarative target and module definitions, combine it with the built-in catalog, validate the result, and provide that catalog to the existing services.

For the first slice, I would keep the rules intentionally strict:

  • Composition is additive. Duplicate target kinds or module IDs are rejected.
  • The complete catalog is validated before it can be used.
  • Fragment definitions use the existing declarative contribution model.
  • Fragment definitions cannot add Finalize scripts yet.
  • With no fragments, Stack Effect behaves exactly as it does today.

A small synthetic fragment could prove that a contributed target, a module for an existing target, or both can reach one real Selection -> Blueprint -> Plan path without editing the built-in registries.

This would only establish the composition boundary. It would not decide how catalogs are published, discovered, installed, trusted, or updated.

Feedback I'd appreciate

  1. Does explicit local import feel like a useful first step toward the Community Catalog you described?
  2. Would you prefer the initial public surface to include a catalog fragment plus composition/validation factory, or should it begin by exposing only the existing definition contracts?
  3. Does additive-only composition with duplicate rejection fit the intended model?
  4. Should Finalize scripts remain built-in-only until there is a clearer trust model?
  5. Should catalog propagation through service layers be addressed in this slice, or shaped alongside Deepen the Plan module and seal planning internals #180 and Separate scaffold workflow orchestration from CLI interaction #181?

If this is close to the direction you have in mind, I can turn it into a smaller implementation proposal and validate it with a minimal fragment before touching broader distribution concerns.

Not part of this proposal

  • A marketplace or remote registry.
  • Package discovery or configuration-driven loading.
  • Dynamic plugins or arbitrary code execution.
  • Version resolution, signatures, sandboxing, or provenance UI.
  • Overrides of built-in targets or modules.
  • Custom target layouts or new contribution kinds.
  • Any DDD, deployment, or other feature-specific catalog.

Related context

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions