CI And Version Selection
This page defines how conformance should run during development and in CI.
1. How development only matches completed capabilities
During development, the rule should not be to run every case unconditionally, and it should not be to run a vague handpicked subset either.
The correct model is:
- The implementation repository provides a capability manifest explicitly.
- The runner selects cases by reading
required_capabilitiesfrom the case manifest. mandatoryandoptionalcases becomeselectedonly when the required capabilities have been claimed.- Unclaimed capabilities become
not_claimedrather than being disguised as passed. experimentalanddeprecatedcases default to informational output instead of acting as the hard gate.
This gives two benefits:
- Teams can freeze a smaller capability set first and expand it incrementally.
- CI reports can distinguish clearly between "not implemented yet" and "implemented but failing".
2. How CI knows which protocol version line it is targeting
CI must not infer the protocol version from the repository state.
CI must explicitly select one protocol manifest, for example:
protocol/nnrp-1-preview3/manifest.json- a future Preview4 or final-line protocol manifest
Then the runner should verify at least these three things:
- the
protocol_versionin the protocol manifest - the
protocol_versionin the case manifest - the
protocol_versionin the capability manifest
If any of them disagree, CI should fail immediately instead of guessing which one is supposed to be correct.
3. Recommended CI execution chain
The minimum recommended chain is:
- select the protocol manifest
- select the case manifest set to consume
- load the implementation repository's capability manifest
- generate an execution plan or report
- hard-gate the selected mandatory cases
- output classified results for
not_claimedandinformationalcases
4. Errors to avoid
None of the following should enter the formal workflow:
- letting CI default to "the latest baseline"
- weakening a local adapter in order to bypass public mandatory cases
- replacing the shared conformance baseline with a private local pseudo-suite
- treating unfinished capabilities as passed when no capability declaration exists
5. Current conclusion
The development goal is not that every case is already complete. The development goal is that the repository explicitly knows which capabilities it claims and accepts hard gates only for those capabilities.
The CI goal is also not to guess which protocol line you probably meant. The CI goal is to bind one explicit version line and verify that all input contracts align with it.