Build a pattern catalog site with one teaching page per pattern #1581
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#1581
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The grid names 24 patterns, but Jared does not yet know them well enough to judge a cell. He needs one reference page per pattern, written to be easy to digest. The page must have no running LLM cost.
Reproduce
n/a: feature ticket.
Approach
Each pattern has one reviewed text file in
plugins/os-sdlc/pattern-pages/<name>.yml. Those files already exist onmain. A Ruby build merges each file withCatalog.patternsand writes static HTML toplugins/os-sdlc/pattern-site/. The build calls no LLM.Each page has these sections, in this order: Intent, Problem (text and wrong code), Solution (text and right code), Structure (SVG diagram from the catalog
allowededges, then the Roles table), Ruby example (intro, code, output), Rules (rule text from the catalog, why, Breaks, Follows), Applicability, How to Implement, Pros and Cons, Relations with Other Patterns (links to the other pages), and the catalogsource.index.htmllists every pattern with its one-line intent. Take the page CSS fromdocs/system-design-format/proof/2026-11-06-repository-pattern-page.html: light and dark palette, side navigation, side-by-side Breaks and Follows.The build reads the role names, rule text, allowed edges, and source from the catalog. It never reads them from the YAML file. The build refuses and writes nothing when one of these is true: a catalog pattern has no file, a file has an unknown
id, role names or rule ids differ from the catalog, or a relation names an unknown id. The refusal names each pattern, and it gives the command/os-sdlc:pattern-page <id>for a missing page. The build runs eachexample.codewithrubyand refuses if stdout differs fromexample.output.A test runs the same content checks on the real files, without the
rubyruns. So a new pattern in the catalog fails the suite until its page exists. The skill/os-sdlc:pattern-pagethen writes the file. This is the automatic part: the code detects the gap, and one command fills it.Required work:
pattern-siteanalysis to system-model — check: presentpattern-siteinplugins/os-sdlc/lib/os_sdlc/system_model/run.rborwell-writinginplugins/os-sdlc/skills/pattern-page/SKILL.mdRepositoryinplugins/os-sdlc/pattern-site/index.htmlOrchestrator work: run
bin/refresh-plugins, add the History row, and link the site fromdocs/system-design-format/README.md.Rejected: Astro — a Node build for 24 static pages adds a dependency with no gain, and a Ruby script reads the catalog directly.
Rejected: generate the page text at build time with an LLM — it costs money on each build and can change the text with no review.
Rejected: output under
design/— ADR-0300 fixes that layout.Acceptance criteria
Catalog.patternshas a valid file, whensystem-model pattern-siteruns, then each pattern has a page andindex.htmllinks to it./os-sdlc:pattern-page <id>.allowededges, when a reader opens its page, then the diagram shows one box per role and one arrow per edge, and a self edge such asBuilder -> Builderrenders.example.outputthat differs from what its code prints, when the build runs, then it exits non-zero and names the pattern.plugins/os-sdlc/pattern-pages/, when the suite runs, then a test confirms that each catalog pattern has a valid file.Owner sketch
Non-goals
Links from grid columns stay with #1580. A generated "In this codebase" section waits for a role-to-class view in the gauge, and it should follow #1584. Impeccable styling comes later.
Origin
DESIGN:plugins/os-sdlc/lib/os_sdlc/system_model/catalog/.VERDICT: CREATE
Jared ruled 2026-11-06: one reviewed text file per pattern plus a Ruby build, no running LLM cost. Page sections follow refactoring.guru in structure, language, and approach, with Ruby examples and our own text. Build next. A new catalog pattern fails the suite and names /os-sdlc:pattern-page.
Work started on branch ticket-1581 through the os-sdlc pipeline.
Resolution
Done: Built one reference page for each of the 24 catalog patterns, plus an index, as static HTML. The text is in reviewed YAML files. The build uses no LLM. A suite test and the build refuse a catalog pattern with no page and name /os-sdlc:pattern-page .
Evidence: Commits
f28a0674,9fb8c1be,40e85ffd,ce72ff07. tests/system_model_pattern_site_test.rb: 13 runs, 0 failures. rubocop clean. system-model pattern-site writes 25 files in about 4 s. Render checked on index, repository, hex, and mediator.Follow-ups: Grid links to pages: #1580. Generated In this codebase section: after #1584. Catalog mismatches found in review: recorded on #1555.