# FrankenMarkdown — Technical Due-Diligence Assessment

**The hook:** 146,322 lines of safe, zero-dependency Rust that turn Markdown into byte-stable HTML and PDF — with a claim-discipline gate that treats the README as a test suite: every marketed capability maps to a machine-checkable proof, and the gate fails when claims drift.

**Tier legend (Rulebook §1):** **[Verified]** direct inspection of the pinned clone or a live page read by the analyst — flavors **[Counted]** (I ran the count), **[Git-observed]** (git metadata), **[Code-verified]** (source read). **[CI-observed]** is Tier 2 (seen executing on live CI pages — attests the suite *runs*, not that it is green). **[Maintainer claim]** asserted in README/docs, not independently executed. **[External]** independent sources. **[Inference]** analyst judgment, always labeled. Confidence: **High** / **Medium** / **Low**.

## TL;DR

FrankenMarkdown (`fmd`) is a genuine clean-room Rust Markdown→HTML/PDF renderer: a 3-crate workspace whose library compiles with **zero third-party dependencies** (verified in manifests), `#![forbid(unsafe_code)]` at the crate root plus workspace-wide `[lints.rust] unsafe_code = "forbid"` (verified), 146,322 lines of Rust in `src/` across 152 files (fresh count) [Verified, High], 136 integration test files [Verified, High], a ratcheted CommonMark 0.31.2 floor of 578/652 (floor file matches README — consistent), determinism machinery (byte-repeat renders, `SOURCE_DATE_EPOCH`, staged writes), a byte-parity-gated WASM package, and an agent surface (`fmd capabilities --json`, `doctor --json`, `robot-docs`, stable exit codes, a 654-line MCP stdio server [Verified exists, High]). It ships: GitHub release v0.4.5 (5 platform targets, `.sha256` sidecars, npm tgz — all verified via the releases API), crates.io 0.4.5, npm `@franken-suite/franken-markdown` 0.4.4 (0.4.5 pending — release-pipeline lag is real), and a live demo site. Its most original contribution is **methodological**: `claims.tsv` + `check-claim-discipline.sh` wire each README claim to a `capabilities --json` key and a proof script — marketing hygiene as CI, a discipline no incumbent practices. **TRL 7. NODUS ring: Explore.** Strongest strength: the dependency/unsafe/determinism posture is real and mechanically enforced, not asserted. Strongest ceiling: "ultra-fast" is an unmeasured word — zero published head-to-head numbers vs pulldown-cmark/comrak; bus factor 1; and the non-OSI MIT+OpenAI/Anthropic-rider license withholds even *benchmarking and analysis* rights from the two AI labs the MCP server is built to serve.

## Quick Links

- Repository: https://github.com/Dicklesworthstone/franken_markdown
- README: https://github.com/Dicklesworthstone/franken_markdown/blob/main/README.md
- Changelog (0.4.5 — CFF font mechanics, 2026-09-15): https://github.com/Dicklesworthstone/franken_markdown/blob/main/CHANGELOG.md
- License (MIT + OpenAI/Anthropic rider, read verbatim): https://github.com/Dicklesworthstone/franken_markdown/blob/main/LICENSE
- Releases (v0.4.5, 5 platforms + sha256 sidecars): https://github.com/Dicklesworthstone/franken_markdown/releases/tag/v0.4.5
- The disabled CI workflow (name: "DISABLED — releases use DSR exclusively", `if: ${{ false }}`): https://github.com/Dicklesworthstone/franken_markdown/blob/main/.github/workflows/release-wasm.yml
- CommonMark conformance gate: https://github.com/Dicklesworthstone/franken_markdown/blob/main/scripts/commonmark-conformance.sh
- Claim-discipline gate: https://github.com/Dicklesworthstone/franken_markdown/blob/main/scripts/check-claim-discipline.sh
- Determinism gate: https://github.com/Dicklesworthstone/franken_markdown/blob/main/scripts/check-determinism.sh
- WASM package gate: https://github.com/Dicklesworthstone/franken_markdown/blob/main/scripts/check-wasm-package.sh
- crates.io (0.4.5, 7 versions, 151 downloads): https://crates.io/crates/franken_markdown
- npm registry (`@franken-suite/franken-markdown`, latest 0.4.4): https://registry.npmjs.org/@franken-suite%2Ffranken-markdown
- The Knuth-Plass commit (deep review finds the quadratic DP; `e4a84f9`, 2026-07-01): https://github.com/dicklesworthstone/franken_markdown/commit/e4a84f952f90543cc565f56e6078489fe0586576
- Demo site repo (4 stars, live at franken-markdown.com): https://github.com/Dicklesworthstone/franken_markdown_website

## Did you know?

In July 2026 a "deep review" pass found the project's "Knuth-Plass" line breaker was actually a dense quadratic DP — one 8,000-word paragraph took **13.5 seconds** and a single heavily-hyphenating token hung past 60 seconds (a trivial availability attack on untrusted Markdown). The fix implemented true TeX active-node deactivation: **13.5s → 0.04s (330x)** with render-tree and PDF/HTML goldens byte-identical [commit `e4a84f9` exists, message verified on GitHub — High; the 330x figure is the maintainer's own before/after, Medium]. The maintainer's perf loop records rejected trials too — the honesty is structural, not decorative.

## Franken-worthy next steps

These are research directions, not engineering tickets: each is novel, specific, falsifiable, and backed by rigor this project has already demonstrated.

1. **Export the claim-discipline gate as a portable method.** `claims.tsv` + `check-claim-discipline.sh` map README patterns to `capabilities --json` keys and proof scripts, failing when marketing drifts from code — the methodology-export lens made concrete. **Falsification:** port the gate to a *second* renderer (e.g., sparkdown) in one focused workstream; if it cannot be decoupled from fmd's capabilities schema, it is product scaffolding, not a method. The gate already exists and runs, so the port is a bounded experiment.
2. **A typographic conformance oracle.** The 0.4.5 changelog documents FontTools/HarfBuzz cross-verification of every new font mechanic — the seed of a differential typography harness: same document through fmd's PDF writer and a browser reference, diffing glyph placement, kerning, and line breaks within tolerance. **Falsification:** publish the divergence ledger; if divergences collapse into "acceptable rendering differences" with no systematic signal, the oracle adds nothing over visual spot-checks.
3. **Cross-host byte-stability certification.** Determinism is currently proven on the maintainer's machines (`check-determinism.sh`, `SOURCE_DATE_EPOCH`, staged writes). The strong version of the thesis is *deterministic everywhere*. **Falsification:** render a fixed corpus on three independent hosts/toolchains and publish SHA-256 parity; anything below 100% byte-identical shrinks "deterministic" to "deterministic-on-my-machine."
4. **An adversarial Markdown corpus from the fresh-eyes findings.** Maintainer commits document real DoS-class bugs caught by fresh-eyes review: a tab-indented list panic (byte-vs-column index confusion), untrusted-font GPOS/GSUB offset aliasing projected at ~150 GB retained state, an unbounded LCS diff table. Generalize these into a published hostile-input suite scored across pulldown-cmark, comrak, and sparkdown. **Falsification:** if the suite finds zero crashes/hangs in the incumbents, it is fmd-specific trivia, not a benchmark.

---
## 4.1 Header

| Field | Value |
|---|---|
| Repository | https://github.com/Dicklesworthstone/franken_markdown |
| Pinned revision | `88a6a99ed1ebc48c7910c28213005d8b35963079` — 2026-09-22 10:37:59 -0400 (14:37:59 UTC) [Verified, High] |
| Assessment date | 2026-09-22 |
| Language / toolchain | Rust, edition 2024, `rust-version = "1.85"` (Cargo.toml) [Verified, High] |
| License | "MIT License (with OpenAI/Anthropic Rider)" — NOT OSI open source; full text read verbatim, rider scope quoted in §4.8 [Verified, High] |
| Scale | 3 workspace crates (root + `fmd-font` 0.3.2 + `fmd-math` 0.1.1); 146,322 Rust lines / 152 files in `src/`; largest file `src/pdf.rs` 41,068 lines; 136 integration test `.rs` files under `tests/`; `fuzz/` with `fuzz_targets` + corpus [Verified, High] |
| Stars / forks | 104 stars / 9 forks (GitHub API, live read 2026-09-22) [External, High]; GitHub language field reports "HTML" though the tree is overwhelmingly Rust (fixture/demo HTML volume — a quirk, not a signal) |
| Releases / tags | v0.4.5 on GitHub (2026-09-15): 5 platform targets (aarch64/x86_64 × macOS/Linux, x86_64 Windows) with `.sha256` sidecars + npm tgz, asset names verified via releases API [External, High]; crates.io `franken_markdown` 0.4.5 (7 versions, 151 total downloads) [External, High]; npm `@franken-suite/franken-markdown` latest **0.4.4** (0.4.5 not yet published) [External, High] |
| Last push | 2026-09-22T14:38:05Z (API), matching pinned HEAD [External, High] |
| Maintainer | Single: Dicklesworthstone (Jeffrey Emanuel, per LICENSE copyright) — bus factor 1; no second maintainer visible in repo docs [Inference, High] |
| Inception | 2026-06-27 per GitHub API `created_at` [External, High] |

**Analyst method.** Fresh shallow clone of HEAD to `~/workspace/.scratch/fmd-verify/repo` (pinned above). Read directly: `Cargo.toml` (root, fmd-font, fmd-math), `src/lib.rs`, `LICENSE` (verbatim), `CHANGELOG.md`, `README.md` (Limitations §823+, conformance §844+, Performance §232+), `AGENTS.md` (DSR-only §123+, verification §133+), `scripts/` (policy, claim-discipline, conformance, determinism, wasm gates — headers and key logic), `tests/` layout, `ios/` layout, `fuzz/` layout. Grep-verified: workspace members, Rust line/file counts, `forbid`/`deny(unsafe_code)` distribution, `asupersync` reference sites, conformance-floor consistency, README-vs-code drift on test counts/line counts/CI language. Fetched and confirmed resolution of every Quick Link. Live API reads: GitHub repo, releases, release assets, website repo; npm registry; crates.io. Web-searched for independent coverage (benchmarks, reviews, production use). **Not done:** did not compile, run tests, execute `fmd`, reproduce any benchmark, or verify the live demo site's served engine version (no browser-action capability in this session); shallow clone only, so commit history and velocity were not analyzed.

## 4.2 Executive verdict

FrankenMarkdown is a **substantive, unusually self-critical clean-room Rust Markdown→HTML/PDF renderer** [Inference, High]: a fresh-clone count confirms 146,322 lines of first-party Rust [Verified, High], a library that compiles with zero third-party dependencies (root `[dependencies]` holds only first-party `fmd-font`/`fmd-math`; `clap`, `wasm-bindgen`, `asupersync` are all `optional`) [Verified, High], crate-root `#![forbid(unsafe_code)]` plus workspace-wide `[lints.rust] unsafe_code = "forbid"` [Verified, High], a real `fmd` CLI and library on crates.io at 0.4.5 [External, High], and a WASM package with a byte-parity gate on npm at 0.4.4 [External, High]. Its most defensible differentiation is not speed but **integrated determinism**: one typed theme model drives HTML and PDF, byte-stable renders via `SOURCE_DATE_EPOCH` and staged writes, a ratcheted CommonMark floor (578/652, floor file matches README) [Verified consistency, High; behavioral results Maintainer claim, Medium], and a claim-discipline gate (`claims.tsv` + `check-claim-discipline.sh`) that fails when README marketing drifts from `capabilities --json` — the most rigorous marketing-hygiene mechanism observed in this program [Inference, Medium; the mechanism itself Verified, High]. **But:** "ultra-fast" appears in the crate/GitHub description with zero published head-to-head numbers against pulldown-cmark or comrak anywhere in the repo [Verified absence, High] — the internal perf discipline is strong (p50/p95 over 100+ iterations, byte-identical goldens, rejected trials recorded) but entirely maintainer-generated; the README's "CI fails if it drops" language is stale — the sole GitHub Actions workflow is explicitly DISABLED (`if: ${{ false }}`, "never use GitHub Actions in any project" per AGENTS.md) and enforcement runs through DSR — the maintainer's private release/build orchestration (the name is never expanded in-repo) — on the maintainer's own hosts, unobservable externally [Verified, High]; PDF pagination and full PDF/UA accessibility are openly incomplete [Maintainer claim, High]; the npm release pipeline lags the engine (npm latest is 0.4.4 while GitHub releases and crates.io are at 0.4.5 — registry APIs read 2026-09-22) [External, High]; traction is modest (104 stars, 151 crates.io downloads) with zero independent benchmarks, reviews, or production deployments found [External, High within recall]; and the MIT+OpenAI/Anthropic-rider license withholds all rights — including benchmarking, testing, and analysis — from OpenAI, Anthropic, affiliates, and anyone acting for them [Verified, High]: it is **not OSI open source**, and it is a hard adoption ceiling for a project whose MCP server and agent ergonomics target exactly the agent-infrastructure ecosystem those labs dominate [Inference, Medium]. **NODUS: Explore. Wardley: Markdown parsing is commodity; the integrated zero-dependency deterministic HTML+PDF+WASM pipeline is custom-built → early product.** If the renderer fails, the claim-discipline and determinism machinery is the exportable artifact [Inference, Medium].

## 4.3 Claim inventory: demonstrated vs aspirational

Status values: *demonstrated* / *partially demonstrated* / *aspirational* / *disproven* / *stale*.

| # | Claim | Status | Evidence |
|---|---|---|---|
| 1 | Engine library has zero third-party dependencies | **Demonstrated** | [Verified, High] — root `[dependencies]`: only first-party `fmd-font`, `fmd-math`; `clap`, `wasm-bindgen`, `asupersync` all `optional = true`. `fmd-font/Cargo.toml`: "[dependencies] # None, ever… Pure std." `fmd-math`: only first-party `fmd-font`. `scripts/check-policy.sh` exists to enforce this. |
| 2 | `unsafe` forbidden at crate level | **Demonstrated** | [Verified, High] — `src/lib.rs:27`: `#![forbid(unsafe_code)]`, plus workspace `[lints.rust] unsafe_code = "forbid"`. (Remaining "unsafe" greps in v1-era code were identifiers/test strings, not code sites; not re-grepped this round — see §4.12.) |
| 3 | "Ultra-fast" (crate + GitHub description) | **Aspirational / unmeasured** | [Verified absence, High] — no throughput numbers (no MiB/s, no head-to-head vs pulldown-cmark/comrak) anywhere in README/docs. Internal discipline is strong (perf harness `examples/fmd_perf_harness.rs`, `check-optimization-proof.sh`, golden-output gates, "SIMD not claimed until proven"), but all performance evidence is maintainer-generated. The one place "MB/s" appears is a *metric column* in `docs/planning/PERFORMANCE_OPTIMIZATION_PLAN.md`, not a result. |
| 4 | CommonMark 0.31.2: 578/652 (97.1% of 595 in-scope) | **Claimed with strong mechanism** | [Maintainer claim, Medium] — `scripts/commonmark-conformance.sh` runs the vendored official suite, normalizes fmd's styled HTML, keeps a per-example gap ledger, and enforces a ratcheted floor. Floor file `tests/fixtures/commonmark/conformance-floor.txt` contains `578`, matching README — the number is at least self-consistent [Verified, High]. Not independently executed (no toolchain here). Raw-HTML examples are intentional non-goals (escaped by default). |
| 5 | Deterministic, byte-stable renders | **Claimed with mechanism** | [Maintainer claim, Medium] — `scripts/check-determinism.sh` (byte-for-byte repeat renders), `SOURCE_DATE_EPOCH` support, staged writes. Not independently executed. README's "enforced in CI" wording is stale (see #8). |
| 6 | WASM renders byte-identical to native | **Claimed with mechanism** | [Maintainer claim, Medium] — `scripts/check-wasm-package.sh` gate (parity, manifest, size budgets). The sibling website repo (same maintainer — not an independent witness) asserts byte-parity in its README. Not independently executed. |
| 7 | Knuth-Plass, Liang hyphenation, GPOS kerning, GSUB ligatures, hand-rolled DEFLATE + clean-room Brotli/WOFF2 | **Partially demonstrated** | [Verified modules exist, High] — `layout.rs` (5,429 lines), `compress.rs` (2,338), `brotli.rs` (1,151), `woff2.rs` (427), `woff1.rs` (381); font subsystem factored into `fmd-font`. CHANGELOG 0.4.5 documents FontTools/HarfBuzz cross-verification of font mechanics [Maintainer claim, Medium]. Code not audited line-by-line. |
| 8 | Every marketed claim CI-enforced ("CI fails if it drops") | **Stale wording; mechanism real** | [Verified, High] — the gate scripts exist and `claims.tsv` maps README patterns to `capabilities --json` keys + proof files. But the *only* GitHub Actions workflow is named "DISABLED — releases use DSR exclusively" with `if: ${{ false }}`, and AGENTS.md states "Never use GitHub Actions for any reason." Enforcement runs through DSR — the maintainer's private release/build orchestration (the name is never expanded in-repo) — on the maintainer's own hosts: unobservable externally. README's "CI" means "the maintainer's machine," not CI. |
| 9 | MCP stdio server exposing render/verify/capabilities | **Demonstrated (exists); behavior claimed** | [Verified exists, High] — `src/mcp.rs` (654 lines), zero-dep JSON-RPC 2.0 per v1. Behavioral claims [Maintainer claim, Medium]; not executed here. |
| 10 | asupersync kept out of the render core (batch-only, opt-in) | **Demonstrated** | [Verified, High] — `asupersync = { version = "0.5.0", optional = true }`; enabled only via `batch = ["cli", "dep:asupersync"]` feature; the only `src/` reference is `src/batch.rs`. Cargo.toml comments state the justification explicitly. |
| 11 | Clean-room syntax highlighting (~20 languages, per-`lang_*.rs` lexers) | **Partially demonstrated** | [Verified structure, High] — 14+ `lang_*.rs` files (cplusplus, csharp, go, html, java, javascript, jsx, python, shell, sql, swift, tsx, typescript) plus `lex_c/css/toml/yaml.rs`. Lexer correctness [Maintainer claim, Medium]; not exercised. |
| 12 | EPUB 3 output (`--to epub`) | **Demonstrated (exists); quality claimed** | [Verified, High] — `src/epub.rs` (941 lines) + `epub/` dir; module doc comment: "EPUB 3 (Open Container Format) rendering". Un-marketed in the headline ("HTML & PDF") — capability exceeds marketing here. |
| 13 | Release artifacts: 5-platform binaries, crates.io, npm | **Demonstrated; npm lagging** | [External, High] — v0.4.5 release assets verified via API (5 platform targets + `.sha256` sidecars + npm tgz); crates.io 0.4.5 live. npm latest is **0.4.4** — 0.4.5 still unpublished as of 2026-09-22, confirming the release-pipeline lag weakness. |

## 4.4 Architecture (reconstructed, not summarized)

[Verified from the clone; README diagrams treated as claims where noted]

**Crate topology (3 workspace members, `Cargo.toml`):** root `franken_markdown` 0.4.5 (library + `fmd`/`franken_markdown` binaries), `fmd-font` 0.3.2 (factored font subsystem: TrueType reader, cmap/glyf/loca, subsetter, GPOS, GSUB — zero dependencies, "None, ever… Pure std"), `fmd-math` 0.1.1 (clean-room TeX-mathematics layout; depends only on `fmd-font`). The factoring is explicitly for suite reuse: Cargo.toml comments state fmd-font was split "so the wider Franken suite can consume it directly — franken_manim's fm-ydw is the factoring bead" and fmd-math's "core lands in franken_manim (fm-wgl)" (fm-ydw/fm-wgl are franken_manim component names; a "bead" is the maintainer's work-unit in the `.beads` issue tracker) [Verified comments, High; downstream consumption Maintainer claim, Medium].

**Module map (152 files, 146,322 lines in `src/`):** the mass is concentrated in a few monoliths — `pdf.rs` (41,068 lines: deterministic PDF writer, tagged-PDF structure, SVG→PDF vector drawing, font embedding), `layout.rs` (5,429: Knuth-Plass + Liang/TeX hyphenation + UAX #14 CJK breaking), `cli.rs` (4,836), `html.rs` (3,918: self-contained HTML with inlined CSS, deterministic font subsets, data-URI images), `batch.rs` (2,962: asupersync workers behind the opt-in feature), `highlight.rs` (2,772) + per-language `lang_*.rs` lexers, `compress.rs` (2,338: hand-rolled zlib/DEFLATE) + `brotli.rs` (1,151: clean-room Brotli for WOFF2) + `woff1.rs`/`woff2.rs`, `diff.rs` (1,647: LCS-based document diff with a 16M-cell DoS cap added after fresh-eyes review), `diagrams.rs` (1,424: frankenmermaid — the sibling FrankenSuite diagram engine — SVG→PDF integration), `mcp.rs` (654), `epub.rs` (941) + `epub/` dir, `pdfa.rs`, `svg/` + `svg.rs`, `pagination/` + `pagination.rs`, `parse/` (clean-room block+inline parser), `wasm.rs` + `wasm_abi/`, `watch/`, `book/`, `resume/`, `dep_invalidation/`, `flow*/` (book/flow document pipeline), `fonts/` + `font_context.rs` (re-exporting fmd-font). One typed `theme` model drives both HTML and PDF (README: "One theme, two surfaces"; `src/theme.rs` holds `pub struct Theme`, 1,292 lines) [Maintainer claim, Medium; struct exists Verified, High].

**Data flow:** byte/line `scanner` → clean-room block+inline `parse` → renderer-neutral `ast` → three emitters (HTML / PDF / WASM ABI over the same core). Native-only concerns are feature-gated out of the core: `batch` (asupersync structured concurrency, deterministic receipts), MCP stdio server, config, watch mode [Verified via Cargo feature flags — `batch`, `mcp`, `wasm-bindgen` all optional, High]. WASM-first core design: no fs/fontconfig/thread/network assumptions in the render path; fonts/assets as bytes [Maintainer claim, Medium — the `--no-default-features` portability gate (AGENTS.md) and optional `wasm-bindgen` are verified; per-module IO absence was not audited].

**Memory-safety posture** [Verified, High]: crate-root `#![forbid(unsafe_code)]` (`src/lib.rs:27`) and workspace `[lints.rust] unsafe_code = "forbid"` — the gate is declared twice, belt and suspenders. The `fmd-font` manifest comment ("None, ever") and policy script extend the posture to dependencies.

**Dependency posture:** the engine's default build pulls exactly one third-party crate, and only for the CLI: `clap` (optional, behind `cli`). `wasm-bindgen` is optional (WASM target). `asupersync` 0.5.0 is optional, enabled only by the native `batch` feature, used solely in `src/batch.rs` for bounded workers/cancellation/receipts — deliberately kept out of the render core and out of any wasm/no-default build [Verified, High]. **The asupersync question: used, deliberately scoped, never in the hot path** [Verified, High] — unlike sibling repos where it is the runtime foundation, here it is a fenced orchestration tool.

**README-vs-code drift (governance signal):** README says "CI fails if it drops" (conformance) and "enforced in CI" (determinism) while the only GitHub Actions workflow is disabled and AGENTS.md forbids Actions — the gates are real scripts, but "CI" is the maintainer's local DSR pipeline, unobservable externally. Line counts move fast: 146,322 `src/` lines at this HEAD vs ~138,500 at the v1 draft's HEAD (days apart) — the tree grows ~thousands of lines per day, so every number in this packet has a short half-life. Test count: 136 integration `.rs` files (v1 said 123 — the tree outgrew the draft). No iOS mention in README, yet `ios/` holds a real Xcode project (Assets, entitlements, Renderer, Sources) — un-marketed work in tree. None of this is concealed — the Limitations section is genuinely candid — but docs lag a very fast-moving tree.

## 4.5 Benchmark and conformance audit

### Maintainer-produced numbers

| Workload | Number | Method controls | Would it survive independent rerun? |
|---|---|---|---|
| Internal perf gauntlet (html-large, no-assets) | p95 8.758→8.672 ms, mean 7.515→7.703 ms over 100 iterations (a perf commit's honest verdict: "a tiny p95-favorable branch cleanup with noisy mean") | Focused before/after with direct `cmp` byte-identity proof; golden `tests/artifacts/perf/baseline-*` | The *style* would survive — the honesty about noisy means is the signal. The absolute numbers are host-specific. |
| Knuth-Plass fix | 8,000 words: 13.5s → 0.04s (330x); byte-identical goldens | Before/after on same host, render-tree + PDF/HTML goldens unchanged; new regression test | Yes — a 330x algorithmic fix with checked-in goldens is independently re-runnable in principle (needs the Rust toolchain). |
| parser-large | 1 MiB generated Markdown → HTML, reported in MB/s | `scripts/parser-perf.sh` exists; numbers not published in README/docs | **No published result** — only a metric column in `PERFORMANCE_OPTIMIZATION_PLAN.md`. Cannot be cited. |
| Hyphen-corpus | p50 0.953 ms / mean 1.061 ms / p95 1.533 ms over 120 iterations; byte-identical golden SHA-256 | Golden checksum recorded in the commit message | Same-host reproducible in principle; host-specific in absolute terms. |
| vs pulldown-cmark / comrak head-to-head | **None published** | — | The central gap. |
| Determinism | Byte-for-byte repeat renders (`check-determinism.sh`); `SOURCE_DATE_EPOCH`; staged writes | Script exists; not executed here | Mechanism-verified only. |
| WASM byte-parity | `check-wasm-package.sh` gates parity, manifest, size budgets | Script exists; not executed here | Mechanism-verified only. |

**The honest summary:** this project has the *strongest internal perf discipline* seen in the program — `perf-gauntlet.sh` is measurement-first (release-perf profile with frame pointers, host/build fingerprint, in-process library scenarios, hyperfine CLI baselines, optional Linux perf counters, golden checksums, a hypothesis ledger), `perf-compare.sh` classifies before/after deltas into a variance envelope (noise / improvement / regression), and commit messages record p50/p95 over 100+ iterations, byte-identical goldens, "SIMD not claimed until proven," and rejected trials — yet *zero* externally comparable numbers. "Ultra-fast" is a word in the crate description, not a result. **Never cite "ultra-fast" as a finding; cite it as an unmeasured claim.**

**Reproduction cost (honest):** shallow clone is ~26 MB (GitHub API `size: 25877`); full gate execution needs a Rust toolchain (rust-version 1.85), the vendored CommonMark suite, and for parity the wasm32 target + wasm-bindgen 0.2.126. Expect minutes to build and longer for the full soak (one commit notes a 245s determinism soak) [Inference, Low — no build was executed here]. No build was executed in this assessment.

### Conformance evidence

- **CommonMark 0.31.2:** 578/652 examples after normalizing fmd's styled HTML; 97.1% of 595 in-scope (raw-HTML intentionally escaped) across 16 fully passing sections; ratcheted floor enforced by script + floor file (both read 578 — consistent) [Maintainer claim on results, Medium; floor-file consistency Verified, High].
- **Fresh-eyes reviews:** commit messages document peer-style reviews catching real bugs — tab-indented list panic (CRITICAL, byte-vs-column index DoS), untrusted-font parser caps (HIGH), LCS DP bound (fix/deep-review commit) — with regression tests added each time [External commit messages, Medium].
- **Fuzzing:** `fuzz/` with `fuzz_targets` + checked-in `corpus` [Verified exists, High]; execution history not verified.

### Independent numbers

**None found.** Web search returns only the repository's own commit pages and docs; no third-party benchmark, code review, tutorial, or production deployment. crates.io shows 151 total downloads (all versions); npm shows versions published through 0.4.4. **Independent validation: zero** [External, High within recall caveats].

## 4.6 Comparison: who owns the lane

**The incumbents** own two different lanes this project straddles. For Markdown→HTML parsing: **pulldown-cmark** and **comrak** — fast, conformant, entrenched in the Rust ecosystem (mdBook and most tooling default to one of them); newer zero-dep challenger **sparkdown** claims 652/652 CommonMark and publishes a benchmark table (0.59 ms vs pulldown-cmark 0.68 ms on a ~200 KB fixture, Apple Mac Studio — third-party maintainer-published, [External, Medium]) and ships a WASM build itself, so the "embeddable zero-dep" wedge already has a parser-lane competitor — but it stops at HTML (no PDF). For documents→PDF: **Pandoc+LaTeX** (maximal capability, enormous toolchain), **Typst** (modern, fast, growing fast), **headless Chrome** (arbitrary CSS fidelity, heavy and nondeterministic). The repo's own comparison table (README §Comparison) concedes the parser lane: comrak/pulldown-cmark are "fast, conformant Markdown to HTML" whose gap is "HTML only, no PDF; you still bolt on a separate PDF stack." **Why the incumbents win today, in one paragraph:** switching a document pipeline is driven by output trust and ecosystem, not parser architecture — Typst has a live community and a book-quality typesetter, Pandoc has decades of format coverage, pulldown-cmark has mdBook's network effect; fmd has 104 stars, no independent benchmark, and a license that withholds benchmarking rights from the two AI labs most likely to evaluate it. Nobody swaps a working Pandoc or Typst pipeline for an unbenchmarked 0.4.5 on determinism promises [Inference, Medium — market judgment; fmd's figures are Verified/External, High].

**The genuinely unoccupied lane [Inference, Medium]:** a *zero-dependency, deterministic, embeddable* Markdown→HTML+PDF pipeline with byte-parity WASM — "deterministic documents without a toolchain." Nobody owns it: Typst is heavier and not byte-stable by design, Pandoc/LaTeX is a toolchain, headless Chrome is nondeterministic and heavy, and the parser crates stop at HTML. If byte-stable, reproducible document builds become load-bearing infrastructure (CI-generated reports, agent-generated artifacts, reproducible research), the lane matters — but it is currently a thesis, not a market.

## 4.7 Technical merit and adversarial review

**Strengths:**
1. **Dependency posture is the real thing, and it's mechanically enforced.** Zero third-party deps in the library (verified in manifests), `forbid(unsafe_code)` twice over, a policy script, and a no-default-features portability gate. In a supply-chain-conscious era this is a genuine differentiator, not marketing [Verified, High].
2. **Claim-discipline infrastructure** (`claims.tsv` + gate: each README claim pattern must map to a `capabilities --json` key and a proof file) is the most rigorous marketing-hygiene mechanism observed in this program — claims can't drift from capabilities without failing a check [Inference, Medium; the mechanism itself Verified, High].
3. **Determinism as a designed property** (byte-stable renders, `SOURCE_DATE_EPOCH`, staged writes, ratcheted conformance floor, byte-parity WASM gate) — valuable for CI/docs pipelines and agent-generated artifacts, and the one property the incumbents structurally don't offer [Verified mechanism, High; behavioral claims Maintainer claim, Medium].
4. **Typography ambition is real:** Knuth-Plass (after the honest quadratic→linear fix), measured table column allocation, font subsetting, tagged PDF, FontTools/HarfBuzz cross-verification — well past "markdown to PDF via wkhtmltopdf" territory [Verified modules, High].
5. **Agent ergonomics as product surface:** `fmd capabilities --json`, `doctor --json`, `robot-docs`, stable exit codes, MCP server (654 lines, zero-dep JSON-RPC), refusal to overwrite inputs, deterministic batch receipts. Coherent with the suite's agent-native thesis [Verified exists, High].
6. **WASM-first core** (no fs/fontconfig/thread/network assumptions; fonts/assets as bytes; parity gate) makes it genuinely embeddable — the website proves the pattern with the real engine in a Web Worker [Maintainer claim, Medium; website README read 2026-09-22, High].

**Weaknesses:**
1. **Performance is asserted, not published.** No reproducible benchmark vs anything; "ultra-fast" rests on internal discipline. A single `parser-perf.sh`-backed table vs pulldown-cmark would convert aspiration to evidence [Verified absence, High].
2. **Single maintainer, 146K LOC of clean-room code.** Every subsystem (Brotli, PDF writer, shaper, 41K-line pdf.rs monolith) is hand-rolled and must be maintained against the upstream projects' collective engineering. Bus factor = 1 [Verified, High].
3. **The "CI" language is stale.** README says "CI fails if it drops"; the only Actions workflow is disabled and AGENTS.md forbids Actions. The gates are real scripts run on the maintainer's DSR hosts — unobservable externally. "CI-enforced" currently means "the maintainer runs the scripts" [Verified, High].
4. **Conformance 97.1% in-scope** trails the best clean-room parsers (sparkdown claims 100%) — though the gap is partly principled (raw-HTML escaping) [Maintainer claim, Medium].
5. **PDF engine is young:** pagination, full PDF/UA, and inline-image-in-prose gaps are openly acknowledged; headless Chrome still wins on arbitrary CSS [Maintainer claim, High].
6. **Release-pipeline friction:** npm latest is 0.4.4 while GitHub releases and crates.io are at 0.4.5 (registry APIs read 2026-09-22), and the live demo site serves engine **0.3.5** ("Last production engine bump: 0.3.5 (2026-08-28)" — website README, read 2026-09-22) — the shipping automation lags the code by two minor versions on its own flagship demo [External, High].
7. **104 stars, 151 crates.io downloads** — real but modest traction; no evidence of production adoption outside the author's suite [External, High].

**Steelman of the bear case:** FrankenMarkdown is a 146,000-line answer to a solved problem. Markdown parsing is a commodity — pulldown-cmark is fast, correct, and already inside mdBook; PDF generation is owned by Typst (better typesetting, real community) and Pandoc (every format ever). "Zero dependencies" is an aesthetic preference, not a buying criterion: nobody's document pipeline was breached through their Markdown parser, and `cargo` handles dependency trees fine. The determinism story is a solution in search of a problem — reproducible builds matter for binaries, not for README PDFs, and no buyer has asked for byte-stable invoices. The claim-discipline machinery is admirable process theater around a product nobody needs, the MCP server serves agents built by the two labs the license legally excludes, and at bus factor 1 with a 41,068-line pdf.rs monolith, the most likely terminal state is a personal tool that bit-rots when the maintainer's attention moves on. Methodologies don't get adopted; products do — and the product is a slower-to-adopt, unbenchmarked, weirdly-licensed Pandoc-lite.

**Hook audit (the packet grades its own hook):** "146,322 lines of safe, zero-dependency Rust that turn Markdown into byte-stable HTML and PDF — with a claim-discipline gate that treats the README as a test suite." Line count verified by fresh count; zero-dependency verified in manifests; safe verified via forbid gates; byte-stable is a maintainer claim with real mechanism (not independently executed) — the hook states it as a capability, which the code structurally supports; the claim-discipline gate is verified to exist. The size adjective ("tiny") from the repo description was deliberately dropped — it is unmeasured. The hook survives — it asserts nothing the packet can't defend.

## 4.8 License and governance (material, not boilerplate)

**License text, read verbatim** [Verified, High]: `LICENSE` is the MIT License **with an "ADDITIONAL RIDER / RESTRICTION (OpenAI / Anthropic)"** that is "part of the 'conditions' of this License" and "controls" in any conflict. Quoted scope: *"Restricted Parties" means OpenAI, L.L.C.; Anthropic, PBC; any of their respective Affiliates; and any person or entity acting directly or indirectly on behalf of, for the benefit of, or under the direction of any of the foregoing (including any officer, director, employee, contractor, agent, consultant, service provider, or representative).* *"Notwithstanding any other provision of this License, no rights are granted to any Restricted Party."* Disclosure/hosting/distribution to them is forbidden. Crucially, for purposes of the rider, *"use" includes, without limitation: copying, modifying, merging, publishing, distributing, sublicensing, selling, transferring, making available, hosting, deploying, executing, benchmarking, testing, analyzing, indexing, or incorporating the Software or any Derivative Works into any dataset, training corpus, evaluation harness, or pipeline for machine learning or other automated systems.* Breach terminates all permissions automatically. **Classification: NOT OSI open source** — named-party discrimination with a use-restriction covering even benchmarking and analysis. This is source-available with a targeted exclusion. (npm and crates.io both record the license as non-standard: `LicenseRef-MIT-OpenAI-Anthropic-Rider` / `"license":"non-standard"` [External, High].)

**The rider as strategy:** it serves the suite's defensive "sovereignty" mission (preventing the two leading labs from absorbing the work into training corpora or evaluation harnesses without permission) but sabotages the project's most distinctive surface — the MCP server, `capabilities --json`, and agent ergonomics are built for an agent-infrastructure ecosystem whose two largest builders are legally excluded, and whose downstream users inherit the legal risk. The breadth (even *benchmarking* is forbidden) also chills the independent validation the project most needs: no third party can publish a benchmark without lawyering the rider first — which helps explain why independent validation is zero. Adoption ceiling: hard.

**Governance:** owner-directed single maintainer; no visible external contributors; AGENTS.md encodes standing instructions ("Never use GitHub Actions for any reason," DSR-only releases); the `.beads` issue tracker (the maintainer's work-unit system — a "bead" is one tracked unit of work) is the planning surface. Bus factor 1 [Inference, High]. Commit conventions show agent-assisted development (skill-loop progress files, bead references). **What breaks first if velocity decays:** review depth on a 146K-line tree growing thousands of lines per day, then the hand-rolled subsystems (Brotli, shaper, PDF writer) with no second maintainer who understands them — bit-rot within quarters, not years.

## 4.9 NODUS factsheet

| Criterion | Score | One-line justification |
|---|---|---|
| Technology readiness (TRL 1–9) | **7** | Released 0.4.5, 5-platform binaries, crates.io + npm, gates for conformance/determinism/parity (maintainer-run). Deduct: PDF pagination and accessibility openly incomplete; zero independent production-adoption evidence. |
| Strategic relevance (1–5) | **4** | High *inside* FrankenSuite (docs backbone; fmd-font/fmd-math factored for franken_manim per Cargo.toml comments). Medium outside: crowded, entrenched problem space. |
| Impact potential (1–5) | **3** | Real differentiator (zero-dep deterministic embeddable renderer + claim discipline), but rider structurally caps upside with AI labs; single maintainer; modest traction. |
| Implementation feasibility (1–5) | **5** | It's built and shipping; remaining work is incremental (pagination, PDF/UA, release automation, the missing benchmark table). |
| Time to mainstream (1–5) | **2** | Entrenched alternatives with network effects; rider friction; 104 stars. Meaningful external share, if ever, is a multi-year prospect. Most likely future is suite-internal standard. |
| Collaboration potential (1–5) | **2** | Clean library/WASM/MCP surfaces invite embedding, but the rider poisons the well for the largest potential collaborators and the bus factor is 1. |

**Ring: Explore.** The ring rules are decisive: *Pilot* requires a release artifact **plus** a bounded, real workload fit — the release artifacts exist (5-platform binaries, crates.io, npm), but there is zero independent adoption or validation evidence, and the "CI" behind the gates is unobservable. When in doubt, ring down. Graduation triggers: published independent-grade benchmarks, npm/release lag fixed, and any external production deployment or second maintainer.

## 4.10 Wardley placement

- **Markdown parsing:** Commodity — pulldown-cmark/comrak own it; fmd adds no leverage here. (Moves only if parsing itself becomes the moat, which it won't.)
- **Integrated zero-dependency deterministic Markdown→HTML+PDF+WASM pipeline:** Custom-built → early Product — works in lab, released (0.4.5), validated by maintainer-run gates but not third parties. Moves to Product with an independent benchmark + external adoption; moves back toward custom-built obscurity if Typst/Pandoc ship deterministic modes first.
- **Claim-discipline machinery (claims.tsv → capabilities → proof scripts):** Genesis → early Custom-built — no equivalent practice in any incumbent. Moves right the moment a second project adopts it (see next step 1); stays genesis if it remains fmd-internal.
- **MCP/agent surface + deterministic batch receipts:** Genesis — pointed at the agent-document-pipeline gap, but the license rider repels its natural users. Moves only with a license carve-out or a rider-free fork.
- **The decoupling lens:** FrankenMarkdown represents *toolchain-from-renderer* (no LaTeX, no browser, no dependency forest for PDF) and *claims-from-marketing* (README as test suite); it gestures at *build-from-document* (byte-stable documents as reproducible artifacts). **Methodology-export lens:** if the renderer fails, the claim-discipline + determinism gates are the transferable artifact. **Asupersync:** used, deliberately scoped to the opt-in batch feature, never in the render core or WASM — verified, not assumed. **Rider:** quoted verbatim above; assessed as strategy in §4.8.

## 4.11 Trajectory (12 / 24 / 60 months) — [Inference]

- **12 months:** continued high-velocity single-maintainer work; probable closing of the acknowledged PDF gaps (pagination, PDF/UA) and the npm/demo release lag; the missing benchmark table either gets published (converting "ultra-fast" from word to result) or remains the dog that didn't bark. The WASM + MCP + determinism story positions it for agent-generated-document pipelines *if* the license didn't exclude the two largest agent platforms — expect adoption concentrated in the sovereign/self-hosted fringe and the author's own suite. Stays in Explore.
- **24 months:** bifurcation. **Upside:** an independent benchmark validates the perf thesis, a second maintainer or institutional adopter appears, the claim-discipline method gets adopted by another project — Pilot for narrow workloads (deterministic CI document pipelines, embedded WASM renderers). **Decay:** velocity slows with no successor; the 146K-line hand-rolled tree (41K-line pdf.rs monolith) becomes unmaintainable; drifts to Monitor as a research artifact whose methodology outlives its product.
- **60 months:** binary. Either a niche-but-real artifact (the deterministic, zero-dependency renderer embedded in agent infrastructure and reproducible-research tooling — the "reproducible documents" lane, still unbuilt by anyone), or superseded: Typst adds a determinism mode, or the "Rust Markdown" lane consolidates around whichever peer ships the benchmark first. The claim-discipline methodology is the more likely survivor either way.

**Revisit triggers (concrete, observable — each tied to what it would move):** first published head-to-head benchmark vs pulldown-cmark/comrak (moves "ultra-fast" from claim 3's *aspirational* to *demonstrated*; prerequisite for any TRL bump); npm 0.4.5+ shipping in sync with GitHub releases (closes weakness 6; signals the release pipeline is real); a second human maintainer with merge rights (bus factor 1→2; raises Collaboration potential); any independent review, benchmark, or production deployment (the zero that keeps the ring at Explore — this alone could justify Pilot); the iOS app surfacing publicly (unlocks Q3's option value); any change to the license rider (directly moves Impact potential and Collaboration).

## 4.12 Limitations and open questions (mandatory)

**Not done:** did not compile the workspace, run any test, execute `fmd`, reproduce any benchmark, run a fuzz target, or verify WASM parity / determinism / conformance behavior live — all behavioral and performance claims rest on maintainer evidence plus revision-bound documentation. Shallow clone only (no history beyond HEAD; commit velocity not analyzed). The "unsafe" census was not re-grepped this round (v1 classified remaining hits as identifiers/test strings; the forbid gates were re-verified). Star/fork counts are live API reads (high confidence). The live demo site's served engine version was not verified (no browser-action capability in this session). Web search for independent coverage carries the usual recall caveats.

**Open questions that would most change the verdict:** actual CommonMark pass/skip/fail counts at HEAD (is 578/652 real on a fresh run?); whether the DSR gates run green and how often; what "0.4.5 pending publishing authentication" on npm actually blocks; whether any enterprise has evaluated the rider's legal exposure; funding and succession intentions of the maintainer; whether the iOS project is active or shelved; whether the typography stack (KP + GPOS + subsetting) has ever been validated against a browser reference on a real corpus.

## The eight deepening questions (one paragraph each)

1. **Provenance.** fmd records *what produced* a render better than most tools: deterministic receipts in batch mode (input-order preserved, per-commit-message), `SOURCE_DATE_EPOCH`-pinned PDF dates, staged writes that avoid partial artifacts, and `capabilities --json` as a machine-readable feature manifest [Maintainer claim, Medium]. What it does *not* record is *who*: no signature, no builder attestation, no hash-chained build log — a byte-stable PDF is reproducible but not attributable. Making attestation portable would mean signing the deterministic receipts (or the render manifest) with a builder key and hash-chaining batch runs, turning "same bytes" into "same bytes, attested by this builder." The determinism machinery is the hard part and it already exists; the attestation layer is unbuilt [Inference, Medium].

2. **The embeddable unit.** The smallest useful adoptable piece is the WASM package (`@franken-suite/franken-markdown`): the full HTML+PDF renderer as bytes — ~4 MB raw, 1.8 MB gzip, ~1.35 MB brotli (website README FAQ, read 2026-09-22) [External, High] — no toolchain, no fontconfig, no filesystem assumptions. The website proves the pattern: the real engine runs in a Web Worker with a two-pane playground, HTML⇄PDF toggle, and serverless URL document sharing [External, High]. The next-smallest unit is `fmd-font` (zero-dependency TrueType/kerning/subsetting, already factored for franken_manim). Adoption cost: the WASM API surface and its version skew — the live site serves engine **0.3.5** ("Last production engine bump: 0.3.5 (2026-08-28)" per the website README) while the engine is at 0.4.5 [External, High]; the library crate means vendoring ~58K Rust code lines (crates.io linecount) of rider-encumbered code with a 41K-line pdf.rs monolith you cannot partially adopt [Verified, High].

3. **Unexercised option value.** The tree holds at least five unused capabilities: a real Xcode iOS project (`ios/` — Renderer, Sources, entitlements) that the README never mentions; reserved NEON/SIMD islands ("not claimed until proven"); `fmd-math`, a clean-room TeX math layout engine factored for franken_manim; EPUB 3 output beyond the "HTML & PDF" headline; and `src/diff.rs` / `src/search_index.rs` / `src/doc_stats.rs` — document intelligence (diff, search, readability metrics) with no product surface yet [Verified exists, High]. What unlocks them is product decisions, not research: surfacing the iOS app, publishing the SIMD proof, documenting the math engine — all blocked on maintainer attention, none on feasibility [Inference, Medium].

4. **Benchmark honesty.** The numbers most likely to survive an independent rerun are the *internal before/after* figures with checked-in goldens — the 330x Knuth-Plass fix, the hyphen-corpus p50/p95 with SHA-256 goldens — because they are same-host, byte-identity-gated, and the maintainer publishes the noisy means honestly [Inference, Medium]. The number that would *not* survive is the only one in the product description: "ultra-fast" has no published measurement behind it at all, so it is load-bearing for the marketing thesis and evidence-free — the exact inversion of the project's own claim-discipline doctrine, and the single most fixable gap in the repo [Verified absence, High].

5. **The governance path.** The credible route from one maintainer to an institution runs through the distribution surface that already exists: crates.io, npm, and the 5-platform release binaries create users; users filing issues against real deployments produce the second maintainer — there is no shortcut, because today there are downloads (151) but no visible community [Inference, Medium]. What breaks first if velocity decays is the thing velocity currently papers over: a 146K-line tree growing thousands of lines per day, with hand-rolled Brotli, shaping, and PDF subsystems and a 41K-line pdf.rs monolith, has no second human who understands the whole pipeline; a slowdown without a successor doesn't stabilize the project, it strands the tree [Inference, High].

6. **The license as strategy.** The rider excludes exactly OpenAI, L.L.C., Anthropic, PBC, their affiliates, and anyone acting for, benefiting, or under the direction of them — and defines "use" to include benchmarking, testing, analyzing, indexing, and training-data incorporation, with automatic termination [Verified verbatim, High]. As strategy it is coherent defensively (it prevents the two labs best positioned to absorb the work from doing so without permission) and self-sabotaging offensively: the MCP server and agent ergonomics are built for the agent-infrastructure ecosystem, the excluded parties *are* that ecosystem's largest builders, and the benchmarking ban chills the independent validation the project most needs — a neat closed loop in which the license suppresses the evidence the product needs to grow [Inference, Medium].

7. **Agent-era fit.** The concrete workload that would pick fmd over Pandoc/Typst is an agent loop generating documents (reports, invoices, changelogs, books) inside CI or a sandbox: deterministic byte-stable PDF/HTML with no LaTeX toolchain, no browser, and no network; machine-readable capability discovery (`capabilities --json`), stable exit codes, refusal to overwrite inputs, and an MCP server for tool-use — the whole surface reads as designed for non-human callers [Inference, Medium]. What would have to become true first: a published benchmark proving the "ultra-fast" word, a license an agent-platform company can sign (or a carve-out), and evidence the determinism holds cross-host — the three falsifiable gaps named in the next steps [Inference, Medium].

8. **The kill test.** The single event that would falsify the core thesis — "a zero-dependency deterministic Markdown→PDF renderer is worth 146K lines of clean-room Rust" — is Typst (or Pandoc) shipping a deterministic, byte-stable output mode with a fraction of the adoption friction: it would commoditize fmd's only structural differentiator while keeping the ecosystem, community, and clean license [Inference, Medium]. The experimental falsifications are nearly as decisive: an independent head-to-head showing fmd slower than comrak on real documents (killing "ultra-fast"), or a cross-host determinism test failing byte-parity (shrinking "deterministic" to "deterministic-on-my-machine") — either collapses a pillar the thesis stands on [Inference, Medium].

---

**Working notes:** clean shallow clone at `~/workspace/.scratch/fmd-verify/` (HEAD `88a6a99`, 2026-09-22 10:37:59 -0400). Versioned intermediates: `franken_markdown-assessment-v2.md` (this file). Round log: `franken_markdown-round-log.md`. No durable user-facing files created besides this assessment.
