The
HUMAN_INPUTmarker mentioned in this article is a placeholder left by the AI writing skill to indicate where a human should later fill in a specific value (e.g.,<!-- HUMAN_INPUT: Fill in numerical value -->).
When operating a content pipeline, you might experience a situation where, despite intending to follow the procedure of “deciding on a persona before writing,” you realize that an article has progressed with the persona field still blank. Human attention is finite. In the rush of confirming a brief on a busy day, it is structurally inevitable that someone will miss filling in the audience field.
Trying to solve this problem by just “being careful” is a mistake. We must prevent it structurally with a mechanical gate. blog-gate G11 is designed to fail the pipeline when a pillar’s audience.primary is missing. By creating a structure where an article cannot proceed until a persona is decided, we absorb the “rework of fixing it later” at the design stage.
→ For an overview of the audience.primary design protected by this gate, please refer to Design Principles of the mcluhan Engine.
Why Missing Personas Recur
Freeform Text Audience Fields Were Unverifiable
Before the design change on 2026-05-18, the audience field in the brief YAML was a freeform text field called target_audience.role. There, you could bundle multiple personas into a single line, such as “Business Owners, PMs, CTOs, Business Leaders.”
A machine cannot judge whether “Business Owners, PMs, CTOs, Business Leaders” is a valid persona specification. The gate could only check “if the field is empty.” In other words, as long as something was written in the freeform text, the gate would pass.
In reality, a field like “Business Owners, PMs, CTOs, Business Leaders” does not define a persona. It results in an “audience present” status without deciding on the narrative arc, H2 weighting, or technical term thresholds.
Limits of Quality Checks Dependent on Human Attention
Quality checks during the freeform text era essentially relied on the reviewer’s attention.
- The brief creator writes the audience field (freeform text).
- The reviewer confirms “is it really narrowed down to one persona?”
- The article proceeds to the writing phase with insufficient confirmation.
Failure in this procedure happens not when “confirmation is insufficient,” but when “confirmation was not performed.” In a busy session before a deadline, there is no room to deeply confirm the audience field of a brief. Strategic omissions are overlooked, hidden behind cosmetic quality checks (character counts, typos).
A recent example occurred with the mcluhan pillar on 2026-05-18. A state of “intending to be a dual audience but leaning toward tech” was discovered during the pre-publication review. This led to a design decision within the same day to promote the audience field from freeform text to an SSOT taxonomy under clusters.{business|tech}.personas. It took about half a day from discovery to SSOT reflection; without taxonomy conversion, it’s highly likely that rework on the scale of rewriting the pillar would have occurred.
blog-gate G11: Designing a Fail for Missing audience.primary
G11 Judgment Logic
G11 in scripts/blog-gate.ts returns a fail under the following conditions:
G11: Pillar audience.primary missing detection
Condition: brief.is_pillar === true && brief.audience.primary is undefined or empty
Result: fail (stops the pipeline)
Reason: Pillars hold the narrative center of gravity for the entire cluster. A pillar written without a persona becomes mediocre.
If G11 returns a fail, the pipeline cannot proceed to the write phase (blog-tech-write or blog-case-write). It is a structure where you cannot move forward until a value is set for audience.primary and it passes the gate again.
In the case of a spoke (is_pillar: false), G11 is treated as a warning (WARN) rather than a mandatory check. Since spokes inherit the narrative arc of the pillar, the risk of missing an audience for a spoke is relatively low if the pillar’s audience design is established.
scripts/blog-gate.ts defines 13 mandatory checks from G1 to G13, and G11 is one of them. Cosmetic checks (G1: remaining HUMAN_INPUT, G2: internal link errors, G3: tag SSOT verification) and strategic checks (G11: missing audience/cluster/seo sections in pillars) are managed on the same framework.
Division of Labor: Taxonomy Verification Handled by Skill/Agent Layers
Ideally, G11 would fail if “freeform text is entered,” but currently, G11 is responsible for the presence check, while taxonomy verification is handled by the @seo-director and the writing skill by reading audience-tracks.json.
blog-ops/config/audience-tracks.json lists valid persona names. The @seo-director refers to this file when creating a brief and hands it to the writing skill to ensure that freeform text outside the taxonomy (e.g., "Business Owner/PM") is not written in audience.primary.
This results in:
audience.primary: "senior-engineer"→ pass (defined in taxonomy, G11 also passes presence check)audience.primary: "general-engineer"→ detected at the skill/agent layer, prompting a rewrite (G11 does not check value validity)audience.primary: ""→ G11 fails (empty string is treated as no presence)
“Blank fields” are stopped by the machine, while “filled but outside taxonomy” is stopped at the agent layer—this two-stage approach keeps the implementation of G11 minimal while centralizing taxonomy maintenance in a single SSOT file (audience-tracks.json). There is room to extend G11 to be taxonomy-aware in the future, but priority is given to stabilizing the “is the field written” layer first.
The implementation is in scripts/blog-gate.ts:597-725. parseBriefForG11() parses the brief YAML at the text level (regex) to determine the presence of ^is_pillar:\s*true\s*$. If it’s not is_pillar: true, it early-returns at line 688 of checkG11_PillarSeoSection(), removing spoke briefs from the scope of G11. Only when determined as a pillar does it sequentially check for the presence of the cluster:\s*(business|tech) field, the primary: field within the audience: block, the sum of narrative_weight.primary + secondary, and the four mandatory fields in the seo: section (primary_keyword / secondary_keywords / longtail_clusters / search_intent). A point to note is that G11 currently performs a presence check to see if the fields are written; it does not yet include a valid-value verification to see if the value of audience.primary is included in the taxonomy of blog-ops/config/audience-tracks.json. Taxonomy verification is a divided responsibility handled by the @seo-director and the writing skill side by reading audience-tracks.json, while G11 focuses on the layer of mechanically stopping the “missing field itself” as a precursor.
By making G11 functional, pillars are structured so they “cannot move forward without a persona.” If a persona is not decided, it will fail even during the brief audit and cannot enter the writing phase.
What the Gate Stops and What It Doesn’t
Machines vs. Human Judgment
G11 stops “structural omissions and invalid values.” These can be categorized into two types:
The division can be confirmed in checkG11_PillarSeoSection() at scripts/blog-gate.ts:691-723.
- fail (stops the pipeline): Missing
clusterfield / Missingaudience.primaryfield / Missing any of the four mandatory fields in theseo:section (primary_keyword/secondary_keywords/longtail_clusters/search_intent). - warn (warning only): Sum of
narrative_weight.primary + secondaryis not 100 (allowed not to be 100 during adjustment while writing, so not a fail). - skip (not a target for check): Articles in draft status (line 672:
if (isDraft) return) / Briefs withis_pillar: false(line 688:if (!isPillar) return).
The difference in treatment between pillars and spokes is implemented by having “G11 skip spokes.” If you want to impose similar constraints on spokes, the design is to add it as a separate G rule; G11 itself is strictly for pillars.
| What Machines Stop | What Humans Judge |
|---|---|
Missing audience.primary | Validity of audience.primary (is “senior-engineer” really appropriate?) |
| Persona names outside taxonomy | Reason for choosing a persona (why “senior-engineer” instead of “architect”?) |
Missing cluster field | Appropriateness of the cluster (business or tech?) |
G11 detects “whether it is set.” Humans judge “whether the set value is correct.” This boundary is important. Trying to have a machine judge whether “architect” or “senior-engineer” is more appropriate would make the gate too complex. Machines are entrusted with only two points: “presence/absence” and “valid/invalid.”
Principles of Detecting Strategic Omissions with Gates
The ability to handle cosmetic checks (exceeding character counts, typos, NG words) and strategic checks (missing audience.primary, missing SEO section) within the same gate framework is important for the design of quality assurance.
Traditional pre-publication gates were biased toward the cosmetic. While it’s important to check if “the title is within 30 characters” or “it contains NG words,” by incorporating strategic questions like “is it decided who this article is for?” into the gate, the scope in which the pipeline functions as a “guardian of quality” has expanded.
Effects and Side Effects After Introduction
At the time G11 was introduced on 2026-05-18, the briefs for the three pillars (reset-timeline, mcluhan, bateson) had already been rewritten with SEO sections and audience.primary. Therefore, the opportunity for G11 to return a fail for a new brief for the first time in production has not yet arrived. However, it has been confirmed to return a fail as expected against test fixtures (briefs missing cluster/audience.primary/SEO sections). The next time a new pillar is written, we expect an episode of “hitting a fail because of a forgotten entry.” At that stage, we plan to record a retro on the measurement of effects, such as “did it provide an opportunity to be conscious of persona design?”
Adjustment Points When the Gate is Too Strict
G11 targets only pillars (is_pillar: true) and treats spokes as WARNs. This design is also a countermeasure to the problem of “overly strict gates lowering productivity.”
If G11 mandatory checks are imposed on all articles, the gate will frequently fail for experimental spokes or articles in the draft stage, clogging the pipeline. Because pillars decide the narrative center of gravity for the entire cluster, the explicit specification of personas is particularly important. Since spokes inherit the narrative arc of the pillar, a relatively flexible operation is possible as long as the pillar is decided.
This two-stage design—“pillar = mandatory, spoke = recommended”—balances gate strictness with operational flexibility.
Summary: Designing Machines to Stop Strategic Omissions
The accident of proceeding to writing without deciding on a persona cannot be prevented by training human attention. It must be prevented by design.
The approach taken by blog-gate G11 consists of three points:
- Transition from Freeform Text to Taxonomy: Defined valid persona names in
audience-tracks.jsonto make mechanical verification possible. - Treating Omissions and Invalid Values Equally as Fails: Increased verification accuracy from “as long as something is written” to “whether a valid value is set.”
- Pillars Mandatory, Spokes Recommended: Varied gate strictness according to strategic importance to balance with operational costs.
The design principle of “preventing strategic omissions with gates” can be applied not only to audience but also to missing SEO sections (designing a fail for missing SEO fields in pillars). Gates can expand their responsibility from cosmetic quality guardians to guardians of strategic design.
→ For the overall structure of content design protected by this gate, please refer to The Relationship Between Cluster and Persona: Design on Outer and Inner Axes.