Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, this project adheres to Semantic Versioning, commits follow Conventional Commits, and this changelog is generated by Structured Changelog.

Unreleased

v0.1.0 - 2026-10-22

Highlights

  • A Go-first, machine-readable description of a product's pricing and packaging: tiers, plans with prices, features (switches and ordered levels), limits (with periods and fair use), one-time products, a marketplace fee, and the application access each tier grants
  • Safe by construction: an unknown plan is the default plan, an unset feature is off, an unset limit is zero, and unlimited is its own field
  • Validation with stable error codes (E001 to E013) that reports every error at once, and lint warnings (W001 to W006) for review
  • Projections computed from the spec: a pricing view, a tier-to-entitlement map, and a diff that marks what affects existing customers

Added

  • pricingspec types: Spec, Tier, Feature, Limit, Plan, Price, FeatureValue, LimitValue, Product, Marketplace and TierGrant, following the static-type profile with no schema composition (6a57f7b)
  • schema/pricing.schema.json generated from the Go types and embedded, with a test that fails when it is out of date (976d42f)
  • Load and Parse decode strictly, reject unknown fields and unknown format versions, and return a *ValidationError listing every error rule broken (E001 to E013) with a path (1bb1795)
  • Spec.Lint reports the review warnings W001 to W006: unlimited defaults without fair use, a higher tier priced under a lower one, unused features and limits, tiers without grants, level names that read as options, and annual prices that are no saving (811bdb2)
  • Helpers PlanOrDefault, Has, Level, AtLeast, Allowance, Check (allowed, warn or refuse), GrantsFor and TierRank; an unknown identifier never grants more (deae5dc)
  • PricingView orders plans by tier and lines features and limits up across them as data for a page; EntitlementMap lists each tier's grants in rank order (8f39a8e)
  • Diff compares two specs in a stable order and marks price increases, lowered allowances, removed features, lowered levels, removed grants, higher fees and removed plans as affecting existing customers (8ceb1d5)
  • Examples of a subscription tool and a marketplace, both invented, kept valid and free of warnings by tests (7d78714)

Documentation

  • SPEC.md is the normative description of the model, the rule codes, resolution, projections and the mapping from a tier to account entitlements (0b1d170)
  • The fit of the model to three product shapes is recorded, with the changes it required (4201e64)
  • A user guide covers concepts, writing a spec and using a spec, built as an MkDocs site (07ae1ae)

Tests

  • A test for every error and warning code, the loader's rejections, the helpers, golden files for the projections and the diff, and schema validation of the examples (da640d5)

Infrastructure

  • Module, license, lint configuration and CI workflows (ea05786)