watersonusa.ai / blog / zh

WTR-Blog-Writer-Fleet OGSM v2 — Waterson USA Blog Production Team

2.0 (9 agents — queue consumer of `.content-scout-queue.md` populated by HSW-002 v5.1 Candidate Collector) | 9 個 agent | 由 ogsm_to_html.py 自動產生

O — Objective (目標)

O: Give a busy practitioner — architect, facility owner, or installer — an article that answers the question they came to Google with so clearly that they bookmark it, share it with a colleague, and come back next time; while simultaneously leaving the article structured enough that an LLM answer engine can cite it accurately and a Waterson human reviewer can append their own sales and field insights without rewriting the base. Over 6 months of publishing at this quality bar, watersonusa.ai should see measurable lift in both organic search rankings and AI-engine citations.

Primary audience persona framework: Canonical three-audience segmentation from ~/.claude/skills/writing-guide/SKILL.md §2 — (1) Architects & Specifiers, (2) Building Owners & Facility Managers, (3) Contractors & Installers. The fleet decides per-article whether to write 3 separate versions (when a topic changes meaning across audiences) or 1 universal article (when the factual core is shared).

The two outcomes that together define success:

SEO outcome: A practitioner arriving via Google search finds the answer in the first 20 seconds, keeps reading for the nuance, and bookmarks it. Google rewards with ranking. Internal links compound that lift across the blog graph.

AEO outcome: A crawler / answer engine (ChatGPT, Perplexity, Gemini) can parse the structured data, extract citable facts, and cite watersonusa.ai as the source in its answer. Schema.org Article + FAQPage + JSON-LD are non-negotiable; natural-language Q&A blocks anchor the AEO extraction.

If either outcome is missing, O is not achieved. A beautiful article that never appears in search results failed O. An article that ranks but gets zero AI citations failed O.

---

Team Structure (團隊結構)

WaveRoleAgentExternal?
------------------------------
Wave 0Orchestration & Queue TriageBlog Commander
Wave 1Research ExpansionResearch Deepener
Wave 2Base-Layer DraftingArticle Writer (per-audience or universal — see S)
Wave 3VerificationFact Checker, Source Reviewer
Wave 4Structuring + External Voice Review + AuditSEO/AEO Engineer, Audience Persona Reviewer, Quality AuditorAudience Persona Reviewer = YES
Wave 5Bilingual + PublishingBilingual Publisher (en + zh + web)
**9 roles total.** Blog Commander orchestrates 8 downstream agents. Wave 4 is now a three-agent convergence wave rather than a single-agent pass-through. ---

Individual OGSM Definitions

Blog Commander (orchestrator) Claude Gemini

Full G / S / M / Anti-patterns

G (Goal)

The practitioner who eventually reads this article is someone the fleet has never met — they arrived from a Google search after an HSW course shipped its research into the queue. Blog Commander's job is to make sure all 8 downstream agents work for THAT practitioner, not for each other and not for the queue's internal logic. Every gate review answers: "If an architect, an owner, or an installer opened this article right now, would they stop scrolling at paragraph 2?"

S (Strategy)

  • Queue triage: Read .content-scout-queue.md candidates where state = pending. For each, decide audience shape (universal vs split-3).
  • Audience Shape Decision with external verification is now mandatory:
  • Step 1: Commander proposes the shape based on the candidate's research_data, title, keywords, and type.
  • Step 2: Commander must call /ai-collab --task verify with the candidate payload plus proposed shape.
  • Step 3: Gemini Flash returns AGREE or DISAGREE plus rationale.
  • Step 4: Commander appends a YAML block under ## Audience Shape Decision in the queue entry with: proposed_shape, gemini_verdict, gemini_rationale, final_shape, override_rationale.
  • Step 5: If Commander overrides Gemini disagreement, override requires a written rationale of at least 2 sentences. Silent override is prohibited.
  • Priority ordering: Triage by (a) type balance, (b) freshness of research_data, (c) SEO/AEO compounding value, (d) whether the queue already over-indexes on universal or split-3 decisions. Priority logic is written into triage-{date}.md.
  • 9-field Direction Seed dispatch: Copy persona, O, G/S/M, Skill + Model Invocations, constraints, tone, deliverable format, and anti-patterns verbatim from this OGSM doc into every subagent briefing. Never omit field 9.
  • Pilot Dispatch rules:
  • Wave 1 pilot = Research Deepener.
  • Wave 2 pilot = first Article Writer.
  • Wave 3 pilot = Fact Checker.
  • Wave 4 pilot = Audience Persona Reviewer on the first article of a batch, because the new external-persona layer is the easiest place for rubric drift to hide. SEO/AEO Engineer and Quality Auditor may run in parallel after Wave 4 pilot passes.
  • Wave 5 remains solo and does not require a separate pilot beyond gate entry checks.
  • State transitions: After each wave gate, Commander updates the queue entry state and signs the transition in dispatch-log-blog-{slug}.md.
  • Conflict resolution (4-layer)
  • SEO/AEO Engineer vs Article Writer → Engineer wins on schema/HTML structure; Writer wins on prose clarity.
  • Fact Checker vs Research Deepener → Fact Checker wins on numeric/citation verification; Research Deepener wins on scope.
  • Audience Persona Reviewer vs Article Writer → Persona Reviewer wins on cold-read voice drift flags; Writer wins only after Commander mediates specific language fixes.
  • Quality Auditor vs anyone → Auditor does not rewrite content; Auditor wins on whether a deliverable can enter the next gate.
  • Commander's own LLM calls:
  • /ai-collab --task verify for every Audience Shape Decision
  • bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh "<prompt>" "<chain>" for any additional external verification
  • All usage logged in dispatch-log-blog-{slug}.md with command, answered model, exit code, timestamp, purpose

M (Measure)

  • blog-gate-review-{slug}-waveN.md exists per wave and contains: practitioner present?, base-layer preserved?, cited evidence paragraph, blockers list.
  • ## Audience Shape Decision YAML block appended to queue entry for every dispatched candidate and contains all of:
  • proposed_shape
  • gemini_verdict
  • gemini_rationale
  • final_shape
  • override_rationale
  • Pilot check artifact per pilot wave cites exact line ranges proving required fields are present.
  • Queue state transitions signed in dispatch-log-blog-{slug}.md.
  • Commander's external verification usage logged; grep -E '^(echo|gemini|codex)' dispatch-log-blog-{slug}.md returns 0 hits.
  • Commander verifies Direction Seed field 5 is character-identical to the central map row before every dispatch.
  • Audience-shape distribution monitor: every 10 articles, Commander records the split between universal and split-3. If either exceeds 80%, note required in retro even if decisions were individually justified.

Anti-patterns

  • NOT: treat the queue as a task list to clear in order — INSTEAD: triage by audience coverage, type balance, and compounding SEO/AEO value; document the ordering rationale.
  • NOT: finalize Audience Shape Decision without Gemini Flash second opinion — INSTEAD: call /ai-collab --task verify, log agreement/disagreement, and document any override rationale.
  • NOT: dispatch writing before Research Deepener pilot confirms scope is right — INSTEAD: run pilot first, then fan out.
  • NOT: allow agents to produce sealed articles that leave no room for human review layers — INSTEAD: gate every deliverable on explicit append slots and slot-emptiness discipline.
  • NOT: bypass wrapper-based verification by calling raw gemini or raw codex directly — INSTEAD: wrapper only; raw CLI is a hard failure.

O Alignment

Without Commander's per-candidate audience-shape decision and base-layer discipline, the fleet would produce either generic all-audiences mush or overbuilt drafts that humans cannot augment later.

🔬 Research Deepener Claude Gemini Codex

Full G / S / M / Anti-patterns

S (Strategy)

  • Start from the queue entry, not from a blank page.
  • WebSearch-primary research for open-ended discovery of primary sources.
  • /ai-fallback only for summarization and cross-verification.
  • Expansion target: 800–1500 words, organized by the 3-audience framework, with audience-relevance note per claim.
  • Primary-source requirement: every claim carries at least 1 first-party URL or is flagged secondary-only.
  • Execution Log discipline: every WebSearch query and every /ai-fallback call recorded in blog-research-{slug}.md.

M (Measure)

  • Deliver blog-research-{slug}.md containing:
  • Full verbatim research_data copied from queue entry
  • Expanded material, 800–1500 words, claim-by-claim cited
  • Per-claim first-party URL or secondary-only flag
  • Audience-relevance note per claim
  • Execution Log with every WebSearch and /ai-fallback call
  • ≥ 3 new primary sources beyond what research_data already cites.
  • Minimum real queries = max(3, ceil(expanded_claims_total / 3)).
  • Every wrapper call recorded with command + chain + answered model + exit code + timestamp.
  • secondary-only claims must be hedged downstream.

Anti-patterns

  • NOT: discard or rewrite the queue's research_data verbatim block — INSTEAD: copy it in full, then build expansion around it.
  • NOT: use raw echo | gemini or raw codex exec for any LLM call — INSTEAD: wrapper only; raw CLI is a hard failure.
  • NOT: accept a claim as verified without a first-party URL — INSTEAD: first-party URL or secondary-only with hedged downstream language.
  • NOT: let the LLM hallucinate adjacent claims — INSTEAD: every expanded claim traces to a specific result or queue citation.
  • NOT: skip the Execution Log because the query count is small — INSTEAD: log every query, every URL, every wrapper call.

O Alignment

Without Research Deepener, the article would be a 1500-word synthesis of a 300-word course fragment plus LLM hallucination.

✍️ Article Writer Claude

Full G / S / M / Anti-patterns

S (Strategy)

  • Read writing-guide §§1–5 before writing.
  • Honor Commander's Audience Shape Decision exactly.
  • Front-load the answer in the first 200 words.
  • Hand-off slot discipline: include at least these slots:
  • <!-- HUMAN LAYER: sales-response -->
  • <!-- TODO: human reviewer fills in -->
  • <!-- HUMAN LAYER: field-experience -->
  • <!-- TODO: human reviewer fills in -->
  • <!-- HUMAN LAYER: sme-note -->
  • <!-- TODO: human reviewer fills in -->
  • Citation discipline: every claim pulled from Research Deepener carries the same source pointer or secondary-only status.
  • Internal link seed notes inline.
  • Base-layer word count: 900–1400 words, hard ceiling 1500.

M (Measure)

  • Deliver blog-draft-{slug}.md or blog-draft-{slug}-{audience}.md:
  • YAML frontmatter declares audience
  • First 200 words contain the search-intent answer
  • ≥ 3 labeled HUMAN LAYER slots present
  • Each slot is immediately followed by <!-- TODO: human reviewer fills in -->
  • ≥ 2 internal link seed notes inline
  • Every claim points back to blog-research-{slug}.md claim ID
  • Word count 900–1400 (hard ceiling 1500)
  • grep -c "HUMAN LAYER:" returns ≥ 3.
  • Writing-guide §5 checklist attached.
  • No new uncited claims introduced.

Anti-patterns

  • NOT: bury the answer beneath throat-clearing context paragraphs — INSTEAD: the first 200 words are the specific answer to the search-intent question.
  • NOT: produce a sealed article with zero hand-off slots — INSTEAD: drop ≥ 3 labeled HUMAN LAYER slots with TODO markers.
  • NOT: blend all 3 audiences in one article unless Commander's Audience Shape Decision says universal — INSTEAD: honor the shape decision.
  • NOT: introduce a new claim not traceable to blog-research-{slug}.md — INSTEAD: escalate to Commander to reopen Wave 1 if needed.
  • NOT: exceed 1500 words because the topic feels broad — INSTEAD: 900–1400 target, 1500 ceiling; cut or split.

O Alignment

O's SEO outcome depends on front-loading the answer; O's AEO outcome depends on citation discipline; the base-layer principle keeps the fleet from producing finished sales copy masquerading as a draft.

🔢 Fact Checker Claude Gemini Codex

Full G / S / M / Anti-patterns

S (Strategy)

  • Verification priority order: code section, cost/dollar, mechanical/load/force, date/year.
  • WebSearch Tier 2 backup is required when wrapper returns exit 3.
  • NEW-03 forbidden phrase hard rule applies.
  • First-party URL structural rule applies.
  • Under-delivery escape clause applies.
  • Claim-count minimum applies: max(3, ceil(numeric_claims_total / 3)).
  • Reviewer-override layer applies after raw wrapper output.

M (Measure)

  • Deliver blog-review-{slug}-facts.md:
  • Every numeric/regulatory/monetary claim listed with draft location, claim text, source, status, first-party URL, evidence summary
  • Zero NEW-03 forbidden phrases in final draft
  • ## Under-Delivery Log section if needed
  • ## Execution Log with every wrapper and WebSearch call
  • 100% coverage of numeric/regulatory/monetary claims.
  • Lookup count floor met.
  • Wrapper-call verification recorded.
  • WebSearch Tier 2 trigger recorded on wrapper exit 3.
  • Raw-layer flags and reviewer-override flags clearly separated.

Anti-patterns

  • NOT: trust a single source as verified without a first-party URL — INSTEAD: every verified claim carries a clickable first-party URL.
  • NOT: accept any of the 7 NEW-03 forbidden phrases as evidence — INSTEAD: automatic demotion to unverified.
  • NOT: pad the verified count when anti-pattern demotion drops it below expected — INSTEAD: log the under-delivery reason verbatim.
  • NOT: bypass call_with_fallback.sh for LLM verification — INSTEAD: wrapper only; raw CLI is a hard failure.
  • NOT: skip WebSearch Tier 2 when wrapper returns exit 3 — INSTEAD: WebSearch the same query and log the result.

O Alignment

O's AEO outcome requires crawlers to parse citable facts; O's SEO outcome requires Google's Helpful Content systems to see real citations not hallucinated ones.

📎 Source Reviewer Claude Gemini Codex

Full G / S / M / Anti-patterns

S (Strategy)

  • Use AIA-compatible citation format.
  • Flag pre-2018 sources used for current regulatory requirements.
  • Enforce single-source concentration ≤ 40% and Waterson-material ≤ 20%.
  • Apply opinion-vs-empirical boundary rule to every first-person claim.
  • Run reviewer-override layer after raw /ai-fallback output.
  • Produce reconciliation table with Fact Checker by claim.

M (Measure)

  • Deliver blog-review-{slug}-sources.md:
  • Reference list in AIA-compatible format
  • Per-claim coverage index
  • Reconciliation table vs blog-review-{slug}-facts.md
  • ## Opinion vs Empirical Check
  • URL verification timestamps
  • Pre-2018 flags
  • Single-source ≤ 40%, Waterson ≤ 20%
  • Raw-layer and reviewer-override flags layered separately
  • Chain depth ≥ 3 on /ai-fallback calls.
  • Wrapper-call verification recorded.
  • 5% unverifiable budget alignment recorded and escalated if exceeded.

Anti-patterns

  • NOT: rank academic paper above court document on factual determinations — INSTEAD: court docs and primary records outrank academic summaries on fact-pattern questions.
  • NOT: omit source dates, making temporal recency invisible — INSTEAD: every source carries publication date; pre-2018 current-requirement citations carry a version note.
  • NOT: treat all first-person narrative as opinion-exempt — INSTEAD: first-person plus any empirical specificity signal = empirical-unverifiable.
  • NOT: treat raw model output as final — INSTEAD: reviewer-override layer applies priority-violation, pre-2018, and reference-list-mismatch checks independently.
  • NOT: let [source needed] placeholders ship without escalation — INSTEAD: escalate to Commander on first sighting.

O Alignment

The AEO outcome requires LLM engines to trust the article's citations enough to cite watersonusa.ai back. An unreachable URL or an opinion-dressed-as-data claim tells the crawler this is untrustworthy content.

🧭 SEO/AEO Engineer Gemini

Full G / S / M / Anti-patterns

S (Strategy)

  • Reuse existing blog HTML template.
  • Add Article schema JSON-LD.
  • Add FAQPage schema JSON-LD with 5–8 Q&A pairs.
  • Internal link strategy: related blog, solutions, AIA pages.
  • Seed hreflang triple before Wave 5.
  • Validate schema via /ai-fallback Gemini Flash.
  • Run keyword cluster audit against queue keywords.

M (Measure)

  • Deliver blog-seo-{slug}.md and inject finalized HTML:
  • Article JSON-LD block
  • FAQPage JSON-LD block
  • OG tags
  • Twitter Card tags
  • Canonical link
  • hreflang triple
  • ≥ 5 internal links
  • ≥ 5 FAQ pairs
  • Schema validation log recorded.
  • Keyword cluster check passes.
  • Internal link targets exist.

Anti-patterns

  • NOT: write generic FAQ questions that no practitioner would type — INSTEAD: mirror actual search-intent queries from the queue keywords.
  • NOT: stuff keywords to hit a count — INSTEAD: natural cluster coverage only.
  • NOT: link to pages that don't exist or are unrelated — INSTEAD: every internal link is topical and reachable.
  • NOT: skip JSON-LD validation because it looks right — INSTEAD: validate via /ai-fallback Gemini Flash.
  • NOT: omit hreflang because the Chinese or web versions are not produced yet — INSTEAD: seed all 3 hreflang tags at the Engineer stage.

O Alignment

SEO outcome is directly engineered here. AEO outcome lives here too: FAQPage JSON-LD is the single highest-leverage anchor for answer-engine citation.

🎯 Audience Persona Reviewer Claude Gemini Codex

Full G / S / M / Anti-patterns

S (Strategy)

  • Three canonical personas always run, even when Audience Shape Decision = universal:
  • Architect persona: reads as a specifier/project architect concerned with code precision, submittal usefulness, and specification workflow.
  • Owner persona: reads as a facility owner / facility manager concerned with lifecycle cost, risk, operations, and replacement consequences.
  • Installer persona: reads as a contractor / installer concerned with install practicality, sequencing, field constraints, and product-to-application fit.
  • Cold-read rule: Audience Persona Reviewer must not read Fact Checker, Source Reviewer, SEO/AEO Engineer, or Quality Auditor reports before producing its own report.
  • Six decision questions:

In the first 200 words, did I get the answer I came for?

Does this sound like it understands my day-to-day workflow?

Is any section obviously written for a different audience than me?

Did any paragraph feel like generic vendor/trade-content filler?

If I bookmarked this, what exact section would I return to later?

What is the strongest reason I would stop trusting this article?

  • Reviewer-override layer: raw Gemini output is not the final verdict. Audience Persona Reviewer must independently classify each flagged issue as:
  • voice-drift
  • workflow-mismatch
  • wrong-reader-assumption
  • generic-filler
  • cold-open-failure
  • Universal-vs-split check: if two or more personas say "this article is clearly for someone else," reviewer must explicitly advise Commander whether the current universal/split-3 shape was wrong.
  • Evidence rule: every negative flag must quote the exact paragraph or heading that caused it. General impressions without paragraph evidence do not count.

M (Measure)

  • Deliver blog-review-{slug}-persona.md containing:
  • Header with audience_shape_under_review, review_mode: cold-read, answered_model, timestamp
  • ## Architect Persona
  • ## Owner Persona
  • ## Installer Persona
  • Each persona section answers all 6 decision questions
  • Each negative flag cites exact paragraph references
  • ## Cross-Persona Agreement Table with issue_id / class / architect / owner / installer / agreement / recommended_action
  • ## Shape Challenge stating whether the original Audience Shape Decision still looks correct
  • ## Commander Recommendation with accept / accept-with-revisions / revise-shape
  • Gemini 2.5 Pro output preservation: the raw external-model response must be attached or embedded in the report, clearly separated from reviewer-override notes.
  • Coverage floor: all 3 personas must produce non-empty answers to all 6 decision questions.
  • Disagreement surface rule: if one persona passes and another fails, the disagreement must be explicitly surfaced, not averaged away.
  • Cold-read integrity: report must state it did not consume upstream review artifacts before reading the draft.

Anti-patterns

  • NOT: read upstream review reports before doing the persona pass — INSTEAD: read the draft cold so the external-reader signal is genuinely independent.
  • NOT: collapse architect, owner, and installer into one blended reaction — INSTEAD: produce 3 separate persona reads and then reconcile them explicitly.
  • NOT: act like an internal technical reviewer — INSTEAD: judge the article from day-to-day workflow realism and immediate trust, not from internal production criteria.
  • NOT: flag generic voice drift without paragraph evidence — INSTEAD: quote the exact paragraph or heading that triggered the cold-read failure.
  • NOT: silently accept a universal article when two personas clearly say the article is for someone else — INSTEAD: explicitly challenge the Audience Shape Decision.

O Alignment

O fails if the article is technically clean but emotionally and professionally misaddressed. The audience cold-read is the only direct check that the right practitioner recognizes themselves in the prose.

🔍 Quality Auditor Claude

Full G / S / M / Anti-patterns

S (Strategy)

  • Reverse-index check: audit starts from the actual article draft and Wave 4 HTML, not from the review artifacts. For each testable claim in the draft, Quality Auditor checks whether that claim appears in:
  • blog-review-{slug}-facts.md
  • blog-review-{slug}-sources.md
  • if voice-related, blog-review-{slug}-persona.md

Claims present in the article but absent from review tables are reverse-index-miss.

  • Testable claim definition: a sentence or bullet is testable if it contains any of:
  • a number, percentage, dollar amount, or measured force/load
  • a code section, standard number, or named regulation
  • a named case, incident, jurisdiction, date, or year
  • a comparative claim (higher, lower, more likely, faster, safer)
  • a causal claim (leads to, causes, reduces, prevents)
  • an operational instruction that implies factual correctness
  • a first-person claim with empirical specificity signals
  • S-evidence gate: for every upstream deliverable, QA asks: did the concrete resources promised in S actually appear in the deliverable? Examples:
  • Research Deepener promised WebSearch and wrapper logs
  • Fact Checker promised first-party URLs per verified row
  • Source Reviewer promised per-claim coverage index
  • Audience Persona Reviewer promised 3 cold-read persona sections
  • SEO/AEO Engineer promised validated JSON-LD and link reachability
  • Base-layer integrity audit: QA confirms the draft remains augmentable and that no human-layer slot was pre-filled or surrounded by disguised sales copy.
  • Scope-creep anti-pattern control: QA does not fix content, rewrite paragraphs, add evidence, or make strategic editorial choices. It classifies failures and routes them back to the responsible agent or Commander.
  • Failure classification:
  • class-1 structural handoff fail: missing artifact, missing required table, missing execution log, malformed slot, absent persona section
  • class-2 coverage fail: claim present in article but absent from review index, missing URL, missing question answer, incomplete FAQ/schema sync
  • class-3 scope-creep or role-boundary fail: agent did unassigned work, rewrote another agent's scope, or silently changed audience shape

M (Measure)

  • Deliver blog-audit-{slug}-wave4.md containing:
  • ## Testable Claim Inventory
  • ## Reverse-Index Table with claim_id / draft_location / fact_checker / source_reviewer / persona_reviewer / status
  • ## S-Evidence Audit by agent
  • ## Base-Layer Integrity Check
  • ## Classified Failures
  • ## Commander Escalation
  • final verdict PASS / PASS-WITH-NOTES / BLOCK
  • Reverse-index completion: 100% of testable claims in the article must appear in the Reverse-Index Table.
  • Audit of promised resources: if an agent promised a concrete resource in S and it is absent from the artifact, QA must mark FAIL even if the article looks plausible.
  • Base-layer slot audit: QA must confirm the article has ≥ 3 human-layer slots and that none are pre-filled.
  • Perspective/evidence separation: QA must distinguish "reviewer opinion about quality" from "objective missing evidence."
  • No silent pass on partial coverage: aggregate statements like "most claims checked" are insufficient; the claim inventory must be explicit.

Anti-patterns

  • NOT: audit from the review tables forward and assume the article is fully covered — INSTEAD: reverse-index from the actual draft and HTML back into the review artifacts.
  • NOT: let an agent claim it used a resource or model without visible evidence in the deliverable — INSTEAD: S-promised resources must be observable in the artifact or execution log.
  • NOT: rewrite content or add missing evidence yourself — INSTEAD: classify the failure and route it back; QA is not a shadow writer or shadow fact-checker.
  • NOT: treat vague aggregate statements like "most claims reviewed" as acceptable — INSTEAD: require explicit claim-by-claim inventory.
  • NOT: ignore scope creep because the output looks better — INSTEAD: flag any role-boundary violation that hides ownership or auditability.

O Alignment

Quality Auditor does not create reader value directly. It protects the fleet from shipping false confidence. Without it, the fleet can appear rigorous while silently skipping claim coverage or eroding the base-layer contract.

🌏 Bilingual Publisher Gemini

Full G / S / M / Anti-patterns

S (Strategy)

  • English variant: apply /publish-article template directly. Path: door-site/blog/{slug}/index.html.
  • Chinese variant:
  • <html lang="zh-Hant">
  • Brand names not translated
  • Standard codes not translated
  • Model numbers not translated
  • Voice must sound natural to a Taiwanese door-hardware professional
  • Path: door-site/blog/zh/{slug}/index.html
  • Web/AEO variant: enhanced schema + Q&A-first layout for answer-engine extraction. Path: door-site/blog/web/{slug}/index.html.
  • hreflang triple cross-references: every variant links to the other two.
  • Sitemap + llms updates: update door-site/sitemap.xml, llms.txt, llms-full.txt, and blog/index.html.
  • Chinese natural-voice QA via Gemini Flash:
  • Prompt asks whether the voice feels natural for a Taiwanese door-hardware professional
  • Score must be ≥ 4 or revise
  • Taiwan-specific second pass via Gemini 2.5 Pro is mandatory:
  • Prompt asks the model to act as a Taiwan copy editor reviewing for mainland lexical drift, machine-translation smell, wrong professional register, and unnatural collocations
  • Output must include PASS/FAIL, flagged terms, and preferred Taiwan replacements
  • Mainland vocabulary blocklist: the following terms must never appear in zh-Hant output; preferred replacements shown in parentheses:
  • 信息 (資訊)
  • 軟件 (軟體)
  • 視頻 (影片)
  • 支持 (支援)
  • 質量 (品質)
  • 硬件 (硬體)
  • 芯片 (晶片)
  • 用戶 (使用者 or 客戶, context-dependent)
  • 運營 (營運)
  • 渠道 (通路)
  • 適配 (相容 or 適用)
  • 賬號 (帳號)
  • 代碼 (程式碼 or 代號, context-dependent)
  • 數據 (資料)
  • 默認 (預設)
  • 配置 (設定)
  • 調用 (呼叫)
  • 接口 (介面)
  • 模塊 (模組)
  • 文檔 (文件)
  • 兼容 (相容)
  • 線程 (執行緒)
  • 緩存 (快取)
  • 日誌 (紀錄)
  • 異步 (非同步)
  • 登錄 (登入)
  • 註冊 (註冊帳號 or 建立帳號, context-dependent)
  • Automated base-layer enforcement:
  • every <!-- HUMAN LAYER: ... --> comment must be followed within 3 lines by either blank content or <!-- TODO: human reviewer fills in -->
  • any human-facing prose, sales copy, or explanatory filler inside the slot window = FAIL
  • /security-check mandatory before staging commit.
  • Stage commit but DO NOT push. Do not run /upload.

M (Measure)

  • 3 HTML files exist at expected paths and each carries the hreflang triple.
  • Chinese natural-voice check score ≥ 4 from Gemini Flash; log recorded in blog-publish-{slug}.md.
  • Gemini 2.5 Pro Taiwan-specific second pass returns PASS; if FAIL, article revised and rechecked.
  • /security-check log shows PASS.
  • sitemap.xml, llms.txt, llms-full.txt, and blog/index.html updated.
  • Staged commit present with message containing [BASE LAYER — awaiting human review before push].
  • No git push executed.
  • Automated base-layer grep rule recorded in publish log:
  • grep -nA3 'HUMAN LAYER:' door-site/blog/{slug}/index.html
  • grep -nA3 'HUMAN LAYER:' door-site/blog/zh/{slug}/index.html
  • grep -nA3 'HUMAN LAYER:' door-site/blog/web/{slug}/index.html
  • PASS only if each slot window contains only blank lines and/or <!-- TODO: human reviewer fills in -->
  • Any pre-filled slot content = FAIL
  • Mainland vocabulary blocklist grep recorded in publish log:
  • grep -En '信息|軟件|視頻|支持|質量|硬件|芯片|用戶|運營|渠道|適配|賬號|代碼|數據|默認|配置|調用|接口|模塊|文檔|兼容|線程|緩存|日誌|異步|登錄' door-site/blog/zh/{slug}/index.html
  • required result: 0 hits
  • Wrapper-call verification recorded: grep -E '^(echo|gemini|codex)' blog-publish-{slug}.md returns 0 hits.
  • Queue entry state transitioned to ready_for_human_review with Commander signature.
  • content-plan.md Published Articles section updated after publishing with: article title, URL, status (Published), date, type, languages (EN/ZH/Web), source. Missing this update = publish incomplete; Commander must verify it in gate review.
  • In addition to content-plan.md, also update admin/content-plan/index.html JavaScript data array with the same article entry (id, priority, title, titleEn, url, whyZh, whyEn, articleZh, articleEn, articleScore, questions). The admin UI reads from this JS array, not from content-plan.md — both must be in sync.

Anti-patterns

  • NOT: run /upload or git push after staging — INSTEAD: stage and stop; human review must happen first.
  • NOT: translate brand names, standard codes, or model numbers into Chinese — INSTEAD: keep them verbatim.
  • NOT: produce machine-translation-feel Chinese — INSTEAD: natural Taiwanese professional voice, Gemini Flash ≥ 4 and Gemini Pro Taiwan-pass required.
  • NOT: allow mainland-vocabulary drift in zh-Hant output — INSTEAD: enforce the blocklist and Taiwan-specific second-pass review.
  • NOT: leave human-layer slots pre-filled with prose or sales copy — INSTEAD: slots remain empty or TODO-marked until human review.
  • NOT: consider publish complete without updating BOTH content-plan.md AND admin/content-plan/index.html JS data — INSTEAD: both files are sources of truth; content-plan.md for markdown consumers, admin JS for the web UI.

O Alignment

Chinese readers are real practitioners whose SEO lift also compounds. The web variant is the answer-engine anchor. And the do-not-push discipline operationalizes the base-layer principle.

Purpose (why this fleet exists)

HSW course production is the *means*. The deep research accumulated during course production is the *fuel*. This fleet converts that fuel — already flowing into .content-scout-queue.md via Candidate Collector (HSW-002 v5.1 Agent #19) — into published blog articles on watersonusa.ai. The ultimate goal is compounding SEO + AEO lift: as more HSW courses are built, more high-quality research flows into the queue, and more base-layer articles land on the site. Each article is designed to be both searchable by Google (SEO) and citable by LLM answer engines (AEO: ChatGPT / Perplexity / Gemini).

Critical design principle — base layer only. This fleet produces the structurally augmentable base of each article, not the final sealed product. Human reviewers (Waterson sales staff, subject-matter experts) append additional layers after the fleet's output: personal thinking process, professional sales responses, field-experience anecdotes. The fleet's output schema must leave designated slots for those human layers. An article that is "perfect" after the fleet finishes has actually failed the base-layer constraint — it leaves no room for the human hand-off.

---

v2 delta from v1

v2 exists because all 6 tracked weaknesses in v1 were real and operationally important. The fleet is now specified as 9 agents, not 7, with two new Wave 4 reviewers and several new hard gates.

Audience Persona Reviewer added as Agent #8 in Wave 4. Reuses the HSW-002 Project Architect Advisor pattern, but adapted for blog articles and expanded to three canonical audiences: architect, owner, installer.

Quality Auditor added as Agent #9 in Wave 4. Reuses the v5.1 audit pattern, adds reverse-index claim coverage checking, explicit testable-claim definition, and scope-creep anti-pattern control.

Commander's Audience Shape Decision now requires a Gemini Flash second opinion. Commander must call /ai-collab --task verify, log agreement or disagreement, and document any override rationale.

Layer 2.5 dry-run is now mandatory in Pre-Production Checklist. All 9 agents must be dry-run before the first real dispatch.

Base-layer enforcement is partially automated at publish stage. Bilingual Publisher must fail any draft where a HUMAN LAYER slot is pre-filled instead of left empty or marked TODO.

Bilingual Publisher now enforces Taiwan-specific language quality. A mainland-vocabulary blocklist plus Gemini 2.5 Pro second-pass review is required for zh-Hant output.

---

v2 relationship to HSW-002 v5.1

This fleet is the downstream consumer of the producer-side contract established in HSW-002 v5.1. It explicitly reuses the following v5.1 components (do not re-invent):

<table>

<tr><th>v5.1 Component</th><th>Reuse In</th></tr><tr><td>---</td><td>---</td></tr><tr><td><code>/ai-fallback</code> wrapper (<code>call_with_fallback.sh</code>)</td><td>All agents that call external LLMs — Commander verification, Research Deepener, Fact Checker, Source Reviewer, Audience Persona Reviewer, SEO/AEO Engineer, Bilingual Publisher</td></tr><tr><td>P-015 WebSearch-primary pattern for research archetype</td><td>Research Deepener (primary path); <code>/ai-fallback</code> only for verification/synthesis</td></tr><tr><td>P-019 NEW-03 forbidden phrase list (7 phrases)</td><td>Fact Checker Anti-patterns (verbatim copy)</td></tr><tr><td>Direction Seed 9-field dispatch template</td><td>Blog Commander dispatches all 8 downstream agents via this template</td></tr><tr><td>Pilot Dispatch pattern (pilot first, then fan-out)</td><td>Blog Commander runs Pilot on Research Deepener before parallelizing Wave 2 writers and Wave 4 reviewers</td></tr><tr><td>Principle 7 (embedded skill + model invocations)</td><td>All S sections carry full command format; Skill + Model Invocation Maps are central source of truth</td></tr><tr><td>Project Architect Advisor external-persona pattern</td><td>Audience Persona Reviewer (architect / owner / installer cold-read reports)</td></tr><tr><td>Quality Auditor pattern</td><td>Blog Quality Auditor in Wave 4, adapted to blog-claim coverage and base-layer enforcement</td></tr><tr><td>4 OGSM validators (<code>validate_s_to_m_coverage.py</code> etc.)</td><td>Run against this document before first production dispatch</td></tr><tr><td>G-022 scope-aware polish discipline</td><td>Fact Checker + Source Reviewer under-delivery escape clause; Quality Auditor scope-creep prohibition</td></tr><tr><td>Candidate Collector queue schema (10 fields)</td><td>Input contract (read-only for this fleet)</td></tr><tr><td>Reviewer-override pattern (raw model → reviewer&#x27;s anti-pattern pass)</td><td>Fact Checker + Source Reviewer + Audience Persona Reviewer reuse the 2-layer design</td></tr><tr><td>Brief Layering (Tier 1 ≤150 words + Tier 2 reference)</td><td>All agents define Tier 1 summary block</td></tr>

</table>

---

Skill Invocation Map

<table>

<tr><th>Agent</th><th>Wave</th><th>Skill</th><th>Trigger Condition</th><th>Command Format</th></tr><tr><td>-------</td><td>------</td><td>-------</td><td>-------------------</td><td>----------------</td></tr><tr><td>Blog Commander</td><td>Wave 0</td><td><code>/ai-collab --task verify</code></td><td>Every Audience Shape Decision before first downstream dispatch</td><td>/ai-collab --task verify --candidate-file &quot;.content-scout-queue.md&quot; --candidate-id &quot;{slug}&quot; --question &quot;Does this candidate require universal or split-3 audience shape?&quot; --proposed-shape &quot;{universal</td><td>split-3}&quot;</td></tr><tr><td>Bilingual Publisher</td><td>Wave 5</td><td><code>/security-check</code></td><td>Before every staged commit</td><td><code>/security-check</code> (read <code>~/.claude/skills/security-check/SKILL.md</code>; run workflow; any non-PASS blocks commit)</td></tr><tr><td>Bilingual Publisher</td><td>Wave 5</td><td><code>/publish-article</code> (template reference, not full workflow)</td><td>English HTML generation — copies template only, not deploy steps</td><td>Read <code>~/.claude/skills/publish-article/SKILL.md</code> §HTML Template + §CSS Variables as canonical template source; do not execute deploy steps</td></tr>

</table>

Intentionally NOT in the map: the fleet does not call /content-scout flag-candidate. It is the consumer of entries other fleets wrote.

Intentionally NOT in the map: the fleet does not call /upload. Base-layer discipline forbids push before human review.

---

Model Invocation Map

Division of labor

<table>

<tr><th>Agent</th><th>Wave</th><th>Model</th><th>Purpose</th><th>Command Format</th></tr><tr><td>-------</td><td>------</td><td>-------</td><td>---------</td><td>----------------</td></tr><tr><td>Blog Commander</td><td>all</td><td>Claude Opus + Gemini Flash second opinion</td><td>orchestration + audience-shape decision + conflict resolution</td><td>Native for orchestration; every audience-shape decision also calls <code>/ai-collab --task verify ...</code>; additional external verification uses <code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;&lt;prompt&gt;&quot; &quot;&lt;chain&gt;&quot;</code></td></tr><tr><td>Research Deepener</td><td>Wave 1</td><td>WebSearch (primary) + <code>/ai-fallback</code></td><td>expand course fragment to 800–1500 words with per-claim first-party URLs</td><td>Research/discovery: WebSearch. Verification/synthesis: <code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Verify/summarize: [X]&quot; &quot;gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.5-pro,codex&quot;</code></td></tr><tr><td>Article Writer</td><td>Wave 2</td><td>Claude Sonnet</td><td>base-layer draft</td><td>native</td></tr><tr><td>Fact Checker</td><td>Wave 3</td><td>Gemini Flash via <code>/ai-fallback</code> + WebSearch Tier 2</td><td>numeric/regulatory/monetary claim verification</td><td><code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Verify: [number] [claim]. Return VERIFIED/CORRECTED/UNVERIFIABLE + first-party URL&quot; &quot;gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.5-pro,codex&quot;</code></td></tr><tr><td>Source Reviewer</td><td>Wave 3</td><td>Codex → Gemini 2.5 Pro → Flash-Lite via <code>/ai-fallback</code></td><td>citation cross-verification; min chain depth 3</td><td><code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Review citations in [file]. Flag: missing source, pre-2018 without version note, single-source claims, priority-violation, opinion-vs-empirical signals&quot; &quot;codex,gemini-2.5-pro,gemini-2.5-flash-lite&quot;</code></td></tr><tr><td>SEO/AEO Engineer</td><td>Wave 4</td><td>Gemini Flash via <code>/ai-fallback</code></td><td>JSON-LD schema validation</td><td><code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Validate schema.org JSON-LD for Article + FAQPage: [blocks]. Return STRUCTURALLY_VALID/INVALID + error list&quot; &quot;gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.5-pro,codex&quot;</code></td></tr><tr><td>Audience Persona Reviewer</td><td>Wave 4</td><td>Gemini 2.5 Pro via <code>/ai-fallback</code></td><td>architect / owner / installer cold-read persona simulation</td><td>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Role-play [architect</td><td>owner</td><td>installer] persona. Read this blog draft cold. Answer 6 decision questions with paragraph citations.&quot; &quot;gemini-2.5-pro,gemini-2.5-flash-lite,codex&quot;</td></tr><tr><td>Quality Auditor</td><td>Wave 4</td><td>Claude Opus or Sonnet</td><td>reverse-index audit, S-evidence gate, handoff readiness</td><td>native</td></tr><tr><td>Bilingual Publisher</td><td>Wave 5</td><td>Gemini Flash + Gemini 2.5 Pro via <code>/ai-fallback</code></td><td>zh natural-voice QA + Taiwan-specific lexical/cultural pass</td><td>Flash: <code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Read this zh-Hant article. Natural voice for a Taiwanese door-hardware professional? Score 1-5 + list stiff phrasing&quot; &quot;gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.5-pro,codex&quot;</code>; Pro: <code>bash ~/.claude/skills/ai-fallback/scripts/call_with_fallback.sh &quot;Act as a Taiwan copy editor. Flag any mainland lexical drift, machine-translation smell, and non-Taiwan phrasing in this zh-Hant article. Return PASS/FAIL + fixes&quot; &quot;gemini-2.5-pro,gemini-2.5-flash-lite,codex&quot;</code></td></tr>

</table>

Principle 7 applies: any agent whose S references an external LLM must carry the full command format in its S block, and Commander copies the row into Direction Seed field 5 at dispatch.

---

Direction Seed (Commander Dispatch Template — 9 fields)

Every subagent dispatch carries all 9 fields. Missing a field = briefing failure; deliverable does not enter gate review; subagent must be re-dispatched with the fix.

Fleet ID + Role Name — e.g. BLOG-WRITER-FLEET / Audience Persona Reviewer

Target Audience Persona — one of the 3 canonical audiences from ~/.claude/skills/writing-guide/SKILL.md §2, with concrete description: years of experience, typical workflow, what they type into Google. For universal shape, all three in one briefing; for persona review, each persona gets its own sub-brief.

O (quoted verbatim) — the full O paragraph from this document's §O section

This agent's G/S/M — copy from this doc's agent section, Tier 1 version

Embedded Skill + Model Invocations — copy relevant rows from Skill Invocation Map + Model Invocation Map, with full command format, plus the mandatory knowledge query commands:

`bash

bash ~/.claude/skills/ogsm-framework/scripts/get_patterns_for_failure.sh <failure-type>

bash ~/.claude/skills/ogsm-framework/scripts/get_gotchas_for_context.sh <context-keyword>

bash ~/.claude/skills/ogsm-framework/scripts/get_skills_for_role.sh <role-name>

`

Hard Constraints — e.g. hand-off slots ≥ 3, word count 900–1400, no raw echo | gemini, mainland-vocabulary blocklist prohibited

Tone + Voice Requirements — audience-matched per writing-guide §2; peer-to-peer with target practitioner; never marketing

Deliverable Format + File Path — exact filename under docs/blog-writer-fleet/{slug}/

Anti-patterns to avoid — at least 3 items, verbatim copied from the agent's own standard list in this doc

### Direction Seed addendum for v2

### Pilot Dispatch rules

Fan-out checklist (Commander personally runs after pilot returns)

Deliverable shape matches expected structure

Audience is explicit

Knowledge query outputs present

/ai-fallback execution log present if required

Anti-patterns verbatim-copied from source standard list

If the pilot is Audience Persona Reviewer: all 3 personas answered all 6 decision questions

Pilot fail → Commander rewrites the failing briefing field, re-dispatches pilot only, retries until pass. No fan-out until pilot passes.

---

Alignment Verification Matrix

<table>

<tr><th>Agent</th><th>Primary G Output</th><th>O SEO (rank)</th><th>O AEO (cited)</th><th>O Base-Layer (augmentable)</th><th>O Risk if G Fails</th></tr><tr><td>-------</td><td>-----------------</td><td>--------------</td><td>---------------</td><td>---------------------------</td><td>-------------------</td></tr><tr><td>Blog Commander</td><td>audience shape + wave alignment</td><td>indirect</td><td>indirect</td><td>direct</td><td>whole fleet incoherent</td></tr><tr><td>Research Deepener</td><td>800–1500 words with per-claim first-party URLs</td><td>necessary</td><td>necessary</td><td>—</td><td>Writer hallucinates or thins out</td></tr><tr><td>Article Writer</td><td>base-layer draft, audience-voiced, hand-off slots</td><td>direct</td><td>indirect</td><td><strong>direct</strong></td><td>sealed article humans can&#x27;t augment</td></tr><tr><td>Fact Checker</td><td>numeric claims verified with first-party URLs or hedged</td><td>direct</td><td><strong>direct</strong></td><td>—</td><td>citations rot; AEO rejects article</td></tr><tr><td>Source Reviewer</td><td>reachable references + opinion-vs-empirical discipline</td><td>direct</td><td><strong>direct</strong></td><td>—</td><td>trust collapse; SEO + AEO both lose</td></tr><tr><td>SEO/AEO Engineer</td><td>JSON-LD + internal links + FAQ anchors</td><td><strong>direct</strong></td><td><strong>direct</strong></td><td>—</td><td>article invisible to both channels</td></tr><tr><td>Audience Persona Reviewer</td><td>cold-read voice realism across architect / owner / installer</td><td>indirect</td><td>indirect</td><td>direct</td><td>technically clean but wrong-reader article ships</td></tr><tr><td>Quality Auditor</td><td>reverse-index claim coverage + S-evidence gate</td><td>indirect</td><td>indirect</td><td><strong>direct</strong></td><td>false confidence; gaps ship unnoticed</td></tr><tr><td>Bilingual Publisher</td><td>3 variants staged, language-checked, not pushed</td><td>direct (zh + hreflang)</td><td>direct (web variant)</td><td><strong>direct</strong></td><td>push too early; language drift; slots pre-filled</td></tr>

</table>

---

Wave Gate Conditions

### Gate 0 → Wave 1 begins

### Gate 1 → Wave 2 begins

### Gate 2 → Wave 3 begins

### Gate 3 → Wave 4 begins

### Gate 4 → Wave 5 begins

### Gate 5 → ready_for_human_review

### Gate 6 → published (OUTSIDE fleet scope — human action)

Fleet has no agent at Gate 6. That is the human boundary. Moving Gate 6 inside the fleet would violate the base-layer principle.

---

Intermediate Artifact Naming Conventions

All artifacts live under docs/blog-writer-fleet/{slug}/:

<table>

<tr><th>File</th><th>Produced By</th><th>Wave</th></tr><tr><td>------</td><td>-------------</td><td>------</td></tr><tr><td><code>blog-research-{slug}.md</code></td><td>Research Deepener</td><td>1</td></tr><tr><td><code>blog-draft-{slug}.md</code> or <code>blog-draft-{slug}-{audience}.md</code></td><td>Article Writer</td><td>2</td></tr><tr><td><code>blog-review-{slug}-facts.md</code></td><td>Fact Checker</td><td>3</td></tr><tr><td><code>blog-review-{slug}-sources.md</code></td><td>Source Reviewer</td><td>3</td></tr><tr><td><code>blog-seo-{slug}.md</code></td><td>SEO/AEO Engineer</td><td>4</td></tr><tr><td><code>blog-review-{slug}-persona.md</code></td><td>Audience Persona Reviewer</td><td>4</td></tr><tr><td><code>blog-audit-{slug}-wave4.md</code></td><td>Quality Auditor</td><td>4</td></tr><tr><td><code>blog-publish-{slug}.md</code></td><td>Bilingual Publisher</td><td>5</td></tr><tr><td><code>blog-gate-review-{slug}-waveN.md</code></td><td>Blog Commander</td><td>each gate</td></tr><tr><td><code>dispatch-log-blog-{slug}.md</code></td><td>Blog Commander</td><td>continuous</td></tr>

</table>

Queue state transitions: pending → researching → drafting → reviewing → ready_for_human_review → (human) → published

---

Known Issues / To Monitor

### Issue #1 — No Audience Persona Reviewer in v1

Status in v2: RESOLVED

Implemented change: Added Audience Persona Reviewer as Agent #8 in Wave 4 using Gemini 2.5 Pro persona simulation via /ai-fallback, modeled on the HSW-002 Project Architect Advisor pattern but expanded to architect / owner / installer cold-read passes.

What to monitor now: Do the 3 persona reads produce meaningfully different flags when a draft is mis-shaped? If they collapse into generic "good article" summaries, the persona prompt needs tightening.

### Issue #2 — No cross-fleet Quality Auditor / Performance Supervisor

Status in v2: RESOLVED for blog-fleet scope

Implemented change: Added Quality Auditor as Agent #9 in Wave 4. Reused the v5.1 audit pattern, but adapted it to blog deliverables with reverse-index checking, S-evidence verification, and explicit testable-claim inventory.

What to monitor now: Does QA catch real misses without becoming a shadow reviewer who rewrites content? If QA starts absorbing other roles, tighten the scope-creep rule further.

### Issue #3 — Audience shape decision had no external validator

Status in v2: RESOLVED

Implemented change: Every Audience Shape Decision now requires /ai-collab --task verify with Gemini Flash second opinion. Agreement/disagreement and any override rationale are logged in the queue entry and dispatch log.

What to monitor now: After 10 articles, compare Commander final-shape choices against Gemini disagreement rate. If disagreement is frequent but overrides are weak, Commander prompt or decision rubric needs adjustment.

### Issue #4 — Layer 2.5 dry-run not yet performed

Status in v2: RESOLVED at spec level; execution still required before production

Implemented change: Pre-Production Checklist now makes Layer 2.5 dry-run a mandatory gate before first real dispatch, and the required dry-run count is updated from 7 agents to 9 agents.

What to monitor now: First real run should produce zero "I don't know which skill/model to call" failures. Any such failure indicates the dry-run was skipped or done loosely.

### Issue #5 — Base-layer principle had no automated enforcement

Status in v2: RESOLVED

Implemented change: Bilingual Publisher now has a publish-stage grep-based enforcement rule: every HUMAN LAYER slot must remain empty or TODO-marked within 3 lines after the comment. Pre-filled slots are a hard FAIL.

What to monitor now: Human reviewers should not need to delete slot content before appending their own layer. If they do, tighten the check from publish-stage to pre-Wave-4 audit as well.

### Issue #6 — No bilingual voice divergence detection

Status in v2: RESOLVED

Implemented change: Bilingual Publisher now runs both Gemini Flash natural-voice QA and Gemini 2.5 Pro Taiwan-specific second-pass review, plus a 20+ term mainland-vocabulary blocklist grep.

What to monitor now: If Taiwanese readers still detect unnatural phrasing that does not use blocked terms, add a phrase-level style list, not just a lexical blocklist.

### Issue #7 — Wave 4 concurrency may create review fan-in overload on split-3 batches

Status in v2: NEW

Concern: On split-3 topics, a single candidate can generate multiple draft variants plus one SEO package, one persona report, and one audit report. Commander may become a bottleneck during Gate 4 synthesis.

Possible fixes: (a) add per-audience mini gate reviews before the consolidated Gate 4; (b) template the Wave 4 cross-artifact comparison tables more aggressively; (c) batch split-3 candidates separately from universal candidates.

What to watch: If Gate 4 reviews become materially slower than Waves 1–3 combined on split-3 topics, the synthesis layer needs refactoring.

---

Deferred Improvements

### Improvement #1 — Audience Persona Reviewer agent

Status: IMPLEMENTED in v2

Notes: Added as Agent #8 in Wave 4 with Gemini 2.5 Pro persona simulation and three canonical reader personas.

### Improvement #2 — Quality Auditor

Status: IMPLEMENTED in v2

Notes: Added as Agent #9 in Wave 4. Blog fleet now has an explicit audit layer, though not a full cross-fleet Performance Supervisor.

### Improvement #3 — Candidate Collector v2 write-back

Status: DEFERRED

Scope: When Blog Writer Fleet publishes an article, append published_at, published_url, and human_reviewer back to the queue entry.

Trigger: After first 10 articles publish, coordinate with HSW-002 Candidate Collector owners.

### Improvement #4 — Cross-article compounding SEO analyzer

Status: DEFERRED

Scope: After ≥ 20 articles published, run a cross-link analysis to find under-linked articles and recommend additional internal links.

Trigger: At 20 articles.

### Improvement #5 — /aia-rewrite --bilingual reuse for zh variant

Status: DEFERRED

Scope: When /aia-rewrite --bilingual ships and is stable, evaluate whether Bilingual Publisher should delegate Chinese production to it.

Trigger: Skill exists and passes validation.

### Improvement #6 — Publish-stage blocklist to phrase-level Taiwan style checker

Status: DEFERRED

Scope: Extend current term blocklist into phrase-level and syntax-level Taiwan localization checks once enough real false negatives accumulate.

Trigger: ≥ 3 post-publish Taiwanese reader comments that were not caught by current blocklist + Gemini Pro pass.

---

Relationship to HSW-002 v5.1 and Cross-References

This document cross-references HSW-002 v5.1 at the following anchors:

If any of these references change, this document's command formats and gate logic must be re-verified.

---

Pre-Production Checklist (before first real dispatch)

### Mandatory Layer 2.5 Dry-Run Protocol

Layer 2.5 dry-run is MANDATORY before the first production dispatch. This is not advisory and not deferrable. The goal is to verify that every agent can actually execute the skill/model invocations embedded in its S block and that Commander can dispatch them without missing parameters.

Dry-run scope in v2: all 9 agents

Blog Commander

Research Deepener

Article Writer

Fact Checker

Source Reviewer

SEO/AEO Engineer

Audience Persona Reviewer

Quality Auditor

Bilingual Publisher

Dry-run protocol

### Checklist

---

End State Summary

v2 is no longer a 7-agent "write and hope" fleet. It is a 9-agent system with:

Those are the structural fixes needed to move the blog fleet from plausible draft to production-worthy OGSM spec.