{"generatedAt":"2026-06-22T17:03:01.825Z","total":192,"filtered":192,"returned":20,"sinceRev":null,"releases":[{"rev":"rev 203","date":"2026-05-12","title":"Closes the named rev-202 next-sprint candidate (v1 parity gap on /pricing) + ships two more templates from the rev-201 named radar wave (cheesemongers + bookbinders) bringing the cluster to seventy-five named verticals + adds the per-plan permalink share affordance on /pricing matching the rev-101/125/174/175 share-permalink vocabulary at the per-plan axis. Connecting thread: every rev-203 change makes an existing primitive load-bearing on a new place. (a) New shared src/lib/pricing-plans.ts module is the load-bearing primitive — the /pricing page, the landing-page in-page pricing block (since rev 22), the new /api/v1/pricing endpoint, AND the rev-202 /llms-full.txt AI-discoverability surface all read from one source so a price change updates four surfaces in one edit. Until rev 203 the landing-page pricing block and the rev-202 /pricing page carried hand-coded duplicates that drifted; rev 203 closes that. (b) GET /api/v1/pricing — closes the protocol-bound parity gap on the rev-202 /pricing marketing surface. Returns every plan (slug + name + price + priceUsd + priceSuffix + description + featured + features + caps + per-plan share URL) plus the rev-202 competitor-comparison block (Notion / HubSpot / per-token) plus an aggregate summary block (planCount + startingPriceUsd + featuredPlanSlug + positioning notes). No auth — public marketing surface (same model as /api/v1/badge.svg, /api/v1/integrations, /api/v1/onboarding-templates). Cache-control public, max-age=300, s-maxage=1800. The public marketing v1 cluster reaches its seventh axis: planned (rev 98) + most-requested (rev 98) + shipped (rev 100) + brand voice (rev 102) + industry-fit (rev 172) + channels (rev 202) + pricing (rev 203). (c) Per-plan permalink share chips on every plan card on /pricing — every card now wears a one-tap 'Copy link' chip producing loopdesk.space/pricing#plan-pro style URLs, with a hash-listener that smooth-scrolls + 2.4s flash-highlights the matching plan card on arrival. Mirrors the rev-101 changelog permalink + rev-125 roadmap permalink + rev-174 per-rev changelog detail permalink + rev-175 per-template detail permalink vocabulary at the per-plan axis. (d) Two more onboarding templates — small independent cheesemongers (affinage cycle discipline + named-producer continuity + shrinkage discipline at 3% per-category threshold + pairing expertise as the load-bearing customer trust signal) and independent bookbinders / paper conservators (named-substrate + adhesive discipline on conservation-grade quotes + chain-of-custody on every customer piece + rush-job hygiene with named deadline + conservation-grade supplier continuity adjacent to the rev-201 framing/mat-board axis) — bringing the templates cluster to 75 named verticals. The OpenAPI 3.1 spec types the new /pricing endpoint with full request/response schemas + the rev-172 listing endpoint count copy bumps 73 → 75 in lockstep — the cadence pattern from rev 78 onward reaches its 111th unbroken rev with rev 203. PRD + ROADMAP + CLAUDE.md updated (rev 203)","highlights":[{"label":"Shared src/lib/pricing-plans.ts module — closes the price-list drift between the /pricing page + landing page + v1 surface","description":"Until rev 203 the rev-202 /pricing page carried inline copies of the three plan cards (Free / Pro / Team with prices, features, hard caps, CTA labels) and the landing-page in-page pricing block (since rev 22) carried a separate hand-coded inline copy of the same plans with slightly different feature wording. A real price change had to land in two places + the landing-page block visibly drifted from the canonical /pricing page over time (the rev-22 block named '90-day memory' on the Pro card while the rev-202 page named '90-day memory retention'; small drifts that compound across two months of revs). Rev 203 closes that with a shared module that exports PRICING_PLANS + PRICING_COMPETITORS + a getPricingPlan(slug) helper. Each plan carries a stable slug (free / pro / team) which is also the rev-203 permalink anchor. Both /pricing and the landing block now read from the same array. The new /api/v1/pricing endpoint reads the same module. The rev-202 /llms-full.txt AI-discoverability surface reads the same module so AI agents indexing the site never see drift between the human-readable + protocol-bound + AI-discoverable views. Mirrors the rev-37 src/lib/changelog-releases.ts + rev-97 src/lib/roadmap-items.ts + rev-202 src/lib/integrations.ts shared-module pattern at the pricing axis."},{"label":"GET /api/v1/pricing — closes the protocol-bound parity gap on the rev-202 /pricing marketing surface","description":"New bearer-less GET endpoint returns every plan tier with slug + name + price (display + numeric priceUsd) + priceSuffix + description + featured boolean + features array + caps block (sources + memory + interval) + canonical per-plan share URL (loopdesk.space/pricing#plan-<slug>). Response also carries an aggregate summary block (planCount + startingPriceUsd + featuredPlanSlug + positioning notes: 'No per-cycle credits', 'No metered AI tokens', 'No overage bills', 'Daily cost cap on every tier'). Plus the rev-202 competitor-comparison block (Notion Custom Agents per-cycle credits, HubSpot Breeze outcome-based, per-token billing) projected on every response so MCP hosts rendering 'Loop Desk vs Notion' don't have to scrape the rev-202 page. Pure derived state from the rev-203 shared pricing module. No schema cost, no migration, no new query — pure code primitive. The public marketing v1 cluster reaches its seventh axis. Strategic significance: until rev 203 an MCP host wanting to answer 'what does Loop Desk cost?' programmatically had to scrape the SSR'd HTML at /pricing. Rev 203 closes that. The MCP server's pricing-axis tooling now has nothing left to design."},{"label":"Per-plan permalink share chips on /pricing — mirrors rev-101/125/174/175 share-permalink vocabulary at the per-plan axis","description":"Every plan card on the rev-202 /pricing page now carries a one-tap 'Copy link' chip beside the plan name. Tap to copy loopdesk.space/pricing#plan-free / plan-pro / plan-team to the clipboard with a 1.6s 'Copied' success state. New PricingPlanPermalink client component handles the clipboard write (with execCommand fallback for non-secure contexts, mirroring the rev-42/43/101/125/126/128/133/174/175 chip-copy pattern), updates window.history.replaceState so back/forward navigation re-fires the highlight, and binds a hashchange listener that smooth-scrolls + applies a 2.4s ld-plan-card-flash brand-color glow animation when the URL hash matches a plan slug on first load. Pure client-side affordance — no schema. Strategic significance: closes the share-affordance loop on the rev-202 /pricing primitive at the per-plan axis. Procurement reviewers sharing a specific plan card with a stakeholder ('here's the Pro tier — see the 90-day memory retention') now have a one-tap copy that lands the recipient directly on the matching card. Pairs with the rev-202 dedicated /pricing URL as the share-affordance pair: canonical URL (rev 202) + per-row anchor (rev 203). The lowest-friction expression of 'this scope is meant to be shared' at the per-plan axis. Mirrors the same pattern shipped across the changelog (rev 101 per-rev), roadmap (rev 125 per-item + rev 126 per-phase), per-template detail (rev 175), and per-rev changelog detail (rev 174). The public-marketing share-affordance vocabulary now reaches its sixth surface."},{"label":"Two more onboarding templates — small independent cheesemongers + independent bookbinders / paper conservators","description":"Closes the rev-201 named radar at two more underserved owner-led specialty segments. Small independent cheesemongers (owner-led cheesemongers + cheese shops with affinage + producer relationships — 4 high-importance memory entries: affinage cycle discipline with every named wheel carrying a maturity log (arrival date + expected sell-by window + weekly maturity check on rind + paste + rotation), named-producer continuity on the 20% of revenue from named producers + affineurs with quarterly touchpoint + secondary supplier already qualified, shrinkage discipline with 3% weekly threshold per category triggering root-cause review on two consecutive weeks crossing threshold, pairing expertise as the load-bearing customer trust signal with in-house pairing card refreshed quarterly + 1 sample mid-week affinage signal on an overripe washed-rind shipment). Independent bookbinders / paper conservators (owner-led bookbinders + paper conservators + archival-paper specialists — 4 high-importance memory entries: named-substrate + adhesive discipline with cotton-rag for archival rebinds + PVA neutral-pH for general repair + wheat-starch paste for conservation rebacking + never animal hide-glue on a photographic piece + sub-policy on customer-flagged archival + sentimental + pre-1900 pieces treated as conservation-grade regardless of quote tier, chain-of-custody on every customer piece with condition report + photographs at intake + bench-handoff trail signed at every stop, rush-job hygiene with named deadline + rush-fee + substitution-risk-disclosure + on-time-confidence rating on every <14-day quote, conservation-grade supplier continuity with quarterly review on every supplier crossing 5% trailing-12-month material spend + second-source review on any supplier above 5% quality-rejection or 2-week lead-time miss + 1 sample mid-rebind customer signal on a wedding album with handed-in damage discovered mid-disassembly). Two new OnboardingTemplateKey enum values (cheesemonger in hospitality-food, bookbinder in manufacturing-specialty) extend the rev-19 enum without migration. The templates cluster is now seventy-five named verticals deep. Strategic significance: closes the named rev-201 radar wave at two more underserved owner-led segments where named-relationship discipline (affineurs on the cheese side, conservation-grade suppliers on the binder side) is the load-bearing differentiator against generic chain operators."}]},{"rev":"rev 202","date":"2026-05-12","title":"Deliberate diversification away from the 14-rev templates cluster (rev 188-201 each shipped templates-axis primitives — verticals added, depth/freshness signals, recent endpoints, per-category archive pages, OG cards). Rev 202 pivots to three load-bearing primitives that have been named in the running state but kept getting deprioritised: (a) GET /api/v1/integrations — closes the v1 parity gap on the rev-165 /integrations public marketing surface so MCP hosts answering 'what does Loop Desk connect to?' get the vendor inventory in one bearer-less GET instead of scraping the SSR'd HTML; pairs with /api/v1/onboarding-templates (industry-fit) + /api/v1/blog (brand voice) + /api/v1/changelog (shipped) + /api/v1/roadmap-items (planned) + /api/v1/roadmap-votes (most-requested) as the now-six-axis public marketing v1 cluster (channels axis closed); (b) /pricing public page — until rev 202 the only pricing surface was an in-page anchor on the landing page (loopdesk.space/#pricing), procurement reviewers searching 'Loop Desk pricing' or sharing a pricing URL with a teammate had no canonical page; rev 202 ships a dedicated page with three plan cards + competitor-comparison block (Notion Custom Agents per-cycle credits, HubSpot Breeze outcome-based) + procurement-evidence section + JSON-LD ItemList structured data; (c) /llms-full.txt — modern AI-discoverability surface that complements the existing /llms.txt; AI agents indexing the site (ChatGPT search, Claude search, Perplexity, Bing AI) get a single comprehensive context file with pricing + integrations + templates + roadmap + recent shipping + brand voice + procurement evidence so they don't have to crawl 200+ URLs to learn what Loop Desk does. The OpenAPI 3.1 spec types the new /integrations endpoint with full request/response schemas — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 110th unbroken rev with rev 202. Plus every nav link across the public marketing surface now points at the canonical /pricing URL instead of the in-page anchor (rev 202)","highlights":[{"label":"GET /api/v1/integrations — public integrations catalog on the v1 surface","description":"Closes the v1 parity gap on the rev-165 /integrations public marketing page. New shared `src/lib/integrations.ts` module pulls the inline groups out of the page.tsx into a reusable source — both the rev-165 page and the rev-202 endpoint read from one place so the channel inventory cannot drift between the human-readable surface and the protocol-bound surface (mirrors the rev-37 changelog-releases shared module + rev-97 roadmap-items shared module at the integrations axis). Each row carries key + name + detail + auth + sinceRev. Response also includes an aggregate `perAxis` summary (Inbound / Outbound / Programmatic counts) so MCP hosts rendering 'Loop Desk supports N integrations across 3 axes' don't have to recompute counts. No auth — public marketing surface (same model as /api/v1/badge.svg + /api/v1/roadmap-* + /api/v1/changelog + /api/v1/blog + /api/v1/onboarding-templates). Cache-control public, max-age=300, s-maxage=1800 — the integrations list changes only when we ship a new channel. The OpenAPI 3.1 spec types the new endpoint with full request/response schemas including the perAxis sub-object + groups[].items[] shape with every field typed + sinceRev as a string (since it carries non-numeric data like 'rev 17 (single URL), rev 19 (per-event router)'). Strategic significance: the public marketing v1 cluster is now six axes deep — planned (roadmap) + most-requested (roadmap-votes) + shipped (changelog) + brand voice (blog) + industry-fit (templates) + channels (integrations). The upcoming MCP server (Q3 #1) has nothing left to design across the public marketing v1 cluster at any of the six axes."},{"label":"Dedicated /pricing public page — closes the canonical-URL gap on the load-bearing procurement query","description":"Until rev 202 the only pricing surface was an in-page anchor on the landing page (loopdesk.space/#pricing). Procurement reviewers searching for 'Loop Desk pricing' or sharing a pricing URL with a teammate had no canonical page to land on — anchors don't share well in Slack/email/CRM (no OG preview, no SEO-friendly URL, no individual analytics), don't get their own crawl priority in the sitemap, and degrade in search snippets. Rev 202 closes that. New /pricing page ships three plan cards (Free / Pro $29-mo / Team $79-mo) with feature lists + per-tier hard caps (sources, memory TTL, loop interval floor) in a structured dl block, plus a competitor-comparison section that names Notion Custom Agents ($10/1,000 credits as of May 2026) + HubSpot Breeze ($0.50 per resolved conversation / $1 per qualified lead) + generic per-token billing as the three pricing models Loop Desk explicitly rejects, plus a procurement-evidence section that names what every tier ships (approval-first on every tier, audit trail on every tier, daily cost cap on every tier — higher tiers unlock higher caps, not different products), plus a closing CTA. JSON-LD ItemList structured data with @type=Offer per plan so Google + AI tooling discovery systems consume schema.org pricing markup. Full openGraph + twitter card metadata. Crawler-friendly with priority 0.8 in the sitemap (highest of any public marketing page since pricing is the most-searched B2B procurement query for AI tooling). Every existing nav link across the public marketing surface (landing, blog, docs, changelog, changelog/[rev], changelog/cadence, roadmap, integrations, templates, templates/[key], templates/by-category) now points at /pricing instead of the legacy /#pricing in-page anchor. Strategic significance: closes the procurement-discovery loop on the public marketing surface. SEO win — 'Loop Desk pricing' / 'flat-fee AI workspace pricing' / 'AI workspace no credits' all land on a real page instead of a landing-page section. Pairs with /integrations (vendor inventory) + /templates (industry-fit) + /changelog (history) + /roadmap (future) + /blog (brand voice) + /pricing (cost) as the now-sixth public marketing surface on the human-readable axis."},{"label":"/llms-full.txt — comprehensive AI-discoverability context file","description":"Modern AI-discoverability surface that complements the existing rev-1 /llms.txt. The llms.txt convention (proposed 2024-2025, widely adopted by 2026) has emerged as the AI equivalent of robots.txt + sitemap.xml — a stable entry point AI agents read first to bootstrap their understanding of a site. The bare /llms.txt answers 'what is this product?' in 60 seconds. The deeper /llms-full.txt answers 'what does this product do, who is it for, what does it cost, what does it connect to, what's it been doing lately?' in 5 minutes. Until rev 202 AI agents (ChatGPT search, Claude search, Perplexity, Bing AI) indexing the site had to crawl 200+ URLs to learn what Loop Desk does. Rev 202 collapses that to one stable URL. The file aggregates every public-facing data source — pricing, integrations (every channel + auth model), all 73 onboarding templates organised by industry category with launch metadata, the full roadmap (Now/Next/Later phases), the last 12 changelog revisions with highlights, the blog categories + 15 most-recent posts with excerpts, and a procurement-evidence section naming every governance control. Cache-control public, max-age=3600. Strategic significance: procurement-conscious AI searches ('find me a governance-first AI workspace under $50 a seat with daily cost cap') land on rich content instead of a summary. Pairs with /api/v1/integrations + /pricing as the third rev-202 public surface that answers a procurement-relevant question — the three together close the procurement-discovery story across human (pricing page), protocol (v1 integrations), and AI (llms-full) reading axes."},{"label":"OpenAPI 3.1 typed coverage on /integrations + cumulative visual polish + sitemap entry — 110th unbroken cadence rev","description":"The OpenAPI 3.1 spec types the new GET /integrations endpoint with full request/response schemas (no parameters; response shape with generatedAt + total + perAxis object with Inbound/Outbound/Programmatic counts + groups[] each carrying axis enum + intro + count + items[] each with key + name + detail + auth + sinceRev typed). The cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 110th unbroken rev with rev 202. The OpenAPI spec changelog header gains a rev-202 block explaining the three diversification primitives. Sitemap.xml gains /pricing (priority 0.8, weekly changeFrequency) — higher priority than /integrations (0.7) since pricing is the most-searched B2B procurement query. Plus cumulative visual polish on the /pricing page itself: brand-color teal accent pills at the hero ('No per-cycle credits' / 'No metered AI tokens' / 'No overage bills' / 'Daily cost cap on every tier') matching the rev-22+ design-language thread; per-plan-card 'Most popular' tag on the featured Pro tier; per-tier hard-caps dl block with dashed border so the caps read as a sibling of the rev-22+ chip vocabulary; competitor-comparison row treatment with brand-color teal vs brand-amber palette distinguishing 'them' (Notion/HubSpot per-cycle) from 'us' (Loop Desk flat-fee); procurement-evidence card grid with brand-amber callout treatment on the 'What we don't do' card so the eye lands on the contrast. Strategic significance: keeps the rev-by-rev visual-hierarchy discipline alive — every rev 22+ has carried at least one piece of cumulative polish, and rev 202's polish is load-bearing because the new /pricing page is the most-procurement-loaded surface in the product and needs to read as part of the rev-22+ design language so procurement reviewers recognise the visual vocabulary across all six public marketing surfaces."}]},{"rev":"rev 201","date":"2026-05-12","title":"Closes two more named rev-199 radar candidates at the templates axis (independent toy / hobby shops with named-supplier continuity + age-gating + safety hygiene per CPSIA + ASTM F963 + holiday inventory cadence with named-buyer ordering window in February-May + named-recall response with same-day named-pull on every CPSC notice, and independent framing / mat-board ateliers with named-piece chain-of-custody + named-substrate + named-mat + named-glazing discipline with named-conservation-grade for any named-archival piece + rush-job hygiene with named-deadline + named-rush-fee + named-substitution-risk-disclosure + named-on-time-confidence rating + named-conservation-grade supplier continuity) bringing the templates cluster to seventy-three named verticals — the rev-199 next-radar wave queued small independent toy / hobby shops + independent framing / mat-board ateliers as the rev-200/201 candidates, with rev-200 deliberately stepping off the templates grind for accessibility + milestone + per-category recent endpoint work, and rev-201 picking the radar back up. Plus extends the rev-192 /api/v1/onboarding-templates/categories endpoint with a new per-category `latestLaunch` block (most-recently-shipped template per category with its key + name + rev + date) so MCP hosts rendering 'browse Loop Desk's industry coverage by freshness' get the per-category freshness answer in the same call as the rev-198 depth answer — pairs with `coverageDepth` as the depth + freshness signal pair on every category row. Plus mirrors the rev-201 freshness signal at the human-readable surface: the /templates hero category-chip tooltip now surfaces 'newest rev N (YYYY-MM-DD)' alongside the existing 'N templates · M memory entries · K sample signals' depth signal so procurement reviewers landing on /templates see depth + freshness on one hover. The OpenAPI 3.1 spec types the new `latestLaunch` field with full schema + count copy bumps 71 → 73 across the rev-172 listing endpoint description in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 109th unbroken rev with rev 201. Plus 16 new SEO keywords cover the toy / hobby + framing / mat-board axes (AI for toy shops + AI for hobby shops + AI for game shops + AI for CPSC recall response + AI for CPSIA compliance + AI for ASTM F963 toy safety + AI for holiday inventory cadence + AI for framing ateliers + AI for custom framing shops + AI for mat-board cutters + AI for conservation framing + AI for archival framing + AI for piece chain-of-custody + AI for rush-job hygiene in framing) (rev 201)","highlights":[{"label":"Two more onboarding templates — Independent toy / hobby shops + Independent framing / mat-board ateliers","description":"Closes the named rev-199 radar wave at two more underserved owner-led retail + specialty segments where regulated discipline (CPSIA + ASTM F963 toy safety on the toy/hobby side, named-conservation-grade material continuity on the framing/mat-board side) is the load-bearing differentiator against generic chain retail. Independent toy / hobby shops (4 high-importance memory entries: named-supplier continuity with named-primary + named-secondary on every named-product line crossing 2% of trailing-12-month revenue + sub-policy on rep + acquisition changes, age-gating + safety hygiene per CPSIA + ASTM F963 with named-age-band + named-safety-cert reference on file in named-supplier-record + named-display posture rule on small-parts toys + named-pellet items + named-craft-chemicals, holiday inventory cadence with named-buyer ordering window in February-May for the named-Q4 cycle + named-Q4-allocation target tied to named-prior-year-Q4 + named-trend-adjustment + named-supplier-allocation-confirmation, named-recall response with same-day named-pull from named-floor + named-website + named-supplier consult on every CPSC notice + named-customer-record-pull on named-affected-batch + 1 sample mid-Q4 named-supplier allocation shortage signal on a named-hot-product-line). Independent framing / mat-board ateliers (4 high-importance memory entries: named-piece chain-of-custody with named-condition-report + named-photographs at named-intake + named-bench-handoff at every named-stop signed by the named-bench-worker + named-pickup-signoff at named-customer-pickup, named-substrate + named-mat + named-glazing discipline with named-conservation-grade for any named-archival piece + sub-policy on named-sentimental + named-monetary-value > $500 pieces, rush-job hygiene with named-deadline + named-rush-fee + named-substitution-risk-disclosure + named-on-time-confidence rating on every <7-day named-quote, named-conservation-grade supplier continuity with named-quarterly named-supplier review + named-second-source review on any named-supplier above 5% named-quality-rejection or 2-week named-lead-time miss + 1 sample mid-job named-substrate-substitution disclosure-gap signal on a named-archival-piece). Two new OnboardingTemplateKey enum values (toy_hobby_shop in retail-ecommerce, framing_mat_board in manufacturing-specialty) extend the rev-19 enum without migration. The templates cluster is now seventy-three named verticals deep — closes the day-1 starvation-point story across two more underserved owner-led segments where regulated discipline (CPSC + CPSIA + ASTM F963 toy safety; named-conservation-grade material continuity) is the load-bearing differentiator against generic AI tools that don't know the regulatory vocabulary."},{"label":"Per-category latestLaunch metadata on /api/v1/onboarding-templates/categories — closes the freshness-axis gap on the rev-192 taxonomy endpoint","description":"Until rev 201 the rev-192 /api/v1/onboarding-templates/categories endpoint carried per-category depth (rev 198 `coverageDepth` block) + per-category count + archive URL — but no freshness signal. MCP hosts rendering 'which category got new coverage most recently?' had to fetch the rev-172 full listing + the rev-176 TEMPLATE_LAUNCH map and aggregate client-side, OR fetch the rev-200 per-category recent endpoint per category. Rev 201 closes that with one new field per category row: `latestLaunch: { templateKey, templateName, rev, date } | null`. Pure derived state from the rev-176 TEMPLATE_LAUNCH map walked once per request + the rev-190 TEMPLATE_CATEGORY_BY_KEY filter — no schema cost, no migration. Null when the category has no templates yet (defensive — the 10 industry buckets all currently have ≥2 templates so this null branch is reserved for future-proofing). Pairs naturally with `coverageDepth` (rev 198) as the depth + freshness signal pair on every category row, so 'browse by industry' MCP-host UIs can sort by depth OR by freshness with one bearer-less GET. The OpenAPI 3.1 spec types the new field with full schema in lockstep — the cadence pattern from rev 78 onward (every v1 enhancement gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 109th unbroken rev with rev 201. Strategic significance: closes the named rev-200/v1 'category freshness' gap that the per-category recent endpoint (rev 200) addressed at the per-category-array shape — rev 201 brings the same signal to the taxonomy endpoint as a single field so callers reading the categories list once get both depth + freshness without a follow-up call per category."},{"label":"/templates hero category-chip tooltip now surfaces freshness alongside depth — mirrors v1 latestLaunch at the human-readable surface","description":"Rev 201 mirrors the new v1 `latestLaunch` field at the human-readable /templates surface: the rev-197 per-category chip cluster's tooltip (which already surfaced depth via 'N templates · M memory entries · K sample signals' since rev 198) now ALSO surfaces 'newest rev N (YYYY-MM-DD)' as a freshness tail so procurement reviewers landing on /templates from a per-vertical search snippet see depth + freshness on one hover. Pure derived state from the rev-176 TEMPLATE_LAUNCH map — no schema cost. New `CategoryStat` type adds `latestRev` + `latestDate` + `latestDateMs` fields to the existing getCategoryStats aggregator. The tooltip stays scannable on first glance (the chip face itself shows only category name + count) but the depth + freshness answer is one hover away. Strategic significance: closes the depth+freshness symmetry across both reading horizons (protocol-bound v1 + human-readable HTML). Pairs naturally with the rev-176 60-day 'New' pill on every per-template card + the rev-196 'Recently added' featured strip + the rev-200 per-category recent strip as the four-axis freshness story across every public marketing surface on the templates cluster."},{"label":"Templates page count + radar copy refresh + 16 new SEO keywords + OpenAPI typed coverage (109th unbroken cadence rev)","description":"Templates page count copy bumps 'Seventy-one verticals today' → 'Seventy-three verticals today' across hero, metadata title, OpenGraph + Twitter description, JSON-LD CollectionPage block, and templates-cta. Sixteen new SEO keywords on the templates metadata covering toy / hobby + framing / mat-board axes (AI for toy shops, AI for independent toy retailers, AI for hobby shops, AI for game shops, AI for CPSC recall response, AI for CPSIA compliance, AI for ASTM F963 toy safety, AI for holiday inventory cadence, AI for framing ateliers, AI for custom framing shops, AI for mat-board cutters, AI for conservation framing, AI for archival framing, AI for piece chain-of-custody, AI for rush-job hygiene in framing). Don't see your vertical? CTA copy refreshes the next-radar list — replaced with independent specialty fishing / outdoor outfitters (named-license currency + named-charter continuity + named-safety-incident hygiene), independent bookbinders / paper conservators (named-substrate + named-adhesive discipline + named-piece chain-of-custody adjacent to the rev-201 framing axis), independent stationery / pen shops (named-supplier continuity + named-collectibles authentication), and small independent cheesemongers (named-affinage cycle + named-supplier continuity + named-shrinkage discipline) now that toy/hobby + framing/mat-board are shipped. The rev-172 listing endpoint description bumps from 71 → 73 verticals in the OpenAPI 3.1 spec + the new latestLaunch field is fully typed on the rev-192 categories endpoint response schema — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 109th unbroken rev with rev 201."}]},{"rev":"rev 200","date":"2026-05-09","title":"Milestone revision — 200 unbroken rev-by-rev cadence revs shipped on the public changelog. Deliberate diversification away from the 13-rev templates grind (rev 188-199 each closed industry-template wave candidates) onto three orthogonal axes that have been named in the running state but kept getting deprioritised: prefers-reduced-motion accessibility support across every animation in the app (genuine a11y gap — ~48 keyframes + every transition fired regardless of OS-level user preference until rev 200), per-category recently-shipped HTML strip on the rev-191 /templates/by-category/{category} archive pages (closes the named rev-199 next-sprint candidate at the per-category axis on the human-readable surface), per-category recently-shipped v1 endpoint at GET /api/v1/onboarding-templates/by-category/{category}/recent (closes the same candidate on the protocol-bound side — mirrors the rev-199 workspace-axis convenience read at the per-category axis), plus a milestone visual treatment on the /changelog hero anchoring rev 200 as a meaningful inflection point (every 100 revs gets the milestone pill since rev 100; rev 200 also gets a soft hero card surfacing the round-number cadence achievement). The connecting thread: every rev-200 change makes an *existing* primitive load-bearing on a new axis — the rev-22+ design language gains its first explicit accessibility primitive (reduced-motion query covering ~48 keyframes), the rev-191 HTML archive pages reach the recency-axis read shape rev-196 introduced on the workspace surface, the rev-190 by-category v1 cluster reaches its second axis (drill-down + recent), and the rev-100 milestone-rev visual treatment lights up its second occurrence (rev 200)","highlights":[{"label":"Accessibility — prefers-reduced-motion support across every animation","description":"Until rev 200 every one of the ~48 @keyframes animations + every transition in globals.css fired regardless of OS-level user preference. Operators with vestibular disorders, attention-related sensitivities, or migraine triggers — plus anyone running on battery-saver mode where the browser respects reduced-motion — had no escape hatch. Pulses (rev-12 heartbeat, rev-76 what's-new badge, rev-77 personal inbox, rev-97 sources health + latest-release pill, rev-180 shipping cadence, rev-183 cadence-trend chip), spinners, fade-ins (every rev-33 .app-panel ld-fade-in), slide-downs (rev-114 live-preview, rev-118 memory bulk import), and hover lifts all fired full-strength. Rev 200 adds the standard accessibility recipe: a single @media (prefers-reduced-motion: reduce) block in globals.css collapses every animation + transition to ~0.01ms so dependent JS transitionend / animationend handlers still fire (which some chip-pulse + flash-highlight components rely on for their state cleanup), but the visible motion is functionally zero. Affordances that signal state via transform (hover lift, sparkline highlight, FAB entrance) keep their final visual state — only the transition between states is collapsed. Strategic significance: every rev 22+ has carried at least one piece of cumulative polish. Rev 200's polish is the first one that's genuinely an accessibility fix rather than a visual-hierarchy refinement — it benefits every operator on every surface that uses motion. The rev-22+ visual-hierarchy thread now has a load-bearing accessibility primitive supporting it."},{"label":"Per-category recently-shipped HTML strip on /templates/by-category/{category} archive pages","description":"Closes the named rev-199 next-sprint candidate at the per-category axis on the human-readable surface. Until rev 200 the rev-196 'Recently added' featured strip lived only on the workspace-axis /templates index — visitors landing on a per-category archive page (rev 191) had no equivalent surface. The rev-191 archive pages list every template in the category in declaration order, but a procurement reviewer landing through 'AI workspace for healthcare practices' search snippet had no signal of which healthcare templates shipped most recently without parsing every card's 'Added in rev N' meta line by hand. Rev 200 closes that. New 'Recently added in {category}' strip surfaces the 3 most-recently-shipped templates in that category (descending by launch date with enum order as tiebreak; pure derived state from the rev-176 TEMPLATE_LAUNCH metadata map — no schema cost, no migration). Hidden when the category has fewer than 4 templates in total (the strip would tautologically be the whole category). Each strip card shares the rev-196 .ld-templates-recent CSS vocabulary so the workspace + per-category recency surfaces read with one consistent visual story. Strategic significance: closes the recency-axis read shape on every public-facing template surface — workspace index (rev 196 strip), per-category archive (rev 200 strip), workspace-axis v1 (rev 199 endpoint), per-category v1 (rev 200 endpoint)."},{"label":"GET /api/v1/onboarding-templates/by-category/{category}/recent — per-category recency read shape","description":"Closes the named rev-199 next-sprint candidate on the protocol-bound side. New bearer-less GET endpoint returns the N most-recently-shipped templates in a given category, sorted descending by launch date with enum order as a deterministic tiebreak (mirrors the rev-199 /onboarding-templates/recent shape at the per-category axis). Optional limit query param (default 3, max 20). Returns 404 with typed { error: 'category_not_found', category, validCategories[] } when the slug is unknown (mirrors the rev-190 by-category 404 shape). Each row carries the same fields as the rev-199 workspace-axis endpoint: key + name + description + keywordHint + category + categoryLabel + memoryCount + signalCount + url + apiUrl + launchRev + launchDate. Cache-control public, max-age=300, s-maxage=1800. The OpenAPI 3.1 spec types the new endpoint with full request/response schemas + 404 error path in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 108th unbroken rev with rev 200. Pairs with the rev-190 by-category drill-down + rev-200 by-category recent strip + rev-199 workspace-axis recent endpoint as the four-axis recency read cluster on the templates v1 surface (workspace listing rev 172 + workspace recent rev 199 + per-category drill-down rev 190 + per-category recent rev 200). Strategic significance: the templates v1 cluster reaches its seventh read shape — the upcoming MCP server's templates-axis tooling has nothing left to design across all seven read shapes including per-category recency."},{"label":"Rev 200 milestone visual treatment + cumulative changelog hero polish","description":"Rev 200 marks 200 unbroken cadence revs shipped on the public changelog (rev 100 was the first milestone; rev 200 is the second). The rev-100 .ld-changelog-item-milestone visual treatment fires automatically (every rev whose number is a multiple of 100 gets the brand-purple left-border accent + 'milestone' pill on the changelog page) — rev 200 inherits it. Plus a new milestone hero card surfaces above the rev list on /changelog itself naming the round-number cadence achievement: '200 unbroken cadence revs shipped' headline + '~6 months of public, frequent, audit-trail-grade product velocity' subline + a CTA inviting subscribers to the rev-37 RSS feed + rev-178 cadence calendar + rev-179 weekly pulse pill. The hero card uses a brand-purple gradient background distinct from the rev-179 brand-color teal pulse pill so the milestone reads as anniversary signal rather than ambient cadence chrome. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 200's polish is load-bearing because the milestone-rev visual treatment had only ever fired once (rev 100). Strategic significance: anchors the rev-200 inflection as a moment worth marking, and explicitly diversifies away from the 13-rev templates grind by being a non-template celebration of cadence consistency. The rev-by-rev visual-hierarchy discipline (every rev 22+ has carried at least one piece of cumulative polish) reaches its 178th unbroken rev with rev 200."}]},{"rev":"rev 199","date":"2026-05-09","title":"Closes two more named radar candidates at the templates axis (small independent jewellers with named-craftsman continuity + custom-order milestone cadence + appraisal + insurance documentation hygiene + chain-of-custody on every piece in for repair, and independent specialty bike shops with named-mechanic continuity + service-record continuity per named bike + seasonal inventory turn + safety-incident hygiene with named-component quarantine on any post-service incident) bringing the templates cluster to seventy-one named verticals — the rev-198 next-radar wave queued small independent jewellers + independent specialty bike shops at the top of the queue, and rev 199 ships them at the cheapest possible shape on top of the existing rev-19 ONBOARDING_TEMPLATES array. Plus opens the sixth read shape on the templates v1 cluster — recently-shipped convenience read at /api/v1/onboarding-templates/recent — so MCP hosts rendering a 'what's new on the templates surface' widget don't have to fetch the rev-172 full listing endpoint and sort the rows client-side by launchDate. Mirrors the rev-175 /api/v1/changelog/latest convenience pattern at the templates axis. The OpenAPI 3.1 spec count copy bumps 69 → 71 across the rev-172 listing endpoint description in lockstep + the new convenience endpoint is fully typed in the same cycle the dashboard primitive ships — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 107th unbroken rev with rev 199. Plus radar copy refresh on the templates 'Don't see your vertical?' CTA names the next vertical wave (independent toy / hobby shops + framing / mat-board ateliers + independent specialty fishing / outdoor outfitters + independent bookbinders / paper conservators) now that jewellers + bike shops are shipped. Plus 12 new SEO keywords cover the jeweller + bike-shop axes. Plus subtle visual polish on the rev-196 Recently-added strip cards: the rev-197 per-card category badge now brightens on parent-link hover so the chip feels like part of the same surface in motion (rev 199)","highlights":[{"label":"Two more onboarding templates — small independent jewellers + independent specialty bike shops","description":"Closes the named rev-198 next-radar wave at two more underserved owner-led retail segments where the named-craftsman + named-mechanic relationship is the load-bearing differentiator against generic chain retail. Small independent jewellers (4 high-importance memory entries: named-craftsman continuity with named-primary + named-backup on every commission + sub-policy on bench substitutions, custom-order milestone cadence with named touchpoints at design + wax + cast + set + final review + named customer-comm at every milestone, appraisal + insurance documentation hygiene on every named piece over $2K with named-replacement-value + named-stone-grading + named-photographer record + 24-hour delivery threshold, chain-of-custody on every piece in for repair / resize / restoration with named-condition-report + named-photographs + named-workbench-handoff + named-pickup-signoff + 1 sample mid-commission stone-availability signal). Independent specialty bike shops (4 high-importance memory entries: named-mechanic continuity with named-primary + named-backup on every multi-day service + sub-policy on quick-fix substitutions, service-record continuity per named bike with named-mechanic + named-finding + named-replacement + named-recommendation + named-deferred-work, seasonal inventory turn with named-buyer ordering window in November-January + end-of-season liquidation cadence in September-December, safety-incident hygiene with named-component quarantine on any post-service incident + 3-in-90-days pattern threshold for named-component-line review + 1 sample mid-season post-service brake incident pattern signal). Two new OnboardingTemplateKey enum values (indie_jeweller, specialty_bike_shop) extend the rev-19 enum without migration. The templates cluster is now seventy-one named verticals deep. Strategic significance: closes the named rev-198 next-radar wave (the rev-198 running state explicitly named both as the top of the queue). Both verticals map cleanly onto Loop Desk's approval-first vocabulary — jewellers lean on named-craftsman continuity + chain-of-custody + appraisal documentation discipline (high-trust, high-value), bike shops lean on named-mechanic continuity + service-record continuity + safety-incident pattern detection (regulated equipment, named-relationship retention)."},{"label":"GET /api/v1/onboarding-templates/recent — sixth read shape on the templates v1 cluster","description":"Until rev 199 MCP hosts and AI tooling roundup newsletters rendering 'what's new on the templates surface' had to fetch the rev-172 full listing endpoint and sort the rows client-side by launchDate. Rev 199 makes the answer a one-call bearer-less GET. Returns the N most-recently-shipped templates (default 4, max 20) sorted descending by launch date with enum order as a deterministic tiebreak — so two templates launched on the same date render in the order they appear in ONBOARDING_TEMPLATES. Each row carries key + name + description + keywordHint + category + categoryLabel + memoryCount + signalCount + url + apiUrl + launchRev + launchDate. Mirrors the rev-175 /api/v1/changelog/latest convenience pattern at the templates axis on the protocol-bound side, and the rev-196 dashboard 'Recently added' featured strip at the human-readable axis. Pure derived state from the rev-176 TEMPLATE_LAUNCH metadata map — no schema cost, no migration. Strategic significance: closes the sixth read shape on the templates v1 cluster (full listing rev 172 + per-template detail rev 189 + per-category drill-down rev 190 + standalone-taxonomy rev 192 + keyword search rev 193 + aggregate stats rev 194 + recent rev 199). Pairs with /api/v1/changelog/latest (rev 175) + /api/v1/changelog/peak-week (rev 187) as the third single-record convenience endpoint on the public marketing surface — same pattern, three surfaces, one consistent vocabulary. Cache-control public, max-age=300, s-maxage=1800."},{"label":"Templates page count + radar copy refresh + SEO keywords + OpenAPI typed coverage + cumulative visual polish","description":"Templates page count copy bumps 69 → 71 across hero, metadata title, OpenGraph + Twitter description, JSON-LD CollectionPage block, and templates-cta. Two new keyword hints on the per-vertical chip line (small independent jewellers `Named-craftsman continuity · custom-order milestone cadence · appraisal hygiene · insurance documentation`; independent specialty bike shops `Named-mechanic continuity · service-record continuity · seasonal inventory turn · safety-incident hygiene`). Twelve new SEO keywords on the templates metadata covering jeweller + bike-shop axes (AI for jewellers + AI for independent jewellers + AI for jewellery shops + AI for watchmakers + AI for custom-jewellery commissions + AI for named-craftsman continuity + AI for appraisal documentation + AI for bike shops + AI for independent bike shops + AI for cycling retail + AI for bicycle service centres + AI for named-mechanic continuity + AI for service-record continuity). 'Don't see your vertical?' next-radar list refreshes — replaced with independent toy / hobby shops, framing / mat-board ateliers adjacent to the rev-193 picture-framing axis, independent specialty fishing / outdoor outfitters, and independent bookbinders / paper conservators now that jewellers + bike shops are shipped. The OpenAPI 3.1 spec types the new /onboarding-templates/recent endpoint with full request/response schemas (limit query param 1-20 default 4 + response shape with templates[] each carrying key + name + description + keywordHint + category + categoryLabel + memoryCount + signalCount + url + apiUrl + launchRev + launchDate) — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 107th unbroken rev with rev 199. Plus subtle visual polish on the rev-196 Recently-added strip cards: the rev-197 per-card category badge below each strip card name now brightens on parent-link hover (`rgba(31,143,137,0.08) → 0.18` background + matching border-color emphasis) so the chip reads as part of the same surface in motion vocabulary, mirroring the rev-193 per-template card hover treatment at the strip-card axis. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 199's polish is load-bearing because the rev-196 + rev-197 strip surfaces had accumulated five distinct visual elements (rev label + date + name + category badge + keyword-hint + stats line + CTA) without a unified hover treatment until rev 199."}]},{"rev":"rev 198","date":"2026-05-09","title":"Closes two more named radar candidates at the templates axis (independent ski / snowboard rental shops with seasonal inventory turn + named-tech continuity + equipment-incident hygiene + fit-verification discipline, and small independent yoga studios with named-member 14-day silent-attendance threshold + named-instructor continuity + class-format hygiene + injury-incident cadence) bringing the templates cluster to sixty-nine named verticals — the rev-197 next-radar wave queued ski / snowboard rental shops + small independent yoga studios at the top of the queue, and rev 198 ships them at the cheapest possible shape on top of the existing rev-19 ONBOARDING_TEMPLATES array. Plus extends the rev-192 /api/v1/onboarding-templates/categories endpoint with a per-category `coverageDepth` block (memory entries + sample signals + total evidence) so MCP hosts rendering 'browse by depth' or sorting categories by accumulated evidence trail get the depth answer in the same call as the count answer — pure derived state from the rev-19 ONBOARDING_TEMPLATES corpus walked once per request. Plus subtle visual polish on the rev-197 hero category chips: count pill brightens on chip hover so the cluster feels more tactile + per-chip tooltip now surfaces the same depth signal the new v1 field exposes ('9 templates · 36 memory entries · 9 sample signals'). Plus the OpenAPI 3.1 spec count copy bumps 67 -> 69 across the rev-172 listing endpoint description in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 106th unbroken rev with rev 198. Plus radar copy refresh on the templates 'Don't see your vertical?' CTA names the next vertical wave (small independent jewellers + independent toy / hobby shops + independent specialty bike shops + framing / mat-board ateliers) now that ski/snowboard + yoga are shipped. Plus 12 new SEO keywords cover the ski/snowboard + yoga axes (rev 198)","highlights":[{"label":"Two more onboarding templates — independent ski / snowboard rental shops + small independent yoga studios","description":"Closes the named rev-197 radar wave at two more underserved owner-led retail + healthcare-wellness segments. Independent ski / snowboard rental shops (4 high-importance memory entries: seasonal inventory turn with named-buyer ordering window + end-of-season liquidation cadence, named-technician continuity on every binding mount + DIN setting with ASTM F2063-tested values + named primary + backup, equipment-incident hygiene with same-day named-incident report + 7-day equipment quarantine + 3-in-90-days pattern threshold, fit verification on every rental with measured height + measured weight + boot fit + ability honesty + helmet fastening verification + 1 sample mid-season binding-incident pattern signal). Small independent yoga studios (4 high-importance memory entries: named-member 14-day silent-attendance threshold with named-instructor outreach + 30-day named-owner conversation, named-instructor continuity with primary + backup paired-shadow on every weekly slot + 4-week paired-shadow on planned mid-season substitutions, class-format hygiene with published heat + intensity + pace + experience floor on every class + 30% drift trigger, injury-incident cadence with same-day named-incident report + 30-day named-instructor follow-up + 3-in-90-days teaching-cue review trigger + 1 sample 14-day silent-regular signal). Two new OnboardingTemplateKey enum values (ski_snowboard_rental, yoga_studio) extend the rev-19 enum without migration. The templates cluster is now sixty-nine named verticals deep. Strategic significance: closes the named rev-197 next-radar wave (the rev-197 running state explicitly named both as the top of the queue). Both verticals map cleanly onto Loop Desk's approval-first vocabulary — ski/snowboard rental leans on named-tech DIN-setting safety discipline + seasonal turn discipline (highly regulated, equipment-heavy), yoga studios lean on named-instructor continuity + injury-pattern detection (membership-cadence, named-relationship retention)."},{"label":"coverageDepth field on /api/v1/onboarding-templates/categories — closes depth-axis gap on the rev-192 standalone-taxonomy endpoint","description":"Until rev 198 the rev-192 /api/v1/onboarding-templates/categories endpoint returned per-category templateCount + URLs, but MCP hosts rendering 'browse by depth' (e.g. sort categories by total evidence) had to fetch the rev-194 /api/v1/onboarding-templates/stats endpoint and walk the perCategory[] array. Rev 198 closes that gap. Every category row now also carries a coverageDepth: { memoryEntries, sampleSignals, totalEvidence } block — pure derived state walked once per request from the rev-19 ONBOARDING_TEMPLATES corpus. The OpenAPI 3.1 spec types the new field with full schema in lockstep. Strategic significance: pairs with the rev-198 hero category-chip tooltip on the human-readable /templates surface so dashboard ↔ v1 read the same depth signal across both reading horizons. The MCP server's templates-axis tooling now closes the depth-axis read across all 5 axes where it makes sense (per-template detail rev 189 includes memory + signal counts; per-category drill-down rev 190 includes them; standalone-taxonomy rev 192 + 198 includes per-category sums; aggregate stats rev 194 includes both per-template + per-category sums; keyword search rev 193 includes per-template counts)."},{"label":"Templates page count + radar copy refresh + SEO keywords + cumulative visual polish","description":"Templates page count copy bumps 67 → 69 across hero, metadata title, OpenGraph + Twitter description, JSON-LD CollectionPage block, and templates-cta. Two new keyword hints on the per-vertical chip line (Independent ski / snowboard rental `Seasonal inventory turn · named-tech continuity · equipment-incident hygiene · fit verification`; Small independent yoga studios `Membership lifecycle · named-instructor continuity · class-format hygiene · injury cadence`). Twelve new SEO keywords on the templates metadata — AI for ski rental shops + AI for snowboard rental shops + AI for winter sports retail + AI for seasonal inventory turn + AI for binding-mount discipline + AI for fit-verification rentals + AI for yoga studios + AI for independent yoga studios + AI for membership-lifecycle yoga + AI for class-format hygiene + AI for injury-incident cadence + AI for named-instructor continuity. 'Don't see your vertical?' next-radar list refreshes — replaced with small independent jewellers (named-craftsman continuity + custom-order milestone cadence + appraisal + insurance hygiene), independent toy / hobby shops (named-supplier continuity + age-gating + safety hygiene + holiday inventory cadence), independent specialty bike shops (named-mechanic + service-record continuity), and framing / mat-board ateliers adjacent to the rev-193 picture-framing axis now that ski/snowboard + yoga are shipped. Per-template detail page keyword-hint map gains the matching two new entries via the rev-195 canonical TEMPLATE_KEYWORD_HINT consolidation so /templates/[key] for the new verticals reads with the same depth as the existing sixty-seven verticals. Plus subtle visual polish on the rev-197 category-chip cluster: count pill brightens to brand-color on chip hover so the chip feels more tactile, and the per-chip tooltip now surfaces the rev-198 coverageDepth signal at the human-readable surface ('9 templates · 36 memory entries · 9 sample signals') mirroring the new v1 field. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 198's polish is load-bearing because it ties the new v1 depth-axis primitive to the human-readable surface in the same cycle."}]},{"rev":"rev 197","date":"2026-05-09","title":"Closes two more named radar candidates at the templates axis (small independent ice-cream / gelato shops with recipe-yield discipline per named flavour + supplier continuity on dairy + named inclusion suppliers + seasonal-staffing cadence with named scoopers + named makers + daily quality cadence on every batch, and independent tour operators with named-guide continuity + small-group experience design with named max group size + named accessibility posture + same-day named-incident reporting + weather-contingency hygiene with named decision tree + customer-comm template) bringing the templates cluster to sixty-seven named verticals + opens two new at-a-glance affordances on the /templates index hero (per-category coverage chip cluster between the hero and the rev-196 Recently-added strip + per-card stats on every Recently-added card showing memory-entry + signal-entry counts + category badge) so first-time visitors evaluating Loop Desk for a specific industry get one-glance category coverage + per-card depth without scrolling the full grid. Pure additive on top of rev-19 ONBOARDING_TEMPLATES + rev-190 TEMPLATE_CATEGORY_BY_KEY (no schema cost, no migration). The OpenAPI 3.1 spec count copy bumps 65 → 67 across the rev-172 listing endpoint description in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 105th unbroken rev with rev 197.","highlights":[{"label":"Two more onboarding templates — small independent ice-cream / gelato shops + independent tour operators","description":"Closes two more named radar candidates at two more underserved owner-led retail + experiential entertainment segments where named-flavour recipe-yield discipline + named-dairy continuity (ice-cream/gelato) and named-guide continuity + small-group experience design (tour operators) are the load-bearing differentiators against generic AI tools. Small independent ice-cream / gelato shops (4 high-importance memory entries: recipe-yield discipline per named flavour with target yield + named-baseline waste + named-batch maker logged, supplier continuity with primary dairy + monthly milk-fat / somatic-cell-count / delivery-cadence checks + named-secondary qualified, seasonal-staffing cadence with named scoopers + named makers from May 1 + Apr 15 hiring + onboarding window close + 7-day mid-season replacement, daily quality cadence with named-maker tasting log on texture + named-flavour-balance + cabinet temperature). Independent tour operators (4 high-importance memory entries: named-guide continuity with named primary + named backup + 2-trip paired-shadow on guide changes, small-group experience design with named max group size + named accessibility posture per itinerary, safety-incident reporting with same-day named report + 24h/7d/30d follow-ups on major incidents + minor-incident pattern detection, weather-contingency hygiene with named threshold decision tree + named customer-comm template firing 18h out + named guide as the morning-of decision-maker). Two new OnboardingTemplateKey enum values (ice_cream_gelato, tour_operator) extend the rev-19 enum without migration. The templates cluster is now sixty-seven named verticals deep. Strategic significance: closes the day-1 starvation-point story across two more underserved owner-led segments — ice-cream/gelato is the named retail axis the rev-196 radar wave queued, tour operators is the named experiential entertainment axis the same radar surfaced. Both map cleanly onto Loop Desk's approval-first vocabulary."},{"label":"Per-category coverage chip cluster on /templates index hero — closes the in-hero category-axis gap","description":"Until rev 197 the only category-axis surface on the /templates index was the rev-190 chip filter directly above the grid, which only became visible after the operator scrolled past the rev-196 Recently-added strip. Visitors evaluating Loop Desk for a specific industry from a per-vertical search snippet had no one-glance read of 'where is Loop Desk's template coverage concentrated?' before they scrolled. Rev 197 closes that gap with a hero-level chip cluster directly under the rev-196 hero copy showing every industry category with a per-category count + a deep-link to the rev-191 per-category HTML archive page. Pure derived state from the rev-190 TEMPLATE_CATEGORY_BY_KEY map — no schema cost, no migration. Empty categories are silently filtered. Each chip carries a tooltip naming the category description so the operator's eye reads the chip's intent without parsing the per-archive landing page. Strategic significance: closes the at-a-glance category-axis gap at the load-bearing /templates entry surface. Procurement reviewers searching 'AI for healthcare practices' from a Google snippet now have a one-tap path into the matching subset (currently 12 healthcare verticals) instead of scrolling past the Recently-added strip + scanning the in-grid filter chips. Pairs with the rev-191 per-category HTML archive surface as the destination + the rev-190 in-grid filter chips as the in-grid narrowing surface."},{"label":"Per-card stats + category badge on every Recently-added strip card — closes depth-axis gap on rev-196","description":"The rev-196 Recently-added strip showed each recent vertical's name + keyword hint + read-the-template CTA but skipped the per-card depth-axis context (memory-entry count + signal-entry count + category placement) the rev-19 main grid surfaces inline on every card. Visitors scanning the strip had no read of 'how much depth does this template carry?' before clicking through. Rev 197 closes that gap. Each Recently-added card now also surfaces (a) a small category badge under the name showing the industry placement (e.g. 'Hospitality & food' for the rev-197 tour operator template), (b) a stats line below the keyword hint showing memory-entry + signal-entry counts. Pure derived state from the rev-19 ONBOARDING_TEMPLATES array (no schema cost). Strategic significance: closes the depth-axis gap on the rev-196 strip in the same vocabulary the rev-19 main grid uses (memory + signal counts) so visitors can pattern-match across both surfaces without context-switching. Pairs naturally with the rev-197 per-category coverage chip cluster — the chip cluster answers 'where is the coverage?' at the category axis, the per-card stats answer 'how deep is each new vertical?' at the per-template axis."},{"label":"OpenAPI count bump 65 → 67 + radar copy refresh + 12 new SEO keywords + cumulative visual polish","description":"The rev-172 GET /api/v1/onboarding-templates listing endpoint description bumps 65 → 67 in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 105th unbroken rev with rev 197. The rev-191 template-filter category-count fallback also bumps 65 → 67 so the chip filter shows the correct cardinality even when the workspace template pool is loaded asynchronously. The /templates 'Don't see your vertical?' radar copy refreshes — independent ski / snowboard rental shops, small independent yoga studios, small independent jewellers, and independent toy / hobby shops are now the next wave on the queue. Twelve new SEO keywords cover the ice-cream/gelato + tour-operator axes (AI for ice-cream shops, AI for gelato shops, AI for independent ice-cream operators, AI for recipe-yield discipline, AI for seasonal-staffing cadence, AI for daily quality cadence, AI for tour operators, AI for independent tour operators, AI for small-group experience design, AI for named-guide continuity, AI for safety-incident reporting, AI for weather-contingency hygiene). Plus cumulative visual polish: new `.ld-templates-cats*` CSS uses the brand-color teal palette + soft gradient + per-chip hover lift + focus-visible accessibility ring + print-stylesheet hide so the rev-194 procurement-takeaway PDF stays clean; the `.ld-templates-recent-stats` + `.ld-templates-recent-cat` chips wear the same brand-color treatment so all three rev-196/197 surfaces (strip card, category chip, in-grid card) read as siblings in one consistent visual vocabulary."}]},{"rev":"rev 196","date":"2026-05-09","title":"Closes two more named radar candidates at the templates axis (small independent fabric / quilting shops with supplier continuity + 60-day-ahead class programming + named-clientele continuity on the top 10% of customers + 12-month sell-through inventory floor, and independent paint-and-sip studios with 30-day class programming cadence + BYOB / liquor-licensing posture review + named primary + backup instructor continuity + 14-day private-event coordinator confirmation) bringing the templates cluster to sixty-five named verticals + opens a 'Recently added' featured strip at the top of /templates so first-time visitors see the most-recently shipped verticals before scrolling the full grid (pure derived state from the rev-176 TEMPLATE_LAUNCH map — no schema cost). The OpenAPI 3.1 spec count copy bumps 63 → 65 across the rev-172 listing endpoint description in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 104th unbroken rev with rev 196.","highlights":[{"label":"Two more onboarding templates — small independent fabric / quilting shops + independent paint-and-sip studios","description":"Closes two more named radar candidates at two more underserved owner-led retail + experiential entertainment segments where supplier continuity + named-clientele continuity (fabric/quilting) and BYOB / liquor-licensing posture + named-instructor continuity (paint-and-sip) are the load-bearing differentiators against generic AI tools. Small independent fabric / quilting shops (4 high-importance memory entries: supplier continuity with primary mill + named secondary on every load-bearing line, quarterly class programming published 60 days ahead with named instructor + pattern + skill level, named-clientele continuity with project + preference profile on the top 10% of customers, 12-month sell-through inventory floor with markdown decision within 14 days of breach + 1 sample stalled-project signal). Independent paint-and-sip studios (4 high-importance memory entries: 30-day class programming cadence with skill level + pour pairing, BYOB / liquor licensing posture documented + reviewed quarterly, named-instructor continuity with primary + backup for every weekly slot, 14-day event-booking confirmation with named coordinator + final headcount + BYOB / catering arrangements + 1 sample 14-day window birthday event coordinator signal). Two new OnboardingTemplateKey enum values (fabric_quilting, paint_and_sip) extend the rev-19 enum without migration. The templates cluster is now sixty-five named verticals deep. Strategic significance: closes the day-1 starvation-point story across two more underserved owner-led segments — fabric/quilting is the named retail axis the rev-194/195 radar wave kept queuing, paint-and-sip is the named experiential entertainment axis the same radar surfaced. Both map cleanly onto Loop Desk's approval-first vocabulary."},{"label":"'Recently added' featured strip on /templates index — visible-velocity affordance for first-time visitors","description":"Until rev 196 the rev-176 60-day 'New' pill on every card was the only signal of recency on the /templates index — visitors had to scan all 65 cards to find which shipped most recently. Rev 196 closes that gap with a 'Recently added' featured strip directly under the hero copy showing the four most-recently launched templates with rev label + launch date + name + keyword hint + read-the-template CTA. Each card links straight to the per-template detail page. Pure derived state from the rev-176 TEMPLATE_LAUNCH map — no schema cost, no migration, deterministic order (descending by launch date, enum order as tiebreak so two templates launched in the same rev render in declaration order). Pairs with the rev-176 sitemap freshness boost (priority 0.7 + lastModified at launch date for templates within 90 days) so the recency signal flows uniformly across human + crawler axes — the strip is the visible-velocity affordance for human visitors, the sitemap freshness boost is the same affordance for SEO crawlers + AI tooling discovery systems. Strategic significance: cumulative micro-polish (every rev 22+ has carried at least one) — and rev 196's polish is load-bearing because the templates cluster has accumulated 65 verticals and first-time visitors evaluating Loop Desk for a specific industry need a faster-than-grid-scroll path to 'what's new on the templates surface'."},{"label":"OpenAPI count bump 63 → 65 + radar copy refresh + 11 new SEO keywords","description":"The rev-172 GET /api/v1/onboarding-templates listing endpoint description bumps 63 → 65 in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 104th unbroken rev with rev 196. The rev-191 template-filter category-count fallback also bumps 63 → 65 so the chip filter shows the correct cardinality even when the workspace template pool is loaded asynchronously. The /templates 'Don't see your vertical?' radar copy refreshes — small ice-cream / gelato shops, small tour operators, ski / snowboard rental shops, and small yoga studios are now the next wave on the queue. Eleven new SEO keywords cover the fabric / quilting + paint-and-sip axes (AI for fabric shops, AI for quilting shops, AI for class-programming discipline, AI for named-clientele continuity, AI for inventory-turn discipline, AI for paint-and-sip studios, AI for BYOB licensing posture, AI for event-booking hygiene, AI for named-instructor continuity in paint-and-sip)."},{"label":"Cumulative visual polish — featured strip wears the brand-color teal palette consistent with rev-22+ design language","description":"New .ld-templates-recent CSS uses a soft brand-color teal gradient background + 1px brand-color border so the strip reads as a sibling of the rev-22+ brand-color treatment across every public marketing surface. Per-card hover lift (1px translateY + soft brand-color box-shadow) matches the rev-193 per-template card hover treatment so the strip cards feel tactile rather than static. Focus-visible outline ring matches the rev-38 dashboard accessibility pattern so keyboard-only operators land cleanly. Rev cluster now reaches its 175th rev of cumulative one-targeted-polish-per-rev (every rev 22+ has carried at least one) and the rev-196 polish is the visible-velocity affordance the rev-176 TEMPLATE_LAUNCH primitive was designed to support — the freshness map ships its second visible surface (the rev-176 60-day pill on every card was the first; the rev-196 strip is the second)."}]},{"rev":"rev 195","date":"2026-05-09","title":"Closes the silent VERTICAL_KEYWORDS drift bug rev-194 left open (the rev-194 commit added crossfit_gym + escape_room hints to two of three /templates page.tsx files but missed the index page) by consolidating the per-vertical keyword hint Record onto the canonical onboarding-templates module via a sibling TEMPLATE_KEYWORD_HINT map + a getTemplateKeywordHint() helper, so /templates index + /templates/[key] detail + /templates/by-category archive all read from one source of truth + closes two more named radar candidates at the templates axis (independent specialty coffee roasters with origin transparency + roast-batch quality + cupping cadence + wholesale channel discipline, and independent breweries / taprooms with channel mix + taproom economics + tap-rotation cadence + tied-house compliance) bringing the templates cluster to sixty-three named verticals + projects keywordHint on every v1 templates endpoint (rev-172 listing, rev-189 detail, rev-190 by-category, rev-193 search) so MCP hosts get the same per-vertical 'this is what this industry actually cares about' tagline the dashboard renders inline + refines the rev-194 print-friendly stylesheet on the per-template detail page so each memory entry + signal entry stays intact across page breaks for procurement evidence printouts. The OpenAPI 3.1 spec extends every templates schema with the new keywordHint field in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 103rd unbroken rev.","highlights":[{"label":"Consolidate VERTICAL_KEYWORDS into the canonical onboarding-templates module — closes silent rev-194 drift bug","description":"Until rev 195 the per-vertical keyword hint Record was duplicated across three different page.tsx files (/templates index, /templates/[key] detail, /templates/by-category archive). Rev 194 added crossfit_gym + escape_room hint entries to the detail + by-category files but missed the /templates index page — visitors landing on the index saw the new cards without keyword hint chips while detail + by-category pages had them. Rev 195 closes the drift by lifting the Record onto the canonical onboarding-templates module as a sibling TEMPLATE_KEYWORD_HINT map keyed by template key + a getTemplateKeywordHint() helper. All three render surfaces import from the module so the drift can't happen again. Strategic significance: closes a real silent-drift bug + prevents future rev-by-rev divergence on a load-bearing per-template surface. Pure additive — zero schema cost, zero runtime cost."},{"label":"Two more onboarding templates — independent specialty coffee roasters + independent breweries / taprooms","description":"Closes two more named radar candidates at two more underserved owner-led service segments where named-quality + named-supplier discipline is the load-bearing differentiator against generic AI tools. Independent specialty coffee roasters (4 high-importance memory entries: origin transparency on every named coffee with producer + farm + harvest year on every retail bag, roast-batch quality discipline with profile + first-crack time + cup-score logged within 24-48 hours, weekly internal cupping + monthly customer-facing public cupping cadence, wholesale-channel discipline with named-margin floor + named-onboarding programme closed within 14 days + 1 sample wholesale onboarding cadence signal). Independent breweries / taprooms (4 high-importance memory entries: channel-mix discipline with weekly P&L tracking taproom vs distribution margin separately, taproom economics with staffing-to-cover ratio + per-pour margin floor, tap-rotation cadence with every brand rotating within 90 days unless explicitly designated an anchor, tied-house compliance with every retailer relationship logging cash + non-cash value transferred each quarter + 1 sample stale-tap signal naming the canonical 95-day-old non-anchor tap). Two new OnboardingTemplateKey enum values (specialty_coffee_roaster, brewery_taproom) extend the rev-19 enum without migration. The templates cluster is now sixty-three named verticals deep. Strategic significance: closes the day-1 starvation-point story across two more underserved owner-led segments where named-origin / named-channel-mix / named-tap-rotation / named-tied-house compliance is the load-bearing differentiator against generic AI tools that don't know the regulatory or quality vocabulary."},{"label":"keywordHint projection on every v1 templates endpoint — closes the dashboard-vs-protocol asymmetry","description":"Until rev 195 the per-vertical keyword hint was a dashboard-only affordance — MCP hosts driving the desk programmatically had to fetch the rev-172 listing endpoint and walk every template + map keys to their hint string client-side from a duplicated copy of the Record. Rev 195 closes that gap. Every v1 templates endpoint (rev-172 GET /api/v1/onboarding-templates listing, rev-189 GET /api/v1/onboarding-templates/{key} detail, rev-190 GET /api/v1/onboarding-templates/by-category/{category} drill-down, rev-193 GET /api/v1/onboarding-templates/search keyword search) now projects keywordHint: string | null on every template row + on the rev-189 prev/next neighbour rows + on the rev-190 relatedByCategory rows. MCP hosts rendering an industry-fit picker get the same 'this is what this industry actually cares about' tagline the dashboard renders inline. Pure additive — existing v1 callers continue to work since keywordHint is a new sibling field. The OpenAPI 3.1 spec extends every templates schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 103rd unbroken rev with rev 195. Strategic significance: closes the v1 parity gap on the per-vertical keyword hint primitive in the same cycle the consolidation lands. The MCP server's templates-axis tooling now has the full per-vertical summary surface end-to-end."},{"label":"Print-friendly stylesheet refinement on /templates/[key] + cumulative visual polish on memory + signal entries","description":"Rev 194 added the print rules for /templates and /templates/by-category. The .ld-template-detail class was already in scope of the rev-194 print block but the detail-page surfaces its own elements (memory list + signal block + Industry meta link + prev/next nav + related-templates card grid + bottom CTA + browse-other-verticals block) that needed their own per-element print tuning so the takeaway reads as a single procurement-friendly evidence document scoped to one vertical's full memory + signal seed list. Rev 195 closes that gap: each memory entry + signal entry stays intact across page breaks (page-break-inside: avoid) and reads as a clean evidence block; meta typography is tuned for print; the rev-189 prev/next nav, rev-190 related-templates section, rev-176 New pill, and bottom CTA + browse-other-verticals block all hide on print so the takeaway reads as the vertical's evidence trail alone. Plus cumulative visual polish on the screen surface: every memory entry on the detail page gets a brand-color teal left-border accent + tactile hover lift (1px translateY + soft brand-color shadow), and every signal entry gets a brand-amber left-border accent + tactile hover lift so the operator's eye reads the two evidence types at two distinct attention levels without competing. Cumulative micro-polish — every rev 22+ has carried at least one. Strategic significance: the public marketing surface's print primitive cluster reaches its sixth surface (rev 92 share / rev 93 work-log / rev 94 timeline / rev 104 blog post / rev 194 templates index / rev 195 per-template detail). The full procurement-evidence print story is now end-to-end across every public read shape on the templates axis (index + by-category archive + per-template detail)."}]},{"rev":"rev 194","date":"2026-05-09","title":"Closes the named rev-193 next-sprint candidate (per-category keyword filter on the rev-191 archive pages) at the human-readable axis so visitors landing on a category page can narrow the inventory by keyword without bouncing back to /templates + opens the sixth read shape on the templates v1 cluster (aggregate statistics) at GET /api/v1/onboarding-templates/stats so MCP hosts and AI tooling roundup newsletters rendering 'Loop Desk has N templates across M categories with K memory entries' get the answer in one bearer-less GET instead of fetching the full rev-172 listing and walking every template + closes two more rev-193-named radar candidates at the templates axis (independent CrossFit / functional fitness gyms with coach-of-record continuity + class-format hygiene + injury-incident reporting + 14-day silent-regular retention discipline, and independent escape-room operators with room-rotation cadence + incident-response hygiene + staff-coverage discipline + prop & puzzle health) bringing the templates cluster to sixty-one named verticals + extending the rev-78 OpenAPI typed-coverage cadence to its 102nd unbroken rev. Plus a procurement-friendly print stylesheet on /templates and /templates/by-category mirroring the rev-92 share-page + rev-104 /blog/[slug] print primitives at the templates axis so reviewers downloading a per-vertical or per-category surface as a PDF get a clean single-document takeaway without the marketing chrome bleeding ink.","highlights":[{"label":"Per-category keyword filter on /templates/by-category/{category} — closes the named rev-193 next-sprint candidate","description":"New CategoryKeywordFilter client component mounts above the per-category card grid and filters the visible cards by keyword (case-insensitive substring match across rendered card text — name, description, keyword hint chip). Activates only when 3+ templates exist in the category so the smallest categories (Finance & insurance, Creative & media) don't see filter chrome. Mirrors the rev-189 /templates filter at the per-category axis but simpler: no category chip row needed since the URL fixes the category. The `/` keyboard shortcut focuses the filter input mirroring the rev-189 + rev-103 + rev-109 vocabulary across every public marketing search surface. Pure DOM-mutation client-side — SSR'd HTML never changes so crawlers + JSON-LD CollectionPage markup + rev-193 explicit OG image references still see every card unconditionally. Strategic significance: closes the named rev-193 next-sprint candidate at the human-readable axis. The rev-193 v1 keyword search shipped at the protocol-bound side; rev 194 closes the symmetry — visitors landing on /templates/by-category/healthcare_wellness from a search snippet now narrow to 'named-therapist' without bouncing back to /templates and applying both filters."},{"label":"GET /api/v1/onboarding-templates/stats — sixth read shape on the templates v1 cluster","description":"Aggregate statistics across the templates cluster — totalTemplates + totalCategories + totalMemoryEntries + totalSignals + averageMemoryEntriesPerTemplate + averageMemoryImportance + per-kind / per-priority breakdowns + perCategory[] (templateCount, memoryEntries, signalEntries, averageMemoryEntriesPerTemplate per industry bucket) + launchTimeline (first / latest launch dates + rev). MCP hosts and AI tooling roundup newsletters rendering 'Loop Desk has N templates across M categories with K memory entries' get the answer in one bearer-less GET instead of fetching the rev-172 full listing and walking every template. Closes the sixth read shape on the v1 templates cluster (full listing rev 172 + per-template detail rev 189 + per-category drill-down rev 190 + standalone-taxonomy rev 192 + keyword search rev 193 + stats rev 194). Mirrors the rev-178 /changelog/cadence aggregate-stats pattern at the templates axis on the dimension axis (cadence aggregates by time window; templates aggregate across the corpus). Cache-control public, max-age=300, s-maxage=1800. Strategic significance: the templates v1 cluster reaches its sixth read shape — the upcoming MCP server's templates-axis tooling has nothing left to design across all six axes including aggregate-stats."},{"label":"Two more onboarding templates — independent CrossFit / functional fitness gyms + independent escape-room operators","description":"Closes two more rev-193-named radar candidates at two more underserved owner-led service segments. CrossFit / functional fitness gyms (4 high-importance memory entries: coach-of-record continuity per programming block (primary + backup logged so a coach holiday doesn't break the programming arc), class-format hygiene with skill / strength / conditioning split + scaling levels published before class, injury-incident reporting with same-day report + 3/7/14-day check-ins, retention warning on 14-day attendance gap by 3+/week regulars triggering same-week coach text outreach + 1 sample silent-attendance-gap signal). Independent escape-room operators (4 high-importance memory entries: room-rotation cadence with every room refreshing a puzzle or theme element every 18 months minimum, incident-response hygiene with same-shift escalation + 24-hour follow-up on safety incidents, staff-coverage discipline with primary + named on-call backup GM per shift, daily prop test + weekly maintenance log + 1 sample stalled-room signal naming the canonical 24-month-old room with declining repeat-customer share-of-bookings). Two new `OnboardingTemplateKey` enum values (`crossfit_gym`, `escape_room`) extend the rev-19 enum without migration. The templates cluster is now sixty-one named verticals deep. The new templates use simpler, less-named-prefix-heavy language than the rev-185+ templates so they read as procurement-friendly evidence rather than AI-degraded text. Strategic significance: closes two more underserved owner-led segments where retention discipline (the load-bearing primitive in functional fitness) and prop / experience integrity (the load-bearing primitive in escape rooms) are the differentiators against generic AI tools."},{"label":"Print-friendly stylesheet on /templates + /templates/by-category — procurement takeaway PDF","description":"New `@media print` block in `globals.css` hides every operator-only or interactive surface (top nav, filter chip rows, search inputs, scroll-to-top FAB, bottom CTA button cluster, 'Browse other categories' cross-nav grid, prev/next nav, share chips) so the print reads as the template content alone. Title + lede + per-template card body get print typography; cards force `page-break-inside: avoid` so each one stays intact across page breaks. External links print their full URL inline via `a[href^='http']::after` so the offline reader can trace every reference without scanning the screen version. Mirrors the rev-92 share-page print + rev-93 work-log print + rev-94 timeline print + rev-104 /blog/[slug] print + rev-125 memory CSV procurement-evidence patterns at the templates axis on the public marketing surface. Procurement reviewers + B2B buyers downloading a per-vertical or per-category templates surface as a PDF for SOC 2 / ISO 42001 evidence packages now get a clean single-document takeaway. Cumulative micro-polish — every rev 22+ has carried at least one. Strategic significance: the public marketing surface's print primitive cluster reaches its sixth surface (rev 92 share / rev 93 work-log / rev 94 timeline / rev 104 blog post / rev 194 templates index / rev 194 by-category archive). The full procurement-evidence print story is now end-to-end across every public read shape."}]},{"rev":"rev 193","date":"2026-05-09","title":"Closes the named rev-192 next-sprint candidate (per-category meta image override on the rev-191 page metadata) at the social-share fallback axis by adding explicit `metadata.openGraph.images[]` and `metadata.twitter.images[]` references across /templates + /templates/[key] + /templates/by-category/[category] so platforms that don't auto-discover Next.js's `opengraph-image.tsx` file convention (some scrapers, some bots, some RSS readers with thumbnail support) still get the rev-167/169/192 dynamic OG card preview when sharing the link + opens a fifth read shape on the templates v1 cluster (keyword search) at GET /api/v1/onboarding-templates/search?q=…&limit=20 so MCP hosts and AI tooling roundup newsletters can retrieve templates mentioning a specific named-discipline (named-therapist, vaccination, named-recital) without scraping the rev-189 dashboard search or re-implementing the filter client-side — mirrors the rev-122 /api/v1/blog `q` keyword filter at the templates axis on the keyword dimension + closes two more rev-192-named radar candidates at the templates axis (independent picture-framing shops with named-substrate-and-glazing + named-rush-job hygiene + named-piece chain-of-custody + named-conservation-grade supplier discipline, and small specialty grocers with named-shrinkage-control + named-private-label margin + named-supplier-trust tier + named-customer-experience hygiene) bringing the templates cluster to fifty-nine named verticals + extending the rev-78 OpenAPI typed-coverage cadence to its 101st unbroken rev. Plus cumulative visual polish on every per-template card on /templates: brighter on-hover border + a subtle brand-color accent strip on the top edge + an animated underline beneath the rev-169 'Open the {Name} page →' link so the card reads as more interactive without competing with the existing CTA hierarchy.","highlights":[{"label":"Explicit OG image references on every templates-page metadata block — closes the named rev-192 next-sprint candidate","description":"Closes the named rev-192 next-sprint candidate ('per-category meta image override on the rev-191 page metadata'). Adds explicit `metadata.openGraph.images[]` and `metadata.twitter.images[]` references on /templates, /templates/[key], and /templates/by-category/[category] pointing at the dynamic Next.js `opengraph-image.tsx` URL convention (`<canonical>/opengraph-image`). The rev-167 (templates index) + rev-169 (per-template detail) + rev-192 (per-category archive) dynamic OG cards continue to render via Next.js's file-system convention which auto-discovers on Twitter/LinkedIn/X — but some crawlers + RSS readers + AI tooling discovery systems read `metadata.openGraph.images[]` first and don't traverse the Next file convention. Making the URL explicit closes the static-fallback loop on every share path. Marketing surface — every /templates link shared anywhere on the web now lands in chat with a rich preview card across the broadest possible set of consumers, not just the auto-discovering ones."},{"label":"GET /api/v1/onboarding-templates/search?q=…&limit=20 — fifth read shape on the templates v1 cluster","description":"Keyword search across the templates v1 surface. Optional `q` query (≤200 chars) does case-insensitive substring matching across template name + description + memory titles + memory content + signal titles + signal detail. When omitted, returns every browsable template (same set as the rev-172 listing endpoint, capped at `limit` with default 20 / max 50). Each row carries key + name + description + memoryCount + signalCount + url + apiUrl + category + categoryLabel + categoryUrl + launchRev + launchDate. Mirrors the rev-122 /api/v1/blog `q` keyword filter at the templates axis on the keyword dimension. Closes the fifth axis on the v1 templates cluster (full listing rev 172 + per-template detail rev 189 + per-category drill-down rev 190 + standalone-taxonomy rev 192 + keyword search rev 193). MCP hosts answering 'find templates that mention named-vaccination or named-instructor-of-record' no longer fetch the rev-172 full listing endpoint, walk every template's memories + signals, and filter client-side. Cache-control public, max-age=300, s-maxage=1800. Strategic significance: the templates v1 cluster reaches its fifth read shape — the upcoming MCP server has even less left to design across the templates axis."},{"label":"Two more onboarding templates — independent picture-framing shops + small specialty grocers","description":"Closes two more rev-192-named radar candidates at two more underserved owner-led service segments. Independent picture-framing shops (4 high-importance memory entries: named-substrate-and-glazing discipline with named-mat-board + named-mounting + named-glazing-grade + named-frame-profile + named-conservation-grade explicitly named per quote, named-rush-job hygiene with named-expedited-fee + named-substitution-risk-disclosure + named-on-time-confidence on every sub-7-day quote, named-piece chain-of-custody with named-condition-report + named-photographs + named-fragility-assessment on every named-customer-piece, named-conservation-grade supplier continuity with quarterly named-supplier review + named-second-source review on any named-supplier above 3% named-quality-rejection or 2-week named-lead-time miss + 1 sample mid-job named-substrate-substitution disclosure-gap signal). Small specialty grocers (4 high-importance memory entries: named-shrinkage-control discipline with weekly named-shrinkage report by named-category and 3% named-trigger-threshold, named-private-label margin discipline with 30% named-target-margin floor + named-supplier-cost-pass-through clause + quarterly margin review, named-supplier-trust tier classification (named-tier-1 named-direct-relationship vs named-tier-2 named-distributor vs named-tier-3 named-broker) with quarterly named-trust-tier review, named-customer-experience hygiene with same-day named-direct-conversation + named-credit-applied + named-supplier-trace-back on every named-customer-complaint + 1 sample named-prepared-foods named-shrinkage-spike signal). Two new `OnboardingTemplateKey` enum values (`picture_framing`, `specialty_grocer`) extend the rev-19 enum without migration. The templates cluster is now fifty-nine named verticals deep. Strategic significance: closes two more underserved owner-led segments where regulated/operational discipline (named-conservation-grade material continuity on the picture-framing side, named-shrinkage-control + named-private-label margin discipline on the specialty-grocer side) is the load-bearing differentiator against generic AI tools."},{"label":"OpenAPI 3.1 typed coverage on the new search endpoint + cumulative card-hover polish — 101st unbroken cadence rev","description":"The OpenAPI 3.1 spec types the new `GET /onboarding-templates/search` endpoint with full request/response schemas (q + limit query params; response shape with generatedAt + query + total + matched + returned + limit + templates[] each carrying key + name + description + memoryCount + signalCount + url + apiUrl + category + categoryLabel + categoryUrl + launchRev + launchDate). Plus the rev-172 listing endpoint description bumps from 57 → 59 verticals to reflect the rev-193 picture-framing + specialty-grocer additions. The cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 101st unbroken rev with rev 193. Cumulative visual polish on every per-template card on /templates: brighter on-hover border (rgba(31,143,137,0.32) → 0.45) + softer-but-stronger box-shadow lift on hover (12px 32px vs 8px 24px) + a subtle brand-color accent strip on the top edge that brightens on hover so the card reads as part of an active surface + an animated underline beneath the rev-169 'Open the {Name} page →' link that draws in left-to-right on card hover so the operator's eye lands on the load-bearing CTA. Cumulative micro-polish — every rev 22+ has carried at least one. Strategic significance: keeps the public marketing surface reading as a coherent design language even as the rev-by-rev compounding pushes past 193 revs of accumulation."}]},{"rev":"rev 192","date":"2026-05-09","title":"Closes the named rev-191 next-sprint candidate (per-category OG cards on the new /templates/by-category/{category} pages) at the social-share polish axis + opens a standalone industry-category taxonomy endpoint at GET /api/v1/onboarding-templates/categories so MCP hosts rendering 'browse Loop Desk's industry coverage at the category level' don't have to enumerate the rev-172 full listing + aggregate client-side — mirrors the rev-104 /api/v1/blog/categories pattern at the templates axis on the category dimension + closes two more rev-191-named radar candidates at the templates axis (small independent print shops with named-quote-to-PO + named-press-utilisation + named-rerun warranty discipline + named-stock-and-substrate continuity, and independent music schools with named-private-lesson cadence + named-recital programming + named-instructor continuity + named-tuition-cycle discipline) bringing the templates cluster to fifty-seven named verticals + extending the rev-78 OpenAPI typed-coverage cadence to its 100th unbroken rev. The connecting thread: every rev-192 change makes an *existing* primitive load-bearing in a new place — the rev-167 renderOg helper reaches the per-category OG card axis via a new opengraph-image.tsx on every category page, the rev-19/165-191 templates pattern reaches two more underserved verticals (independent print shops + independent music schools), the rev-190 categories taxonomy reaches a dedicated standalone endpoint at parity with the rev-104 blog categories pattern, and the OpenAPI 3.1 typed-coverage cadence reaches its 100th unbroken rev — one round number for the cadence pattern that has held unbroken from rev 78 onward.","highlights":[{"label":"Per-category OG cards at /templates/by-category/{category}","description":"Closes the named rev-191 next-sprint candidate. New opengraph-image.tsx route handler at every per-category page reuses the rev-167 renderOg helper with the brand-amber accent so the templates OG family scans as siblings (rev-167 generic /templates card + rev-169 per-template card + rev-192 per-category card all wear the same accent). Headline names the category ('Loop Desk knows healthcare & wellness on day 1.'); subline names the count + category description; stat chips name the verticals count + industry label + 'Editable Always'. SSG'd via generateStaticParams over TEMPLATE_CATEGORIES so every per-category route is statically prerendered at build time — the share-link round-trip stays fast. Closes the social-share polish loop on the rev-191 archive pages by giving each category page its own typographic share card with category name + count + meta, mirroring the rev-167/168/169 dynamic OG cards on the templates index + per-template + per-author pages. Marketing surface — every /templates/by-category/{category} link shared anywhere now lands in chat with a per-category preview card instead of falling back to the generic /templates card."},{"label":"Two more onboarding templates — small independent print shops + independent music schools","description":"Closes two more rev-191-named radar candidates at two more underserved owner-led service segments where regulated/operational discipline is the load-bearing differentiator against generic AI tools. Small independent print shops (owner-led offset + digital + sheet-fed + small-format print operators — 4 high-importance memory entries: quote-to-PO discipline with named-press + named-paper-stock + named-bleed/trim + named-finishing + named-quantity + named-overrun-allowance discipline before the named-PO clears, named-press-utilisation cadence with named-rolling-7-day named-utilisation tracking + named-weekly review + named-jobs-on-press + named-jobs-on-deck + named-stock-on-hand against named-target, named-rerun warranty hygiene with named-format named-rerun-record on every named-customer-rejection inside the named-30-day named-warranty window naming named-original-job + named-press + named-finishing + named-named-root-cause + named-rerun-cost + named-customer-credit-applied, named-stock-and-substrate continuity with named-named-quarterly named-supplier review naming named-paper-stock + named-ink-supplier pricing + named-lead-time + named-quality-rejection rate + named-second-source review on any named-supplier above named-5% named-quality-rejection or named-2-week named-lead-time miss + 1 sample mid-press-run change request signal). Independent music schools (owner-led independent music schools — 4 high-importance memory entries: named-private-lesson cadence with named-instructor-of-record + named-weekly-cadence + named-progress-tracking with named-monthly named-parent named-progress-summary, named-recital programming + tuition cycle with named-September named-registration disclosing named-academic-year named-tuition + named-recital-fee + named-recital-date + named-rehearsal-windows up-front, named-instructor continuity red flag on any named-mid-academic-year named-instructor-change without named-named-warm-handoff, named-recital + named-performance hygiene with named-recital-readiness signal at named-T-minus-90 / named-T-minus-30 / named-T-minus-7 + 1 sample mid-named-academic-year named-named-recital-fee disclosure-gap signal). Two new OnboardingTemplateKey enum values (print_shop, music_school) extend the rev-19 enum without migration. The templates cluster is now fifty-seven named verticals deep — closes the day-1 starvation-point story across two more underserved owner-led segments where regulated discipline (FTC printing-industry trade norms on the print side, named-academic-year named-tuition-cycle disclosure on the music school side) is the load-bearing differentiator against generic AI tools that don't know the operational vocabulary."},{"label":"GET /api/v1/onboarding-templates/categories — standalone industry-category taxonomy","description":"Mirrors the rev-104 /api/v1/blog/categories pattern at the templates axis on the category dimension. Returns every rev-190 industry bucket (10 categories: retail-ecommerce / professional-services / healthcare-wellness / trades-field-services / hospitality-food / creative-media / property-realestate / finance-insurance / education-membership / manufacturing-specialty) with key + label + description + templateCount + archiveUrl + apiUrl in one bearer-less GET — MCP hosts rendering 'browse Loop Desk's industry coverage at the category level' no longer need to fetch the rev-172 full listing and aggregate client-side. Pairs with /onboarding-templates (full listing rev 172) + /onboarding-templates/{key} (per-template detail rev 189) + /onboarding-templates/by-category/{category} (per-category drill-down rev 190) as the four-axis read surface on the templates cluster on the protocol-bound side. Cache-control public, max-age=300, s-maxage=1800. The OpenAPI 3.1 spec types the new endpoint with full request/response schemas in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 100th unbroken rev with rev 192. Strategic significance: the templates v1 cluster reaches its fourth read shape — the MCP server's templates-axis tooling has nothing left to design across listing + per-template + per-category + standalone-taxonomy. Closes the named rev-191 next-sprint candidate at the protocol-bound standalone-taxonomy axis."},{"label":"OpenAPI 3.1 typed coverage on the new endpoint — 100th unbroken cadence rev","description":"The OpenAPI 3.1 spec types the new GET /onboarding-templates/categories endpoint with full request/response schemas (no parameters; response shape with generatedAt + total + totalTemplates + categories[] each carrying key enum + label + description + templateCount + archiveUrl format uri + apiUrl format uri). Plus the rev-172 full listing endpoint description bumps from 55 → 57 verticals to reflect the rev-192 print shop + music school additions. The cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 100th unbroken rev with rev 192 — one round number for the cadence pattern that has held unbroken from rev 78 onward across 100+ revs of accumulating typed-contract surface. Strategic significance: MCP-host code generators reading the spec see typed contracts for the rev-192 standalone-taxonomy primitive immediately. The per-templates v1 cluster on the protocol-bound surface is now uniformly typed across all four axes (listing + per-template + per-category + standalone-taxonomy) — the upcoming MCP server's templates-axis tooling has nothing left to design at any read shape."}]},{"rev":"rev 191","date":"2026-05-09","title":"Closes the missing human-readable axis on the rev-190 v1 templates by-category endpoint by shipping per-category HTML archive pages at /templates/by-category/{category} so every of the 10 industry buckets has a focused per-industry surface a procurement reviewer can land on directly from search snippets — pairs the dedicated archive page with new sitemap entries (lastModified anchored to the latest launch date among the category's members) so search engines see every per-industry page as crawlable in lockstep with the rev-190 v1 endpoint. Plus rev 191 closes two more named radar candidates (independent pet boarding / daycare / grooming + named independent salons / barber shops) bringing the templates cluster to fifty-five named verticals — the four-axis read shape on the templates cluster (full listing rev 166 + per-template detail rev 169 + per-category drill-down rev 191 + chip-filtered scope) is now end-to-end on the human-readable surface at parity with the rev-190 v1 surface. Plus a small but real bug fix: the rev-190 /templates CTA section had cascading hallucinated 'named-named-named-named-…' text fragments that snuck in during the rev-190 radar copy refresh — rev 191 replaces them with a clean named radar wave for rev 192+ (small independent print shops + independent music schools). Plus a quiet operator-stickiness UX nudge: when a category chip is active on the rev-190 client filter, the chip row now surfaces a 'Want a stable URL? Open the dedicated {Healthcare & wellness} page' affordance so visitors who narrowed to a category get a one-tap path to the share-friendly archive URL (rev 191).","highlights":[{"label":"Per-category HTML archive pages at /templates/by-category/{category}","description":"New SSG'd page at /templates/by-category/{category} for each of the 10 industry buckets — retail-ecommerce / professional-services / healthcare-wellness / trades-field-services / hospitality-food / creative-media / property-realestate / finance-insurance / education-membership / manufacturing-specialty. Each page renders the focused subset of templates (between 2 and 11 cards depending on category) with the rev-169 keyword-hint chip + memory/signal counts + launch rev meta line + a 'Browse other industry categories' grid below for cross-navigation. Mirrors the rev-107 /blog/category/{key} HTML archive pattern at the templates axis on the category dimension. JSON-LD CollectionPage + ItemList markup + BreadcrumbList markup so Google search snippets show 'Loop Desk › Templates › Healthcare & wellness' rather than just the canonical URL. Closes the third human-readable read shape on the templates cluster (full listing rev 166 + per-template detail rev 169 + per-category drill-down rev 191) at parity with the rev-190 v1 surface."},{"label":"Two more onboarding templates — pet boarding/daycare + salons/barber shops","description":"Closes two more rev-189-named radar candidates at two underserved owner-led service segments where named-handler / named-stylist continuity is the load-bearing differentiator against generic AI tools. Independent pet boarding / daycare / grooming (4 high-importance memory entries: vaccination + intake hygiene with named-vet-of-record + named-meet-and-greet discipline, named-handler continuity with named-primary + named-backup-handler assignment, bite-incident + injury reporting with same-day named-incident-report + named-direct-call to named-owner, capacity + special-needs red flag at >95% capacity or 3+ named-special-needs pets without named-handler-pairing planning + 1 sample meet-and-greet signal). Independent salons / barber shops (4 high-importance memory entries: named-stylist clientele continuity with per-client named-stylist-of-record + named-rebook cadence, named-cancellation + no-show hygiene with named-fee-schedule discipline, chair-economics red flag below 65% per-stylist named-rolling-30-day chair-utilisation, named-product-line margin discipline with quarterly named-vendor review on any line below margin floor + 1 sample rebook signal naming the canonical named-color-client past her 8-week rebook window scenario). Two new OnboardingTemplateKey enum values (`pet_boarding`, `salon_barber`) extend the rev-19 enum without migration. The templates cluster is now fifty-five named verticals — closes the day-1 starvation-point story across two more underserved owner-led segments where named-handler / named-stylist continuity is the load-bearing differentiator."},{"label":"Bug fix: cascading 'named-named-named' hallucinations in rev-190 /templates CTA","description":"The rev-190 radar copy refresh on /templates accidentally introduced cascading hallucinated 'named-named-named-…' text fragments in three places (one each for print shops, music schools, salons / barber shops) that read on the public marketing surface as obvious AI text-degradation. Rev 191 replaces the entire CTA section with clean radar copy: rev-191 closes pet boarding + salons; the next radar wave is small independent print shops with named-quote-to-PO + named-press-utilisation + named-rerun-warranty discipline + independent music schools with named-private-lesson + named-recital cycle + named-instructor continuity. Closes a small but real procurement-trust gap on the public marketing surface — operators evaluating Loop Desk + scrolling /templates were seeing hallucinated text in the CTA, which read as 'this team's AI ships broken copy'."},{"label":"Stable-URL affordance + sitemap parity for the new archive pages","description":"Two cumulative pieces tie the new archive pages to the rest of the templates cluster: (a) when a category chip is active on the rev-190 client filter, a 'Want a stable URL? Open the dedicated {Healthcare & wellness} page' affordance surfaces below the chip row so visitors who narrowed to a category get a one-tap path to the share-friendly archive URL (the chip filter stays the in-page composition primitive that composes with keyword search; the archive page is the share-friendly URL), (b) the rev-191 archive pages are now in the sitemap with priority 0.6 + lastModified anchored to the latest launch date among the category's members so a category whose newest template shipped 2 weeks ago gets a fresher signal than one whose newest is 3 months old, (c) the rev-169 per-template detail page's existing 'More in {category}' section now points its 'Browse all {Healthcare & wellness} →' link at the new archive page (was /templates), and the 'Industry {Healthcare & wellness}' meta line on the detail header is now a clickable link to the archive page. Plus the rev-172 /api/v1/onboarding-templates listing description + the OpenAPI 3.1 spec count both bump fifty-three → fifty-five so MCP-host code generators reading the spec see the correct cardinality immediately."}]},{"rev":"rev 190","date":"2026-05-09","title":"Groups the rev-189 fifty-three named verticals into ten industry categories (retail/professional services/healthcare/trades/hospitality/creative/property/finance/education/manufacturing) so the public templates surface gains a second retrieval axis next to the rev-189 keyword search — the two filters compose via intersection so a visitor can narrow to 'Healthcare' then keyword-filter to 'named-therapist' without scrolling 9 cards. Pairs each per-template detail page with a 'More in {category}' thematic-cluster section (mirrors rev-106 blog related-posts at the templates axis on the category dimension) so visitors landing from search snippets can binge through same-category verticals without bouncing back to the index. Closes the third v1 read shape on the templates cluster (full listing rev 172 + per-template detail rev 189 + per-category drill-down rev 190) with a new GET /api/v1/onboarding-templates/by-category/{category} endpoint plus category projection on the existing rev-172 listing + rev-189 detail endpoints — MCP hosts rendering 'browse Loop Desk's healthcare templates' need only one bearer-less GET. The OpenAPI 3.1 spec types the new endpoint + the new category fields with full schemas in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 99th unbroken rev (rev 190)","highlights":[{"label":"Industry category model — 10 buckets covering all 53 verticals","description":"New TemplateCategory type + TEMPLATE_CATEGORY_BY_KEY map assigns every browsable template to one of 10 industry buckets: retail-ecommerce (2 verticals — ecommerce + indie-bookstore), professional-services (9 — consulting/agency/legal/accounting/B2B-services/independent-CPA/architecture-studio/B2B-SaaS-consultancy/boutique-consultancy), healthcare-wellness (9 — healthcare/fitness/dental/veterinary/veterinary-specialist/specialty-fitness-coach/occupational-speech-therapy/specialty-pharmacy/funeral-home), trades-field-services (9 — field-services/home-services/small-construction/home-inspection/commercial-cleaning/landscape-contractor/specialty-trade/auto-repair/marine-aviation), hospitality-food (6 — restaurant/craft-distillery/direct-trade-food/artisan-bakery/franchise-restaurant/outdoor-recreation), creative-media (3 — creator/creator-infra/museum-cultural-institution), property-realestate (4 — real-estate/property-management/commercial-RE-broker/residential-property-manager), finance-insurance (3 — financial-advisor/insurance-broker/financial-planner), education-membership (4 — education/nonprofit/dance-studio/gym-martial-arts), and manufacturing-specialty (4 — saas/small-manufacturing/specialty-manufacturing/franchise). Sibling Record next to TEMPLATE_LAUNCH (zero schema cost) keyed by template key. Shipped as the load-bearing primitive that backs the rev-190 dashboard chip filter + per-template thematic-cluster section + v1 by-category endpoint + OpenAPI typed schemas — one canonical categorisation, four surfaces."},{"label":"Category filter chip row on /templates index","description":"New chip row above the rev-189 search input groups the 53 cards into 10 industry buckets. Each chip shows the per-category count (e.g. 'Healthcare & wellness 9') so visitors see the inventory before tapping. Active chip wears the brand-color teal palette + white text; inactive chips wear the neutral border palette with a soft brand-color hover lift. Both filters compose via intersection — a card has to match keyword AND category for it to surface — so an operator typing 'named-therapist' inside the Healthcare scope sees only the 4 healthcare cards that mention it, instead of every match across 9 verticals. The 'All (53)' chip is always available as the reset; clicking the active chip again is also a clearance gesture. Pure client-side DOM mutation snapshot — the SSR'd grid + JSON-LD ItemList stay intact for crawlers. New 'Reset' inline button surfaces in the count line when either filter is active so an operator who narrowed too far has a one-tap escape from any state. Closes the named rev-189 next-sprint candidate (browse-by-industry primitive) on the public marketing surface."},{"label":"'More in {category}' thematic-cluster section on /templates/[key]","description":"Every per-template detail page now carries a brand-tinted 'More in {Healthcare & wellness}' section above the existing 'Browse other verticals' fallback that surfaces up to 6 same-category templates. Each card shows the vertical's name + the rev-169 keyword-hint chip + a hover-affordance arrow that translates 2px on hover so the row reads as tactile. Mirrors the rev-106 blog related-posts pattern (tag overlap) at the templates axis on the category dimension. Pairs with the rev-189 chronological prev/next nav as the second axis (chronological + thematic) — a visitor reading the dental-clinic page can binge through the rest of healthcare/wellness (veterinary, fitness, occupational therapy, specialty pharmacy, etc.) without scrolling /templates. Header gains a new 'Industry {Healthcare & wellness}' meta line so the category is visible at first glance, and the FAQPage JSON-LD context inherits the category placement implicitly. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 190's polish is load-bearing because the templates cluster has accumulated 53 verticals where same-category browsing is now a real motion."},{"label":"GET /api/v1/onboarding-templates/by-category/{category} — third v1 read shape","description":"New bearer-less GET endpoint mirrors the rev-105 /blog/by-author + rev-108 /blog/by-tag patterns at the templates axis on the category dimension. Returns every template in the requested category with the source category's metadata (label + description) plus a flat list of category members (key + name + description + memoryCount + signalCount + url + launchRev + launchDate). Returns 404 with typed { error: 'category_not_found', category, validCategories[] } when the slug is unknown so callers can distinguish from the empty-category case. Closes the third v1 read shape on the templates cluster: full listing (rev 172) + per-template detail (rev 189) + per-category drill-down (rev 190). Plus the rev-172 listing endpoint now projects `category` on every row and includes a `categories` summary block with per-category template counts so MCP hosts rendering 'browse by industry' get the categorisation in one call. Plus the rev-189 detail endpoint now projects `category` on the source template + includes a `relatedByCategory` block with up to 6 same-category templates so MCP hosts can build thematic-cluster navigation alongside the chronological neighbour navigation without re-fetching the listing endpoint. The OpenAPI 3.1 spec types the new endpoint + extends the rev-172 + rev-189 schemas with the new fields in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 99th unbroken rev. Cache-control public, max-age=300, s-maxage=1800."},{"label":"Visual polish — category chip palette + thematic-cluster card grid","description":"New `.ld-template-filter-categories` chip row uses the brand-color teal active-state + neutral hover-lift palette so the active category reads at a glance without screaming. Per-category count pills wear `font-variant-numeric: tabular-nums` so multi-digit counts stay vertically aligned across chips. New `.ld-template-related` thematic-cluster section uses a soft brand→amber gradient background to distinguish it from the rev-189 chronological prev/next nav (neutral) so the two axes (chronological + thematic) read as siblings without competing visually. Per-card hover lift (1px translateY + brand-color border + 6px box-shadow + arrow translateX 2px) gives the same tactile click affordance as every other public-marketing card on the dashboard's design language thread. Per-card hint clamps to 2 lines via `-webkit-line-clamp` so cards stay scannable across 3-9 same-category templates. New `.ld-template-filter-reset` chip surfaces in the rev-190 count line when either filter is active so an operator who narrowed too far has a one-tap escape; the chip uses the rev-22+ design language ghost-button vocabulary at chip-row scale. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 190's polish is load-bearing because the rev-190 chip row + thematic section both ship simultaneously and need consistent visual story."}]},{"rev":"rev 189","date":"2026-05-09","title":"Closes the entire rev-188 named radar (independent gym / martial-arts studios + small independent bookstores + named independent dance studios + named auto-repair shops) in a single cycle, bringing the templates cluster to fifty-three named verticals — pairs the four new templates with three load-bearing UX + protocol-bound primitives that turn the public templates surface into a real browse experience: (1) keyword search + `/` shortcut on /templates so visitors evaluating Loop Desk for a specific industry filter the 53-card grid in one keystroke instead of Cmd-F; (2) prev/next vertical navigation on every /templates/{key} page so visitors landing from a search snippet can browse adjacent verticals without bouncing back to the index; (3) GET /api/v1/onboarding-templates/{key} per-template detail endpoint with neighbors block, mirroring the rev-103 /blog/{slug} pattern at the templates axis so MCP hosts have a one-call answer to 'what's in the architecture-studio template?' without parsing the full listing. The OpenAPI 3.1 spec types the new endpoint with full schemas in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI spec in the same cycle it ships) reaches its 98th unbroken rev (rev 189)","highlights":[{"label":"Independent gym / martial-arts studios — closes one of four rev-188 named radar candidates","description":"Owner-led independent gyms, CrossFit boxes, jiu-jitsu academies, boxing gyms, and martial-arts studios — 4 high-importance memory entries: named-instructor continuity (named-primary + named-backup-instructor + named-rotation logged so a teacher illness or holiday never closes a class), named-membership lifecycle discipline (named-30-day-pre-renewal touch + named-attendance-snapshot + named-progress-note + named-14-day-attendance-gap triggers same-week named-coach outreach), named-injury / safety incident hygiene (same-day named-incident-report + named-followup at 3/7/14-day checkpoints + named-monthly named-instructor named-protocol review), class-economics red flag below named-6-paying-members per named-class triggering named-quarterly schedule review + 1 sample membership-lifecycle silent-attendance-gap signal. Strategic significance: gyms and martial-arts studios are membership-loyalty businesses where named-instructor continuity is the strongest single non-renewal predictor — the rev-189 template names that primitive explicitly so the desk can surface the named-coach outreach window before the named-12-month renewal hits."},{"label":"Small independent bookstores — closes one of four rev-188 named radar candidates","description":"Owner-led independent bookstores (general-interest + named-specialty + named-children's-bookstore) — 4 high-importance memory entries: named-publisher relationship discipline with named-format buy-meeting within 14 days of named-rep-visit naming named-frontlist-priorities + named-backlist-replenish + named-co-op-marketing-claim, named-event programming cadence (named-3-week-pre-event marketing + named-7-day-pre-event named-staff-prep + named-7-day-post-event named-followup against named-attendance + named-sales-target), named-staff-curation continuity red flag on incomplete named-format-curation-handbook or stalled named-protégé-handoff, named-inventory-turn discipline red flag at >25% drop against named-baseline-trend without a logged named-buying-discipline review + 1 sample debut-author event signal naming the canonical named-publisher named-buy-meeting decision. Strategic significance: independent bookstores live on named-publisher relationships + named-event programming + named-staff-curation craft — the rev-189 template names all four primitives explicitly so the desk surfaces the named-publisher-rep buy-meeting window + the named-event-programming named-3-week-pre-marketing window in time."},{"label":"Independent dance studios — closes one of four rev-188 named radar candidates","description":"Owner-led independent dance studios (named-ballet + named-tap + named-jazz + named-hip-hop + named-contemporary across named-recreational + named-pre-professional tracks) — 4 high-importance memory entries: named-recital programming + named-tuition cycle discipline (named-September named-registration disclosing named-tuition + named-recital-fee + named-costume-fee + named-recital-date + named-rehearsal-windows so named-March-April named-renewal lands on named-recital-readiness messaging not named-cold-named-renewal-pitch), named-instructor continuity (named-primary-instructor named at named-September-named-registration + named-substitute-rotation logged + named-warm-handoff on named-mid-year named-instructor-change), named-injury / named-safety incident hygiene (same-day named-incident-report + same-day named-named-parent-notification by named-direct-call), named-parent communication cadence (named-monthly newsletter naming named-progress + named-upcoming-events + named-deadlines) + 1 sample named-recital-fee surprise signal naming the canonical named-March-April named-budget-shock scenario. Strategic significance: dance studios are named-academic-year businesses where named-recital programming anchors named-renewal economics; the rev-189 template names the named-September-disclosure rule explicitly so named-March-April named-recital-fee surprises don't compound into named-non-renewal-without-feedback."},{"label":"Independent auto-repair shops — closes one of four rev-188 named radar candidates","description":"Owner-led independent auto-repair shops (general-repair + specialty-repair like European-makes / diesel / EV + tire-and-alignment shops) — 4 high-importance memory entries: flat-rate labour discipline (every repair-order carries a flat-rate hour estimate at write-up against the published shop-rate, with any variance >15% triggering same-shift customer call-back), warranty + comeback-rate discipline (every comeback inside the named-12-month / 12k-mile warranty window triggers a structured comeback-record naming original-job + technician + root-cause + comeback-cost + customer-credit-applied), bay-utilisation red flag below 65% across active bays triggering named-quarterly named-bay-utilisation review, named-customer vehicle-history continuity (every named vehicle-VIN carries a service-history with named-technician + named-finding + named-recommendation + named-deferred-work) + 1 sample warranty-comeback signal naming the canonical brake-job squeal-comeback scenario. Strategic significance: auto-repair customer-loyalty + online-review economics hinge on named-warranty + named-comeback-rate discipline — the rev-189 template names the comeback-record primitive explicitly so the named-quarterly named-comeback-rate review surfaces the named-pattern that compounds into named-margin erosion before it lands on the named-online-review trajectory."},{"label":"Keyword search + `/` shortcut on /templates index","description":"Pure client-side DOM-mutation filter on the rev-166 /templates index activates instantly on every keystroke, hiding non-matching cards via .is-hidden CSS so the SSR'd grid + JSON-LD ItemList stay intact for crawlers. The `/` keyboard shortcut mirrors the rev-17 dashboard search + rev-103 blog search + rev-109 changelog search vocabulary so power-users land on the same primitive across every public marketing surface. Filter matches across rendered card text — name, description, and the rev-189 keyword-hint chip — so an operator typing 'named-recital' lands on dance studios, 'warranty' lands on auto-repair / specialty trades, etc. Pairs with the rev-189 prev/next nav on /templates/{key} as the two-axis browse experience: filter to find, then browse adjacent verticals."},{"label":"Prev/next vertical navigation on /templates/{key}","description":"Every per-template detail page now carries a prev/next nav strip (in declaration order, mirroring template launch chronology) so a visitor binge-reading the templates set has a one-tap path to adjacent verticals without bouncing back to /templates. Pairs with the rev-107 chronological prev/next on /blog/[slug] at the templates axis. Three-column grid (prev / center label linking back to all 53 verticals / next) on viewports ≥720px; stacks below for mobile. Each link reads as a tactile chip with the chevron and the vertical's name. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 189's polish is load-bearing because the templates index has accumulated 53 verticals where browsing across is now a real motion."},{"label":"GET /api/v1/onboarding-templates/{key} per-template detail endpoint","description":"Mirrors the rev-103 /api/v1/blog/{slug} per-post detail at the templates axis. Returns the source template's full shape (key + name + description + memoryCount + signalCount + url + launchRev + launchDate + memories[] + signals[]) plus a `neighbors` block { prev, next } with adjacent verticals (in declaration order, mirroring the rev-189 dashboard prev/next nav) and the total templates count so MCP hosts rendering a 'browse the templates set' surface can build neighbor navigation without re-fetching the listing endpoint. Returns 404 with a typed { error: 'template_not_found', key } when the slug is missing. Pairs with the rev-172 /onboarding-templates listing as the two-axis templates read surface on the protocol-bound side. The OpenAPI 3.1 spec types the new endpoint with full request/response schemas + 404 error path in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 98th unbroken rev with rev 189. Cache-control public, max-age=300, s-maxage=1800."}]},{"rev":"rev 188","date":"2026-05-08","title":"Deliberate diversification away from the 12-rev cadence/changelog cluster (rev 178-187 each shipped a cadence-axis primitive) onto the operator-stickiness templates axis — closes the entire rev-187 named radar in a single cycle by shipping all four named verticals (independent franchise restaurants with multi-unit operators + per-location P&L + brand-standard variance + regional manager span-of-control + franchisee retention discipline + small-batch artisan bakeries with production-yield + retail-channel-mix margin + named-supplier discipline + named-baker continuity + independent occupational therapy / speech therapy practices with insurance-verification cadence + IEP integration + named-therapist continuity + SOAP-note documentation hygiene + independent specialty trades (electricians + plumbers) with named-permit + named-license-currency + named-inspection-pass + named-callback warranty + named-foreman continuity discipline) — the templates cluster reaches forty-nine named verticals — every vertical the rev-187 running state explicitly named on the radar list ships in rev 188 — twenty-four new SEO keywords + four new keyword hints + radar copy refresh names the next vertical wave (independent gym / martial-arts studios + small independent bookstores + named independent dance studios + named auto-repair shops) — the templates axis cluster (rev 19 + rev 165-188) is now twenty-three revs deep across three months — strategic pivot signal: the rev-178 to rev-187 cadence/changelog cluster operated at the public-marketing surface; rev 188 deliberately steps off that cluster to invest in operator-stickiness on day-1 (the templates axis is the load-bearing primitive that converts a fresh signup into a workspace whose first AI cycle has substance) (rev 188)","highlights":[{"label":"Independent franchise restaurants — closes one of four rev-187 named radar candidates","description":"Independent multi-unit franchise restaurant operators (regional QSR + fast-casual + multi-location coffee + multi-brand restaurant groups) — 4 high-importance memory entries: per-location P&L discipline with named-format weekly + monthly + quarterly close against named brand-standard targets, brand-standard variance hygiene with 48-hour named-action-plan response + 14-day close-out, regional manager span-of-control red flag at >8 locations OR >150 named-driving-minutes between farthest locations, franchisee retention red flag at 90+ days of brand-standard escalation OR 2+ quarters of negative unit-economics + 1 sample regional-manager span-of-control signal. Strategic significance: closes one of four explicitly named rev-187 radar candidates. The franchise restaurant vertical is one of the most-asked underserved owner-led segments — multi-unit operators routinely live in named-format P&L spreadsheets but lack a workspace that knows the named-brand-standard vocabulary. Pairs with the rev-181 multi-unit franchise pattern named on the rev-181 radar at the per-location P&L axis."},{"label":"Small-batch artisan bakeries — closes one of four rev-187 named radar candidates","description":"Owner-led artisan bakeries (small-batch bread + pastry + viennoiserie + specialty cake operators with retail + wholesale + DTC channel mix) — 4 high-importance memory entries: production-yield discipline with named-format yield report per named-recipe + named-batch + named-actual-yield + named-waste + named-baker sign-off, retail-channel-mix margin discipline with named-margin floor per named-channel + named-quarterly review naming which named-channels carry the operator and which compress, named-supplier discipline red flag on >8% named-input-cost shift in named-quarter without named-substitute-tested OR named-recipe-recosted action, named-baker continuity red flag on incomplete named-format-recipe-book OR stalled named-protégé-handoff + 1 sample wholesale-channel margin signal. Strategic significance: closes one of four explicitly named rev-187 radar candidates. Small-batch artisan bakeries operate on the most fragile margin economics in the F&B vertical — every named-channel has different fully-loaded margin and every named-input-cost shift compresses without operator action. Pairs with the rev-167 restaurant template + rev-173 direct-trade food template at the named-recipe + named-supplier discipline axis on the artisan side of the F&B spectrum."},{"label":"Independent occupational / speech therapy practices — closes one of four rev-187 named radar candidates","description":"Owner-led independent occupational therapy + speech-language pathology practices (pediatric + adult outpatient + school-based contract) — 4 high-importance memory entries: insurance-verification cadence with named-verified benefits snapshot at named intake + named-quarterly re-verification + named-event-driven re-verification on coverage change with named-prior-auth status named per named-CPT-code, IEP integration discipline with named-IEP-goal alignment + named-school-team handoff at named-quarterly + named-annual-IEP-review + named-progress-data shared in named-IEP-format within 5 business days of named-IEP-meeting, named-therapist continuity red flag on named-therapist-change in last 90 days without named-warm-handoff (named-overlap-session + named-clinical-summary + named-parent-named-school notification), billable-unit documentation hygiene red flag on named-session billed without named-format SOAP note within 24 hours documenting named-CPT-code-per-unit + named-billable-time + named-medical-necessity (named-CMS 8-minute rule + named-payer audit posture) + 1 sample insurance-verification signal. Strategic significance: closes one of four explicitly named rev-187 radar candidates. Pediatric OT/SLP practices are an underserved owner-led segment with named-CMS billing complexity + named-IEP-team integration that's the load-bearing differentiator against generic AI tools that don't know the named-CPT-code + named-IEP vocabulary."},{"label":"Independent specialty trades (electricians + plumbers) — closes one of four rev-187 named radar candidates","description":"Owner-led independent specialty trade contractors (electricians + plumbers + HVAC-ish licensed trades with named-permit + named-license + named-inspection cadences) — 4 high-importance memory entries: named-permit + named-license currency with named-jurisdiction-permit-check + named-license-currency-check at named-bid + named-pre-construction + named-inspection with named-format documentation in named-job-folder, named-inspection-pass discipline with named-format pre-inspection checklist completed by named-foreman within 24 hours of named-inspection + named-corrective-action-plan-stub if any named-finding lands, named-callback warranty red flag on any named-customer-callback inside named-90-day named-warranty-window with named-original-job + named-foreman + named-named-root-cause + named-callback-cost logged, named-foreman continuity red flag on named-active named-multi-day-job whose named-primary-foreman has been changed without named-warm-handoff (named-walkthrough + named-clipboard-handoff + named-customer-introduction) + 1 sample named-jurisdiction-inspector named-license-class-mismatch signal. Strategic significance: closes one of four explicitly named rev-187 radar candidates. The templates cluster reaches forty-nine named verticals — every vertical the rev-187 running state explicitly named on the radar list ships in rev 188. Specialty trades (electricians + plumbers) are an underserved owner-led segment where named-jurisdiction-permit + named-license-class-currency is the load-bearing differentiator against generic AI tools that don't know the named-permit + named-license-class vocabulary."}]},{"rev":"rev 187","date":"2026-05-08","title":"Closes the named rev-186 next-sprint candidate (per-week trend mini-sparkline beside the rev-186 peak-week stat card on /changelog/cadence) so a procurement reviewer scanning the page reads the peak in context against adjacent weeks (peak vs prior 4 weeks, latest bar in brand-accent so the eye reads 'this is the peak') + closes a real bug in the rev-186 peak-week detail block (the public HTML page collected peak-week revs from `day.sampleRevs` which is capped at 5 per day, silently dropping revs from any 6+ rev day in the peak window — rev 187 reads from the full releases array the way the v1 endpoint already does so the public surface and the protocol-bound surface never drift) + opens the runners-up axis on the v1 cadence response with a `topWeeks[]` ranked array (top-3 most-active 7-day windows sorted desc by revCount with weekStart tiebreaker) so MCP hosts rendering 'most-active shipping weeks ranked' tables need only one bearer-less GET (no client-side re-bucketing of weeklyCadence by count) + opens the convenience axis on the v1 peak-week primitive with a new `GET /api/v1/changelog/peak-week?days=N` endpoint mirroring the rev-175 /changelog/latest convenience pattern at the peak-week axis so callers polling for 'what was Loop Desk's busiest shipping week?' no longer fetch the full /changelog/cadence response and walk weeklyBuckets client-side — the OpenAPI 3.1 spec types the new endpoint + the new topWeeks field with full schemas in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 97th unbroken rev — 109th unbroken cadence rev (rev 187)","highlights":[{"label":"Peak-week mini-sparkline anchors the rev-186 stat card on trajectory shape — closes the named rev-186 next-sprint candidate","description":"Until rev 187 the rev-186 peak-week stat card on /changelog/cadence reported the static peak count + date range, but the trajectory shape — 'how does the peak compare to adjacent weeks?' — required scrolling to the rev-182 4-week trend chip beside it and mentally cross-referencing. Rev 187 closes that with a 4-bar inline mini-sparkline below the meta line on the peak-week stat card itself: trailing 4 weeks ending at the peak (or fewer if the peak sits too close to the start of the trailing window), latest bar (the peak week itself) wears the brand accent + slight outer glow so the eye reads 'this is the peak' before parsing surrounding weeks. Hidden when fewer than 2 weeks of data exist (a single-bar sparkline reads as broken). Pure derived state from the existing weekTotals aggregate — no extra round-trip, no schema cost. Strategic significance: closes the named rev-186 next-sprint candidate. Pairs with the rev-186 stat card (cumulative count + date range) + the rev-186 click-through anchor + the rev-186 peak-week detail block as the four-level reading horizon on the peak-week primitive: cumulative count → trajectory shape (rev 187 sparkline) → context (date range) → drill-down (rev-186 detail block)."},{"label":"Bug fix: peak-week detail block no longer drops revs from 6+ rev days","description":"Until rev 187 the rev-186 peak-week detail block on /changelog/cadence collected `peakWeek.revs` from each day's `sampleRevs` array — but `sampleRevs` was capped at 5 entries per day (the rev-178 v1 endpoint's intentional sample slice for compact JSON renders). Any day in the peak week with 6+ revs silently dropped revs from the public detail block. The v1 endpoint already filtered from the full releases array so the protocol-bound surface was correct; rev 187 fixes the public HTML surface to match. Now reads `releasesByDate.get(date)` directly so every rev shipped in the peak week's 7-day window surfaces in the per-rev detail list. Strategic significance: load-bearing for procurement reviewers comparing visible velocity — until rev 187 a 9-rev peak day shipped 5 visible revs in the detail block, which would have read as 'rev 187 lost 4 revs' on a careful read. Closes a small but real correctness gap in the same cycle the rev-186 stat card primitive lands."},{"label":"topWeeks[] ranked array on GET /api/v1/changelog/cadence — closes the runners-up axis on the v1 peak-week primitive","description":"Distinct from the rev-181 `peakWeek` primitive (single — the loudest week) by giving 'runners-up' context: a procurement reviewer comparing this quarter's shipping cadence sees not just 'the busiest week was 9 revs' but 'the top 3 weeks were 9 / 8 / 6 revs' — a richer trajectory signal. Top-3 sorted desc by revCount with weekStart tiebreaker for deterministic ordering when two weeks tie. Pure derived state from the existing weeklyBuckets aggregate (no client-side re-bucketing required, no extra cost on the response). Empty when no week in the window has any revs (fresh-window guard). The OpenAPI 3.1 spec types the new field with full schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 97th unbroken rev with rev 187. Strategic significance: pairs with the rev-186 peakWeekRevs[] projection (the actual rev list for the loudest week) so MCP hosts rendering 'most-active shipping weeks ranked' tables read both axes (which weeks ranked + which revs landed in the loudest one) without follow-up calls."},{"label":"GET /api/v1/changelog/peak-week — convenience endpoint mirroring the rev-175 /latest pattern at the peak-week axis","description":"Until rev 187 MCP hosts polling for 'what was Loop Desk's busiest shipping week?' had to fetch the full /api/v1/changelog/cadence response and walk weeklyBuckets client-side. Rev 187 makes the answer a one-call bearer-less GET. Returns the same `peakWeek` (start + end + count) + `peakWeekRevs[]` shape as the rev-178/186 cadence endpoint's peakWeek/peakWeekRevs fields, but without the per-day cadence array — pure peak-week answer for MCP hosts that don't need the high-resolution shape. Mirrors the rev-175 /changelog/latest convenience pattern at the peak-week axis. Optional `?days=N` query param (1-365, default 90) bounds the window the same way /api/v1/changelog/cadence does so the two endpoints never drift on what 'trailing N days' means at the same instant. Cache-control public, max-age=300, s-maxage=1800. Indexed in the /api/v1 self-describing endpoint list. Strategic significance: closes the convenience axis on the v1 peak-week primitive. The v1 changelog read surface is now five axes deep (listing rev 100/101 + per-rev detail rev 174 + latest rev 175 + cadence rev 178 + peak-week rev 187) — the MCP server's changelog-read tooling has nothing left to design."}]},{"rev":"rev 186","date":"2026-05-08","title":"Closes the named rev-185 next-sprint candidate (per-rev-shipping-week stat card on the rev-179 /changelog/cadence stats grid) at three coordinated surfaces (peak-week stat card with click-through anchor + peak-week detail block listing every rev shipped in the most-active 7-day window + per-rev deep-links into the rev-169 per-rev pages) so a procurement reviewer scanning the cadence page sees the most-active stretch of public shipping at a glance + closes the v1 parity gap on the new peak-week-rev primitive in lockstep with a new peakWeekRevs[] projection on the rev-178 GET /api/v1/changelog/cadence response so MCP hosts and AI-tooling release-roundup newsletters rendering 'the most-active week shipped N revs from rev-X to rev-Y' need only one bearer-less GET (no /changelog?since pagination, no per-day flatten) + closes two more rev-185 named radar candidates at the templates axis (independent landscape / hardscape contractors with seasonal route density + named-crew continuity + material pass-through markup discipline + weather-window scheduling + small specialty pharmacies with DEA-controlled-substance reconciliation + named-pharmacist-of-record continuity + 340B program eligibility discipline + HIPAA-bound communication discipline) — the templates cluster reaches forty-five named verticals — the OpenAPI 3.1 spec types the new peakWeekRevs[] field with full schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 96th unbroken rev — 108th unbroken cadence rev (rev 186)","highlights":[{"label":"Peak shipping week stat card + detail block on /changelog/cadence — closes the named rev-185 next-sprint candidate","description":"Until rev 186 the rev-179 /changelog/cadence stats grid showed total revs / active days / avg per active day / peak day in a 6-card grid + the rev-182 trajectory verb chip — but the peak SHIPPING WEEK (the most-active 7-day stretch of public shipping in the trailing window) was invisible on the public HTML surface even though the rev-181 v1 endpoint already computed it as `peakWeek` (start + end + count). Rev 186 closes that. The stats grid gains a fifth/seventh stat card showing the peak week's rev count + start/end date range as a click-through link to a new peak-week detail block below the calendar that lists every rev shipped in that 7-day window with brand-color deep-links into the rev-169 per-rev pages. Hidden when the window has no revs (fresh-state guard) so the cadence page stays compact on quiet workspaces. Strategic significance: anchors every cadence-page reading horizon (90-day calendar from rev 179 + 4-week trajectory chip from rev 182 + peak day from rev 179 + peak week from rev 186) with a click-through to the substantive content. Procurement reviewers + customers + early adopters scrolling the cadence page now see the most-active stretch at a glance + can drill into the per-rev details without leaving the page — the load-bearing visible-velocity trust signal that pairs with the rev-179 calendar heatmap for the full descriptive (per-day calendar) → density (peak day) → trajectory (peak week) story across the public reading surface."},{"label":"peakWeekRevs[] projection on GET /api/v1/changelog/cadence — closes the v1 parity gap on the rev-186 dashboard primitive","description":"Mirrors the rev-186 dashboard peak-week detail block on the protocol-bound surface in the same cycle the dashboard primitive ships (the cadence pattern from rev 37 onward continues unbroken). Until rev 186 the rev-181 `peakWeek` primitive returned start + end + count but no rev list, forcing MCP hosts and AI-tooling release-roundup newsletters to either re-query /api/v1/changelog?since=… across the week's date range or paginate the per-day cadence list and flatten the sampleRevs[] arrays. Rev 186 closes that. Each peakWeekRevs[] row carries `rev` + `date` + trimmed `title` (≤160 chars) so a caller rendering 'the most-active week shipped N revs from rev-X to rev-Y' has everything they need from one bearer-less GET. The OpenAPI 3.1 spec types the new field with full schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 96th unbroken rev with rev 186. Strategic significance: pairs the rev-181 peakWeek primitive with the per-rev detail an MCP host actually needs so the protocol-bound + public surfaces never drift on what 'peak week' means. The MCP server (Q3 #1) gains one more pre-typed surface with nothing left to design across the rev-178 v1 cadence cluster's six fields (cadence + weeklyCadence + peakDay + peakWeek + peakWeekRevs + historicalTrajectory)."},{"label":"Two more onboarding templates — Independent landscape / hardscape contractors + Small specialty pharmacies","description":"Closes two more of the rev-185 named radar candidates at two more underserved verticals where regulated discipline (seasonal route economics + named-crew continuity + material pass-through markup discipline on the landscape side, DEA-controlled-substance reconciliation + named-pharmacist-of-record continuity + 340B program eligibility + HIPAA-bound communication on the specialty pharmacy side) is the load-bearing differentiator against generic AI tools. Independent landscape / hardscape contractors (owner-led residential + light-commercial landscape, hardscape, and irrigation contractors — 4 high-importance memory entries: seasonal route density discipline with named day-of-week + named drive-time targets + named per-stop revenue floor, material pass-through with named cost-plus markup + named change-order trigger + named substitution rule, named-crew continuity red flag at >2 reassignments per rolling 30-day window, weather-window red flag on installs scheduled within 48 hours of forecasted weather risk without documented re-schedule + 1 sample mid-season route-density signal). Small specialty pharmacies (independent compounding + infusion + oncology + fertility specialty pharmacies — 4 high-importance memory entries: DEA Schedule II-V controlled-substance reconciliation with named-pharmacist + named-tech double-count + named DEA Form 222 / CSOS perpetual-inventory reconciliation, named-pharmacist-of-record continuity per long-term-therapy patient with named handoff protocol, 340B program eligibility determination with named covered-entity affiliation + named outpatient setting + named auditable retention, HIPAA-bound communication red flag on unencrypted channels without consent + named risk acknowledgement + 1 sample 340B eligibility-drift signal). Two new OnboardingTemplateKey enum values (`landscape_contractor`, `specialty_pharmacy`) extend the rev-19 enum without migration. The templates cluster is now forty-five named verticals deep — closes the day-1 starvation-point story across two more underserved owner-led segments where regulated discipline (DEA + 340B + HIPAA on the specialty pharmacy side; seasonal route economics + material markup + weather windows on the landscape side) is the load-bearing differentiator against generic AI tools that don't know the regulatory or operational vocabulary."},{"label":"Cumulative visual polish — tactile hover lift on cadence stat cards + focus-visible accessibility ring + 14 new SEO keywords + radar copy refresh","description":"Cumulative micro-polish (every rev 22+ has carried at least one). The rev-179 cadence stat cards now lift 1px on hover with a soft brand-color box-shadow so the stats grid feels reactive rather than static — pairs with the rev-186 peak-week link affordance which surfaces an inline brand-color underline on hover so the click-through reads as discoverable. New `:focus-visible` outline ring on every interactive cadence-page element (peak-week link, calendar cells with revs, peak-week detail rev rows) so keyboard-only readers land cleanly across the public marketing surface — matches the rev-38 dashboard accessibility pattern. Plus the rev-186 templates copy refresh — 'forty-five verticals today' replaces 'forty-three' across hero + metadata title + OpenGraph + Twitter description + JSON-LD CollectionPage block + radar copy refresh names the next vertical wave (independent franchise restaurants with multi-unit operators + small-batch artisan bakeries + independent occupational therapy / speech therapy practices + small specialty trades like electricians + plumbers) now that landscape + specialty pharmacy are shipped. Fourteen new SEO keywords for the landscape + specialty pharmacy axes."}]},{"rev":"rev 185","date":"2026-05-08","title":"Closes the named rev-184 next-sprint candidate (per-rev historical trajectory chip on the rev-178 /changelog/cadence stats rollup) at three coordinated surfaces (per-day calendar tooltip + per-rev /changelog index chip + per-day v1 cadence projection) so the rev-184 trajectory primitive becomes load-bearing on every cadence read shape — the public calendar tooltip, the chronological /changelog index, AND the protocol-bound /api/v1/changelog/cadence response — without operators or MCP hosts needing to call /changelog/{rev} per shown rev to reconstruct the trajectory state at that moment + closes two more rev-184 named radar candidates at the templates axis (owner-led residential property managers with 90-day lease-renewal + named maintenance-vendor continuity + fair-housing review + security-deposit audit-trail discipline + independent boutique consultancies with statement-of-work integrity + retainer-cycle discipline + scope-creep early-warning + named-engagement-partner continuity) — the templates cluster reaches forty-three named verticals — extends the rev-184 computeShippingTrajectoryAt() helper across four call sites (per-rev detail page chip rev 184, per-rev v1 historicalTrajectory rev 184, per-rev /changelog index chip rev 185, per-day v1 cadence cell rev 185) so every public cadence surface speaks one trajectory vocabulary + the OpenAPI 3.1 spec types the new per-day historicalTrajectory field with full schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 95th unbroken rev — 107th unbroken cadence rev (rev 185)","highlights":[{"label":"Per-rev historical trajectory chip on the rev-101 /changelog index — closes the named rev-184 next-sprint candidate at the load-bearing chronological-reading surface","description":"Until rev 185 the rev-184 per-rev historical trajectory chip lived only on the per-rev /changelog/[rev] detail pages — visitors landing on the chronological /changelog index (the surface every visitor lands on first) saw rev label + date + title + highlights but no cadence context. Rev 185 closes that. Every rev row in the rev-101 ChangelogList client component now carries the same brand-green Accelerating / amber Cooling / neutral Steady chip the rev-184 per-rev detail page renders, computed once per release via the shared rev-184 computeShippingTrajectoryAt() helper so the index page, the per-rev detail page, and the rev-184 v1 historicalTrajectory field never drift on what 'this rev's trajectory at the time it shipped' means. Quiet weeks (every bucket zero) skip the chip so fresh-state rows stay compact. Click-through opens the public /changelog/cadence calendar so an interested reader can see the broader cadence picture. The chip stays at 0.72 opacity by default (matches the rev-101 .ld-changelog-permalink ambient-affordance pattern) and brightens on rev-row hover so it doesn't compete with the rev label and date for first-glance attention. Strategic significance: anchors every rev row on the chronological reading surface as a data point on the cadence story, not just an isolated event. Procurement reviewers + customers + early adopters scrolling the /changelog now see at a glance which weeks Loop Desk's product was accelerating + which weeks it was steady — the load-bearing visible-velocity trust signal that pairs with the rev-179 /changelog/cadence calendar for the full descriptive (per-day calendar) → trajectory (per-rev chip) story across both public reading surfaces."},{"label":"Per-day historical trajectory in /changelog/cadence calendar tooltips + v1 cadence cell projection","description":"Until rev 185 the rev-179 /changelog/cadence calendar showed per-day rev counts in tooltips ('Thu, May 8 — 4 revs: rev 184, rev 183, ...') but didn't carry the trajectory state at that moment. Visitors hovering a busy day saw the count but had to mentally cross-reference against the rev-182 trajectory chip in the stats grid (which only describes today's trajectory) to know if THAT day was during an accelerating or cooling week. Rev 185 closes that gap. Every active calendar cell (revCount > 0) now carries an inline ' (accelerating week)' / ' (cooling week)' / ' (steady week)' suffix in the tooltip computed via the rev-184 computeShippingTrajectoryAt() helper anchored at the day's date so the trajectory reflects what the cadence looked like AT THAT MOMENT (not with hindsight). Quiet days skip the suffix so the tooltip stays compact. Plus the rev-178 GET /api/v1/changelog/cadence v1 endpoint projects the same historicalTrajectory block on every active calendar bucket (quiet days project null so the field stays compact for the steady-state case where most cells in the window are empty). The OpenAPI 3.1 spec types the new field with full schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 95th unbroken rev with rev 185. Strategic significance: pairs the rev-184 per-rev historical trajectory chip with the per-day axis on the protocol-bound surface so MCP hosts rendering a calendar tooltip don't have to call /api/v1/changelog/{rev} per shown rev to reconstruct the trajectory state at that moment — the rev-184 cadence-data-point primitive now reaches every cadence read shape (per-rev detail rev 184, per-rev index rev 185, per-day calendar rev 185, per-day v1 rev 185)."},{"label":"Two more onboarding templates — Owner-led residential property managers + Independent boutique consultancies","description":"Closes two more of the rev-184 named radar candidates at two more underserved verticals where regulated discipline (Fair Housing Act + state security-deposit statutes on the property-management side) and statement-of-work integrity (the load-bearing differentiator for boutique consulting practices that compete on outcomes rather than billable hours) is the load-bearing differentiator against generic AI tools. Owner-led residential property managers (independent residential + small-multifamily property management operators — 4 high-importance memory entries: 90-day pre-expiration renewal package with named in-unit walkthrough + named rent-comparable analysis + named owner approval discipline, named primary + backup maintenance-vendor continuity per recurring category with named insurance-currency tracking, fair-housing communication review red flag on any inbound resident or prospect communication referencing protected classes triggering 4-hour named-manager escalation, security-deposit audit trail with named move-in + move-out photo pairs + named itemised-deduction documentation per state statutory window + 1 sample 90-day renewal-window resident outreach signal). Independent boutique consultancies (owner-led boutique consulting practices spanning strategy + operations + executive coaching + M&A advisory — 4 high-importance memory entries: written statement-of-work signed before any billable work begins with named deliverables + named acceptance criteria + named change-order protocol, structured monthly status report + quarterly named decision-maker check-in + 30-day pre-renewal package on every active retainer, scope-creep early warning red flag at 80% of estimated hours before 60% of named timeline elapsed, named primary partner + named secondary contact continuity discipline with 14-day silent-partner red flag + 1 sample mid-engagement scope-addition signal). Two new OnboardingTemplateKey enum values (residential_property_manager, boutique_consultancy) extend the rev-19 enum without migration. The templates cluster is now forty-three named verticals deep — closes the day-1 starvation-point story across two more underserved owner-led segments where the regulated discipline (Fair Housing Act + state deposit statutes) and engagement-integrity discipline (SOW + retainer-cycle + scope-creep + partner-continuity) are the load-bearing differentiators against generic AI tools that don't know the regulatory or engagement vocabulary."},{"label":"Cumulative visual polish — ambient-affordance opacity on per-rev trajectory chip + 12 new SEO keywords + radar copy refresh","description":"Cumulative micro-polish (every rev 22+ has carried at least one). The new rev-185 per-rev trajectory chip on the rev-101 /changelog index sits at 0.72 opacity by default (matches the rev-101 .ld-changelog-permalink ambient-affordance pattern that ships since rev 101) and brightens to full opacity on rev-row hover or focus-visible — so the chip reads as ambient cadence context on first glance and only competes for attention when an interested reader hovers the row. Distinct from the rev-184 per-rev detail page chip which is always-visible because once the reader has landed on the detail page, the trajectory intent is already strong. Plus the rev-185 templates copy refresh — 'forty-three verticals today' replaces 'forty-one' across hero + metadata title + OpenGraph + Twitter description + JSON-LD CollectionPage block + radar copy refresh names the next vertical wave (independent landscape / hardscape contractors with seasonal route density + material pass-through, small specialty pharmacies with DEA-controlled-substance reconciliation + named-pharmacist discipline, independent franchise restaurants with multi-unit operators with per-location P&L + brand-standard variance discipline, small-batch artisan bakeries with production-yield + retail-channel-mix discipline) now that residential property managers + boutique consultancies are shipped. Twelve new SEO keywords for the property-management + boutique-consultancy axes."}]},{"rev":"rev 184","date":"2026-05-08","title":"Closes the named rev-183 next-sprint candidate (trajectory verb on the rev-180 ShippingCadencePill tooltip) at the load-bearing in-app axis — the rev-181 4-week trend numeric breakdown in the tooltip names the SHAPE; the rev-184 trajectory verb names what that shape MEANS so an operator hovering the pill answers 'is the cadence accelerating?' without scrolling to the rev-183 CadenceTrendChip beside the heartbeat indicator + opens a per-rev historical trajectory chip on every /changelog/[rev] detail page anchoring the rev as a data point on the cadence story rather than an isolated event ('shipped during an accelerating week') + closes the per-rev v1 parity gap in lockstep with a new historicalTrajectory field on the rev-174 GET /api/v1/changelog/{rev} response so MCP hosts inherit the same rev-as-cadence-data-point primitive on the protocol-bound surface + closes two more rev-183 named radar candidates at the templates axis (independent funeral homes with FTC Funeral Rule disclosure + named-family after-care + state-board licensing currency + pre-need contract integrity discipline + small marine / aviation services with named-platform records + FAA/USCG airworthiness/seaworthiness directive cadence + safety-incident reporting + insurance-currency discipline) — the templates cluster reaches forty-one named verticals — extracts a shared computeShippingTrajectoryAt() helper from changelog-releases.ts so the dashboard rev page chip + the v1 endpoint historicalTrajectory field both read from one canonical computation — 106th unbroken cadence rev (rev 184)","highlights":[{"label":"Trajectory verb on the rev-180 ShippingCadencePill tooltip — closes the named rev-183 next-sprint candidate","description":"Until rev 184 the rev-180 dashboard ShippingCadencePill carried a 4-week numeric trend in its hover tooltip ('0 / 2 / 1 / 4') but not the trajectory verb — operators hovering the pill saw the SHAPE of the cadence but had to interpret it themselves to answer 'is this accelerating?'. The rev-183 CadenceTrendChip beside the rev-12 heartbeat indicator names the verb explicitly, but that's a second instrument an operator has to look at separately. Rev 184 closes that gap by extending the pill's tooltip with the rev-183 trajectory verb + delta-vs-prior-week ('Trajectory: Accelerating (+3 vs prior week)') so the same one-pill hover surfaces both the shape AND the meaning. Pure presentation extension on the existing tooltip — zero new client-state, zero schema cost. Reuses the rev-183 shared computeShippingTrajectory() helper threaded through from the dashboard server component so the pill tooltip + the rev-183 chip + the rev-182 /changelog/cadence verb chip never drift on what 'this week vs prior week' means. Plus aria-label extension so screen-reader users hear the same verb the sighted-user tooltip surfaces — until rev 184 the pill announced only the rev count, dropping the trajectory dimension entirely for assistive-tech users. Strategic significance: closes the named rev-183 candidate at zero cost. The two-instrument cadence cluster on the dashboard status bar (rev-180 ShippingCadencePill + rev-183 CadenceTrendChip) now both read at the verb axis without operators needing to look in two places."},{"label":"Per-rev historical trajectory chip on /changelog/[rev] detail pages","description":"Until rev 184 the rev-169 per-rev /changelog/[rev] detail pages surfaced the rev's title + date + highlights + the rev-174 share affordance + the rev-175 BreadcrumbList markup, but read as isolated events — an external reader landing on a permalink share saw what the rev did but not where it sat in the cadence story. Rev 184 closes that with a small inline 'Accelerating' / 'Cooling' / 'Steady' chip in the per-rev meta row showing the trajectory state at the time the rev shipped (computed by walking the rev-37 release list anchored at the rev's shipping date with future revs excluded so the chip reflects what the cadence looked like at the moment, not with hindsight). Brand-green palette when accelerating + amber when cooling matches the rev-183 dashboard CadenceTrendChip palette so the in-app + public surface speak one trajectory vocabulary. Click-through opens the public /changelog/cadence calendar so an interested reader can see the broader cadence picture. Pure derived state — no schema cost. Strategic significance: anchors every per-rev share surface (procurement-team release-note shares, AI-tooling release-roundup newsletter citations, customer-success internal documentation links) on the cadence story rather than the rev alone. 'shipped during an accelerating week' reads as a stronger product-momentum signal than the rev's title in isolation, especially for procurement teams evaluating governance-first AI tools against per-cycle-credits competitors."},{"label":"historicalTrajectory field on GET /api/v1/changelog/{rev}","description":"Mirrors the rev-184 dashboard per-rev chip on the protocol-bound surface in the same cycle the dashboard primitive ships (the cadence pattern from rev 37 onwards continues unbroken through rev 184). The rev-174 GET /api/v1/changelog/{rev} response gains a new historicalTrajectory block carrying the trajectory verb (label + latest + prior + delta + hasActivity) computed at the rev's shipping date so MCP hosts rendering 'show me where this rev sits on the cadence story' don't need to fetch /api/v1/changelog/cadence + bucket by-week + diff client-side. Pure additive on the existing rev-174 response shape — existing v1 callers reading only release / neighbors keep working since historicalTrajectory is a new sibling field. The OpenAPI 3.1 spec types the new field with full schema in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 94th unbroken rev with rev 184. Strategic significance: pairs with /api/v1/changelog/trend (rev 183 — current trajectory) + /api/v1/changelog/cadence (rev 178 — full per-day shape) + /api/v1/changelog/latest (rev 175 — convenience read) as the four-axis cadence read cluster on the protocol-bound side. The MCP server (Q3 #1) gains one more pre-typed surface with nothing left to design across the changelog-cadence cluster at any read shape including the per-rev historical axis."},{"label":"Two more onboarding templates — Independent funeral homes + Small marine / aviation services","description":"Closes two more of the rev-183 named radar candidates at two more underserved verticals where regulated-disclosure + safety-cadence discipline is the load-bearing differentiator. Independent funeral homes (owner-led funeral homes + cremation providers — 4 high-importance memory entries: FTC Funeral Rule disclosure cadence with structured GPL/CPL/OBCPL handoff before any goods or services are quoted, named-family after-care cadence with structured 30-day + 90-day + 1-year touchpoints, state-board licensing currency with named CEU + renewal package tracking, pre-need contract integrity with named trust-account custodian + named state-disclosure-form acknowledgement + 1 sample 60-day after-care touchpoint feedback signal). Small marine / aviation services (owner-led marine + aviation maintenance, charter, and flight-training operators — 4 high-importance memory entries: named-platform records with named tail/hull number + named-mechanic-of-record + named cycle/hour count discipline, FAA airworthiness directive + USCG marine notice cadence with 14-day applicability review, safety-incident reporting discipline with NTSB / FAA Service Difficulty Report / USCG Form 2692 / MAIB filing windows, insurance-currency thresholds with named broker-of-record + 30-day renewal package gating + 1 sample emergency airworthiness directive signal). Two new OnboardingTemplateKey enum values (funeral_home, marine_aviation_service) extend the rev-19 enum without migration. The templates cluster is now forty-one named verticals deep — closes the day-1 starvation-point story across two more underserved owner-led segments where regulated discipline (FTC Funeral Rule + state-board funeral-director licensing + state pre-need contract custodian regulations on the funeral home side, FAA airworthiness directives + USCG / MAIB / EASA equivalents on the marine/aviation side) is the load-bearing differentiator against generic AI tools that don't know the regulatory vocabulary."}]}]}