Skip to main content

rfc011 conversions

Phase 1's gate, per the RFC: for each family, the generated order must equal the curated one exact-or-explained in that family's conversion PR; only then is the curated file deleted and the generated one committed with its provenance header. This ledger tracks that, family by family, in the RFC's order β€” so "converted" is a recorded verdict with evidence, not a memory.

A family is DONE only when all four columns are yes. Rows may only move forward; a regression (a generated order hand-edited, a drift detector disabled) reopens the row.

#family (curated file)target contractdrift detectorregeneration exact-or-explainedcurated file deleted
1build-order-hummingbird-desktops.ymlβœ… gap_measurement (hummingbird)βœ… gap-drift.yml propose mode (daily, revision-gated)βœ… generated by the engine since #415/#417; provenance header in filen/a β€” the generated file IS the canonical one
2build-order-xfce-fedora.ymlβœ… gap_measurement (fedora)πŸ— gap-drift.yml exhibit mode (dispatch-only until row complete)❌ known diff, pre-explained: the curated order carries xfconf + libxfce4ui because xfwl4's crates pin >= 4.21 versions Fedora 44 does not ship; closure() satisfies requirements by NAME, so regeneration emits xfwl4 alone. The conversion needs version-aware have in the engine. See manifests/xfce-fedora.yaml.❌
3build-order-xfce.yml (EL10)❌ el10 has no gap_measurement yet (needs a roots manifest + CentOS index URLs)❌❌❌
4build-order-gnome51.yml (EL10 GNOME)❌ same as above, plus native-spec payloads (never rewritten, per the RFC)❌❌❌
5build-order.yml (converts last)❌❌❌❌
β€”build-order-fprintd.yml, build-order-fprintd-aarch64.ymlone-off family; convert or retire during row 3 (same el10 contract)❌❌❌

What each row needs​

  • Target contract: a gap_measurement: block on the target in manifests/package-factory.yaml (roots_manifest, target_index, reference_index, source_reference_index). The engine (scripts/measure-target-gap.py --target <id>) refuses to run without it, loudly, which is the point.
  • Drift detector: the gap-drift.yml pattern β€” compare the live index revision against the last committed measurement, re-measure only on change, open a review PR with adds/drops and provenance. Dispatch-only until the family's regeneration gate passes; a cron re-measuring an unconverted family would open PRs nobody can act on.
  • Regeneration exact-or-explained: run the engine, diff against the curated file, and either they match or every difference is defended in the conversion PR (a package the target now ships; a stale pin; an engine capability gap like row 2's version-awareness).

Known engine gaps this ledger has already surfaced​

  1. Version-aware satisfaction (row 2, blocking): closure() stops at any requirement the target index provides by name. xfce-fedora's whole reason to exist is >= 4.21 pins against Fedora's 4.20 β€” name presence is exactly the wrong test there. The fix belongs in the engine (compare the requirement's version constraint against the provider's EVR), not in per-family workarounds.