Raw documentation of building AI marketing engines by Hendry Soong. What I changed, what broke, what I learned.
Create-Articles Logs
40+ versions across three generations. From folder structure to a production content engine with cross-article memory, messaging framework, and closed-loop compiler feedback.
The Dependency Chain
Create-Articles does not operate in a vacuum. It consumes the outputs of three Foundation engines. Without these pre-flight files, the engine defaults to generic LLM output. The Foundation entries (v0.1-v0.3) show context engineering in practice: voice rules, ICP definitions, and positioning that gate every piece of content.
22 February 2026 · v7.9.32 · Fix GEN 3
PAT-018: The Ghost Rule
Article audit found 9 instances of dramatic thesis sentences (“The gap is architectural,” “The differentiator is system design”) in FAQ schema. The pattern existed in voice.md examples but had no validation rule, no grep pattern, no quick-check question. A ghost rule: the system taught the pattern through examples but never enforced it. PAT-018 defined with grep pattern and added to QUICK-CHECK as Q17 (Tier 3 advisory, flag not gate). Absorption Gate (Phase 1.3) now extracts PAT-014 + PAT-018 examples from voice.md to prove comprehension.
Principle: If your system files demonstrate a pattern, your validation must check for it. Undocumented patterns become invisible violations.
Gen 3
Create-Articles
Validation
Voice
22 February 2026 · v7.9.30 → v7.9.31 · Architecture GEN 3
Absorption Gate + SVG Boundary Check
Two gates added to prevent silent failures. The Absorption Gate (Phase 1.3, v7.9.30): preflight listed messaging.md as “loaded” but the agent never read its contents. Key context (pillars, persona hooks, proof points) was absent from the generated article. New gate requires extracting and outputting specific elements from both rules files and context files after loading. Proves comprehension, not just file existence. The SVG Boundary Check (STR-022, v7.9.31): 7 inline SVGs bypassed Create-Images entirely during Phase 3 generation. Off-brand colours, emoji icons, sub-minimum fonts reached output. STR-022 is now a BLOCKING gate: article output must contain 0 <svg> elements. All visuals as VIP blocks for downstream processing.
Principle: “Loaded” is not “read.” Gates must prove comprehension, not just access.
Gen 3
Create-Articles
Architecture
Validation
22 February 2026 · v7.9.28 → v7.9.29 · Architecture GEN 3
Compiler Feedback + Profile-Aware Density
Create-Articles can now receive structured feedback from Create-Compiler. Phase 5 (Compiler Feedback) processes reverse manifests: Tier 0 entries add new STR/PAT validation rules, Tier 2 entries trigger Section-Patch Mode (regenerates a single H2 section without full pipeline re-run). Overflow guard: more than 3 entries triggers a STOP. Separately, Phase 2.7 density formulas are now profile-aware (v7.9.29): visual weight divisors match content profile (thought-leadership: 400, operator-log: 600). Previously all profiles used the same formula.
Principle: Downstream quality gates are only useful if they can talk back. Close the loop.
Gen 3
Create-Articles
Feedback
Architecture
20 February 2026 · AI-SEO v7.2 · Failure GEN 3
Spec Verification: 7 Hallucinated Claims Caught After Publication
The WebMCP article shipped with 7 hallucinated claims about a “Declarative API” with HTML attributes (toolname, tooldescription) that do not exist in the actual spec. The spec is purely JavaScript-based. Also had 3 unverifiable “postMessage” claims. No rule existed to prevent this class of error. Added Part 9 (Emerging Standards and Spec Verification) to AI-SEO rules: when writing about browser APIs or web standards, the official spec must be cited as Strong-tier. Blocks at Phase 2.3 if missing. Retroactive fix: Section 2 rewritten, 2 SVGs rebuilt, FAQ/schema/table/AI-summary all corrected. Fix-forward ban respected: all fixes applied to source, compiled, and images files.
Principle: When writing about specs, the spec is the source of truth. Not secondary coverage, not demos, not blog posts.
Gen 3
Create-Articles
Failure
AI-SEO
20 February 2026 · v7.9.25 → v7.9.27 · Architecture GEN 3
Messaging Framework + Brand Alignment
Three coordinated changes. Messaging Framework (v7.9.26): messaging.md added as first-class context file. Centralises value proposition, 3 messaging pillars, persona-by-buyer-stage tables, proof points, and hooks by content type. SEM-007 Messaging Pillar Alignment added to validation. ISO 8601 Dates (v7.9.25): date format upgraded from YYYY-MM-DD to full ISO 8601 with time and timezone. Google requires time and timezone for Article and ProfilePage schema. Brand Entity Sync (v7.9.27): Pillar 1 renamed “System Design Over Tools” (was “Architecture Over Tools”). 32 targeted terminology changes across 15 files in 2 engines. Solution-side “architecture” became “system design”; diagnosis-side unchanged.
Principle: Centralise messaging. When pillars live in 4 files, they drift in 4 directions.
Gen 3
Create-Articles
Messaging
Architecture
12 → 13 February 2026 · v7.9.22 → v7.9.24 · Feature GEN 3
Date Architecture: From Em Dashes to Semantic HTML
Three versions refining how dates work in articles. Em Dash Generation Gate (v7.9.22): article retrofit produced 5 em dashes despite PAT-001 existing. Root cause: no generation-time prevention rule. Added a generation-time warning matching the opposite-line pattern approach. Also purged em dashes from system file prose (system files are training data). Date Placement Flip (v7.9.23): aligned engine output with live site pattern. “Last updated” before H1, “Published” in footer. .post-meta retired. Semantic Dates (v7.9.24): moved “Last updated” to after H1 (Google’s recommended byline position). Added <time datetime> tags on both dates. Triple-layer date consistency: JSON-LD + <time> attribute + visible text.
Principle: System files are training data. They must follow the same rules they enforce.
Gen 3
Create-Articles
Schema
Voice
11 February 2026 · v7.9.20 · Architecture GEN 3
Source Registry: Cross-Article Memory
Each article session started fresh with no memory of previous research. Same sources re-discovered, same failed searches repeated. Built shared/source-registry/registry.md (tracks every external link across articles) and queries.md (tracks search queries with success/failure). Phase 2.1 reads the registry before researching. Phase 4.0.1 appends new data after output. Append-only: future sessions inherit what worked and what didn’t.
Principle: Cross-session memory turns isolated agents into a learning system.
Gen 3
Create-Articles
Memory
Architecture
11 February 2026 · v7.9.19 · Decision GEN 3
Tier-First Sources: Classify During Collection
SEO evolution article shipped with 25% Strong sources. The tier classification happened after collection (Phase 2.6), so the shortfall was discovered after prose was already written. Required 4 source swaps post-generation. Moved tier classification into collection (Phase 2.3). Strong <50% is now a STOP condition before any writing begins.
Principle: Classify quality during collection, not after. Left-shift the gate.
Gen 3
Create-Articles
Sources
11 February 2026 · v7.9.18 · Feature GEN 3
Sitemap Auto-Sync
approved-urls.md was manually synced (last: 5 Feb). New articles published after that date triggered false validation flags. Phase 1.0 now auto-syncs from live sitemaps before preflight. Sitemap is source of truth. The whitelist file is a cache, not a maintained document.
Principle: Automate from the source of truth. Manual sync processes decay.
Gen 3
Create-Articles
Automation
10 February 2026 · v7.9.17 · Architecture GEN 3
Opposite-Line Hard Stop: Generation-Time Prevention
Test article contained a long-form opposite-line pattern that slipped validation. Root cause: voice.md examples covered only short-form patterns, Q5 quick-check was out of sync with full PAT-014, and no generation-time self-check existed. Fix: expanded voice.md with long-form examples, added a self-check warning at Phase 3.2 so the agent checks during writing (not just validation), and promoted Q5 to a hard stop. Validation should confirm, not discover.
Principle: Generation-time self-checks prevent problems before validation catches them.
Gen 3
Create-Articles
Voice
Validation
10 February 2026 · v7.9.16 · Feature GEN 3
Published Date + Dual-Date Schema
Readers and LLMs need to distinguish “when was this first published” from “when was it last updated.” Added two-line footer with immutable published date. Schema contract: datePublished matches footer, dateModified matches .post-meta. First publication date never changes.
Gen 3
Create-Articles
Schema
9 February 2026 · v7.9.15 · Failure GEN 3
Contrast Pattern Gap
During production article build, two issues passed validation that should have been caught: an opposite-line pattern slipped through PAT-014, and a broken URL wasn’t caught because link liveness checks weren’t enforced as blocking. Expanded PAT-014 with two new checks, promoted STR-020 from advisory to blocking gate, and added curl-based link liveness to quick-check.
Principle: Production articles are the real test suite.
Gen 3
Create-Articles
Failure
Validation
8 February 2026 · v7.9.14 · Failure GEN 3
Workflow Enforcement: Agent Skipped Everything
Asked to write an article, the agent loaded voice.md and a template but bypassed the entire 7-phase workflow: no preflight checklist, no source verification, no validation, no image handoff. Root cause: CLAUDE.md routed to a directory (“Load create-articles/system-files/”) which the agent treated as a buffet, cherry-picking files instead of following the prescribed sequence. Fix: CLAUDE.md now names exact workflow files. Mandatory first output is the preflight checklist. Mandatory second output is the source verification table.
Principle: Route to files, not directories. Agents treat options as a buffet.
Gen 3
Create-Articles
Failure
LLM Behavior
5 February 2026 · v7.9.7 → v7.9.13 · Release GEN 3
Seven Versions in One Day: Content Profiles to CSS Dividers
Seven incremental versions in a single day, each addressing a specific issue found during production runs. Content profiles (v7.9.7) gave validation context by content type. Video embeds (v7.9.8) and visual source class (v7.9.9) were cross-engine changes requiring Create-Images coordination. Explore section redesign (v7.9.10-12) separated editorial emphasis from navigation. CSS dividers (v7.9.13) handled spacing entirely in WordPress CSS. Small, focused changes with immediate field testing.
Principle: Ship small, test in production, iterate same-day. Seven focused versions beat one ambitious release.
Gen 3
Create-Articles
Iteration
1 February 2026 · v7.9.2 · Architecture GEN 3
v7.9.1 loaded at 84,312 tokens. Context window compacted before the agent could finish writing. Separated into two engines: Create-Articles at 68,994 tokens (articles, validation, workflow) and Create-Images at 37,399 tokens (14 SVG templates, image validation, tool routing). 18% reduction. Each engine fits in its own context window. This decision, made 4 days before Anthropic shipped Agent Teams, maps directly to their architecture: each teammate gets its own context window, owns separate files, and integrates through defined contracts.
Principle: Context window is a finite resource. Separate what from how.
Gen 3
Create-Articles
Create-Images
Architecture
1 February 2026 · v7.9.1 · Feature GEN 3
Visual Rhythm System
Articles were text walls with 1 to 2 visuals across 8+ sections. Built a visual weight system: SVG/VIP = 1.0, table/callout = 0.5, pro-tip = 0.25. Minimum formulas by profile (thought-leadership = prose / 400). Mandatory visual positions: after hero, after intro, before conclusion. Phase 2.5 “Visual Plan” added to workflow. 14 lab-tested SVG templates (A through N).
Principle: Rules without examples get ignored. Templates without rules sit unused. You need both.
Gen 3
Create-Articles
Visual Design
4 February 2026 · AI-SEO v7.1.1 · Architecture GEN 2
Context Engineering as Core Operator Skill
Updated
Operator Function and
Pile of Parts definitions to position
context engineering as a core Operator skill. The Pile of Parts Problem is really context fragmentation: tools fail because they lack shared context (brand voice, ICP, business rules). Context engineering is the discipline that fixes it. Created new definition page with AI Summary block for LLM citation.
Principle: Context engineering is not prompt engineering. It’s designing the information layer all AI systems share.
Create-Articles
Gen 2
Context Engineering
Definitions
28 January 2026 · AI-SEO v7.1 · Architecture GEN 2
AI-SEO Schema Rebuild for LLM Authority
Feedback from Grok and Gemini revealed schema gaps for LLM citation optimization. Added TechArticle type, keywords array, proficiencyLevel, DefinedTerm schema for key concepts, AI Summary blocks (hidden structured data for RAG systems), semantic HTML wrappers (article/section tags), and dfn tags for citation-ready definitions. Schema is not just for Google. It’s for LLM training data.
Principle: Schema serves two masters now. Google for rich results, LLMs for citation authority.
Create-Articles
Gen 2
AI-SEO
Schema
21 January 2026 · v7.0.3 · Fix GEN 2
Voice Drift from Skill File
Output tone inconsistent. Some articles sounded like me, others didn’t. Root cause: hendry-voice skill file was updated but voice.md in Create-Articles had older rules. Two sources of truth = drift. Aligned and added reference to skill as canonical source.
Principle: Single source of truth for voice. Reference, don’t duplicate.
Create-Articles
Gen 2
Voice
21 January 2026 · v7.0.3 · Decision GEN 2
Renamed Content System → Create-Articles
Framework alignment. The AI Marketing Framework has a CREATE engine. This system is a specific implementation. Renamed from “Content System” to “Create-Articles” across all files. Clearer mental model.
Principle: Naming should encode hierarchy.
Create-Articles
Gen 2
Naming
18 January 2026 · v7.0.2 · Failure GEN 2
TOC Missing Despite Rule Existing
Posts with 7 H2 sections generated without table of contents. TOC requirement existed in components.md but wasn’t enforced in validation. Tier 3 “advisory” meant LLM skipped it. Elevated to structural validation with auto-fail.
Principle: Advisory rules get skipped. Make requirements structural.
Create-Articles
Gen 2
Validation
18 January 2026 · v7.0.2 · Feature GEN 2
Schema Mentions Must Match Content
Schema had mentions (tools, companies) that weren’t in the article body. Orphaned schema entities. During research, noted tools to potentially mention, added to schema, but they didn’t make final draft. Solution: Every entity in schema mentions must appear in visible content.
Principle: Schema is a contract with search engines. Don’t promise what you don’t deliver.
Create-Articles
Gen 2
Schema
18 January 2026 · v7.0.2 · Feature GEN 2
Pre-Output Checklist
Articles passing validation but still having issues. Individual checks passed, cross-checks weren’t happening. TOC didn’t match H2 IDs. Solution: Pre-output checklist runs AFTER validation passes. Structural gates must pass (TOC present, schema wordCount, mentions match content). Quality gates flag for review.
Principle: Validation checks parts. Pre-output checks the whole. Both are necessary.
Create-Articles
Gen 2
Validation
18 January 2026 · v7.0.2 · Failure GEN 2
Schema Timing Bug
Schema wordCount validation failed on every run. Schema said 1650, actual content was 1366. Spent 4 hours debugging. Root cause: Schema populated from content brief (target: 1650) BEFORE content generated. Validating against a goal, not a measurement. Solution: Separate schema properties by timing. Static values during generate, measured values post-generate from actual output.
Principle: Measured values must come from output, not input. Never validate predictions against themselves.
Create-Articles
Gen 2
Schema
Failure
17 January 2026 · v7.0.1 · Fix GEN 2
Tables Hard to Scan
Feedback that tables looked flat, hard to read with many rows. Added zebra striping to design tokens. Centered footer alignment.
Full retrospective →
Principle: Visual rhythm aids scanning.
Create-Articles
Gen 2
Design
13 January 2026 · v7.0 · Architecture GEN 2
Rebuilt Validation as 3-Tier System
Previous validation was binary. Some checks are deterministic, some require judgment. Treating them the same caused problems. Tried single pass with confidence scores (too complex), all advisory (too many false positives), all auto-fix (broke things needing judgment). Solution: Tier 1 (Pattern) = 100% reliable, auto-fix. Tier 2 (Structural) = 95% reliable, evidence-based. Tier 3 (Semantic) = 70 to 80% reliable, advisory only.
Principle: Match automation level to confidence level.
Create-Articles
Gen 2
Validation
13 January 2026 · v7.0 · Learning GEN 2
LLMs Lie About Validation
Asked Claude to validate the article had 10+ external links. Response: “PASS – Article contains sufficient external links.” Actual count: 4. The LLM pattern-matched the validation instruction to the expected output without doing the work. It generated a plausible validation result without checking.
Full deep dive on the failure and fix →
Principle: Evidence-based validation defeats hallucination. Don’t ask “did this pass?” Ask “show me what you found.”
Create-Articles
Gen 2
LLM Behavior
11 January 2026 · v6.9.9.8 · Release GEN 1
Gen 1 Complete. Production Stable
Cumulative fixes from v6.9.9.3 through v6.9.9.7. CMS theme typography aligned. Footer format updated. FAQ spacing reduced. Body font mismatch fixed. First fully production-stable version. Gen 1 complete.
Full video walkthrough →
Create-Articles
Milestone
Production
11 January 2026 · v6.9.9.7 · Failure GEN 1
Font Mismatch
Mobile text looked “tight” compared to native CMS pages. CSS variable for body font was set to ‘Barlow Semi Condensed’ but CMS theme used regular ‘Barlow’. I had assumed the font from looking at headings. Audited against actual theme settings to fix.
Principle: Match the environment. Extract values from the destination system, don’t assume.
Create-Articles
CSS
Failure
10 January 2026 · v6.9.7 · Fix GEN 1
Regression Check
New version broke things that previously worked. Missing reference files. Added regression testing against previous stable version before release.
Principle: Test against the last known good state.
Create-Articles
Testing
7 January 2026 · v6.9.5 · Failure GEN 1
Header/Footer Drift
First generated post had correct header and footer. Second post drifted. Logo changed from “Hendry” to “Hendry.ai”. URL changed from “/builders-log/” to “/blog/”. Social icons switched from LinkedIn+Email to LinkedIn+Twitter. The LLM improvised on elements that should have been verbatim. Created a “Verbatim Elements” section with exact HTML that cannot be modified.
Principle: Agents improvise unless explicitly forbidden. Lock down what shouldn’t change.
Create-Articles
LLM Behavior
Failure
7 January 2026 · v6.9.4 · Decision GEN 1
FAQ Count Insufficient
Posts generating 3 to 5 FAQs. Need minimum 6 for schema richness. Added explicit minimum, updated validation checklist, added to common mistakes table.
Principle: Make requirements explicit and enforceable.
Create-Articles
Schema
Requirements
6 January 2026 · v6.9 · Fix GEN 1
Mobile Padding Iteration
Generated pages had tighter spacing than existing website. Tested values iteratively: v6.8 at 3.2vw was too tight. v6.9 at max(5vw, 16px) was still tight. v6.9.2 at max(10vw, 40px) for 768px finally matched. Three attempts with screenshot comparisons.
Principle: Test against production. Screenshots don’t lie.
Create-Articles
CSS
Mobile
6 January 2026 · v6.8 · Release GEN 1
CMS Fragment Mode
Generated complete HTML pages with DOCTYPE, html, head, body tags. CMS theme already provides page structure. Result: duplicate headers, duplicate navigation, style conflicts. Switched to fragment mode: remove page wrapper, wrap content in namespaced div, scope CSS to that div.
Principle: Design for integration, not standalone. Output format depends on destination.
Create-Articles
CMS
Architecture
2 January 2026 · v6.5 · Release GEN 1
GitHub Versioning + Golden Reference Files
Set up version control. Created golden reference files for each format type. Also fixed CSS variable naming mismatch. Reference files used --color-primary but canonical CSS used --c-primary. Generated content was missing rust/orange underlines.
Principle: One source of truth. Name files so the canonical source is obvious.
Create-Articles
Version Control
CSS
30 December 2025 · v5.0 · Release GEN 1
Rolled Back to Simplicity
v3.8 broke GPT compatibility. Rolled back to v2.2 structure. Added one thing: a completed HTML example showing exactly what good output looks like. GPT followed workflow correctly again. Stability restored.
Principle: Show don’t tell. When instructions fail, examples succeed.
Create-Articles
Rollback
Recovery
29 December 2025 · v3.8 · Failure GEN 1
The 89-Line Disaster
Added 89 lines of validation checklists with MANDATORY and CRITICAL warnings everywhere. Renamed folders. Added 8 separate validation sections. GPT stopped following the workflow entirely. Output quality dropped. Workflow grew from 205 to 294 lines. The LLM got confused by competing priorities.
Principle: One example beats 89 lines of instructions. LLMs pattern-match examples better than they parse rules.
Create-Articles
Over-engineering
Failure
27 December 2025 · v3.0 · Release GEN 1
Restructured to Core/Create Architecture
Separated core (brand, design) from creation (templates, workflow). Attempting to add organization. This would break things.
Create-Articles
Architecture
25 December 2025 · v2.0 · Release GEN 1
First Content Generation Workflow
Added content generation workflow with templates for different formats. First functional version that could produce output.
Create-Articles
Workflow
25 December 2025 · v1.0 · Release GEN 1
Initial Folder Structure
Created basic folder structure with placeholders for brand files and templates. The skeleton that would hold Foundation outputs. Starting point for everything that followed.
Create-Articles
Foundation
Foundation Build (Pre-v1.0)
Before Create-Articles could generate anything useful, the Foundation layer had to produce its outputs. These entries document DEFINE, UNDERSTAND, and POSITION engine work that feeds the content system.
22 December 2025 · v0.3 · Foundation Layer POSITION
Engine Output: POSITION (Competitive Differentiation)
Created positioning.md with the “Pile of Parts” narrative and differentiation framework. Trigger: Early content drafts sounded like every other AI marketing take. Generic “AI is transforming marketing” noise. Fix: Documented the specific counter-position: most teams have tools without architecture. Framework-first thinking, not tool-first. This positioning now gates every piece of content. If it doesn’t reinforce the narrative, it doesn’t ship.
Principle: Positioning isn’t a tagline. It’s a filter that kills generic content before it’s written.
POSITION
Foundation
Differentiation
20 December 2025 · v0.2 · Foundation Layer UNDERSTAND
Engine Output: UNDERSTAND (ICP Development)
Created icp.md with Strategic Sarah persona and pain point mapping. Trigger: Content was too broad. Trying to speak to everyone from junior marketers to CEOs. Fix: Hard-coded the ICP: marketing leaders who control budget, understand the gap between AI promise and delivery, and are asking “how do I prove ROI?” Every content brief now requires ICP alignment check before generation starts.
Principle: Generic content comes from undefined audience. ICP precision forces content precision.
UNDERSTAND
Foundation
ICP
18 December 2025 · v0.1 · Foundation Layer DEFINE
Engine Output: DEFINE (Voice & Brand)
Developed voice.md and brand.md. This is the DEFINE engine in action. Trigger: Test outputs sounded like generic AI-written content. Polished but empty. Fix: Extracted the “Practitioner, not Pundit” heuristics. Concrete rules: no hedge words, show the work, forward focus not retrospective. Voice rules now run as Tier 1 validation. Pattern-matchable, auto-fixable.
Principle: Voice isn’t vibe. It’s enforceable rules that kill generic output.
DEFINE
Foundation
Brand Voice
Create-Images Logs
25 versions. Born from the engine split. SVG diagram generation, hero image production, perception rules that bridge LLM coordinates to human vision, and an 8-check exit gate with feedback receiving protocol.
23 Feb → 2 Mar 2026 · v2.0.23 → v2.0.25 · Architecture GEN 3
Prompt Fidelity Gate + Handoff Alignment
Three versions tightening the boundary between Create-Images and its neighbours. VIP Prompt Fidelity (v2.0.23, EG-008): the exit gate now extracts named visual elements from VIP prompt text (arrows, arcs, labels, nodes) and verifies corresponding SVG elements exist. Triggered by a missing return arrow that the prompt explicitly requested. Exit gate at 8 checks. Rule Health Check (v2.0.24): cross-engine pipeline version sync with Create-Articles v7.9.35 and Create-Compiler v1.3.3. PAT-017 ID collision documented (same ID, different checks in two engines). Handoff Alignment (v2.0.25): source attribution standardised to HTML everywhere per contract v1.2. VIP data-vip-id required in all integration flows. PAT-016 hero width exception added (1200px). Dead inline SVG references removed to align with STR-022.
Principle: Contracts between engines need explicit, machine-enforceable rules. Implicit assumptions drift with every version bump.
Gen 3
Create-Images
Contracts
Architecture
22 February 2026 · v2.0.22 · Architecture GEN 3
Feedback Receiving Protocol
Create-Images can now receive structured feedback from Create-Compiler. The Feedback Receiving Protocol processes Tier 0 reverse manifest entries at session start (before Step 1). Each entry adds or strengthens a validation rule in the image engine. Misroute detection rejects Tier 1 and Tier 2 entries (those belong to Create-Articles). This completes the feedback loop: Compiler detects an SVG issue, classifies it as Tier 0 (preventable), writes a reverse manifest, and Create-Images absorbs the new rule on its next run. The same pattern that worked for articles now works for images.
Principle: Every engine that receives feedback becomes self-improving. Close the loop for all producers, not just one.
Gen 3
Create-Images
Feedback
Architecture
20 February 2026 · v2.0.20 → v2.0.21 · Architecture GEN 3
Exit Gate: Centering Enforcement at 7 Checks
Two versions hardening SVG output quality. Rule 11 (Inline Centering, v2.0.20): every SVG must include inline centering styles (display: block; margin: 0 auto). The recurring left-alignment bug appeared across multiple templates and hero images. Solved permanently by making centering a structural requirement with an exit gate check. Exit Gate added: 6 checks (EG-001 to EG-006) that must pass before any SVG is emitted. Text Centering Enforcement (v2.0.21): mandatory centering formula with arithmetic self-check. When content has more lines than template default, y-coordinates must be recalculated from the formula. Irregular spacing explicitly banned. EG-007 added, bringing the exit gate to 7 checks.
Principle: Exit gates catch what generation-time rules miss. No SVG leaves the engine without passing structural checks.
Gen 3
Create-Images
Validation
Architecture
11 February 2026 · v2.0.19 · Architecture GEN 3
Hero Skip Prevention: Image Scan Summary Gate
When an article had existing inline SVGs from a previous draft, the agent skipped hero SVG generation entirely. Existing inline SVGs do not satisfy the hero requirement. Added a mandatory Image Scan Summary at Step 1 that forces explicit enumeration: hero VIP found or not, inline VIPs counted, hero status explicitly tracked as NEEDS GENERATION or ALREADY SVG. The gate prevents declaring images complete without generating the hero.
Principle: Explicit status checks prevent implicit assumptions. Make the agent state what it found.
Gen 3
Create-Images
Process Gate
11 February 2026 · v2.0.17 → v2.0.18 · Architecture GEN 3
Hero Production Hardening: From 12 Iterations to 10 Rules
First-pass hero SVGs consistently failed on layout and centering. After 12+ iteration cycles across 3 hero images in one session, codified the fixes as rules. Rule 8 (Fill the Frame): content must span 85%+ width and 75%+ height. Rule 9 (Center Everything): global and local centering with tight tolerance. Rule 10 (Edge-Based Arrows): calculate from illustration edges, not stage centers. Three implementation patterns documented: translate centering (one-line global shift), pre-render layout planning (calculate y-ranges first), and source attribution placement.
Principle: Codify the fix patterns, not just the rules. Rules describe success; patterns describe how to get there.
Gen 3
Create-Images
Perception
Hero Images
10 February 2026 · v2.0.14 → v2.0.16 · Fix GEN 3
Font Scale Rule + Source Attribution Journey
v2.0.8 moved source attribution out of SVGs into HTML. v2.0.14 moved it back for left-aligned templates (D, F, H, J, L) where HTML alignment broke. Meanwhile, Template A was enlarged to 900×267 and needed a font scale rule: wider viewBox means visually smaller text unless you compensate. Formula: scale_factor = viewBox_width / 540. Applied to all wide templates (A at 1.667x, I at 1.296x, M at 1.296x, N at 1.222x). Three versions of source line placement to get alignment right across all template types.
Principle: Test architectural decisions across all variants. What works for centered templates fails for left-aligned ones.
Gen 3
Create-Images
Templates
Typography
10 February 2026 · v2.0.11 · Architecture GEN 3
Visual Perception Rules: The LLM Generates Numbers, the Human Sees Shapes
LLMs place SVG elements at mathematically correct coordinates, but the visual output looks wrong. Opacity 0.1 on cream backgrounds is invisible. An element at y=100 with 14px font has a visual footprint extending to y=92. Arrows using gap/2 math visually crowd source shapes. Built 7 core perception rules: visibility floor (minimum opacity by element type), clearance principle (visual footprint extends beyond coordinates), arrow breathing room, connection integrity (lines must touch shape edges), grid-text separation, proportional weight hierarchy, and context-aware contrast modes for inline vs hero SVGs.
Principle: The LLM generates numbers. The human sees shapes. Bridge the gap with explicit perception rules.
Gen 3
Create-Images
Perception
Architecture
5 February 2026 · v2.0.5 → v2.0.10 · Release GEN 3
Template Production Hardening
Six versions in one day bringing 14 SVG templates from lab-tested to production-ready. ViewBox heights standardised (12px padding rule). Arrow spacing formula locked (space_unit = gap / 4). VIP ID passthrough for Create-Compiler matching. Source lines moved to HTML (later reversed for some templates). Timeline enlarged twice (600 to 700 to 900px). Template I-L added for featured timelines.
Gen 3
Create-Images
Templates
Iteration
1 February 2026 · v2.0.0 · Release GEN 3
Engine Born from the Split
Create-Images exists because Create-Articles hit 84K tokens. Absorbed 14 SVG templates, PAT-010/015/016 validation, and tool routing from Create-Articles. Tool stack validated: Claude SVG for diagrams (exact brand colours, deterministic), Gemini for conceptual illustrations (best creative output), Grok Aurora for human figures (best prompt adherence). DALL-E dropped after testing. Result: 37,399 tokens standalone.
Principle: Focused engines that do one thing well. Context pressure forces good architecture.
Gen 3
Create-Images
Architecture
Milestone
Listen-Competitors Logs
7 versions from basic monitoring to synthesis-driven competitive intelligence.
January 2026 · v3.3 · Feature
Two-Layer Output
Generated 5 files and 3,000 words of competitive intelligence. The actionable insight was one sentence buried on page 4. Comprehensive collection but unusable output. Added synthesis phase with two-layer output: Brief (200 words, covering verdict, threat level, top 3 insights, one action) and Full Report (2,000+ words with all evidence).
Principle: Comprehensive collection serves different purpose than decisive output. Separate them.
Listen-Competitors
Output Design
January 2026 · v3.3 · Feature
Every Claim Must Have Source URL
Found myself writing intelligence briefs with claims I couldn’t trace back to source. Signal said “competitor claims 40% improvement” but couldn’t find where that came from. Added citation requirement: every claim must have a source URL. If you can’t cite it, don’t include it.
Principle: Uncited claims are hallucination risks. Forced citation eliminates fabricated intelligence.
Listen-Competitors
Citations
January 2026 · v3.3 · Feature
Authoritative Source Queries
LLMs are trained on and heavily cite certain sources. Missing these meant missing how the market talks about a competitor. Added required queries for every target: Reddit (practitioner discussion), Wikipedia (notability signal), YouTube (long-form content), LinkedIn articles, Medium posts. Search where LLMs train.
Principle: Search where LLMs train. These sources shape how AI represents the market.
Listen-Competitors
Search Strategy
January 2026 · v3.2 · Feature
Counter-Position Scoring
Had 15 signals with no actionability indicator. Some were well-defended positions I shouldn’t challenge. Others were weak claims I could counter. Added counter-position score (1 to 5): 5 = they’re wrong (create counter-content), 3 = complementary (create complement), 1 = well-defended (learn from them).
Principle: Score before prioritizing. Not all signals deserve response.
Listen-Competitors
Scoring
January 2026 · v3.2 · Feature
Weakness Probe
Intelligence reports read like competitor marketing pages. All positioning, no criticism. No failures. No gaps. Not useful for counter-positioning. Added dedicated weakness probe phase with explicit queries for problems, limitations, and debates. Found criticisms of a well-known framework that would never appear in the author’s own content.
Principle: Weaknesses are strategic gold. Actively search for problems, not just positions.
Listen-Competitors
Competitive Intel
January 2026 · v3.1 · Decision
LinkedIn Manual Paste
LinkedIn posts can’t be automatically scraped. Attempted workarounds failed or were fragile. Accepted the constraint. System prompts user to paste relevant posts manually. The manual step became a feature: human selection of “most relevant posts” is better than automated scraping of “all posts.”
Principle: Design around constraints. Sometimes manual steps improve outcomes.
Listen-Competitors
Constraints
January 2026 · v3.1 · Failure
Early Synthesis Creates Confirmation Bias
Formed verdicts while still collecting signals. Subsequent searches confirmed initial impressions. Counter-evidence got downweighted. The “intelligence” was just my initial hunch dressed up with selective evidence. Fixed with strict phase separation: collection (Phases 1 to 4) must complete before synthesis (Phase 5).
Principle: Early synthesis creates confirmation bias. Collect comprehensively, then conclude. Not the reverse.
Listen-Competitors
Cognitive Bias
Failure
January 2026 · v3.1 · Learning
Two-Phase Search
Searched “[competitor name] AI marketing” and got results for other people with the same name. Searched “AI marketing framework” and got generic content. Problem: searching in MY vocabulary, not THEIRS. Thought leaders brand their ideas with unique terms. Added Phase 1 (learn their vocabulary) before Phase 2 (search in their language).
Principle: Search in their language, not yours. Generic queries return generic results.
Listen-Competitors
Search Strategy
January 2026 · v1.0.1 · Architecture
HUNT/MONITOR Dual-Mode Architecture
Built Listen-Competitors as dual-mode signal detection: HUNT (outbound intelligence covering ICP watering holes, pain point mining, competitor content) and MONITOR (inbound signals covering brand mentions, AIO citations, intent data). Weight ratio shifts as brand matures: Cold Start 80/20 → Growth 50/50 → Scale 20/80.
Principle: Detection and Generation are fundamentally different systems. Listen-Competitors uses monitors and scoring thresholds, not templates and validation rules.
Listen-Competitors
Architecture
Replicate Logs
Testing if engines transfer to new brands. 48+ versions across 3 brand implementations proved the architecture is portable, not just Hendry-specific.
The Replication Journey
Started with the Hendry Content System (25 versions), then tested on three external brands. Each test compressed: Brand A took 2 weeks and 15+ versions. Brand B took 3 days and 5 versions. Brand C took 2 days and 5 versions. The pattern became formulaic.
January 2026 · Brand A · v2.16 · Failure REPLICATE
Agents Interpret “Copy” as “Recreate Similar”
Workflow said “copy template to output folder.” Agent rebuilt the template from memory instead of copying the file. Output had wrong CSS, missing elements, HTML comments rendered as visible text. Changed instruction to explicit bash command: cp template.html output.html followed by str_replace for content slots only.
Principle: Force literal file operations. “Copy” means “recreate similar” to an LLM.
Create-Articles-Replicate
LLM Behavior
Failure
January 2026 · Brand A · v3.0.1 · Architecture REPLICATE
Slot-Based JSON Architecture (97% Output Reduction)
Full HTML output was ~150KB. Every generation risked CSS corruption. Switched to slot-based architecture: agent outputs only JSON content (~5KB), assembly script merges with locked template. 97% reduction in agent output. Zero CSS drift since implementation.
Principle: Slot-based architectures eliminate CSS drift. Agents write content, not markup.
Create-Articles-Replicate
Architecture
January 2026 · Brand B · v3.0 · Feature REPLICATE
Self-Contained Templates with Embedded Assets
Demo failed because external font CDN was blocked. Embedded Inter font as base64 directly in template (~1.3MB but works offline). Also embedded founder photos. Template is now completely self-contained with zero external dependencies.
Principle: Self-contained templates eliminate external dependencies. Demos must work offline.
Create-Articles-Replicate
Templates
January 2026 · Brand B · v3.4 · Fix REPLICATE
Shell Compliance Validation
Agent changed hyperlink color from brand red to default blue. Footer SVG stroke-width changed from 1.5 to 2. Small deviations that made output look “off.” Added explicit shell compliance checks: “Footer VERBATIM” and “Hyperlinks [COLOR]” in validation checklist.
Principle: Agents deviate from templates. Add explicit compliance checks for visual elements.
Create-Articles-Replicate
Validation
January 2026 · Brand C · v1.1 · Failure REPLICATE
Color Assumption Error
Built system using teal (#00A9A5) as primary color based on memory. Production website uses purple (#6f2791). Founder immediately spotted the error. Extract colors from production CSS, never assume from memory or screenshots.
Principle: Don’t assume colors. Extract from actual site CSS.
Create-Articles-Replicate
Design
Failure
January 2026 · Brand C · v1.2 · Learning REPLICATE
Sites Use Multiple Font Families
Assumed one font family. Production site used four: Nunito (body), Cabin (nav), Roboto (labels), Montserrat (buttons). Each serves a different purpose. Typography extraction now includes font-by-purpose mapping, not just “the font.”
Principle: Verify fonts against production CSS. Sites use multiple families for different purposes.
Create-Articles-Replicate
Typography
22 January 2026 · Replicate v3.0 · Release REPLICATE
Brand-Agnostic Base System
After three brand tests, extracted the portable core. Universal system = 80% (workflows, validation, templates, CRITICAL-RULES.md). Brand-specific = 20% (voice, design tokens, ICP, shell HTML). New brand setup now takes ~40 minutes: 15 min brand research, 10 min CSS extraction, 10 min shell creation, 5 min assembly.
Principle: Build universal systems with brand-specific configuration. Architecture should transfer; only context changes.
Create-Articles-Replicate
Portability
Milestone
January 2026 · Replicate · Learning REPLICATE
CSS Extraction is the Human Bottleneck
Attempted to automate design token extraction. Claude Cowork can’t use browser dev tools. Automated CSS parsing misses computed styles, pseudo-selectors, and platform-specific patterns (Framer loads CSS dynamically, HubSpot uses module CSS). Human extraction remains at ~10 to 15 minutes per brand. This is the irreducible manual step.
Principle: CSS extraction is the human bottleneck. Some steps cannot be automated.
Create-Articles-Replicate
Constraints
January 2026 · Listen-Competitors-Replicate · Fork REPLICATE
Configurable Comparison Entity
Original Listen-Competitors had comparison logic hardcoded. But the system could compare any target to any brand. Created Listen-Competitors-Replicate as separate fork with configurable comparison entity. User fills /01-brand/ folder (company, positioning, ICP, competitors). Phase 0 loads brand context before running. Same engine, different lens.
Principle: Build the specific version first, then generalize. Don’t over-architect early.
Listen-Competitors-Replicate
Portability
Fork