Rendered from docs/taxonomies/diataxis-site/doctrine.md in the Headwater corpus. Every document on this half of the site is typed by the taxonomy the descriptor names: corpus.json.

Diátaxis as a documentation-site kind set

Diátaxis distinguishes tutorial, how-to, reference, and explanation by the reader's purpose. This bundle makes those purposes concrete kinds for a documentation site. It follows the four-mode method described by Daniele Procida and the conclusion in the adjacent-work evaluation.

The diataxis entry is a facet for a corpus whose existing kinds already own their section contracts, voice regimes, lifecycles, identifiers, and shelves. Its third finding records that every mode page in its fixture had to be a specification with Scope and Behavior headings. This entry serves the opposite case: the four modes are the site's document species, so each receives its own contract and template. Selecting both entries is redundant because a kind-set site already records the reader purpose in its kind.

This answers HW-OBL-0097 as package data, not as a permanent decision: an adopter can select, revise, or decline this bundle. Its fixture is evidence that the entry resolves and types four documents; only an adopter corpus can settle whether the clustering remains useful.

The bundle writes purposes.procedure, kinds.tutorial, identifier_schemes.tutorial_id, and shelves.tutorials, which this repository's overlay also writes. It therefore cannot resolve beside that overlay, and the collision fixture records the first shared address. The product-suite profile tier also reserves purposes.procedure; this bundle claims that address only for a documentation-site package. A site selecting this bundle must not declare an adopter kind at these addresses.

The relationship to #509 is that this bundle supplies the new-entry form of procedure-shaped kinds. It does not decide the composition demonstration. A connection between this kind set and another entry is separate work. Since HW-DR-0095 (Q67), such a connection takes the form of a write into an entry that this bundle names in requires.

Worked instances

Criterion 4 asks for at least one real or realistic corpus that the entry types. This entry carries two.

The shape fixtures, a realistic corpus. One short document of each concrete kind under fixtures/corpus/, beside byte-identical source pages from sysl and cockroach under fixtures/sources/. The case table in that README is the contract, and it records the isolated run, the three-entry run, the constructor sweep, the overlay collision and the planted defect.

n8n, a real one. The 35 files of .agents/skills/ from n8n-io/n8n, pinned at b0550cb3cb4d1752546a69056c55eccfb9111a12 on master, every body byte-identical below its front matter. All 35 are typed as how_to on one homogeneous shelf, which is the answer to the question #509 held open. It is the third corpus of one repository in this library and the first that already carried front matter of its own. HW-EVAL-n8n-worked-example is the report.

Findings

1. A section contract is a Headwater invention, and the tradition this entry models does not supply one. The external corpus of criterion 4 is four real documentation pages from two projects that never met this taxonomy, and the entry types every one of them at the kind its shelf gives. Not one of them satisfies the kind's sections: require list: 11 of the 16 errors in the recorded run are section.required.missing, spread across all four documents. Diátaxis constrains what a page is for and it says nothing about what a page's headings are called. So an entry that models the tradition faithfully in its kinds and its purposes still refuses the tradition's own prose, and the refusal comes entirely from a list this entry wrote. The fixture record holds the run. The remedy is a ruling on whether a kind of a library entry may declare no section contract at all, and it is not an edit to somebody else's prose.

2. Lifting a file out of its repository breaks its relative links, and a worked corpus pays for that. The remaining 5 errors of the same run are link.path.unresolved and link.fragment.unresolved inside the pinned sources, which resolve against their own site layouts. Criterion 4 asks for a corpus "recorded with its source, revision, paths, and run" and does not ask for a clean run, so they are recorded here rather than repaired. A fixture corpus edited until it passes has stopped being external.