Skip to content

site: support the restructured docs IA, and tune documentation typography - #120

Merged
esnible merged 3 commits into
mainfrom
docs/support-new-docs-ia
Sep 10, 2026
Merged

site: support the restructured docs IA, and tune documentation typography#120
esnible merged 3 commits into
mainfrom
docs/support-new-docs-ia

Conversation

@Ibrahim2595

@Ibrahim2595 Ibrahim2595 commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

What & why

Companion to rossoctl/rossoctl#2530, which restructures docs/ into nine task-based sections and moves the team's engineering notes to docs/_internal/.

Two commits, reviewable independently:

Commit What
site: support the restructured docs information architecture Three config/script changes the new tree needs, plus one landing-page link. Required for #2530 to build.
site: tune documentation typography for long-form reading CSS only. Fixes a type scale tuned for the landing page. Optional — drop this commit if the team wants it reviewed separately.

Each is small; the first change below is a genuine trap worth reading.

1. exclude was silently disabling Docusaurus's own defaults

The docs plugin's exclude option replaces the defaults rather than extending them. Our config set it to hide three internal paths, which quietly dropped the default list — including **/_*/**, the rule that ignores _-prefixed directories.

That rule is what keeps docs/_internal/** out of the build. Without it, those notes get compiled and the build fails on their repo-relative image links.

The defaults are now repeated explicitly, with a comment saying why they must stay:

exclude: [
  // --- Docusaurus defaults. Do not remove. ---
  '**/_*.{js,jsx,ts,tsx,md,mdx}',
  '**/_*/**',
  '**/*.test.{js,jsx,ts,tsx}',
  '**/__tests__/**',
  // --- Legacy locations, pre-restructure. ---
  'superpowers/**',
  'authbridge/**',
  'automation-health.md',
],

The legacy entries are kept deliberately, so this config is correct whichever order the two PRs land in. Once #2530 merges they are harmless no-ops and can be dropped in a later cleanup.

2. sidebars.ts — drop the wrapping "Documentation" category

It added a redundant level above the nine real sections, and its generated-index claimed the /docs/ route that docs/index.md now owns. The sidebar is still fully autogenerated from the folder tree, so there is nothing to edit here when docs are added or reordered.

3. scripts/sync-docs.sh — keep _internal out of the mirror

Docusaurus would ignore it anyway, but keeping it out of the site tree matters for versioning: docusaurus docs:version snapshots whatever is in docs/ into a committed versioned_docs/ folder. Without this, every release would freeze a copy of the team's plans, research, and retrospectives into this repo permanently.

Also in this file:

  • The README slug hack is removed — the new tree has no docs/README.md, so there is no route collision to work around.
  • A clearly-marked temporary fallback synthesises a minimal docs/index.md when upstream does not provide one. This is what makes this PR safe to merge on its own (see below), and becomes a no-op the moment #2530 lands.

4. ecosystem/welcome.mdx — fix the "Get started" CTA

It pointed at /docs/overview/quickstart, which the restructure removes. It now points at /docs/, which is valid before and after the restructure, and which the new docs landing page turns into a router with a "Start here" table.

Note: this link is not broken today — Docusaurus strips numeric filename prefixes, so overview/5-quickstart.md currently serves at /docs/overview/quickstart. It only breaks once #2530 lands, which is why the fix belongs here.

Reading typography (second commit, CSS only)

The site-wide type scale is tuned for the landing page. On a long reference page it read as bulky, and two measurements explain why:

  • h1 was 3rem against 0.875rem body text — a 3.4x jump, so every heading shouted relative to the prose around it.
  • h3, h4, h5 and h6 were all 1.5rem — so anything below an h2 had no visible hierarchy. On a page like the CLI reference that flattens the entire structure.
Before After
Body 14px / 1.5 16px / 1.7
Standfirst 19px, muted
h1 48px / 600 36px / 500
h2 32px 24px + hairline rule
h3 24px 19px
h4–h6 24px (all identical) 16px / 15px
h1 ÷ body 3.4x 2.25x

The hairline rule under each h2 is the other half of the fix: it is what makes section boundaries findable while scrolling, instead of a page reading as one continuous block.

Supporting changes, all in the same direction:

  • IBM Plex Mono for code, self-hosted via @fontsource exactly as the sans already is, so code and prose share one design language. This is the only new dependency.
  • The first paragraph after the title renders as a standfirst. Every page in the restructured docs opens with a one- or two-sentence orientation, so this is hierarchy from content that already exists — no markup needed.
  • Line length capped at ~72 characters. Tables, code blocks and diagrams break out to the full column width.
  • Tables get a light header fill, hairline borders and roomier cells, and lose the zebra striping.
  • Inline code loses its border. A border on every symbol name made reference pages look like forms.
  • Sidebar section headings and the table of contents become small, quiet, letter-spaced labels.
  • Body links are underlined. Brand red without an underline reads as emphasis rather than as a link.

Scoping and safety

Everything is scoped to html.plugin-id-default and .plugin-id-contributing — the classes Docusaurus puts on <html> — so the ecosystem landing page is untouched and keeps its 3rem hero. Verified in the built CSS.

Stable Docusaurus theme classes and Infima variables only. Nothing swizzled, no hashed class names, and both light and dark palettes are defined.

Two judgement calls to sanity-check

  • h1 weight is now 500, not 600. custom.css says typography follows the llm-d design system, so this is a deliberate departure — it stops large headings from shouting, but it is a design decision, not a fix. One number to revert.
  • Line length capped at 46rem. A clear readability win for prose, but it narrows the column. Delete one max-width line if the team prefers full width.

Merge order

This PR is second of three. It is stacked on #121, so the diff above shows only its own changes. GitHub retargets it to main when #121 merges.

Order PR Repo Effect
1 #121 .github Cuts v0.7 and adds the version dropdown. Must be first — v0.7 has to be snapshotted from the docs as they are now.
2 this PR .github Prepares the site for the restructured docs, and tunes the reading typography.
3 rossoctl/rossoctl#2530 rossoctl The restructured docs land, and dev starts showing them.

Verified with a real build at each step. v0.7 stays frozen at its 27 routes throughout; only dev changes.

State Build v0.7 dev Internal notes exposed
#121 + this PR, docs still on main clean 27 27 0
all three merged clean 27 43 0
Scenario Build /docs/ Internal pages exposed
This PR alone, docs still on main ✅ zero broken links ✅ resolves (synthesised index) 0
This PR + #2530 ✅ zero broken links, 56 routes ✅ upstream index.md 0
#2530 alone, this config unchanged ✅ builds ✅ resolves ⚠️ 6_internal no longer matches the old exclude patterns

That last row is why the ordering matters: merging the docs PR first would briefly publish automation-health, an AuthBridge migration guide, and four superpowers plans and specs to the live site.

How this was validated

Ran this branch's own scripts/sync-docs.sh against both docs sources, then built each:

# this PR alone
bash scripts/sync-docs.sh main && npx docusaurus build
  -> SUCCESS, 0 broken links, /docs/ resolves, 0 internal pages

# this PR + the restructure branch
SRC_REPO=../rossoctl bash scripts/sync-docs.sh && npx docusaurus build
  -> SUCCESS, 0 broken links, 56 routes, 0 internal pages

Also confirmed that docs/_internal/, docs/images/, and docs/diagrams/ produce no routes, so images and Mermaid sources do not appear in the sidebar.

For the typography commit: every selector was checked against the rendered DOM before being written (theme-code-block, theme-admonition, theme-doc-sidebar-item-category-level-1, theme-doc-toc-desktop, and header + p for the standfirst all exist), the production build carries the rules, the Plex Mono webfiles ship, and h1{font-size:3rem} still applies on the landing page.

Not in this PR

Left out to keep this to one purpose:

  • Versioning. Cutting v0.7, then v0.8 as latest with dev tracking the repo, plus re-enabling docsVersionDropdown. That should be its own PR after the new IA is live — and v0.7 has to be cut from the docs as they are today, before #2530 merges, or the snapshot captures the new structure instead of the old one.
  • Redirects. Every current /docs/* URL moves. @docusaurus/plugin-client-redirects entries are worth adding so shared links and search rankings survive. Also better as its own PR, alongside versioning.
  • The commented-out footer doc links. They point at pre-restructure paths. Re-enabling them is a small follow-up once the new IA is live.

Assisted-By: Claude Code

@netlify

netlify Bot commented Sep 8, 2026

Copy link
Copy Markdown

Deploy Preview for animated-crumble-fb8862 ready!

Name Link
🔨 Latest commit d17a136
🔍 Latest deploy log https://app.netlify.com/projects/animated-crumble-fb8862/deploys/6aa2c2608aa35000072dc0ea
😎 Deploy Preview https://deploy-preview-120--animated-crumble-fb8862.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@Ibrahim2595 Ibrahim2595 changed the title site: support the restructured docs information architecture site: support the restructured docs IA, and tune documentation typography Sep 8, 2026

@mrsabath mrsabath left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed both commits, read the full diff, and verified the substantive claims against main and against the Docusaurus 3.10.1 docs. Leaving findings rather than a sign-off, so a maintainer makes the final call — but for what it's worth, I found nothing blocking.

Commit 1 — config/scripts (the required one)

The exclude-replaces-defaults trap is real and correctly fixed. Confirmed against the Docusaurus plugin-content-docs docs: the four default patterns you pasted (**/_*.{js,jsx,ts,tsx,md,mdx}, **/_*/**, **/*.test.{...}, **/__tests__/**) match upstream verbatim and in order, and **/_*/** is indeed what keeps docs/_internal/** out of the build. Repeating them explicitly with the "Do not remove" comment is the right call — this is the kind of thing that silently regresses.

The rest holds up:

  • sidebars.ts dropping the wrapping category so docs/index.md (slug: /) owns /docs/ — consistent with #2530, and the sidebar stays fully autogenerated.
  • sync-docs.sh excluding _internal from the rsync mirror — the versioning rationale (docs:version snapshots into a committed versioned_docs/) is the real reason this matters beyond the build exclude, and it's well explained.
  • The synthesised docs/index.md fallback is what makes this safe to merge before #2530, and becomes a no-op after. Good migration hygiene.
  • welcome.mdx CTA repointed to /docs/ — valid before and after the restructure.

The merge-order table is correct: this PR first, because #2530-first would briefly expose ~6 internal pages until this exclude lands. Worth honoring.

Commit 2 — typography (CSS only)

Verified against main: the "Before" values are accurate — h1{3rem}, h3–h6{1.5rem} (all identical), .markdown{0.875rem}. And the scoping claim checks out: the base type scale on main is unscoped (h1{}, not .plugin-id-x h1{}), so your .plugin-id-default/.plugin-id-contributing overrides leave the ecosystem landing page's 3rem hero intact. The Netlify deploy preview is green, which is the end-to-end proof.

The new dependency (@fontsource/ibm-plex-mono) is low-risk: same @fontsource scope as the ibm-plex-sans already in the tree, sha512 integrity in the lockfile, official registry, pinned consistently in package.json and package-lock.json.

Two design calls you flagged — noting, not blocking

You called these out yourself, so just acknowledging they're conscious decisions rather than oversights:

  • h1 weight 500 vs the llm-d spec's 600 — a deliberate departure from the documented design system. If the team treats the llm-d scale as authoritative, this is the one number to revert; if readability wins, keep it. Either way worth a maintainer's nod since custom.css cites that system.
  • 46rem measure (~72ch) — a genuine prose-readability win; the break-out rules for tables/code/diagrams mean it doesn't hurt reference content. Reversible in one line.

Areas reviewed: Docusaurus config, shell (sync-docs.sh), CSS, dependencies/supply-chain, commit/PR conventions.
Commits: 2, both signed off; each independently reviewable as described.
CI: DCO pass, Netlify deploy preview pass.

Clean, careful work — the config trap write-up in particular is exactly the context a reviewer needs.

@Ibrahim2595
Ibrahim2595 force-pushed the docs/support-new-docs-ia branch from 42dbb14 to ca34326 Compare September 9, 2026 20:09
@Ibrahim2595
Ibrahim2595 changed the base branch from main to docs/version-0-7 September 9, 2026 20:09
Base automatically changed from docs/version-0-7 to main September 9, 2026 20:24

@esnible esnible left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary

Docs-site versioning PR: cuts versioned_docs/version-0.7/ as the released snapshot served at /docs, moves the in-progress docs to /docs/dev, restructures the sidebar to drop a redundant wrapping category, and adds long-form reading typography.

The config work is genuinely well done — deriving the version map from versions.json means cutting 0.8 needs only the snapshot plus that file, with nothing hard-coded in the config. The exclude comment correctly documents the non-obvious Docusaurus behavior that providing exclude replaces the defaults rather than extending them, which is exactly the kind of thing that silently publishes _internal/ notes a year from now if undocumented.

Verified empirically against the deploy preview rather than reasoning from the config alone:

  • /docs/ → 200, serves "Rossoctl Documentation" (v0.7 generated-index)
  • /docs/dev/ → 200, serves the synthesised index, with the "unreleased documentation" banner rendering
  • /docs/overview/quickstart and /docs/dev/overview/quickstart → both 200
  • Version dropdown renders v0.7 (latest) and dev in the intended order
  • shellcheck clean on sync-docs.sh; set -euo pipefail present
  • New dep @fontsource/ibm-plex-mono@5.3.0 pinned with integrity hash in package-lock.json

One note on my own analysis: I initially suspected the v0.7 snapshot was missing an index.md and would 404 at /docs/. That was wrong — versioned_sidebars/version-0.7-sidebars.json retains the wrapping category with slug: '/', so v0.7 gets its root route from the generated index while dev gets it from the synthesised index.md. The two versions use different mechanisms by design, and the preview confirms both resolve.

The 44 snapshot files under versioned_docs/ are mechanical output of docusaurus docs:version and were reviewed as such, not line-by-line.

One thing worth confirming outside this diff: the "MIGRATION WINDOW" branch in sync-docs.sh and the legacy superpowers/** / authbridge/** excludes both exist to tolerate either landing order relative to the upstream rossoctl/rossoctl restructure. Both are well-commented as temporary — if there isn't already a tracking issue to remove them once that lands, they'll quietly outlive their purpose.

Areas reviewed: TypeScript/Docusaurus config, Shell, CSS, JSON, dependency manifests, docs content
Agent/IDE config (.claude/.vscode): none
Commits: 3, all signed-off (DCO passing)
CI status: passing

Two nits inline; neither blocks.

Comment thread scripts/sync-docs.sh Outdated
# matters for versioning: `docusaurus docs:version` snapshots whatever is in
# docs/ into a COMMITTED versioned_docs/ folder, so without this every release
# would freeze a copy of those notes into this repo.
rsync -a --delete --exclude '.DS_Store' --exclude '_internal' "$UP"/ "$DEST"/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: --exclude '_internal' is unanchored, so rsync matches that name at any depth — not just the top-level docs/_internal/ the comment describes. This errs in the safe direction (over-excludes rather than under), so no action needed. But if the intent is specifically the top-level notes folder, --exclude '/_internal' states it precisely and won't surprise anyone who later adds a legitimately-published path containing that segment.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in d17a136 — changed to --exclude '/_internal'.

You are right that the comment and the code disagreed, and the anchored form is what the comment describes. The unanchored version would also have excluded a legitimately-published .../\_internal/... path if anyone added one later, which is exactly the surprise you are pointing at.

Added a note in the script so the anchor reads as load-bearing:

# '/_internal' is anchored to the top of the transfer, so it excludes exactly
# docs/_internal/ and not a directory of that name at any other depth.

Verified after the change: docs/_internal is still absent from the synced tree, and the build produces no route under it.

Comment thread docusaurus.config.ts
// correct whichever order the two PRs land in. ---
'superpowers/**',
'authbridge/**',
'automation-health.md',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: path: v === LATEST_VERSION ? '' : v reproduces what Docusaurus already does by default for lastVersion — the newest version serves at the bare /docs and older ones under /docs/<version>. Harmless, and being explicit here arguably documents the intended URL shape better than relying on the default. Flagging only so it reads as a deliberate choice rather than a redundancy someone later "cleans up" without realizing it was load-bearing for readers.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kept, and documented in d17a136 so it reads as deliberate rather than redundant — which was your ask:

label: v === LATEST_VERSION ? `v${v} (latest)` : `v${v}`,
// Docusaurus already routes the lastVersion at the bare
// /docs and the rest under /docs/<version>. Stating it
// here is deliberate: it documents the URL shape at the
// point a reader looks for it. Keep it.
path: v === LATEST_VERSION ? '' : v,

For the record on why I did not drop it: this is the line a reader checks when they want to know where /docs/0.7/ comes from, and relying on the default means that answer lives only in the Docusaurus documentation. llm-d states it explicitly for the same reason.

rossoctl/rossoctl#2530 restructures docs/ into nine task-based sections and moves
the team's engineering notes to docs/_internal/. Three things in this repo have to
change for that to build, and one landing-page link has to move.

1. docusaurus.config.ts — the docs plugin's `exclude` option REPLACES Docusaurus's
   defaults rather than extending them, so setting it silently dropped the default
   '**/_*/**' rule. That rule is what keeps docs/_internal/** out of the build;
   without it those notes are compiled and the build fails on their repo-relative
   image links. The defaults are now repeated explicitly, with a comment saying
   why they must stay. The legacy superpowers/authbridge/automation-health entries
   are kept so this config is correct whichever order the two PRs land in.

2. sidebars.ts — drop the wrapping "Documentation" category. It added a redundant
   level above the nine real sections, and its generated-index claimed the /docs/
   route that docs/index.md now owns.

3. scripts/sync-docs.sh — exclude _internal from the mirror. Docusaurus would
   ignore it anyway, but keeping it out of the site tree matters for versioning:
   `docusaurus docs:version` snapshots whatever is in docs/ into a committed
   versioned_docs/ folder, so otherwise every release would freeze a copy of the
   team's plans and retrospectives into this repo. The README slug hack is also
   removed, since the new tree has no docs/README.md, and a temporary fallback
   synthesises docs/index.md while upstream has none.

4. ecosystem/welcome.mdx — the "Get started" CTA pointed at /docs/overview/quickstart,
   which the restructure removes. It now points at /docs/, which is valid before and
   after the restructure and is itself a router.

Verified by running scripts/sync-docs.sh against both the current upstream docs and
the restructure branch, then building each. Both orders succeed with zero broken
links and zero internal pages published.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IBRAHIM IBRAHIM <66755652+Ibrahim2595@users.noreply.github.com>
The site-wide type scale is tuned for the landing page, and on a reference page
it read as bulky. Two things caused it:

- h1 was 3rem against 0.875rem body text — a 3.4x jump — so every heading
  shouted relative to the prose around it.
- h3, h4, h5 and h6 were all 1.5rem, so anything below an h2 had no visible
  hierarchy. On a page like the CLI reference that flattens the whole structure.

This adds a reading scale for documentation pages: body 1rem/1.7, h1 2.25rem,
h2 1.5rem, h3 1.1875rem, h4 1rem — a 2.25x jump from body to h1 instead of
3.4x — plus a hairline rule under each h2, which is what makes section
boundaries findable while scrolling.

Supporting changes, all in the same direction:

- IBM Plex Mono for code, self-hosted via @fontsource like the sans already is,
  so code and prose share one design language.
- The first paragraph after the title renders as a standfirst. Every page in the
  restructured docs opens with a one- or two-sentence orientation, so this is
  hierarchy from content that already exists.
- Line length capped at ~72 characters; tables, code blocks and diagrams break
  out to the full column width.
- Tables get a light header fill, hairline borders and roomier cells, and lose
  the zebra striping.
- Inline code loses its border — a border on every symbol name made reference
  pages look like forms.
- Sidebar section headings and the table of contents become small, quiet,
  letter-spaced labels.
- Body links are underlined. Brand red without an underline reads as emphasis
  rather than as a link.

Scoped to `html.plugin-id-default` and `.plugin-id-contributing`, the classes
Docusaurus puts on <html>, so the ecosystem landing page is untouched and keeps
its 3rem hero. Stable theme classes and Infima variables only — nothing
swizzled, no hashed class names — and both light and dark palettes are defined.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IBRAHIM IBRAHIM <66755652+Ibrahim2595@users.noreply.github.com>
Two nits from @esnible, neither blocking.

- scripts/sync-docs.sh: the rsync exclude was `_internal`, which rsync matches at
  any depth, not the top-level docs/_internal/ that the comment describes. It is
  now `/_internal`, anchored to the top of the transfer, so it states what it
  means and it cannot surprise a later author who adds a published path that
  contains that word.
- docusaurus.config.ts: `path: v === LATEST_VERSION ? '' : v` reproduces the
  default that Docusaurus already applies to lastVersion. A comment now records
  that the explicit form is a choice, so nobody removes it as a redundancy.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IBRAHIM IBRAHIM <66755652+Ibrahim2595@users.noreply.github.com>
@Ibrahim2595

Copy link
Copy Markdown
Contributor Author

Thanks @mrsabath and @esnible. Both nits are addressed in d17a136, and I opened the tracking issue @esnible asked for.

The two nits

--exclude '_internal' was unanchored → now --exclude '/_internal'. You were right that the code and its comment disagreed. Verified after the change: docs/_internal is still absent from the synced tree and produces no route.

path: v === LATEST_VERSION ? '' : v → kept, with a comment recording that the explicit form is a choice, so nobody removes it as a redundancy. That was your ask rather than a request to change it, and the reasoning is in the inline reply.

The temporary shims now have an owner

@esnible — you were right that they would quietly outlive their purpose. #123 tracks removing both, blocked on rossoctl/rossoctl#2530:

  • the MIGRATION WINDOW block in sync-docs.sh
  • the legacy superpowers/** / authbridge/** / automation-health.md entries in exclude

The issue carries the removal steps, the verification command, and an explicit warning to keep the four Docusaurus defaults in that array — since deleting them is precisely the regression the comment exists to prevent.

The two design calls

@mrsabath asked for a maintainer's nod on both; @esnible's approval covers them. Recording the state so it is on the record rather than implied:

Call Status To revert
h1 weight 500, not the llm-d spec's 600 Kept One number in custom.css
46rem measure (~72ch) Kept Delete one max-width line

Both remain one-line reversals if the team's view changes.

Rebased onto main

#121 merged, so this is now based on main rather than stacked. Re-verified after the rebase and the nit fixes:

v0.7 routes: 27   dev routes: 43   _internal leaked: 0
build: SUCCESS, 0 broken links
shellcheck / tsc: clean

@mrsabath — the note that the four default exclude patterns match upstream verbatim and in order is the check I most wanted someone else to make independently, since the whole array exists to stop that regression. Thank you for doing it.


Assisted-By: Claude Code

@Ibrahim2595

Copy link
Copy Markdown
Contributor Author

Status update

Approved, mergeable, checks green, and rebased onto main now that #121 has landed. Both of @esnible's nits are in d17a136, and the tracking issue he asked for is #123.

One thing changed by #121 merging that is worth stating plainly, because it could easily be read the wrong way.

This PR still has to merge before rossoctl/rossoctl#2530

The three-way stack is gone — both PRs now target main — so the ordering may look moot. It is not. I tested it against current main rather than assuming:

main head: 1cadb8b  (site: cut docs version 0.7 ... #121)
docs source: rossoctl/rossoctl#2530
build: SUCCESS
internal pages published: 6
  /docs/dev/_internal/automation-health
  /docs/dev/_internal/authbridge/opa-migration-guide
  /docs/dev/_internal/superpowers/plans/2026-07-21-feature-acceptance-standard
  /docs/dev/_internal/superpowers/specs/2026-07-21-feature-acceptance-standard-design
  /docs/dev/_internal/superpowers/specs/2026-08-24-mesh-selfheal-detection-ttl-design
  /docs/dev/_internal/superpowers/specs/2026-07-28-cortex-components-doc-design

#121 did not touch the exclude array, so main still carries the pre-restructure list — and because providing exclude replaces Docusaurus's defaults rather than extending them, **/_*/** is absent and docs/_internal/ compiles.

This PR is what restores that default. Merge it first, and those six pages never reach the site. Merge #2530 first, and six pages of plans, specs and CI reports appear under /docs/dev/_internal/* on the public site until this lands.

That is the same trap the exclude comment documents, now demonstrated end to end rather than argued from the config. @mrsabath — this is the concrete payoff of the check you ran independently against the upstream defaults.

Final state

Base main (rebased after #121)
Review Approved (@esnible), findings addressed (@mrsabath)
CI DCO pass, Netlify deploy preview pass
Build v0.7: 27 routes · dev: 43 routes · _internal leaked: 0 · 0 broken links
Commits 3, all SSH-signed and DCO signed-off
Follow-up #123 — remove the migration shims once #2530 lands

Recorded for the record, not asking for anything

@mrsabath flagged two design calls as needing a maintainer's nod, and @esnible's approval covers them. Rather than let that be implied, stating it: h1 weight 500 (a deliberate departure from the llm-d scale that custom.css cites) and the 46rem measure are both kept. Each is a one-line reversal if the team's view changes later.


Assisted-By: Claude Code

@esnible
esnible merged commit 5175de2 into main Sep 10, 2026
5 checks passed
@github-project-automation github-project-automation Bot moved this from New/ToDo to Done in Rossoctl Issue Prioritization Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants