Skip to content

docs: describe the code that actually ships - #9

Merged
ElianCodes merged 3 commits into
mainfrom
docs/truth-pass
Sep 28, 2026
Merged

ElianCodes merged 3 commits into
mainfrom
docs/truth-pass

Conversation

@ElianCodes

Copy link
Copy Markdown
Contributor

1 of 3. Stack: this → [SEO/GEO infrastructure] → [CI and hygiene].

The module repos change daily; these pages had not since April. Every claim
below was checked against the source before being rewritten or removed — this
PR adds no feature descriptions that I could not find code for.

The load-bearing corrections

Encore sold a moderated guest music-request app. encore/src is the
unmodified template: its home route renders "Coral Module — Ready to build.",
.env.example holds only HOST and PORT, and package.json is still
"name": "coral-module". The three JELLYFIN_* variables the page told you to
set are read by nothing. getcoral/encore has ~2.3k Docker Hub pulls.
Rewritten as the scaffold it is.

Librarian documented six features with no implementation. grep -ril over
librarian/src returns zero files for each of duplicate, bulk,
analytic, statistic, backup, codec. Replaced with what exists — import
plans, hardlink-with-copy-fallback, roots, path mappings, scan jobs.

A security default was missing. librarian/src/lib/config-store.ts:182
defaults requireLogin to true, and every filesystem operation additionally
requires a Jellyfin administrator. The page never mentioned auth, and the
compose guide walked a first-run user straight into that login wall. Both fixed.

files.move was listed as "defined in spec 1" on a page that states a
module advertises a capability only when it actually works. It is implemented
nowhere. Moved to Reserved.

Contributing claimed all Coral projects use ESLint. None ever has — every
repo ships a biome.json. Also pnpm type-check → typecheck.

Where the docs were right and something else was wrong

The getcoral/* image names were correct. I queried the registry: all seven
exist, with pull counts. aurora/README.md is the stale one (it still points at
ghcr.io/eliancodes/aurora-ui). Image names added to Fathom, Marquee, Encore
and KAPOW!, which previously showed only docker build -t <name> ..

libraries/npm-packages.md is also correct as it stands — @get-coral/telemetry
exists locally at 0.1.0 but 404s on npm, so adding it would have introduced a
new error. That page gained depth, not corrections.

Also

  • Every module now states Shipping / Early / Scaffold, so a reader can tell
    Aurora from Encore without cloning both.
  • Fathom: removed reading progress, ratings, collections, recommendations.
  • KAPOW!: SUPABASE_DB_PASSWORD is a supabase link argument, not an app
    variable; /host/:code needs ?token=; the eyJ.../AIzaS... placeholders
    read like leaked credentials and are gone.
  • Aurora: dropped the genre "filtering" claim; added AURORA_STREAM_TOKEN_SECRET,
    HOST, PORT, AURORA_DISABLE_SPA_PRERENDER; noted PLEX_URL/PLEX_TOKEN
    are read by nothing.
  • Tide: the cgroup memory guard, TORRENT_DOWNLOADS_DIR, CORAL_SERVICE_TOKEN.
  • Project templates: the template has no api/example.ts, no
    routes/components/, no src/integrations/. getLibraryItems signature fixed.
  • Vercel dropped as a deploy target for the three modules with no vercel.json.
  • The nine homepage cards are now links. None of them was.

Review note

The licence section now says only what is provable: the npm packages declare
MIT and three repos carry a LICENSE file, but tide, librarian, fathom,
marquee, encore, jellyfin, create-coral, template and dev-standards have
neither a LICENSE file nor a license field.
Worth fixing upstream.

Verification

pnpm build clean; all 17 pages render; no broken internal links.

The module repos changed daily; these pages did not. Every claim below was
checked against the source before being rewritten or removed.

Encore: the page sold a moderated music-request app. `encore/src` is the
unmodified template — its home route renders "Coral Module — Ready to build."
and `.env.example` holds only HOST and PORT. The three JELLYFIN_* variables the
page told you to set are read by nothing. Rewritten as the scaffold it is.

Librarian: removed the Features and Analytics trees. `grep -ril` over
librarian/src returns zero files for each of duplicate, bulk, analytic,
statistic, backup and codec. Documented what exists instead — import plans,
hardlink-with-copy-fallback, roots, path mappings, scan jobs — and added the
access model: LIBRARIAN_REQUIRE_LOGIN defaults to true and every filesystem
operation additionally requires a Jellyfin administrator. The compose guide
walked a first-run user straight into that login wall without mentioning it.

Fathom: removed reading-progress tracking, ratings and reviews, personal
collections and recommendation algorithms. None of them have code.
fathom/README.md:10-17 is the honest scope.

Marquee: replaced the template boilerplate opener with what it does, and
documented MARQUEE_DATA_DIR and the /setup flow.

KAPOW!: SUPABASE_DB_PASSWORD is a `supabase link` argument, not an app
variable — dropped from the env table, with SUPABASE_DB_URL and the six
accepted key aliases added. /host/:code requires ?token=. Replaced the
eyJ.../AIzaS... placeholders, which read like leaked credentials.

Aurora: dropped the genre "filtering" claim; README lists browsing, sorting and
pagination only. Added AURORA_STREAM_TOKEN_SECRET, HOST, PORT and
AURORA_DISABLE_SPA_PRERENDER, and noted that PLEX_URL/PLEX_TOKEN are read by
nothing.

Tide: added the cgroup memory guard, the TORRENT_DOWNLOADS_DIR legacy alias and
CORAL_SERVICE_TOKEN.

Module contracts: files.move was listed as "defined in spec 1" on a page that
says a module advertises a capability only when it works. It is implemented
nowhere; moved to Reserved.

Contributing: Coral has never used ESLint — every repo ships a biome.json. The
script is `typecheck`, not `type-check`. The licence claim is now what is
provable: several module repos carry no LICENSE file at all.

Project templates: the template has no api/example.ts, no routes/components/
and no src/integrations/. Fixed the getLibraryItems signature, which omitted
the positional media type and passed an undocumented parentId.

Also: every module now states a status — Shipping, Early or Scaffold — so a
reader can tell Aurora from Encore without cloning both; Docker Hub image names
added for Fathom, Marquee, Encore and KAPOW! (all verified to exist on the
registry); Vercel dropped as a deploy target for the three modules with no
vercel.json; /healthz documented; and the homepage cards are links, which none
of the nine were.
@vercel

vercel Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Sep 26, 2026 8:33pm UTC

Starlight's grey scale runs light to dark — gray-1 is body text, gray-5 a
border, gray-6 and gray-7 surfaces. This palette defined it backwards and
extended it to gray-10, so every Starlight component that coloured text with
gray-3 rendered #1a2438 on a #090f22 background: a contrast ratio of 1.23:1,
against the 4.5:1 WCAG AA asks for. Unreadable.

It went unnoticed because the pages only used <Card>, which the stylesheet
overrides explicitly. The homepage's <LinkCard> descriptions have no such
override, so they came out invisible.

Same hues, correct order, with the measured contrast recorded per step.
gray-3 now sits at 8.3:1. gray-5 is 3.1:1, the WCAG 1.4.11 floor for a border.
It also fixes a second-order bug: link cards took their hover background from
gray-7, which was #77839a — a light grey fill on a dark card.

Separately, `overflow: hidden` on tables — there to clip the rounded corners —
was clipping the last column instead. The four-column environment tables made
it obvious: the Purpose text ran off the edge with no scrollbar to reach it.
Corners are now rounded on the header cells, and long identifiers like
TIDE_MEMORY_CHECK_INTERVAL_MS can wrap rather than forcing the table wide.
@ElianCodes

Copy link
Copy Markdown
Contributor Author

Added 7c9ea6f after review feedback: the card descriptions on the new
homepage were unreadable.

Root cause was not the new markup. Starlight's grey scale runs light to
dark — gray-1 is body text, gray-5 a border, gray-6/gray-7 surfaces.
src/styles.css defined it backwards and extended it to gray-10. So
.sl-link-card .description { color: var(--sl-color-gray-3) } resolved to
#1a2438 on a #090f22 background:

contrast
before 1.23:1
WCAG AA (body text) 4.5:1
after 8.33:1

The bug predates this PR — it just never showed, because the pages only used
<Card>, which the stylesheet overrides explicitly with !important.
<LinkCard> has no such override, so introducing it here exposed the
underlying palette defect. Fixing the scale rather than patching one selector
also fixes link-card hover, which was pulling its background from gray-7
= #77839a — a light grey fill on a dark card.

Every step now carries its measured ratio as a comment. gray-5 is at 3.1:1,
the WCAG 1.4.11 floor for a border.

Second fix in the same commit: overflow: hidden on table — there to
clip the rounded corners — was clipping the last column. The four-column
environment tables this PR adds made it obvious: the Purpose text ran off the
edge with no scrollbar to reach it. Corners are now rounded on the header
cells instead, and long identifiers like TIDE_MEMORY_CHECK_INTERVAL_MS wrap
rather than forcing the table wide.

Both verified in a browser at the width the screenshot was taken, not just by
the numbers. #10 and #11 have been rebased on this.

The active sidebar item rendered as near-white on the teal pill — 1.59:1,
where the rule two hundred lines up asks for #07242a on teal, which is 8.71:1.

`.sidebar-pane * { color: #f0ede8 !important }` was the cause. Starlight puts
the link text in a <span> inside the anchor, and a universal selector paints
that span directly, so the anchor's own colour never reached it. Inheritance
loses to a direct !important declaration every time.

That rule, and the matching ones on the mobile table of contents, existed to
force light text into panels that the inverted grey scale had made dark-on-
dark. With the scale the right way round they are not needed, and they are
actively harmful: `*` and `[class*="toc"]` are broad enough that the next
component added to either panel would have hit the same trap.

Removed the universal overrides. Sidebar links are now coloured on the anchor
only, kept neutral so the current-page pill is the only accent in the rail —
13.0:1 for the links, 8.7:1 for the pill. The panels keep their opaque
background, which is a real requirement: they sit over page content, and
--sl-color-bg-sidebar is deliberately translucent for the desktop rail.

Verified in a browser: current page, inactive links, and the expanded mobile
table of contents.
@ElianCodes

Copy link
Copy Markdown
Contributor Author

Added ee99110: the current-page item in the sidebar had the same class of
defect.

It rendered near-white on the teal pill — 1.59:1 — while the rule two
hundred lines up asks for #07242a on teal, which is 8.71:1. The rule was
never reaching the text.

.sidebar-pane * { color: #f0ede8 !important } was the cause. Starlight puts
the link label in a <span> inside the anchor, and a universal selector paints
that span directly — inheritance from the anchor loses to a direct
!important declaration every time.

That rule, and the matching ones on the mobile table of contents
(#starlight__mobile-toc > *, [class*="toc"]), existed for the same reason
as the palette bug in 7c9ea6f: they forced light text into panels the
inverted grey scale had made dark-on-dark. With the scale corrected they are
unnecessary, and they are traps — * and [class*="toc"] are broad enough
that the next component added to either panel would have hit exactly this.

Now:

contrast
current-page pill 8.71:1
sidebar links 13.0:1

Sidebar links are set on the anchor only, and kept neutral so the pill is the
only accent in the rail. The panels keep their opaque background — that part
is a real requirement, since they sit over page content and
--sl-color-bg-sidebar is deliberately translucent for the desktop rail.

Verified in a browser: current page, inactive links, and the expanded mobile
table of contents all render correctly without the removed rules. #10 and #11
rebased again.

Worth noting the pattern across both fixes: every one of these was a blunt
!important override compensating for the inverted palette. Fixing the
palette let ~60 lines of CSS go.

@ElianCodes
ElianCodes merged commit 8e8262d into main Sep 28, 2026
2 checks passed
@ElianCodes
ElianCodes deleted the docs/truth-pass branch September 28, 2026 10:01

This branch was successfully deployed

1 active deployment
Preview — ee991105 Deployed Sep 26, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant