Skip to content

feat(channels): Channels Hub Phase 1 — hub band + ecosystem-health + media-diet - #2166

Merged
jung-thomas merged 8 commits into
DEVfrom
feat/channels-hub-phase1
Sep 5, 2026
Merged

feat(channels): Channels Hub Phase 1 — hub band + ecosystem-health + media-diet#2166
jung-thomas merged 8 commits into
DEVfrom
feat/channels-hub-phase1

Conversation

@jung-thomas

Copy link
Copy Markdown
Contributor

Channels Hub — Phase 1 (Hub band + Ecosystem-Health radar + Build-Your-Media-Diet)

Turns /channels/ into a hub. Adds a top-of-page explainer + four-card nav band above the existing directory grid, and delivers the two Phase 1 data-driven surfaces from the Channels dataset. (Crosswalk = Phase 2, Atlas = Phase 3; those nav cards are intentional forward refs and 404 until later PRs.)

What's in this PR

  • Hub band on /channels/ (ChannelsDirectory.vue) — intro + four nav cards, inserted above the directory controls; existing grid untouched.
  • /build/channels-stats endpoint (srv/server.js) — aggregates status / ownerType / category / subcategory / isSapOwned / isPublished counts; post-barrier handler matching sibling /build/* convention; approuter allowlist route (authenticationType: none).
  • fetch-channels-stats.ts — bakes hugo/data/channels-stats.json (gitignored build artifact, fails open with an error field).
  • Ecosystem-Health page /channels/health/ — Hugo page + channels-health Vue island (byStatus / byCategory / byOwnerType + summary tiles).
  • Build-Your-Media-Diet page /channels/media-diet/ — Hugo page + media-diet Vue island (pick ≤3 focus areas → ranked, capped-at-12 channel recommendations).

Testing

  • Island unit tests: hub-band 4/4, channels-health 7/7, media-diet 7/7 (12-cap test genuinely exercises the cap), /build/channels-stats 3/3.
  • Full unit suite: 9465 assertions pass, 0 failing. (5 test/srv-qa/* suite failures are a fresh-worktree missing build bundle parsers.bundle.mjs, gitignored+untracked, unrelated to this branch — CI builds it.)
  • SDD: fresh implementer per task + per-task spec+quality review + final whole-branch review (opus) → adjudicated clean, one parked NIT (bySubcategory shipped in payload, no panel yet — forward-compatible).

Notes

  • No raw SQL (string-qualified SELECT.from), no secrets, frontmatter strings quoted (no YAML-1.1 boolean coercion), srv/lib untouched.

Task 2 accidentally tracked hugo/data/channels-stats.json, a build-fetched
artifact written by scripts/fetch-channels-stats.ts (wired into build:all) and
committed in its fail-open error state. Its sibling fetched-data files
(channels.json, channel-collections.json, tags.json) are all untracked; this
aligns it with them: git rm --cached + gitignore entry.
@jung-thomas
jung-thomas merged commit 75f8f1c into DEV Sep 5, 2026
7 checks passed
@jung-thomas
jung-thomas deleted the feat/channels-hub-phase1 branch September 5, 2026 22:38
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