Skip to content

WO55: extension-point registries (gates, stage types, volume providers, license policy) - #312

Merged
ronaldtse merged 1 commit into
mainfrom
feat/wo55-registries
Oct 19, 2026
Merged

ronaldtse merged 1 commit into
mainfrom
feat/wo55-registries

Conversation

@ronaldtse

Copy link
Copy Markdown
Contributor

OCP round on the spine: the four hardcoded extension points become registries (tests-first, 7 new tests watched failing). Two new gates land as the proof: ConformanceGate (frozen fixtures or no pass) and RegressionGate (flag-only vs registry best-known). GateContext encapsulates gate inputs. Suite 249 green, ruff clean.

The spine's extension points were closed lists; adding a gate, stage
type, corpus source kind, or license policy meant editing core
modules. Each is now a registry — closed for modification, open for
extension:

- gates: BaseGate + register_gate; evaluate() runs every registered
  gate with a GateContext (metrics/parity/corpora/conformance/registry
  as one encapsulated object). The proven three (quality, parity,
  license) are adapters over the unchanged check functions.
- two new gates land as the proof the registry is real:
  ConformanceGate (frozen fixtures or no pass — previously only the
  publish guard checked this) and RegressionGate (flag-only compare
  against registry best-known; flags never block silently).
- stage types: register_stage_type(); KNOWN_STAGES stays as a live
  alias, contracts.py never edits.
- corpus source kinds: the Literal is gone (schema data); the
  planner's register_volume_provider decides what is mountable, and
  unknown kinds fail at plan time with the registered set.
- license policy: LicensePolicy objects (allow_waivers) instead of a
  hardcoded predicate — policies vary by construction.

7 new tests written first and watched failing; suite 249 green,
ruff clean.
@ronaldtse
ronaldtse merged commit df4b67c into main Oct 19, 2026
11 checks passed
@ronaldtse
ronaldtse deleted the feat/wo55-registries branch October 19, 2026 00:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant