changelog

What's new

What we shipped, what we fixed, what we broke (and un-broke).

v1.8.4

2026-05-05

Three reviewer must-fix items closed before merge — Stage 4 (Verify) artifact contract, /method/principles SERP-friendly title, and a composite DeviceLogin index for the cleanup path. The artifact-contract gap was the most consequential: /walkthrough, /pr-review, and the hotfix close-out now produce 07-walkthrough.md, 08-review-report.md, and 10-postmortem.md on disk instead of replying in chat, so /redo cascade and /method-check stop pointing at files that never existed.

added

  • Templates 07-walkthrough.md, 08-review-report.md, 09-release-checklist.md, and 10-postmortem.md ship in packages/skill/method/templates/. Closes the artifact gap that the file tree on /method/principles, /redo cascade, and several blog posts had been advertising.
  • /walkthrough, /pr-review, and /job-done declare an explicit ## Artifact Contract section that names the artifact, the required sections, and the chat reply output contract — same shape as /release-check which was already correct on this dimension.

fixed

  • /method/principles metadata title shortened to 60 characters so Google does not truncate it on mobile SERP after the title-template suffix. Drops the redundant 'Frenchie' prefix and the 'from' filler word.
  • DeviceLogin gains a composite (status, expiresAt) index. cleanup.service.ts filters by both columns; without the composite index the planner had to scan-and-filter on status and contend for locks with the auth path under load. Forward-only migration 20260505000000_devicelogin_status_expires_idx ships with the schema change.

v1.8.3

2026-05-05

Copy and UI polish across the public Method pages — clearer prose on /method/principles and /docs/method, plus a real example artifact preview so readers learn that Method artifacts are markdown prose rather than YAML or checklists.

added

  • /docs/method picks up an 'Example artifact' preview showing the first ~30 lines of a real-shape 01-requirement.md (frontmatter + Problem + Users/scope + AC pointer + Constraints + Open questions). Readers learn that artifacts are markdown prose with a small YAML frontmatter, not YAML-only documents and not checklists.

changed

  • /method/principles Principle 3 no longer repeats 'Acceptance criteria' three times. Acceptance criteria and test cases are now contrasted in a single semicolon-split sentence.
  • /method/principles Principle 4 (UI design before implementation) is phrased as an imperative — 'Design before implementing for UI-heavy work, unless the user explicitly approves skipping the design artifact' — replacing the passive double-negative.
  • /method/principles Principle 10 title rewritten to 'Tune the method from real outcomes' so the label ('Improve method') and the title no longer duplicate the same verb.
  • /docs/method orchestrator language replaced 'strict router' / 'strict guided mode' / 'Advanced router' with 'automatic task router' across the Quick start table, the inline orchestrator note, and the Orchestrator section. After Phase 1 made gate-check warning-only, 'strict' was no longer accurate.
  • /docs/method File architecture intro replaced 'Method is file-backed' with prose that describes the actual behavior — Method writes state to disk so any session, agent, or teammate can pick up the trail without replaying chat history.

v1.8.2

2026-05-05

Foundation fixes from the Method frontend content review — the install section in /docs/method now lists every flag users actually need (--api-key, --agent, --global, --all, --no-init-method), and Principle 6 on /method/principles correctly distinguishes /walkthrough (user POV) from /pr-review (diff vs artifacts) instead of conflating the two.

added

  • Install flags table in /docs/method covering --agent, --all, --api-key, --global, --init-method, --no-init-method, --non-interactive, --dry-run, and --help. Includes an explicit note on --global as the project-only safety carve-out per CLAUDE.md non-negotiable rules.

fixed

  • Principle 6 on /method/principles now describes /walkthrough as a user-perspective inspection (acceptance criteria, states, copy, data behavior, errors) and /pr-review as the diff-vs-artifacts comparison that surfaces drift, regressions, and missing tests. Earlier prose said "Review starts with the actual diff and behavior" which conflated the two.

v1.8.1

2026-05-04

Review polish on v1.7.0 + v1.8.0 — closes a false-positive in advisory CAS for legacy v1 state reads, adds a manual cascade hint when /redo design changes user-facing affordances, and surfaces typo suggestions on unknown installer flags.

added

  • /redo notes that the design → qa-analysis cascade is manual. Most design redos are visual (color, spacing, typography) and don't affect Gherkin scenarios; when a design redo changes user-facing affordances (button labels, control visibility, flow ordering), the agent now suggests /redo qa-analysis as a manual follow-up.
  • /job-done rationale picks up that "no auto-archive" also keeps /method-check deterministic — silently archived folders would make later health checks fail to find features the user expects.
  • Installer warnings on unknown flags now suggest the closest known flag via Levenshtein distance ≤ 2. --api-keys → "Did you mean --api-key?"; --globl → "Did you mean --global?". Catches the typo class without changing the warn-and-continue policy.

fixed

  • Advisory CAS no longer fires false-positive drift warnings on legacy v1 state reads. The runtime synthesises lastModifiedAt for v1 (defaults to "now"), which made two reads of the same v1 file produce different values — a guaranteed false positive. state-check.md now spells out that CAS only applies once a state has been written at v2; v1 reads skip the drift check until the first write upgrades the file.

v1.8.0

2026-05-04

Phase 2 closer for Frenchie Method — installer ergonomics, an explicit cleanup policy on /job-done, and three new task types (refactor, tech-debt, dep-bump) with their own shorter workflow. Phase 2 backlog from the implementation review is now fully closed.

added

  • Three new task types — refactor, tech-debt, and dep-bump — with their own workflow (workflows/refactor.md). The shape is the same for all three: rewrite without changing observable behavior, prove nothing broke, ship. /qa-analysis, /design, and /sa-analysis are skippable by default; /run-test (regression evidence) is the central artifact; /security-review is strongly recommended for dep-bump because CVE / advisory exposure changes whenever a dependency changes.
  • Branch prefixes for the new task types in /prepare-feature: refactor/ for refactor, chore/ (Conventional Commits) for tech-debt, deps/ for dep-bump.
  • Installer --help flag — npx @lab94/frenchie install --help now prints install-specific help. The top-level help command is unchanged.
  • Installer unknown-flag detection — typos like --api-keys now produce a one-line warning + pointer to --help, then continue (warning-only, matches Method's philosophy).
  • Installer MCP merge logging — · wrote MCP config: <path> after every successful MCP write, so users can see exactly which file the installer touched.
  • --init-method now prints a Method quick-start banner after writing method.config.json: /frenchie-method, /requirement, /method-check, /redo as the entry points, with a link to the docs.

changed

  • /job-done documents an explicit cleanup policy: no auto-archive, no auto-delete, no silent cleanup. Worktree removal, branch deletion, git worktree prune, and folder move/delete each require their own explicit confirmation. Feature folders stay in .frenchie/docs/feature/ indefinitely as durable evidence.

v1.7.0

2026-05-04

Frenchie Method gets multi-worktree clarity, a real back-edge command, and an advisory concurrency model. Active feature is derived from your worktree and branch instead of a marker file. /redo <stage> marks a stage as needing rework and cascades staleness to downstream artifacts. state.json bumps to schema v2 with lastModifiedAt + lastModifiedBy so two agents on the same feature folder cannot silently overwrite each other.

added

  • Active-feature derivation rules in skills/core/state-check.md — worktree path first, then branch, then most-recently-modified state. Multiple worktrees can have multiple active features simultaneously without coordination.
  • Active Feature section in /method-check output so multi-worktree sessions show which feature each shell is acting on.
  • /redo <stage> command (with /frenchie-redo alias) for explicit back-edges. Accepts requirement / qa-analysis / design / sa-analysis / run-test / walkthrough / pr-review / release-check; cascades staleness to downstream artifacts and records the action in state.json.decisions[].
  • state.json schema v2 with lastModifiedAt (ISO 8601) and lastModifiedBy (agent identifier). Legacy v1 reads still work and upgrade in place on next write.

changed

  • Concurrency between two agents on the same feature folder is now advisory CAS: read-then-write checks lastModifiedAt before saving and warns when another writer updated state since the last read. User proceeds via decisions[] override; Method does not lock files.

v1.6.2

2026-05-04

Review polish on v1.6.0 + v1.6.1 — two more WCAG 2.2 AA criteria cited (Reflow at 320 CSS px and Focus Not Obscured), the "new in 2.2" markers made consistent across 2.4.11 / 2.5.8 / 3.3.7, hotfix gets a precise definition of user-impacting SEV3, spike workflow uses date placeholders and adds a visible frozen-at marker on promote, and the PR description template clarifies the mixed-PR tiebreaker.

added

  • WCAG 1.4.10 Reflow (320 CSS px without horizontal scroll) and 2.4.11 Focus Not Obscured (Minimum, new in 2.2) cited by number in both the design template and the UX/accessibility reference.
  • Operational definition of user-impacting SEV3 in the hotfix workflow: (a) customer report, (b) public-facing page degraded visibly, or (c) paid feature broke for any subset of paying users.
  • Frozen-at marker on the spike promote contract — the Background heading now reads "## Background — Spike Findings (frozen at promote: <YYYY-MM-DD>)" so future readers and /pr-review can see the section is sealed.
  • Mixed-PR tiebreaker in /create-pr — PRs that touch code outside .frenchie/docs/feature/ use the full Problem / Solution / Testing / Rollback / Flags template even when artifact edits ride along.

changed

  • Split the merged "2.5.5 / 2.5.8 Target Size" line into separate criteria so the "(new in 2.2)" markers are consistent across 2.4.11, 2.5.8, and 3.3.7.
  • Hotfix workflow now says "first body line under the H1 of 01-requirement.md" instead of "first line" — frontmatter precedes the H1, so the prior wording was misleading.
  • Spike workflow uses <YYYY-MM-DD> placeholders for example timebox and decision dates, replacing literal dates that would have shipped stale.
  • Frenchie Method handoff item #3 (Feather mode — skip non-critical gates for XS changes) is covered by the Phase 1 warning-only short-path: gate-check.md emits warnings only and the workflow-router does not recommend conditional gates for XS / Small no-sensitive-path work. No additional batch is planned for #3.

v1.6.1

2026-05-04

Frenchie Method's hotfix and spike workflows are no longer one-line stubs. Hotfix gets a SEV1-SEV4 triage decision tree mapping severity to recommended gates. Spike gets a 2-working-day default timebox and an explicit promote-or-discard contract that reuses the spike folder when the team decides to ship.

added

  • Hotfix workflow with SEV1 (data-loss), SEV2 (security), SEV3 (degraded), SEV4 (cosmetic) triage tiers, per-tier gate recommendations, and a postmortem requirement for SEV1/SEV2/user-impacting SEV3.
  • Spike workflow with default 2-working-day timebox, pinned deadline in 01-requirement.md, and an explicit decision section that flips taskType from spike to new-feature on promote (folder reused, branch rename gated on approval).
  • /frenchie-method orchestrator surfaces the chosen SEV tier for hotfixes and the timebox plus decision status for spikes in its Task Classification output.
  • /job-done now references workflows/spike.md and workflows/hotfix.md directly so promote/discard and postmortem expectations stay in front of the user at close-out.

v1.6.0

2026-05-04

Frenchie Method gets the first wave of Phase 2 polish — clearer reference content for design, security, and architecture; a real 05-design.md template; Gherkin acceptance criteria with AC-NNN traceability; and a structured PR description so agents stop producing freeform PR bodies. Public Method principles page no longer advertises a 05-task.md artifact that never existed.

added

  • 05-design.md template — durable artifact for /design with primary flow, states, accessibility, responsive, copy, and implementation notes.
  • WCAG 2.2 AA criteria cited by number (1.4.3, 1.4.11, 2.1.1, 2.4.3, 2.4.7, 2.5.5, 2.5.8, 3.3.1, 3.3.7, 4.1.2) plus Nielsen heuristics and Fitts/Hick/Jakob/Doherty laws in the UX/accessibility reference.
  • OWASP API Security Top 10 (2023) — every API1:2023 through API10:2023 named with a one-line example — plus crypto guidance (never roll your own; argon2id/bcrypt/scrypt; TLS 1.2+; key rotation) and supply-chain guidance (SCA, SBOM, secrets scanning, lockfile integrity) in the security reference.
  • SOLID review lens, Hexagonal / Ports and Adapters callout alongside Clean Architecture, and Michael Nygard ADR format (Status / Context / Decision / Consequences / Alternatives) prescribed in the architecture reference.
  • Gherkin Given-When-Then scaffolds and stable AC-NNN traceability IDs in the acceptance-criteria template; test cases anchor to AC IDs, /pr-review walks the trace.
  • PR description template inside /create-pr with Problem / Solution / Testing / Rollback / Flags + Artifact Links sections.

fixed

  • Public Method principles page and llms-full.txt no longer list a 05-task.md artifact that never existed in the templates directory; the slot belongs to 05-design.md.

v1.5.0

2026-04-30

Frenchie now has a clearer product shape: Frenchie Method for requirement-to-release agent work, Frenchie Kit for file and multimodal tools, and `npx @lab94/frenchie login` for browser-approved local setup. The marketing surface, docs, MCP server card, installer copy, and Method public principles were updated together so users no longer have to guess where workflow ends and file processing begins.

added

  • Frenchie Method public principles page with artifact-driven, test-first, worktree-driven workflow guidance.
  • Frenchie Kit positioning across the homepage and docs for OCR, transcription, extraction, and image generation.
  • npx @lab94/frenchie login device-login flow: the CLI opens a browser approval URL, creates an API key after approval, and writes it into supported MCP configs.
  • Device login backend endpoints with one-time token redemption, polling rate limits, expiry cleanup, and scoped API key creation.

changed

  • Plain npx @lab94/frenchie install is now framed as the Method-first setup path. Kit file tools connect later through login when the user needs OCR, transcription, extraction, or generation.
  • Docs and homepage copy now separate Method text workflows from paid Kit processing so the quick start does not imply that install alone writes a ready API key.
  • MCP server-card and public copy now describe the full Kit surface: OCR, transcription, extraction, image generation, uploads, result polling, and result file fetching.

fixed

  • Device login token redemption is atomic and one-time, preventing duplicate API key redemption during concurrent polling.
  • Abandoned device login approvals now revoke orphaned CLI-created API keys during cleanup.

v1.4.1

2026-05-05

`install --global` is now upgrade-mode. Running `npx @lab94/frenchie install --global` (no `--agent`) scans every `$HOME` MCP config and rewrites the pinned package spec on entries that already declare `frenchie`. Fixes the long-standing bug where Antigravity / Claude Desktop / Windsurf / Zed pinned versions would stay locked at whatever version you originally installed, even after running `install` repeatedly from a project.

changed

  • install --global (no --agent, no --all) is now upgrade-mode: it scans every Tier A agent's $HOME MCP config, finds entries with an existing frenchie server, and rewrites them with the current pinned spec + reused API key. Paths without an existing entry are left alone — first-time global installs still go through install --agent <name> --global (or install --all --global). Flag picks scope, cwd is irrelevant.
  • Per-file API keys are preserved during upgrade-mode unless --api-key fr_… is passed explicitly. A FRENCHIE_API_KEY exported in the shell is deliberately ignored here — it would otherwise silently overwrite per-file keys when a user has wired Antigravity with one account and Cursor with another. To rotate every config to a new key, run install --global --api-key fr_NEW_KEY.
  • Bumped @lab94/frenchie to 0.4.6 so existing local stdio installs can pull in the upgrade-mode behaviour by re-running install.

fixed

  • install (no flag) in a project never updated user-level MCP configs (Antigravity, Claude Desktop, Windsurf and Zed global variants), so the pinned @lab94/frenchie@<version> inside ~/.gemini/antigravity/mcp_config.json (and friends) stayed stale across upgrades. The single most common source of dogfood reports of "upgraded but nothing changed".
  • ~/.claude.json entries nested under projects[<absPath>].mcpServers.frenchie (the layout Claude Code uses when you run claude mcp add frenchie from inside a project) now get rewritten in place during install --global. Previously upgrade-mode would leave the stale nested entry behind and create a fresh top-level one — Claude Code in that project would still spawn the cached older server.

v1.4.0

2026-04-28

Frenchie now adds `extract_to_markdown` for DOCX, XLSX, CSV, TSV, and PPTX files. The worker validates ownership and MIME/magic bytes, estimates fractional extraction credits, runs jobs through the async queue, and returns the same Markdown result envelope used by OCR and transcription.

added

  • extract_to_markdown MCP tool for structured document extraction to Markdown.
  • /extract <file> slash command in the skill pack.
  • Dashboard support for extraction jobs, including fractional credit display and format-specific stats.

changed

  • Credit display now supports fractional extraction pricing such as 0.5 or 2.5 credits.
  • Bumped @lab94/frenchie to 0.4.5 so local stdio installs pick up the extraction tool and slash command.

v1.3.3

2026-04-28

Dashboard sessions now fail like a product, not like a stack trace. If your web session credential expires while the browser still has an auth cookie, Frenchie sends you back to sign in with a clear note instead of dropping a Next.js server error digest.

fixed

  • Expired or revoked dashboard session credentials (401 from the worker API) now redirect to /login?reason=session-expired and show "Your session has expired. Please sign in again." Business 403 responses keep their original message.
  • Dashboard server-rendered pages now catch session-expired responses from overview, jobs, job detail, API keys, billing, and the shared dashboard layout before they can bubble into a production application error.
  • Client-side dashboard actions (/api/app/* refreshes, billing actions, API key actions, and account-provider actions) now get a clear SESSION_EXPIRED response and send the browser through the same sign-in flow.

v1.3.2

2026-04-28

Async image generation got a cleanup pass. Failed jobs now fail loudly, result retention starts when the image is first delivered, and missing image payloads return a clean expired response instead of a misleading `done` envelope.

changed

  • Bumped @lab94/frenchie to 0.4.4 so local stdio installs pick up the same async image-generation fixes as hosted MCP.

fixed

  • get_job_result now surfaces failed image-generation jobs as errors instead of keeping agents in a fake processing loop. If generation fails, you see the failure and the refunded-credit state can be reflected correctly.
  • Generated images now start their 30-minute retention window on first successful delivery, matching OCR and transcription. A slow-to-return agent no longer loses the image before it ever gets to fetch the result.
  • If a generated image object is already gone when /jobs/:id/result is fetched, Frenchie now clears the stored prompt/style metadata and returns 410 Gone instead of a done response with no usable image URL.

v1.3.1

2026-04-27

Set a default transcription language once, stop repeating it on every call. New optional `FRENCHIE_DEFAULT_LANGUAGE` env (stdio) and `X-Frenchie-Default-Language` header (HTTP) feed `transcribe_to_markdown` when the tool input doesn't specify a language. Tool-level `language` always wins, so existing calls keep working unchanged.

added

  • FRENCHIE_DEFAULT_LANGUAGE env var for stdio MCP. Drop an ISO 639-1 code (th, en, ja, …) into your MCP config's env block and transcribe_to_markdown will use it as the fallback when the call omits language. Useful for teams that work in one language all day.
  • X-Frenchie-Default-Language HTTP header for mcp.getfrenchie.dev. Per-session header, applied the same way as the stdio env var. Agents can set it once during initialization and forget about it.
  • Both surfaces validate the value (loose ISO 639-1 / BCP 47 shape) and silently drop malformed input, so a bad header can never poison the transcription request.

changed

  • Bumped @lab94/frenchie to 0.4.3. No behaviour change for existing transcription calls — the new fallback is opt-in.

v1.3.0

2026-04-27

Marketing surface is now **truly static** — `getfrenchie.dev` no longer issues NextAuth CSRF cookies on every page load and no longer ships `Cache-Control: no-cache` on HTML responses. The cold-cache TTFB tax (every request round-tripping to the Singapore origin even for visitors served from US/EU edges) is gone. The site header was split into a sync server shell + a `SiteHeaderClient` that hydrates auth state from `/api/session`, with an inline pre-paint script reading the session cookie to prevent any login-button flash.

added

  • [/api/session](apps/frontend/app/api/session/route.ts) — lightweight session probe returning { isAuthenticated, name, emailVerified }. Per-user, marked Cache-Control: private, no-store. Anonymous visitors skip this fetch entirely (cookie short-circuit in SiteHeaderClient).
  • [/api/service-status](apps/frontend/app/api/service-status/route.ts) — public worker-health probe. Cached at the Vercel edge (s-maxage=30, swr=300) so a single API dip doesn't fan out into thousands of marketing page loads.
  • Pre-paint inline cookie-detect script in <head> (50 chars uncompressed) sets data-auth-state="anon" or data-auth-state="user" on <html> based on the session-cookie presence. Runs synchronously before first paint.
  • [data-auth-show] CSS buckets in [globals.css](apps/frontend/app/globals.css) — render BOTH Log in and Dashboard button variants in the static HTML; CSS picks the right one off [data-auth-state]. No layout shift, no hydration flash.
  • [SiteHeaderClient](apps/frontend/components/site-header-client.tsx) — owns the entire interactive surface (auth button, status pill, mobile drawer). Verifies the optimistic cookie guess via /api/session after mount; reconciles if the cookie is stale.
  • [ServiceStatusPill](apps/frontend/components/marketing/service-status-pill.tsx) — small client component that fetches /api/service-status on mount, used by the homepage hero. Replaces the old server-side await getServiceStatus() in MarketingHome.

changed

  • [SiteHeader](apps/frontend/components/site-header.tsx) is now a sync server component — no await auth(), no await getServiceStatus(), no async work at all. Defines the sign-out server action at module scope and passes it down as a prop to the client component.
  • Marketing layout, marketing page, and MarketingHome are all sync. The homepage no longer makes any server-side fetches; the route can be statically pre-rendered.
  • Middleware matcher tightened from [/((?!api|_next/...).*)] (everything but assets) to [/dashboard/:path*] only. Marketing routes, /login, /register, /api/* no longer pass through auth(...) middleware → no CSRF cookie issuance, no forced Cache-Control: no-cache on response.
  • Verify-email guard moved out of middleware (which only ran on /dashboard anyway via the new matcher) into [app/(dashboard)/layout.tsx](apps/frontend/app/(dashboard)/layout.tsx) — same behaviour, cleaner ownership.
  • Removed orphan components components/header-session-action.tsx and components/mobile-nav-toggle.tsx; functionality consolidated into SiteHeaderClient.
  • Updated [tests/header-responsive.test.ts](apps/frontend/tests/header-responsive.test.ts) to assert against the new file split.

fixed

  • Cold-cache TTFB on marketing routes was previously dominated by the SIN1 origin round-trip on every request, even for visitors served by US/EU Vercel edges (visible in x-vercel-id: sin1::iad1::...). With marketing now serving as static HTML from the global edge, expect TTFB to drop from ~400-700ms to ~30-50ms in remote regions, and x-vercel-cache: HIT on repeat requests.
  • Two redundant getServiceStatus() calls per homepage request (one in SiteHeader, one in the page) collapsed to one lazy client-side fetch with edge caching.

v1.2.2

2026-04-27

Follow-up SEO bundle on top of v1.2.1 — `/compare/{slug}` pages ship a `Product` schema with one `PropertyValue` per side-by-side dimension so AI Overviews can quote specific Frenchie capabilities directly. Use-case `HowTo` steps expanded from one-liners to 2–3 sentences with concrete commands and filenames so AI engines have richer step text to recite. `Person` schema is **live** — every blog post now credits a named human author with verifiable LinkedIn + GitHub URLs (E-E-A-T uplift), and `/about` emits a top-level `Person` block. One-line `<link rel="llms-txt">` discovery hint added to every page head.

added

  • [comparisonProductSchema()](https://www.getfrenchie.dev/compare/marker) on every /compare/{slug} page — Product JSON-LD with one additionalProperty (PropertyValue) per side-by-side dimension. Lets AI Overviews cite specific dimensions (deployment shape, pricing, capability surface) when answering "Frenchie vs X" queries.
  • [personSchema()](apps/frontend/lib/seo/schema.ts) + [personEntity()](apps/frontend/lib/seo/schema.ts) helpers for E-E-A-T author markup. Wired into BlogPosting.author on every blog post (via [lib/authors.ts](apps/frontend/lib/authors.ts) → FOUNDER constant) and emitted as a top-level block on /about. Includes name, jobTitle, description, knowsAbout[], sameAs[] (LinkedIn + GitHub), and worksFor: Organization. Replaces the previous Organization-only authorship.
  • isAuthorReadyForSchema() type guard in lib/authors.ts — gates Person schema emission until both name and at least one sameAs URL are populated. Lets us land scaffolds for future co-authors without breaking the entity graph.
  • <link rel="llms-txt" href="/llms.txt"> injected into every page's <head>. Non-standard but cheap discovery hint for AI crawlers that look for a curated llms.txt URL; mirrors the canonical /llms.txt route already shipped in v1.1.13.

changed

  • All 9 use-case HowTo workflow arrays expanded from 1-line summaries to 2–3 sentence steps with concrete commands, filenames, credit costs, and parameter names. AI engines reproduce step text verbatim; richer steps = richer quotations in answers. Affects /use-cases/{meeting-transcription, sales-call-transcription, podcast-transcription, research-papers, legal-documents, invoices, handwritten-notes, product-mockups, blog-covers}.
  • Open Graph article:author on blog posts now uses the founder's display name instead of the company name — matches the byline a reader actually sees on Slack / Discord / Bluesky link previews.

v1.2.1

2026-04-27

SEO, AEO, and GEO pass — `getfrenchie.dev` now ships a tighter SERP snippet on every page, an aggregated `/faq` hub, a `/glossary`, machine-readable favicon and theme-color, RSS auto-discovery, and a 308 (permanent) apex → www redirect. Schema markup picks up `WebSite`, `DefinedTermSet`, citations on `TechArticle`, and the public skill-mirror as a `sameAs` for entity-graph density. Open Graph on blog posts now carries `article:published_time`, `article:author`, `article:section`, and `article:tag` so Slack / Discord / Bluesky previews show byline + date. No product changes.

added

  • [/faq](https://www.getfrenchie.dev/faq) — every FAQ on the site (homepage, pricing, every comparison, every use case) aggregated into one hub with a question-jump TOC and a single combined FAQPage JSON-LD block. Built so AI search engines can quote the whole question set in one fetch.
  • [/glossary](https://www.getfrenchie.dev/glossary) — plain-English definitions for the 14 terms the rest of the site uses (MCP, stdio vs HTTP, sync vs async, skill packs, shared result contract, Tier-A agent, etc.) plus a DefinedTermSet schema with one nested DefinedTerm per entry.
  • Favicon at /icon.svg (Next.js convention — Cabinet Grotesk-shaped logo) and a themeColor viewport that flips between #FAFAF9 (light) and #0C0C0C (dark) so the mobile browser URL bar matches the site chrome.
  • <link rel="alternate" type="application/rss+xml"> in every page head. Feed readers (Feedly, Inoreader, NetNewsWire) can now auto-discover [/blog/feed.xml](https://www.getfrenchie.dev/blog/feed.xml) without the user pasting the URL.
  • WebSite JSON-LD on the homepage (publishes the canonical site name + tagline + publisher to Google's knowledge graph).
  • DefinedTermSet and DefinedTerm schema generators in lib/seo/schema.ts for use across the new glossary page.
  • citation array on every TechArticle JSON-LD block — currently links the [Model Context Protocol specification](https://modelcontextprotocol.io/specification) by default, with per-page additions accepted via the new citations argument.
  • metaDescription field on every Tier-A agent doc — Claude Code, Cursor, Codex, Antigravity, VS Code, Claude Desktop, Windsurf, Gemini CLI, Zed all now ship 130–160-character SERP descriptions instead of 50-character taglines.
  • Public skill mirror ([Lab94/frenchie-skill](https://github.com/Lab94/frenchie-skill)) now appears in Organization.sameAs alongside the npm package — strengthens the LAB94 entity graph for AI search citations.
  • /faq, /glossary, /llms.txt, /llms-full.txt, and /blog/feed.xml all listed in the sitemap.

changed

  • Apex getfrenchie.devwww.getfrenchie.dev redirect is now 308 Permanent (was 307 Temporary). Wired through next.config.ts so it works regardless of Vercel dashboard settings.
  • Meta descriptions on the homepage, pricing, docs, troubleshooting, compare hub, use-cases hub, about, and every blog post are now ≤160 characters — they used to truncate in the Google SERP. Hooks lead the description.
  • buildPageMetadata accepts an optional article: { publishedTime, modifiedTime, authors, section, tags } argument that switches og:type to article and emits the matching article:* Open Graph tags. Wired into the blog post route so every post now ships date + author + category + tags in social previews.
  • Open Graph image hero text and og:image:alt updated to mention image generation alongside OCR and transcription.
  • Compare-page <h1> no longer has a stray double-space and orphaned period (Frenchie vs Marker .Frenchie vs Marker.).
  • buildRootViewport() (Next.js 15 viewport export) added to lib/seo/metadata.ts so theme-color stays declarative.

v1.2.0

2026-04-23

Frenchie now ships image generation alongside OCR and transcription. Same MCP install, same credit ledger — agents can call `generate_image` with a prompt and get a PNG (or JPEG / WebP) back. Stdio mode auto-saves the image next to your work; HTTP mode hands cloud agents a 30-minute presigned URL. 20 credits per image, refunded automatically on failure.

added

  • generate_image MCP tool — takes a prompt (required), plus optional style, size (1024x1024, 1536x1024, 1024x1536, auto), quality (low/medium/high/auto), format (png/jpeg/webp), and background (transparent/opaque/auto). v1 generates exactly one image per call; call again for variants.
  • /generate-image "<prompt>" slash command — works in agents that pick up the Frenchie skill commands. Plain-language entry point that maps to the MCP tool.
  • Stdio auto-save: the image lands at .frenchie/<slug>/generated.<ext> next to your project, with the slug derived deterministically from the prompt. No second download step in your agent.
  • HTTP transport returns a presigned download URL with a 30-minute expiry — same retention contract as OCR and transcription results.
  • Dashboard job detail now renders image jobs inline: preview the result, hit Open / Download, or Copy prompt (which always copies a Prompt:\nStyle: two-liner so you can replay or tweak in another tool).
  • Job history filter dropdown gained an Image generation option. The list label and truncated prompt make image jobs easy to spot at a glance.
  • Rate limits: 50 generated images per hour and 250 per day per user. Daily credit cap of 5,000 still applies — generating 250 images burns the entire daily budget.

changed

  • Pricing is now three-row: 1 credit/page (OCR), 2 credits/minute (transcription), 20 credits/image (image generation). $1 still buys 100 credits — that translates to 100 OCR pages, 50 minutes of transcription, or 5 generated images. Existing OCR and transcription pricing is unchanged.
  • Homepage hero, capabilities grid, FAQ, docs, and SoftwareApplication schema all repositioned around the multimodal story. Frenchie is no longer described as just file-to-Markdown.
  • Shared result envelope across OCR, transcription, and image generation responses — every capability now returns { status, jobId, creditsUsed, resultExpiresAt, result: { kind: "markdown" | "image", ... } }. Top-level markdown / imageUrl / savedTo are retired. Agents reading the tool output must branch on result.kind.
  • Image generation runs asynchronously through our job queue (same infra as chunked OCR and transcription). Agents get a queued response immediately; the MCP smart-wait loop polls up to ~90s and returns done when the image is ready — or a jobId to check back on with get_job_result. No change to how you call generate_image.
  • Privacy parity with OCR and transcription: prompts and style directions are cleared from our database 30 minutes after the result is delivered, alongside the generated image itself. If you still need to reference the prompt, save it on your side before the window expires.

v1.1.15

2026-04-23

Two fixes to how the `@lab94/frenchie` skill pack teaches agents to use Frenchie — the `/ocr` and `/transcribe` HTTP flow now routes through the built-in `upload_file` MCP tool, and the stdio workflow docs now match what the server actually returns.

fixed

  • HTTP upload flow in /ocr and /transcribe now walks agents through the upload_file MCP tool instead of calling the REST presign endpoint directly. The tool-based path has been the supported contract for a while — instructions.md and the skill code both use it — but the slash-command definitions still pointed at raw REST. Agents following the old guidance could get stuck on auth or signing errors that the tool handles for them.
  • Stdio workflow docs for ocr_to_markdown and transcribe_to_markdown no longer say the tool returns Markdown inline on status: "done". The stdio server has been metadata-only (savedTo, wordCount, imageCount) for a while — the file is written to disk at savedTo and the agent should read it from there. Agents that followed the old docs sometimes re-invoked the tool hoping for inline Markdown, which reprocessed the file and spent credits for nothing.

v1.1.14

2026-04-21

Navbar and footer grew up a little. Nothing changed about OCR or transcription — just easier to get around the site.

changed

  • Navbar: **Pricing** and **Blog** now sit next to Docs and Changelog. Flat layout, no dropdowns.
  • Mobile (under 768px) collapses to a hamburger — full-screen menu, large tap targets, closes on Escape or link tap.
  • Footer split into two rows — product links on top, company links below. Terms & Privacy and support@getfrenchie.dev still right where you'd expect.
  • Homepage picks up an **Explore** strip between Pricing and FAQ pointing at Use cases and Compare pages.

v1.1.7

2026-04-21

Paved the road for PulseMCP and Smithery directory listings. `@lab94/frenchie` is now MIT licensed, and every release gets mirrored to a public GitHub repo at `Lab94/frenchie-skill`. The monorepo stays private — only the skill package (what you already install via npm) gets mirrored, with `packages/shared/` inlined so the repo builds standalone.

added

  • Lab94/frenchie-skill — public mirror of the skill package. A release-triggered job in the monorepo syncs packages/skill/src/** + packages/shared/src/** into this repo on every npm publish, tags v<x.y.z> matching the npm version, and leaves behind a repo any reviewer (or agent) can clone and run pnpm install && pnpm build in. Goes live with the next skill release.
  • LICENSE file in the npm tarball — MIT. Enterprise users who block unlicensed packages can finally install us without filing an exception.

changed

  • npm view @lab94/frenchie will show a working **Repository** link pointing at the public mirror starting with the next release. bugs URL still lands on getfrenchie.dev/docs/troubleshooting — the symptom-first fix guide is almost always faster than filing a GitHub issue.

v1.1.6

2026-04-19

Typography overhaul plus docs navigation polish. Every heading, label, and body across marketing, docs, and dashboard now reads from one unified scale — generous, friendly, Linear-flavoured. No more 11–14px labels that made the console feel like a sysadmin tool.

added

  • Unified type scale in globals.css — CSS custom properties (--fs-display, --fs-h1, --fs-h2, --fs-h3, --fs-body-lg, --fs-body, --fs-label, --fs-caption, --fs-code) plus --fw-* and --lh-* tokens. Every font-size / font-weight / line-height in the stylesheet now references a token — raw rem/px values are now an anti-pattern.
  • Clickable breadcrumbs on every docs sub-page. docs → tools → claude-code now has each hierarchy segment as a link back to its parent, so you can climb out of a page without using the browser back button.
  • Shared "More" section at the bottom of every docs sub-page (/docs/tools, /docs/tools/[agent], /docs/troubleshooting, /docs/migrate) so cross-navigation is reachable even when the sidebar is collapsed on mobile.
  • Mobile docs sidebar is now a collapsed-by-default "Navigate docs" disclosure sitting sticky at the top of the page. Tapping expands a standard nav list; content stays front-and-center above the fold. Desktop (≥1024px) keeps the classic sticky-column sidebar.
  • /api/health — lightweight Next.js liveness probe returning { status, service, timestamp }. Paired with the worker's own /health; upstream uptime checks can hit either without touching the database.

changed

  • Body text jumps to 16–18px with 1.65 line-height across docs and dashboard (was 14–16px with 1.5–1.7). Reading long-form content is noticeably less cramped.
  • Field labels jump from 11–14px up to 15px (--fs-label). The MCP config panel, API key page, jobs list, and dashboard stat cards all visibly relax as a result.
  • FAQ question headings jump from 14px to 20px semibold (--fs-h3). They now register as proper section headings rather than fine print.
  • Marketing headline + section headers consolidated to --fs-display / --fs-h1. All three previous clamp() variations collapsed to a single fluid ramp.
  • Main /docs page now has an "Other pages" sidebar section with cross-links to Agent guides, Troubleshooting, and Migrating — same pattern as the sub-pages.
  • Sidebar section labels standardized to "Other pages" everywhere (was a mix of "Elsewhere" / "Other guides" / "Other pages" across docs pages).
  • ocr_to_markdown and get_job_result response examples in /docs#tools split into stdio vs HTTP variants. Stdio shows metadata-only (savedTo, wordCount, imageCount, no markdown), HTTP keeps inline markdown. Reflects the 0.3.0+ stdio contract.
  • Footer links stack vertically on mobile (was one horizontal row that wrapped awkwardly on narrow screens). Support email now aligns left with the other links on mobile, keeps its right-aligned placement on desktop.
  • Per-agent verification banner now tells users to email support@getfrenchie.dev if they hit anything that doesn't match the (pending-verification) guide.

v1.1.5

2026-04-19

Upgrade guide is now on the web. Every link to the old GitHub-hosted MIGRATION.md has been replaced with `getfrenchie.dev/docs/migrate` — external users can finally read it.

added

  • /docs/migrate — full version-to-version upgrade guide. Covers 0.1.x → 0.2.0, 0.2.x → 0.3.0, 0.3.0 → 0.3.1 (critical pin fix), and 0.3.1 → 0.3.2 (installer reuses your API key). Sticky sidebar with scroll-tracking, and each section cross-links to the matching troubleshooting anchor instead of duplicating symptom content.
  • Migrating link in the sidebar of every docs sub-page (/docs/tools, per-agent pages, /docs/troubleshooting) so navigation stays consistent across the four docs routes.

changed

  • /docs#migrating now summarises the common upgrade and links to /docs/migrate for the full guide. The old link to a private-repo GitHub file is removed.
  • packages/skill/MIGRATION.md points users to getfrenchie.dev/docs/migrate as the canonical, cross-linked source. The npm tarball still ships the file for offline reading.

v1.1.4

2026-04-18

Re-installing Frenchie no longer asks for your API key every time. `npx @lab94/frenchie install` is now idempotent — pass `--api-key` on the first install, and every re-run reuses the stored key.

added

  • Installer auto-recovers FRENCHIE_API_KEY from any configured MCP agent (Claude Code, Cursor, Codex TOML, Antigravity, Windsurf, Zed, VS Code, Gemini CLI, Claude Desktop). Matters because Frenchie keys are shown only once at creation, so "paste it again" was a dead end if you lost the plaintext. Pass --api-key fr_new to rotate when you need to.
  • Installer prints the reused key in redacted form (fr_…abcd) so you can confirm the right key was picked up without leaking the full secret to shell logs or CI output.

changed

  • npm package metadata cleaned up — repository dropped and bugs now points to getfrenchie.dev/docs/troubleshooting (an actual page with symptom-first fixes). The private GitHub repo is no longer linked on npmjs.com/package/@lab94/frenchie, so external users don't hit a broken link.

v1.1.3

2026-04-18

Critical fix for local stdio installs. If you upgraded to 0.3.0 but your agent was still dumping full OCR markdown into context, this is the one — re-run `npx @lab94/frenchie@latest install` after the new release drops.

fixed

  • Installer now pins @lab94/frenchie@<version> in every MCP config it writes. The 0.3.0 release moved stdio responses to metadata-only, but unpinned configs (args: ["-y", "@lab94/frenchie", "mcp"]) let npx keep spawning stale 0.2.x bundles from its cache — so agents still saw the full 25k-token markdown payload instead of the promised ~200-byte metadata note. 0.3.1 pins the spec so the spawned server can never drift from the installer.
  • After upgrading, re-run npx @lab94/frenchie@latest install --api-key fr_your_key_here once and restart your agent. A correct stdio response now looks like { status, savedTo, wordCount, imageCount, creditsUsed } — no markdown field. 0.3.2 will let you drop --api-key on re-runs (installer will reuse the existing key), but 0.3.1 still needs it.

v1.1.2

2026-04-18

One-command local installs got broader. Frenchie is stdio-first now, and Antigravity finally gets the same first-tier path as the other local editors.

added

  • Bundled stdio MCP server inside @lab94/frenchie — local agents can install once and run Frenchie over npx without separate MCP plumbing
  • Codex-native install path — project-scoped .codex/config.toml plus .agents/skills/frenchie/SKILL.md so Codex can discover Frenchie cleanly
  • Antigravity is now a first-tier stdio install. Frenchie auto-detects .agent/skills/, installs the project skill there, and can write ~/.gemini/antigravity/mcp_config.json when you opt into --global

changed

  • The whole setup story is stdio-first now: npx @lab94/frenchie install --api-key ... is the lead path in the dashboard, docs, and package README for local coding agents
  • Antigravity moved out of the hosted-agent bucket. It now sits with the local editors, while HTTP stays as the fallback for Lovable, Manus, Claude.ai, ChatGPT.com, and other agents that really can't spawn local binaries

v1.1.1

2026-04-17

Quieter HTTP mode. Some MCP hosts were chasing an SSE stream we don't run.

fixed

  • HTTP mode: intermittent standalone SSE stream ... without progress retry-exhaustion errors on hosts that probed the optional GET stream. The server now returns 405 Method Not Allowed on GET / and GET /mcp, pushing clients onto the POST/JSON flow Frenchie actually uses. The legacy /sse endpoint is unchanged.

v1.1.0

2026-04-16

HTTP mode gets real file downloads. No more inline base64 eating your agent's tokens.

added

  • upload_file tool — get a presigned URL to upload files in HTTP mode, then pass object_key to ocr_to_markdown or transcribe_to_markdown
  • fetch_result_file tool — download result images from HTTP mode OCR output. Returns a presigned URL, agent saves with curl
  • Per-tool MCP setup UI in dashboard — pick your tool (Claude Code, Cursor, Antigravity, Codex, etc.) and get the right config format

changed

  • HTTP mode OCR results now upload images to S3 instead of returning inline base64 — saves ~500KB+ per image in agent tokens
  • MCP endpoint moved from api.getfrenchie.dev/mcp to mcp.getfrenchie.dev — cleaner URL, same service
  • Result images auto-deleted from server after 30 minutes, matching existing retention policy

v1.0.0

2026-04-11

The first one. Frenchie is live.

added

  • ocr_to_markdown — PDF and image OCR to Markdown
  • transcribe_to_markdown — audio and video transcription to Markdown
  • get_job_result — retrieve async job results
  • Sync routing for small files, async for everything else
  • Smart auto-polling (3s intervals, 90s timeout)
  • Credit-based pricing: 1/page OCR, 2/min transcription
  • 100 free credits on first signup, once per email
  • Public MCP endpoint at https://mcp.getfrenchie.dev
  • Frenchie skill pack: /ocr, /transcribe, /frenchie-status — install with npx @lab94/frenchie install --agent claude (or cursor / codex)
  • Dashboard: API keys, credit balance, usage history, billing
  • Supported: PDF, PNG, JPG, WebP, MP3, M4A, WAV, MP4, MOV, WebM
  • Files deleted after processing. Results expire 30 min after delivery.