mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-10 04:36:40 +00:00
A person credited with a link in one place and a bare name in another reads as two different people and drops the reader's path to them. sys-svc-engine showed it in two adjacent lines: the same name once bare, once linked. The new credits-attribution lint requires a name linked in any Credits section to carry that link everywhere, and rejects one name pointing at two URLs. It found 13 offenders, including a second contributor whose attribution had drifted in test-e2e-cli. The generator produced the defect on every run: its context carried application_author but never application_author_url, so the template always took the unlinked branch. Existing READMEs kept their correct Credits because the generator only fills missing sections, which is why 239 roles were right and 12 wrong. The name to URL map is derived rather than declared: galaxy_info.company names the project owner, not the role author (web-app-mattermost is authored by Alejandro Roman Ibanez but lists Kevin Veen-Birkenbach as company), so only the Credits lines themselves carry the mapping. Generator and lint share that derivation and cannot drift apart, and a new contributor needs one linked credit rather than a code change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Build 🏗️
Build-time generators that materialise role include lists, dependency graphs, and tree visualisations from the role metadata in roles/.
readme
python -m cli.build.readme [roles...] [--override] [--update-cosmos] [--check] generates or completes role README.md files from templates/roles/README.md.j2 (the section schema single source of truth). It derives the ## Cosmos mermaid diagram from meta/services.yml, the ## Quick Setup commands from the role id, and the ## Credits block from meta/main.yml. Prose sections are never rewritten.
- default: add only the managed sections that are missing.
--override: regenerate every managed section in place.--update-cosmos: regenerate only the Cosmos diagram.--check: write nothing; exit non-zero if any README would change.
Make wrappers: make readme-generate [role=<id>] [override=true] [cosmos=true] and make readme-check.