Plan plan-1.6.3-website-feature-discoverability — Website + scanner patch eliminating two structural drift classes surfaced 2026-05-11 when the user asked "where do these changelogs show up on the website?": (a) public page added without nav link discoverable only via direct URL; (b) website code shipped to npm + git but never deployed to Vercel. Live evidence pre-fix: massu.ai/changelog showed 5-entry stale 0.x array (the pre-plan-changelog-sot hardcoded data) because the last production Vercel deploy was 33 days old, even though the build-time parser landed in 1.6.1. After this release, both bug classes are structurally impossible: Pattern Scanner Check 15 enforces nav-link coverage with an explicit WEBSITE_NAV_EXEMPT allowlist; pre-push-light step 8 deploy-staleness gate enforces lockstep between website commits and Vercel deploys; CR-48 mandates /massu-deploy in Stage D for any website-touching plan. Backfill deploy in this release ships 33 days of accumulated website changes (1.6.1 changelog parser + 1.6.2 EXPECTED_COUNT bump + this plan's nav links) to production.
Added
website/src/data/nav-exempt.ts— shared constantsWEBSITE_NAV_HIDDEN_PREFIXES(currently['/dashboard']) andWEBSITE_NAV_EXEMPT(currently[]). Sole source of truth for "page intentionally has its own shell" (consumed byNavbar.tsx) AND "page intentionally not in public nav" (consumed by Pattern Scanner Check 15). EachWEBSITE_NAV_EXEMPTentry requires a JSDoc explaining the intentional exemption.scripts/massu-deploy-staleness-check.sh— compares lastwebsite/-touching commit onorigin/mainvs last production Vercel deploy timestamp. FAILs if lag exceedsMASSU_MAX_DEPLOY_LAG_SECS(default 86400 = 24h) on main branch. SKIP+WARN on Vercel CLI auth mismatch (vercel whoami+teams listpre-flight againstethans-projects-22aee2ce). Bypass viaMASSU_SKIP_DEPLOY_STALENESS_CHECK=1(logged to stderr for audit-trail).scripts/pre-push-light.shstep 8 — invokes the staleness check. Renumbered 9 existing[N/7]labels to[N/8].scripts/massu-pattern-scanner.shCheck 15 — public page nav-link coverage guard. Enumerates everypage.tsx/page.mdxunderwebsite/src/app/, excludes hidden-prefix routes + auth/checkout + dynamic[slug]+ root +WEBSITE_NAV_EXEMPT, cross-references against the union ofhref:values innavigation.ts+Footer.tsx. Synthetic regression VERIFIED: temporarytest-orphan-DELETE-ME/page.tsxtriggersFAIL: /test-orphan-DELETE-ME has no nav link.scripts/massu-plan-status-validator.shL3 retrospective check — for every shipped-subset plan whose cited SHA modified files underwebsite/, emits WARN if plan body lacks/massu-deployreference. Non-blocking (retrospective enforcement only); forward-going gate is CR-48 in CLAUDE.md.- CR-48 / VR-DEPLOY-STALENESS in
.claude/CLAUDE.md. Full definition section between CR-40 and CR-39. Release ceremony template for website-touching plans documented as 10-step Stage D in## Deploymentsection. Changeloglink inFooter.tsxResources group, between Quick Start and GitHub.Overviewlink innavigation.tsmainNavarray, between How It Works and Articles (mainNav.length6 → 7).
Changed
website/src/components/layout/Navbar.tsx:25— replaced inlinepathname.startsWith('/dashboard')withWEBSITE_NAV_HIDDEN_PREFIXES.some((prefix) => pathname.startsWith(prefix)). Eliminates the duplication between Navbar'sisDashboardliteral and the future scanner's "what counts as a dashboard page" knowledge. Both now read fromnav-exempt.tsas the single source of truth.scripts/massu-deploy.sh+.claude/commands/massu-deploy.md— smoke test list extended from["/", "/docs"]to["/", "/docs", "/changelog", "/overview"]. Future regressions on either new page fail the deploy gate.
Verification
cd packages/core && npx tsc --noEmit: 0 errorscd website && npx tsc --noEmit: 0 errorscd packages/core && npm test: 2144 passed / 12 skipped (baseline preserved — no daemon code changes)cd website && npm test: 114 passed (drift-guardEXPECTED_COUNTbumped 19 → 20)bash scripts/pre-push-light.sh(Node 22): 7/8 PASS pre-deploy; step 8 (Deploy Staleness) intentionally FAILed against 33-day lag pre-P-D-009; PASSes after backfill deploy- Pattern Scanner Check 15: PASS with synthetic regression evidence
bash scripts/massu-plan-status-validator.sh: PASS 0 violations- Live post-deploy:
curl -s https://massu.ai/changelog | grep -cE '\bv?1\.6\.3\b'≥ 1;curl -s https://massu.ai/ | grep -cE 'href="/overview"'≥ 1;curl -s https://massu.ai/ | grep -cE 'href="/changelog"'≥ 1; 20 distinct version headings on/changelog(was 5 pre-deploy)
Closes
- Plan
plan-1.6.3-website-feature-discoverabilityaudit converged at 0 gaps after 2 iterations (11 → 0). - 33-day Vercel-deploy lag — closed by P-D-009 backfill deploy in this release.
- User report 2026-05-11 ("where do these changelogs show up on the website?") — structurally answered via three forward-going gates (Check 15 + step 8 + CR-48).