Skip to content

The Good Docs Project schema

Built-in id: tgdp:templates:1.1

Published at: https://hawkeyexl.github.io/manni/schemas/tgdp/1.1.json

Requires type and recommends the template slugs published by The Good Docs Project. Where Diátaxis names four abstract forms, TGDP names 25 concrete deliverables. That suits a docs set that thinks in deliverables rather than quadrants. Such a set says “we owe this product an installation guide and a changelog”.

The vocabulary is open. Any other non-empty string in type passes, and names a page type TGDP does not publish, such as faq. To hold type to the 25 slugs, stack the strict overlay beside it. tgdp:templates:1.0 makes that closed check in one file.

It is one of the taxonomy schemas, which fix a classification key to a published set of values.

Like Diátaxis, TGDP is not in the default set. It requires type, so defaulting it would fail every untyped document in every repo that had not opted in.

manni.config.yaml
meta:
schemas:
- tgdp:templates:1.1
- google:okf:0.1

To try it once without config:

Terminal window
manni meta validate docs/ -s tgdp:templates:1.1
FieldTypeRequiredValues
typestringYesAny non-empty string. The 25 template slugs below are the recommended values

The recommended values are the template directory slugs from the upstream templates repo, grouped here by the pack each belongs to. All 25 validate regardless of pack. The grouping is upstream’s, and is reproduced only to show what you are opting into.

PackValues
Coreconcept, how-to, readme, reference, release-notes, troubleshooting, tutorial
Communitybug-report, changelog, code-of-conduct, code-of-conduct-incident-record, code-of-conduct-remediation-record, code-of-conduct-response-plan, contributing-guide, our-team
Miscapi-getting-started, api-reference, contact-support, glossary, installation-guide, quickstart, sdk-overview, style-guide, terminology-system, user-personas

Allowed. The schema says nothing about any key but type.

---
type: installation-guide
title: Install the collector
---

An empty type names no page type, so it fails. The value is too short for the open branch and matches no slug either, and each check reports its own line.

$ manni meta validate page.md --no-config -s tgdp:templates:1.1
✗ page.md
/type must NOT have fewer than 1 characters (line 2) [tgdp:templates:1.1]
/type must be equal to one of the allowed values (line 2) [tgdp:templates:1.1]
/type must match a schema in anyOf (line 2) [tgdp:templates:1.1]
1 file checked, 0 passed, 1 failed, 3 errors

A near-miss spelling such as howto passes this schema, because it is a non-empty string. The strict overlay catches it.

Strict overlay id: tgdp:templates-strict:1.1

Published at: https://hawkeyexl.github.io/manni/schemas/tgdp-strict/1.1.json

The overlay holds only what strict adds. It closes type to the 25 slugs and requires no key. The open schema still owns the required rule.

FieldStrict adds
typeOne of the 25 template slugs. Any other string fails

Stacked, the two make the check tgdp:templates:1.0 makes in one file. List both ids to adopt it:

manni.config.yaml
meta:
schemas:
- tgdp:templates:1.1
- tgdp:templates-strict:1.1

Each schema is checked on its own, and a finding names the one that produced it. A page type TGDP does not publish passes the open schema, so the overlay alone fails it.

---
type: faq
title: Billing questions
---
$ manni meta validate page.md --no-config -s tgdp:templates:1.1 -s tgdp:templates-strict:1.1
✗ page.md
/type must be equal to one of the allowed values (line 2) [tgdp:templates-strict:1.1]
1 file checked, 0 passed, 1 failed, 1 error

The taxonomy schemas overview explains why this schema and diataxis:diataxis:1.0 are alternatives, and how to write a vocabulary of your own.