Defect
The canonical D3.4 in WORKFLOW.md, carried as .agents/skills/workflow-ci-contract/references/d-guarantees.md, says the develop .dev0 build must remain pip install --pre-selectable and sort above the default release, with NBGV git height in the release segment keeping develop ahead. Under the fleet's branching model that doesn't hold, so no conforming repository can guarantee it.
Why
NBGV version height is the longest path back to the version root, so a merge commit's height is one plus the larger of its parents'. On the release model, main takes merge commits only and develop is squash-only and linear. That gives:
- A promotion merge puts
main at one above whichever line is longer.
- Every bot merge made directly on
main widens main's lead, and develop never receives those commits back.
- Every
develop squash merge narrows it.
- A human promotion merge publishes nothing, so until someone dispatches a release, "the latest default release" can be an older, lower commit.
Constructed example, base 1.0, no offset:
| Event |
main height |
develop height |
Versions |
| before a promotion |
50 |
40 |
|
| promotion merge, released |
51 |
40 |
1.0.51 |
two bot merges on main |
55 |
40 |
|
develop prerelease dispatch |
55 |
42 |
1.0.42.dev0 |
1.0.42.dev0 sorts below 1.0.51, so pip install --pre picks the stable release. The order flips back only once develop's line grows past main's. In ptr727/aiopurpleair#111 a real release pair measured exactly this: develop 13 patches behind main straight after a released promotion, while at an early promotion it had been ahead.
Downstream
ptr727/aiopurpleair corrected its own WORKFLOW.md D3.4 to say a develop build is not guaranteed to sort above the latest default release, and to install one by its exact PyPI version (==X.Y.Z.dev0). Its carried d-guarantees.md still states the old requirement, so an agent loading workflow-ci-contract there reasserts it until the canonical text changes.
Possible fix
Replace the requirement with the weaker true statement: a develop build is a prerelease installed by exact version, and its order against the default release depends on history length. The alternative is a versioning change that makes develop lead by construction, such as a develop height offset or a minor-version lead. That changes version semantics fleet-wide, so it's a decision rather than a rewording.
Defect
The canonical D3.4 in
WORKFLOW.md, carried as.agents/skills/workflow-ci-contract/references/d-guarantees.md, says thedevelop.dev0build must remainpip install --pre-selectable and sort above the default release, with NBGV git height in the release segment keepingdevelopahead. Under the fleet's branching model that doesn't hold, so no conforming repository can guarantee it.Why
NBGV version height is the longest path back to the version root, so a merge commit's height is one plus the larger of its parents'. On the release model,
maintakes merge commits only anddevelopis squash-only and linear. That gives:mainat one above whichever line is longer.mainwidensmain's lead, anddevelopnever receives those commits back.developsquash merge narrows it.Constructed example, base
1.0, no offset:mainheightdevelopheight1.0.51maindevelopprerelease dispatch1.0.42.dev01.0.42.dev0sorts below1.0.51, sopip install --prepicks the stable release. The order flips back only oncedevelop's line grows pastmain's. In ptr727/aiopurpleair#111 a real release pair measured exactly this:develop13 patches behindmainstraight after a released promotion, while at an early promotion it had been ahead.Downstream
ptr727/aiopurpleair corrected its own
WORKFLOW.mdD3.4 to say adevelopbuild is not guaranteed to sort above the latest default release, and to install one by its exact PyPI version (==X.Y.Z.dev0). Its carriedd-guarantees.mdstill states the old requirement, so an agent loadingworkflow-ci-contractthere reasserts it until the canonical text changes.Possible fix
Replace the requirement with the weaker true statement: a
developbuild is a prerelease installed by exact version, and its order against the default release depends on history length. The alternative is a versioning change that makesdeveloplead by construction, such as adevelopheight offset or a minor-version lead. That changes version semantics fleet-wide, so it's a decision rather than a rewording.