Skip to content

The d-guarantees preamble describes section 4's clause convention over a catalog that uses neither label #1205

Description

@ptr727

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    decisionNeeds the maintainer's decision before it can be worked

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions