Repository navigation
fix(engineering-playbook): follow the plain-Markdown wiki - #60
Merged
Merged
Conversation
The playbook deleted docs/wiki/index.md and mkdocs.yml: the wiki is plain Markdown with Home.md as the hub and _Sidebar.md as its whole navigation. Only the navigation file is excluded now, and the first use case no longer pins Purview.BuildSdk 1.0.4 - it uses the playbook's own LATEST placeholder, so the entry no longer contradicts the page it advertises, which deliberately states no version at all.
A page can show a registry badge instead of a version, so the aggregator must leave an absolute image URL exactly as written while still resolving a relative image beside it. Also covers an exclude naming a file the repository has deleted, which must stay a no-op rather than a warning or a failure.
A mirrored product wiki is plain Markdown: Home.md is the hub, _Sidebar.md drives the order and the navigation, and the catalogue entry alone decides what is published. A repository that still carries a site file (mkdocs.yml, a generated index.md) is a deviation the portal ignores rather than a requirement, and an exclude that names a deleted file is a no-op. Removes the guidance that assumed every wiki ships an index page and excluded it.
A repository may still carry mkdocs.yml beside its Markdown; the portal never reads it, because the catalogue entry's docs block decides what is published. The aggregation now reports it once per sync - an advisory that never fails the build, so the file can be removed upstream in its own time - and findLegacySiteConfig is exported and unit-tested against a real plain-Markdown tree.
mkdocs.yml configured a Material/TechDocs site for this repository's docs/ folder that nothing builds: the site is Astro + Starlight, and no workflow, recipe or script reads the file. Removing it makes this repository follow the rule its own aggregation guidance now states - the docs are plain Markdown and no site file is required.
…shows it The advisory went to stderr, which the pipeline does not carry into the build log, so nothing outside a developer's terminal would ever have seen it. It is printed on stdout beside the sync's own page lines now, and repeated as a ::warning workflow command on GitHub Actions, so each repository that still ships mkdocs.yml can be found and cleaned up from a green build.
kieronlanning
deleted the
fix/engineering-playbook-plain-markdown-wiki
branch
November 8, 2026 12:41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
purview-dev/engineering-playbookwas reorganised (PRs #13/#14,mainat6b68c6a) and the catalogueentry no longer described it:
docs/wiki/index.mdandmkdocs.ymlwere deleted. The wiki is now plain Markdown:Home.mdisthe hub,
_Sidebar.mdis the whole navigation, and the repository carries no site configuration.docs/wiki/foundations/Dependency-Versions.md, is linked fromHome.mdand listed in_Sidebar.mdunder "Repository foundations".purview-component-compatibility).This PR also applies the same rule to this repository: its own dead
mkdocs.ymlis gone, and the buildnow reports (never fails on) any project repository that still ships one.
What changed
src/src/data/projects/engineering-playbook.ymldocs.excludeis now[_Sidebar.md]only —index.mdno longer exists, and nothing else needsexcluding.
docs.source: github-path,docs.path: docs/wikianddocs.rootPage: Home.mdall stillresolve (
Home.mdis itself a conventional root page, sorootPagerestates the default)."Purview.BuildSdk": "1.0.4". It uses the playbook's ownplaceholder convention (
"LATEST", as inGetting-Started.md), because the page it advertises nowdeliberately states no version at all — a real number here would rot and re-introduce the
contradiction.
ProjectCard.astroandprojects/[project].astroderiveit from
listMirroredSkills(), i.e. from the mirrorjust data-syncdiscovers at the project'sdocumentation ref. The new skill appears with no catalogue change; the sync mirrors eight skills for
the playbook (
purview-architecture,-architecture-testing,-component-compatibility,-engineering-principles,-org-harvest,-persistence,-telemetry,-testing-conventions).Aggregation, proved end to end
just data-syncreportsdocs engineering-playbook: 22 pages(Docs synced: 16 projects, 269 pages).The page list is exactly
_Sidebar.md's order, with the new page in its sidebar position:-1 index(from
Home.md),1 getting-started,2 engineering-principles,3 foundations/repository-shape,4 foundations/project-responsibilities,5 foundations/architecture-as-tests,6 foundations/verification-model,7 foundations/documentation-convention,8 foundations/dependency-versions,9 data/contracts-and-data-exchange, …,21 examples/worked-examples.No page is emitted for the deleted
index.md; the onlyindexslug is the landing page, aliased fromHome.md. The built site serves the new page (HTTP 200, title "Dependency Versions | Purview Dev"):Badges survive the aggregator
All eleven badge images render as their absolute URLs — no
raw.githubusercontent.comrewrite and noimageBaseprefix:https://img.shields.io/nuget/v/Purview.BuildSdk…https://img.shields.io/npm/v/@purview-dev/astroc4.rewriteDocMarkdownalready returned absolute (https://///) targets untouched, so no code fix wasneeded; the behaviour is now pinned by tests so a future image-rewrite change cannot silently break a
page that shows a version as a badge.
Dead references and the stale exclude
index.md, exclude it" is corrected indocs-aggregation-rules,add-catalogue-project,audit-catalogue-projects,project-manifest-referenceand the catalogue auditor checklist, whichnow say: the wiki is plain Markdown,
Home.mdis the hub,_Sidebar.mddrives the order and thenavigation, and the catalogue entry alone decides what is published.
excludenaming a file that no longer exists is confirmed to be a no-op —isExcludedfilters thefiles the repository ships and nothing validates the patterns against a file list, so a stale pattern
neither warns nor fails, and no message needed tightening. A test pins it.
Site configuration files: removed here, reported elsewhere
mkdocs.ymlis deleted from this repository. It configured a Material/TechDocs site fordocs/that nothing builds — the site is Astro + Starlight, and no workflow, recipe or script reads it.
just data-syncnow reports, but never fails on, a project repository that still ships one(
findLegacySiteConfiginsrc/lib/docs/aggregate.ts, called on the tree the aggregation alreadyfetches, deduped per project, exported and unit-tested). The live sync inside this PR's own
just validateprinted exactly one line for each of the eight that still do:It is an advisory rather than a gate, so each of those repositories can delete the file in its own
pull request;
stripMkdocsMarkupkeeps tolerating the Material markup such a file stands for untilthen (
containersis the live example), and the line disappears once the file is gone.Tests (
src/tests/unit/docs.test.ts)link rewriting > keeps an absolute badge image beside a relative oneand… keeps a scoped npm badge image unchanged.docs exclude matching > a pattern for a file the repository no longer ships is a no-op— rootselection for the playbook's shape (
Home.mdhub,_Sidebar.mdexcluded,index.mdmatching nothing).legacy site configuration > …— detection at any depth, case-insensitively, absent from a plainMarkdown tree, and no false positive from
mkdocs.yml.bak/mkdocs-notes.md.Validation
just validatepassed as thepre-pushhook on both pushes (no--no-verify, no admin merge, noforce-push): format → lint → typecheck → 350 unit tests → asset/catalogue checks → build (live data
sync, 269 pages) → discovery → link crawl → generated-output check → built-output tests.
bun run ci:buildlocally:astro check0 errors / 0 warnings / 0 hints, catalogue check 17projects, 294 pages built, all checks green, dist tests 42 pass / 2 skip / 0 fail.
just test350 pass / 0 fail;just format-checkandjust lintclean.The remaining build warnings are pre-existing and come from upstream content, untouched here:
aspirec4's```likec4fence in a.mdpage, itsgitignorecode fence with no highlighter,the Vite chunk-size advisory, and LikeC4's "no likec4 documents found in workspace".