Skip to content

design: per-lexicon independent versioning & publish (republish one lexicon without a monorepo release) #528

Description

@lex00

Follow-up to #523. The spec-upgrade epic can open a validated PR that bumps a single lexicon, but "republish as ready" is blocked by the monorepo-wide release model. This issue scopes decoupling publish so one lexicon can ship independently.

Current state

  • All packages are version-locked (packages/core, every lexicons/* at 0.13.1); root is a 0.0.0 workspace.
  • Publish is triggered by a single chant-v* tag; publish.yml runs every lexicon's prepack then publishes each.
  • Enabler already present: each publish step is per-package idempotent — it compares the local version to the npm-published version and skips when equal ([ "$V" = "$P" ] && skip || npm publish --provenance). So if only one package's version changed, only that one publishes today. The missing piece is independent versioning and a trigger that isn't one monorepo tag.

Problem

A lexicon spec upgrade (#523) that validates clean should be able to bump and republish just that lexicon on its own cadence, without forcing a lockstep bump of core and the other nine lexicons.

Options

  1. Independent semver per package (changesets-style). Each package versions on its own; a merged upgrade PR bumps only its lexicon; publish runs on merge/tag and the existing skip-if-unchanged logic ships only what moved. Needs a compatibility story between lexicon versions and @intentius/chant core (peer range, not exact pin).
  2. Per-lexicon release tags. e.g. chant-lexicon-aws-v* triggers a publish of just that package. Minimal change to the model; more tags to manage.
  3. Keep lockstep, batch upgrades. Do nothing here; upgrade PRs (epic: scheduled lexicon spec upgrades (auto-PR from latest upstream specs) #523) merge and ride the next monorepo release. Simplest; the default if this is deprioritized.

Considerations

  • Dependency ranges. For a lexicon to move independently, consumers must depend on it (and it on core) via a compatible range, not an exact pinned version. Audit dependencies / peerDependencies across packages.
  • Compatibility matrix. Independent versions raise "does lexicon-aws@X work with chant@Y?" — needs a documented peer range and CI that tests the supported combinations.
  • Provenance & trusted publisher. Preserve npm provenance and the trusted-publisher setup already in publish.yml.

Acceptance criteria (if pursued)

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions