The preamble of .agents/skills/workflow-ci-contract/references/d-guarantees.md describes WORKFLOW.md section 4's labelled-clause convention and then sits on top of a catalog that uses neither label. Found by a whole-unit canonical pass on PR #1203's fix branch, and deferred out of it because the fixes are content decisions rather than the one-phrase grammar correction that branch carried.
The file is carried at intent, so every fleet repository reads this preamble as its introduction to the condensed catalog.
The root cause
The preamble reads:
In that section an item names an input only where the guarantee applies to a particular trigger or state, and names the failure it prevents only where the output does not already show it.
That sentence is a true description of WORKFLOW.md section 4. It is not true of the catalog it introduces, and nothing tells the reader which of the two it describes.
- Section 4 carries a Prevents: clause on 26 of its 44 items. This file carries a "Prevents ..." sentence on 3 of its 39, D1.1, D1.2 and D1.3 alone.
- A reader applying the stated rule to this file's D1.5, D1.6, D2.2, D2.3, D4.2, D4.5, D4.6, D5.1, D5.2, D5.3, D5.5, D5.6, D6.4, D7.1, D7.2, D7.4, D8.1 and D8.4 concludes the output already shows the failure each rules out. Every one of those carries a Prevents: clause in section 4 that the condensation dropped silently.
- The input half fails the same way. Section 4 labels an
Input: on most items and this file labels none, so "names an input only where" identifies nothing here.
The restatement also drifts from its source
WORKFLOW.md's own wording is "only where the guarantee applies to a particular trigger or state rather than to every run". Dropping those last five words changes which items conform. Section 4's D1.2 and D1.5 each carry Input: any PR, which is every run of the trigger the guarantee is about. Under WORKFLOW.md's wording two of its own items violate the convention, and under this restatement they do not, so a reader checking the claim against section 4 gets a different answer than the source gives.
D9 is not condensed at all
Each guarantee is a MUST from WORKFLOW.md section 4, stated as the output a conforming pipeline produces.
Section 4 states D9 as five numbered items, D9.1 through D9.5. Here D9 is one unnumbered sentence fragment that is neither an item nor an output statement, which accounts for the whole 39-against-44 item gap. A reader needing the ruleset-bound-name rule that this file's own D1.5 leans on, section 4's D9.2, finds no id in this catalog to cite.
"Not operational" collides with a fleet term
and a workflow violating any applicable guarantee is not operational.
operational is also the fleet's own name for a repository's registry workflowModel, in registry/repos.json, in GOVERNANCE.md "Operational Repositories", and in the operational-vs-release-workflow skill this skill's description names as its counterpart. Inside a skill reference, "not operational" reads as a claim about repository type rather than about conformance, and the unit states no consequence, so from the unit alone a reader cannot tell what follows. The wording is verbatim from section 4's preamble, so a fix belongs in both places.
The escape hatch understates what it is for
read the section there when a guarantee's exact wording decides a verdict, since a condensed item can be shorter than the one it condenses.
True of every condensed item by definition, so it gives no signal about when the source actually matters, and it understates the relationship, because this condensation drops requirements rather than only length. Section 4's D5.6 requires that "The release the live pointer resolves to is never a prune candidate, whatever the sort order says", absent here. Section 4's D1.6 requires a root global.json declaring the MTP runner, Microsoft.Testing.Extensions.CodeCoverage at 18.9.0 or later, and CODECOV_TOKEN in the dependabot secret store, none of which survive into this file's one-sentence D1.6. A reader told only that the condensed item "can be shorter" reads this catalog as complete on what an item requires.
Scope note
The fixes are not all the same kind. Saying the condensation drops the labels is a wording fix. Deciding whether the catalog should carry Prevents: clauses, or numbered D9 items, or an explicit "this is a lookup index, never the requirement" warning, is a content decision about what this reference is for.
Related to #1200, which covers section 4's own claims, and to #1204. Regenerating .github/skills/ and .claude-plugin/ with scripts/build_dist.py is part of any fix here.
The preamble of
.agents/skills/workflow-ci-contract/references/d-guarantees.mddescribesWORKFLOW.mdsection 4's labelled-clause convention and then sits on top of a catalog that uses neither label. Found by a whole-unit canonical pass on PR #1203's fix branch, and deferred out of it because the fixes are content decisions rather than the one-phrase grammar correction that branch carried.The file is carried at
intent, so every fleet repository reads this preamble as its introduction to the condensed catalog.The root cause
The preamble reads:
That sentence is a true description of
WORKFLOW.mdsection 4. It is not true of the catalog it introduces, and nothing tells the reader which of the two it describes.Input:on most items and this file labels none, so "names an input only where" identifies nothing here.The restatement also drifts from its source
WORKFLOW.md's own wording is "only where the guarantee applies to a particular trigger or state rather than to every run". Dropping those last five words changes which items conform. Section 4's D1.2 and D1.5 each carryInput: any PR, which is every run of the trigger the guarantee is about. UnderWORKFLOW.md's wording two of its own items violate the convention, and under this restatement they do not, so a reader checking the claim against section 4 gets a different answer than the source gives.D9 is not condensed at all
Section 4 states D9 as five numbered items, D9.1 through D9.5. Here D9 is one unnumbered sentence fragment that is neither an item nor an output statement, which accounts for the whole 39-against-44 item gap. A reader needing the ruleset-bound-name rule that this file's own D1.5 leans on, section 4's D9.2, finds no id in this catalog to cite.
"Not operational" collides with a fleet term
operationalis also the fleet's own name for a repository's registryworkflowModel, inregistry/repos.json, in GOVERNANCE.md "Operational Repositories", and in theoperational-vs-release-workflowskill this skill's description names as its counterpart. Inside a skill reference, "not operational" reads as a claim about repository type rather than about conformance, and the unit states no consequence, so from the unit alone a reader cannot tell what follows. The wording is verbatim from section 4's preamble, so a fix belongs in both places.The escape hatch understates what it is for
True of every condensed item by definition, so it gives no signal about when the source actually matters, and it understates the relationship, because this condensation drops requirements rather than only length. Section 4's D5.6 requires that "The release the live pointer resolves to is never a prune candidate, whatever the sort order says", absent here. Section 4's D1.6 requires a root
global.jsondeclaring the MTP runner,Microsoft.Testing.Extensions.CodeCoverageat 18.9.0 or later, andCODECOV_TOKENin the dependabot secret store, none of which survive into this file's one-sentence D1.6. A reader told only that the condensed item "can be shorter" reads this catalog as complete on what an item requires.Scope note
The fixes are not all the same kind. Saying the condensation drops the labels is a wording fix. Deciding whether the catalog should carry Prevents: clauses, or numbered D9 items, or an explicit "this is a lookup index, never the requirement" warning, is a content decision about what this reference is for.
Related to #1200, which covers section 4's own claims, and to #1204. Regenerating
.github/skills/and.claude-plugin/withscripts/build_dist.pyis part of any fix here.