Skip to content

Bold Pilot · internal handbook · state as of Aug 30, 2026

The Engine Handbook

Three reports on one page: the product feature map, then the two engines end to end — what enters each stage, what happens, what leaves, and why every gate exists. The “why” notes describe the real incident each rule was born from.

Report 1 · Product overview

What Bold Pilot does

The feature map, before the deep dives. Labels group by the customer’s job, not by our internals; the two engines below explain the PLAN and WRITE columns in full.

STARTOnboarding & site profile

Point Bold Pilot at a URL and it drafts the business context itself — name, description, audiences, competitors — for you to correct rather than compose. One primary language per site (publishing in several splits a young site’s authority), Search Console connects by OAuth, and the first keyword fill runs during setup so the calendar is never born empty.

PLANKeyword engine & Content Planner

The engine continuously measures candidate keywords against their live results page and approves only what this site can win — intent-classed, difficulty-capped, cannibalisation-checked (details: Report 2). The Content Planner turns that bank into a month: strongest first, spread across subjects, at most 15% definitional, every day’s pick re-verified at handout. Move, remove, or add your own topics any time. Topping the bank up is deliberately in your hands, not on a timer: when unused topics fall below a third of a month’s runway, the dashboard says so and a one-click scan refills it.

WRITEArticle engine & quality gate

Each article is planned against its real SERP (length budgeted from the winners’ median), written in parallel parts, and forced through an editorial gate: banned-pattern rules, unsourced-statistic deletion, citation verification, sentence-rhythm floors (details: Report 3). Content types include guides, listicles/round-ups, and copy-ready template pages with a download button (held to roughly one template per five articles). A per-site founder note— first-hand experience only the owner can write — is woven into at most one section per article, verbatim facts only; competitor-named pages carry hard tone limits (honest strengths, linked claims, never “X is dead”). Covers and first-party data charts are code-drawn and deterministic; the three or four mid-article photos are real photographs matched to each section, from a library licensed for free commercial use.

PUBLISHMulti-channel publishing

Hosted blog articles go live instantly; customer sites receive a signed webhook (markdown + HTML + cover/chart PNGs), with WordPress, Ghost, Shopify, Webflow, Wix, Notion and Feather connectors and dev.to/Hashnode syndication. “Published” is only stamped when a destination actually accepted the article, and Google is notified three ways: sitemap submission, the Indexing API, and IndexNow.

MEASUREDashboard & analytics

Search Console data rendered where decisions happen: clicks, impressions, CTR and average position with 28-day deltas, a daily traffic line, top queries per article, Core Web Vitals, and per-article gate diagnostics in the library. The keyword bank’s health (approved supply, source quality) reads from the same screen.

IMPROVEThe Improvements inbox

Every Monday, four maintenance questions per published article — under-clicked, sliding, invisible-with-a-sibling, never-indexed — produce evidence-backed proposals. A human accepts or rejects (with a reason); accepted items get an automatic 28-day outcome reading, and a retitle that made things measurably worse is flagged for reversal by a pre-registered harm limit. Queues earn automation only past 50 decisions at 90% acceptance; merging never automates.

PLATFORMPlans, safety & surfaces

One plan with a monthly article quota, reserved atomically per article and refunded on failure. A public demo, free SEO tools, and competitor comparison pages ride the same site. Everything the engines measure is stored as diagnostics — quality trends are read from records, never re-counted by hand.

Report 2 · Engine A

The keyword engine

Its job: find topics this specific site can win. Input is a site profile; output is a bank of approved, class-labelled, clustered keywords. Every spending step has its own ceiling, and an interrupted run resumes where it stopped.

A·1Site profile — the engine's identity card

Everything starts from one frozen profile per site: core topic, niche, audiences, 60 seed phrases, competitor domains. At least a quarter of the seeds must be decision seeds (“X alternative”, “X pricing”, “X vs”) — the supply line for buying-intent traffic. Half the list is the audience’s problems in the audience’s words; industry jargon is banned.

Why it works this way

Old seeds were built by slicing the category label into substrings (“how to content automation” — phrases nobody types). Measured: competitor-mined keywords survive relevance at 7.6%, seed-expanded ones at 25% — expansion is phrase-anchored, so it cannot wander off-topic.

A·2Feasibility & budget plan

Before spending, the engine estimates how many judgements the topic gap needs and plans rounds. Budgets are per provider: row-priced keyword data and cheap SERP calls carry separate ceilings. Judge waves are sized to what the request’s model budget can still afford — a wave the ceiling cannot pay for is never launched — and a wave cut mid-flight keeps its finished verdicts: they are banked, the run stops cleanly, and the next call continues instead of re-buying the same answers.

Why it works this way

With one shared ceiling, a run once spent $0.81 on discovery, hit the limit, and left 216 relevance-judged keywords un-approved — the cheap step starved the expensive step’s output. A run lock also exists; a killed run’s lock expires rather than blocking forever (learned live).

A·3The channel ladder — where candidates come from

  • Seed expansion: each seed opens into real queries containing that phrase; seeds are validated against autocomplete first so dead phrases cost nothing.
  • Search Console channel: content gaps — queries whose impressions land on a generic page with no dedicated article. These carry a measured-demand marker.
  • Competitor channel: keywords the rivals rank for; dig history expires per domain, marketplaces are excluded, and a channel that has never produced gets promoted.
  • Difficulty relaxation: when supply dries up, the difficulty ceiling loosens in controlled steps; over-ceiling rows are recorded so they are not re-read every round. What comes back is a measured dose — the best-ranked slice the target arithmetic says it needs, never the whole set-aside pool in one billed breath.

Why it works this way

The competitor channel had never produced anything; a promotion rule moved it to the front when starved, and its first real dig brought +485 candidates. The marketplace exclusion is also a live lesson: digging gumroad returned creator-brand queries; 80 rows were quarantined and the exclusion became permanent.

A·4Deduplication

Every candidate is reduced to a root (inflections and word order folded); the bank is unique per (user, site, root).

Why it works this way

The same keyword living under two scopes once scheduled “automated blogging” on two consecutive days. Dedup also re-runs at handout — double stitching.

A·5Relevance judge — keep/drop plus funnel class

Candidates go to the model in waves. The judge answers two things: keep/drop (should this site write about it) and, for keeps, the funnel class — transactional / commercial / definitional. Relevance asks “who reads this”; class asks “why they searched”. The judge prompt is fingerprint-guarded: it cannot change silently.

Why it works this way

The audit found 37% of one site’s published output was definitional (“what is cpm” readers never become customers). Root cause: the definitional gate existed but the fill pipeline had never wired it. Class now lives inside the judgement and is checked in three places. Measured accuracy against a 181-item hand-labelled set: 90.4%.

A·6SERP scoring — winnability

  • Dictionary check: a page one full of dictionaries means a definition lookup — reject.
  • Winnability: giant seats are counted. The giant list is static + per-site dynamic (domains that keep appearing in this site’s SERPs join automatically) + a monopoly penalty when one domain holds 3+ seats (capped; forums exempt).
  • Accessible slot: is there at least one page-one domain with authority ≤300? Median authority misleads; one enterable seat decides. Worth +6.
  • Composite score: relevance 0.35 · winnability 0.30 · funnel class 0.20 (TX 100 / CM 60 / DEF 10) · volume 0.15, plus measured-demand +8 and slot +6.

Why it works this way

The accessible-slot threshold was shadow-calibrated on 340 keywords (86% DR coverage): ≤200 fought the whole bank, ≤400 separated nothing, ≤300 sat right — 28% of approved rows turned out slotless, all of them press-release-style head terms. Bonus-only: absence is not a penalty, and an unknown domain never counts as a slot.

A·7Data purchases — difficulty, volume, AI Overview

Difficulty and volume are bought in bulk for keywords on the approval path. A late difficulty read never blocks approval (deliberate fail-open), but if it comes back above 35 the handout gate holds the row. High-winnability shortlists get AI Overview observations; a verdict needs two consecutive agreeing looks.

A·8Clustering

Spellings that one article can serve together are grouped; the strongest member becomes the primary target, the rest ride as secondaries — the article covers the topic, not one phrasing.

A·9Bank states

candidate → judged → approved / rejected (with a reason: irrelevant, unwinnable, reference-query, quarantine kinds) → used once written. Reject reasons stay separated because “why did we come up short” is answered there — folding dictionary lookups and low winnability into one bucket once inflated a floor-relaxation analysis.

A·10Handout — from bank to calendar

  • Today’s-rules re-check: definitional shape, winnability under 42, difficulty over 35 — an old approval is not enough.
  • Family gate vs written: a candidate sharing ≥4 page-one URLs with an already-written article is refused (threshold calibrated on 24,829 real pairs).
  • In-delivery family gate: the picks are also checked against each other — one of a family stays, the rest drop.
  • Subject spread: at most 3 per reader-subject; the quota relaxes before the delivery shortens.
  • Funnel quota: at most 15% of a delivery may be definitional.
  • Competitor dose: topics leading with a rival’s brand name are capped at ~20% of a delivery — wanted pages, but a site must not read as a comparison farm. This cap never relaxes.
  • Delivery memo: a shortlist that already passed the final relevance pass and the set-audit clean is fingerprinted (set + rules epoch + judge); an unchanged set skips both on later rounds instead of re-buying the same judgement.

Why it works this way

One customer calendar held 30 keywords that a reader saw as 16 subjects — five separate “puppy biting” articles. The spread counter now counts with the same grouping a reader experiences; a gate that counts differently from its ruler can pass and fail at once.

Report 3 · Engine B

The article engine

Its job: turn a handed-out keyword into a published, evidenced, quality-gated page. An article takes about two minutes; each one runs in its own server process, and no body ships without passing the editorial gate.

B·1Trigger & fan-out

An external scheduler pokes the pipeline every 15 minutes. The endpoint is now a dispatcher: it claims due rows and hands each article its own process — its own time budget, its own memory, its own failure record.

Why it works this way

The old design generated up to 10 articles inside one process — a shape production had never actually exercised (historical record: one article per tick). The first real 10-batch killed the process with nine rows frozen and nothing recorded. Same-day fixes: claims scoped to the rows actually taken, and per-article fan-out. Stress test after: 10 parallel, 9/10 in one pass, ~2 min each.

B·2Pre-checks

  • Duplicate guard: if an article already covers this root, generation refuses before money is spent.
  • Quota reservation: the monthly article right is reserved atomically and returned on failure.
  • Destination-ready: no connected channel → the article is not generated; the date holds until a destination exists. Writing into the void burns a credit.

B·3Context

Three memories load before writing: business context; the skeleton summary of the last 8 articles (opening/closing styles, stats-block usage — the variety rotation’s memory); and internal-link targets from this site’s published articles. Pages inside a live experiment lock cannot become link targets — you don’t pump authority into a measurement.

B·4Evidence pack — the article's research

  • The top 6 pages of the keyword’s SERP are actually fetched; sentences carrying figures are extracted (max 10, 3 per page, noise filtered).
  • Every item carries its source URL and a detected publication year — a study older than 3 years must be dated in the article’s own sentence.
  • On our own sites the pack gains first-party platform aggregates (≥5-site privacy floor).
  • Fetched pages’ word counts feed the length budget.

Why it works this way

The old rule demanded “two concrete figures with named sources” while supplying none. Three published statistics were hand-checked: all three were fabricated — a real organisation stitched to a number it never published. An evidence requirement without supply is an instruction to fabricate; the requirement is now conditional on supply.

B·5The plan — one outline call

  • Title/meta rules: don’t copy the SERP’s dominant title pattern; the answer lands in the meta’s first ~120 characters; a year appears only when freshness is truly part of the promise.
  • Length budget derives from the SERP: winners’ median ×0.8–1.2, as a ceiling-guard, not a quota — stopping under it when coverage is done is correct. Template pages are iron-banded at 400–800.
  • A gap question — something the ranking pages fail to answer — is chosen and assigned to a section.
  • Link and evidence assignments happen in the plan, because parallel writers cannot see each other.
  • Skeleton rotation picks the stats-block and closing move against the last-8 summary.

B·6Writing — parallel parts

Intro, sections, and closing+FAQ are written in parallel calls sharing one cached system prompt: the format spec (editorial / round-up / template), voice rules (deliberate unevenness; fragment-punch beats capped at 2 per article; bold capped at 1 per paragraph), evidence rules, and banned patterns.

B·7The quality gate — no body ships unchecked

Every part passes these checks; violations return in one combined revision call:

  • Banned patterns (~25 rules) — survivors of revision get a deterministic sweep for the deletable class.
  • Unsourced statistics (institution + number, no link; prices/years/acronyms exempt) — survivors are deleted sentence by sentence, on record.
  • Citation verification: a linked claim must match its assigned source and figures; mismatches go to a human review queue.
  • Sentence rhythm (editorial): every 3+-sentence paragraph needs one sentence under 8 words and one over 25; a rhythm-only second pass runs when needed and is rejected if it regresses the floors.
  • Bold overuse, duplicate source+figure, unlinked prices (round-ups).

All counts are stored on the article — the gate cannot fail silently.

Why it works this way

The audit hand-counted 56 “genuinely”s across 20 articles, 22% rhythm compliance, one skeleton. After the gate and rotation, the gated 20 measure: genuinely 0, unsourced 0, rhythm 64%. The word’s root cause was instructive: it appeared 11 times in the prompts themselves — including inside the ban instruction.

B·8Assembly

Parts join; product links are repaired; punctuation debris from revision seams is cleaned deterministically; cross-section duplicate citations are diagnosed; the skeleton is measured for the next article’s rotation.

B·9Visuals & media

  • Cover: deterministic, code-drawn SVG (five rotating palettes) with a background-stroke halo behind the headline — and on long titles the artwork steps back (3 lines → 55%, 4+ → 35% opacity) so ink never fights ink; customer copies get a PNG from a raster route.
  • Section photos: three or four per article (two or three beside a data chart, which counts as one), each searched from a literal scene the planner writes for that section and picked deterministically per slug — a regenerated article keeps its pictures, and no photo repeats within one. The library's own description of each photo travels as its alt text. Articles from the 30 Aug – 8 Sep 2026 window keep their code-drawn, topic-aware vignettes.
  • Video: embedded only when one truly fits; on our pages the player loads on click (facade), external bodies get a link.
  • Data visual: on our own sites, first-party aggregates render as a branded bar chart — SVG on the page, PNG for customer copies.

B·10Record & diagnostics

The article saves with full diagnostics: gate counts before/after, skeleton signature, gap question, chart data, assembly fixes, target vs actual words. The weekly quality cassette and the rotation read these back.

B·11Publish

Hosted articles go live directly (page, index, sitemap refreshed); customer sites receive a signed webhook (markdown + HTML, cover PNG, chart PNG, video link). “Published” is stamped only when something actually arrived somewhere. Then Google is told: sitemap + Indexing API + IndexNow.

Why it works this way

The old flow stamped “published” before any channel ran; an article whose only webhook answered 500 showed green on the calendar while 404ing on the customer’s site — and internal links began targeting that 404. Delivery-less is now a loud failure.

B·12After publish — cassette, judge, queues

  • Quality cassette: recent articles are scanned weekly against the audit baseline.
  • LLM judge (rubric v2): scores what code cannot see — does the opening fully answer, does the body keep the title’s promise, how many fragment-punch beats.
  • Improvement queues: every Monday, four questions per published article against Search Console — under-clicked (retitle), sliding (refresh), invisible for 90 days (merge), never seen (index check). All proposals: a human decides, accepted items get a 28-day follow-up reading, and no queue automates before proving 50 decisions at 90% acceptance. The merge queue never automates. Retitles also carry a pre-registered harm limit, written before any data existed: normalized CTR down 20%+ on 200+ accrued impressions, or the position 3+ slots worse, marks the item reverted — a decision that counts against the queue’s automation record and asks for the old title back.

This handbook describes the state as of August 31, 2026; the code is always the source of truth. Numbers are live measurements: 1,442 unit tests, 90.4% class accuracy on a 181-item set, the family threshold calibrated on 24,829 pairs, the accessible-slot threshold on 340 keywords. The 10+10 experiment is live at 20/20; readings begin September 12.