/** * Two page contracts live in this file, and they are reconciled on purpose. * * NOOK-1038 (2026-11-09, Mike's correction) supersedes FRE-323's blanket remote * hold: one-click setup is a supported scoped claim for Tailscale peers and * authorized known hosts, so the Remote cards and the setup demo belong on the * page. Blanket authorization promises stay out. * * FRE-997 (2026-11-04) restored the agent count. The page listed thirteen of the * registry's eighteen rows, so FRE-359 verdict B dropped the count instead of * correcting it; FRE-997 put all eighteen rows on /agents and made the roster an * equality check again (`agents.test.ts`), so the count is publishable at 18 and * the stale counts stay banned. * * The two lines met in the FRE-1695 reconciliation (Gitea was 12 commits ahead, * GitHub 2). NOOK-1038's file repeated FRE-359's older "no coverage count" * clause; that clause is superseded by FRE-997's landed correction and is the * one line dropped here. Everything else from NOOK-1038 is taken verbatim, and * `marketing/positioning.md` records both decisions side by side (coverage row: * publishable at 18; remote row: approved, scoped). See `docs/deploy-source.md`. * * STATIC SOURCE AUDIT, the same pattern as `agents.test.ts` and * `downloads.test.ts` (SolidJS does not render under `bun:test`). */ import { describe, it, expect } from "bun:test"; import { readFileSync } from "node:fs"; import { join } from "node:path"; const ROOT = join(import.meta.dir, "../../.."); const AUDITED = [ "src/routes/nook/index.tsx", "src/routes/nook/agents.tsx", "src/routes/nook/faq.tsx", "src/components/nook/FeatureCollage.tsx", "src/components/nook/FeatureBreakdowns.tsx", "src/components/nook/IslandExtras.tsx" ]; /** User-facing copy only: comments are not copy and may name the old wording. */ function copyOf(file: string): string { return readFileSync(join(ROOT, file), "utf8") .replace(/\/\*[\s\S]*?\*\//g, "") .replace(/^\s*\/\/.*$/gm, ""); } describe("remote marketing reflects the supported setup (NOOK-1038)", () => { it("fills the collage's missing sixth grid slot with host-labelled remote sessions", () => { const collage = copyOf("src/components/nook/FeatureCollage.tsx"); // The hero spans two columns; four regular cards fill the other slots. expect(collage.match(/ { const breakdowns = copyOf("src/components/nook/FeatureBreakdowns.tsx"); expect(breakdowns).toContain('kicker="Remote"'); expect(breakdowns).toContain('title="Set up remote agents in one click"'); expect(breakdowns).toContain("Tailscale peer or an authorized host from your SSH config"); expect(breakdowns).toContain(""); }); it("demonstrates setup progressing to Live and a host-labelled session", () => { const demos = copyOf("src/components/nook/MoreDemos.tsx"); for (const label of [ "connecting", "pushing the hook binary", "configuring agents", "checking the host can reach this Mac", "Live", "Set up" ]) expect(demos).toContain(label); expect(demos).toContain('host="gpu-rig"'); }); for (const file of AUDITED) { it(`${file} makes no blanket authorization promise`, () => { const copy = copyOf(file).toLowerCase(); for (const phrase of [ "Any SSH box", "Works across every hooked agent, local or remote", "no SSH authorization needed" ]) expect(copy).not.toContain(phrase.toLowerCase()); }); } it("records the current decision without deleting the historical copy", () => { for (const file of [ "marketing/drafts/remote-ssh/copy.md", "marketing/drafts/remote-ssh/rationale.md", "marketing/positioning.md" ]) { const text = readFileSync(join(ROOT, file), "utf8"); expect(text).toContain("NOOK-1038"); expect(text).toContain("Tailscale and authorized known hosts"); } expect( readFileSync(join(ROOT, "marketing/drafts/remote-ssh/copy.md"), "utf8") ).toContain("Any SSH box, one click away"); }); }); describe("the agent count is corrected, not dropped (FRE-997)", () => { /** FRE-359 verdict B, minus the phrasings FRE-997 re-grounded in the full roster. */ const BANNED_COVERAGE = ["all thirteen", "thirteen coding agents", "13 agents"]; for (const file of AUDITED) { it(`${file} states no stale count`, () => { const copy = copyOf(file).toLowerCase(); for (const phrase of BANNED_COVERAGE) expect(copy).not.toContain(phrase); }); } it("/agents states the registry's size", () => { expect(copyOf("src/routes/nook/agents.tsx")).toContain("Supported agents"); }); it("the landing copy states the count the roster actually has", () => { expect(copyOf("src/components/nook/FeatureBreakdowns.tsx")).toContain("18 agents"); }); });