Skip to content

Vocabulary: decide where the catalog lives and its format #220

Closed

Description

@Kinflou

Part of #219, proposal ComlineProject/docs#162 (The catalog → Where it lives).

Decide where the vocabulary lives and in what format, before anything consumes it. The proposal's options:

Its own repository In core In docs
Dependency order sits below core, runtime and the generators no new edges, but runtime would pin core just for names needs a published artifact
Cost one more repository, rev and CI lowest low, but odd for code to depend on

The proposal suggests its own repository, holding CUE sources (as the conformance specs already use) and generated outputs: a no_std Rust crate, a TypeScript module, and JSON. The generated outputs are checked in CI, the way comline.h is.

Also to settle here:

Leanings (discussion of 2026-11-09)

  • Home: a spec repository. Third parties never edit the catalog; they declare their own entries in config.idp. What they need is what they implement against, which is the spec. So the catalog goes in one repository with:

    • the conformance specs (profile.cue, features.json) and vectors, moved out of runtime/conformance;
    • compiler conformance cases;
    • generated outputs (a no_std Rust crate, a TypeScript module, JSON).

    It's versioned as the spec. Everyone, this project included, pins it like a third party would. The Rust conformance engine and reference stay in runtime.

  • Format: CUE as the source.

  • Relations: plain references only (establishes, keeps, gives up, applies to, scopes). Logic that compares values (fit) stays in code that reads the catalog.

Next: create the spec repository (name to choose), then seed it from profile.cue, core's Guarantee and the official encodings.

Settled:

  • The repository is named specification.
  • Versioning: the spec version and the IR format version stay independent.

Activity

  1. Kinflou commented on Nov 9, 2026

    @Kinflou
    MemberAuthor

    Stage 1 done. ComlineProject/specification is set up with the conformance corpus (specs, vectors, profiles, benches, features.json) extracted from runtime/conformance at 2ac8480, with its history. It has a README (the spec, moved from the corpus's README), a VERSION file (0.10) and CI (specs/check.sh --check, green). It's the authority from now on.

    Next, stage 2: runtime, comline-typescript, cli, the Observatory and core repoint to it (vendored at a pinned rev, checked in CI). Stage 3 adds the catalog.

  2. Kinflou commented on Nov 9, 2026

    @Kinflou
    MemberAuthor

    Stage 2: the consumers now read the corpus from specification.

    • runtime#113 (merged): vendored in runtime/conformance/spec/, pinned by spec/REV and checked in CI. SPEC_VERSION is read from the spec's VERSION.
    • observatory#20 (merged): feature titles come from specification.
    • cli#144 (merged): --corpus docs and hints.
    • Cite the specification for the official profiles #226 (merged): profile citations.
    • comline-typescript#153 (open): vendors from specification (SPEC_REV), with the core at runtime 0dffa7a.

    Next, stage 3: the catalog.

  3. Kinflou commented on Nov 9, 2026

    @Kinflou
    MemberAuthor

    Stage 2 done: comline-typescript#153 merged, so every consumer now vendors specification.

    Stage 3: ComlineProject/specification#1 adds the catalog. It covers the guarantees, the facts and their values, the official encodings with their aliases and frozen spellings, the features, and sets computed from them. profile.cue and features.json are now derived from it, and catalog/gen/catalog.json exports it. CI passes. When runtime re-vendors it, conformance/check.sh must run cue from inside spec/, because the CUE module moved to the repository root.

  4. Kinflou commented on Nov 9, 2026

    @Kinflou
    MemberAuthor

    Stage 3 done: specification#1 (the catalog) merged at f219852, and runtime#114 vendors it (merged, a2d6fe5). Next in the proposal's rollout is core reading the catalog: guarantees, facts and their values, aliases, and the official encodings.

  5. Kinflou commented on Nov 12, 2026

    @Kinflou
    MemberAuthor

    Decided and done:

    • Home: the ComlineProject/specification repository.
    • Format: CUE source, with generated outputs (the comline-catalog Rust crate and catalog/gen/catalog.json).
    • Relations: plain references only.
    • Versioning: the spec version and the IR format version stay independent.

    Stages 1–3 are merged (specification#1, runtime#113/#114, observatory#20, cli#144, comline-typescript#153), and core pins comline-catalog from the spec. Guarantee scopes are in catalog/guarantees.cue, which unblocks #222.

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

    P2SoondesignNeeds a design decision

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions