Skip to content

Narrow catalog public metadata to durable consumer contracts before 1.0 #255

Description

@Teakowa

Parent: #252

Goal

Keep the 1.x catalog API focused on canonical Workshop facts and consumer-facing queries instead of freezing implementation-oriented semantic metadata that consumers do not need to manipulate directly.

Context

CatalogEntry currently exposes several public fields that describe signatures, defaults, semantic types, parameter domains, and coercion behavior. Some of these are durable catalog facts; others may be internal inputs used by typed Rust parsing/validation behavior.

The current architecture contract distinguishes large declarative Workshop facts from behavior/invariants that belong in typed Rust code, and explicitly treats existing metadata-driven semantics as implementation reality to audit rather than precedent for expanding the model.

If implementation-oriented metadata remains directly public in 1.0, moving semantic behavior behind typed APIs later can become an unnecessary breaking change. The goal is not to hide useful data, but to freeze only the contract that real consumers need.

Scope

  • Inventory the public Catalog, CatalogEntry, signature/domain/default/type/coercion fields and related public accessors against current consumers.
  • Classify each exposed field as a durable canonical Workshop fact, a useful stable query, or an internal semantic implementation detail.
  • Keep direct public data access where consumers genuinely need the fact as data.
  • Prefer stable query methods over exposing representation details when consumers need an answer rather than the metadata encoding used to derive it.
  • Move implementation-only semantic metadata behind the crate boundary when no supported consumer contract requires direct access.
  • Preserve deterministic catalog identity, locale resolution, canonical IDs, signatures/domains that are genuine public facts, and existing parser/validator correctness.

Non-goals

  • Converting all catalog data into typed Rust code.
  • Hiding canonical Workshop facts merely to minimize item count.
  • Building a new schema/DSL for catalog semantics.
  • Redesigning parser/validator behavior unrelated to the public surface.
  • Removing dynamic catalog queries needed by tooling consumers.

Acceptance criteria

  • Current WrightKit consumers of public catalog fields are identified from live code before fields are narrowed.
  • Every directly exposed catalog metadata field in the 1.0 candidate has a demonstrated durable consumer/data contract.
  • Semantic implementation details that consumers only need as behavior are accessed through stable behavior/query APIs or kept private.
  • Canonical IDs, locale lookup, relevant signature/domain facts, catalog identity/version/digest, and supported consumer queries remain available.
  • Parser, validation, localization, typed constructors, and real-project tests pass without weakened semantics.
  • No new metadata interpreter or semantic DSL is introduced.

Dependencies / ownership

  • Parent: Freeze the workshop-rs public API for 1.0 #252.
  • Owner: workshop-rs catalog and Workshop semantic behavior.
  • Downstream repositories may require migration if they currently inspect representation details directly; those migrations remain owned by the consumers.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions