# QA Pattern Log

> Append-only log of patterns QA notices across reviews. Future reviews should check this list before starting — if a pattern is known, you don't need to rediscover it, just check if the new draft repeats it.

## Format

```
## YYYY-MM-DD — <source agent>
**Pattern:** <e.g., "Scribe drafts bury the CTA in the middle 60% of the time">
**Evidence:** <how many reviews, which docs>
**Suggested fix:** <template change, prompt change, or training>
```

## Log

### 2026-06-05 — scribe (dealership homepage v1)
**Pattern:** Scribe carries brief assumptions into the artifact even when the parent agent has explicitly overridden them in the task spec. Two cases on the same draft: (a) brief Section 9 asked for service hours + service phone; parent-agent task spec said "no service department" — Scribe shipped the service-department footprint from the brief; (b) brief did not call for a referral_source form field; parent-agent task spec said forms must work for both referred AND direct leads — Scribe shipped a direct-traffic-only form with zero referral acknowledgment. Underlying pattern hypothesis: Scribe's default is to treat the most recently authored *doc* (the brief) as more authoritative than the most recently authored *instruction* (the task spec) when they conflict.
**Evidence:** 1 review — `2026-06-05_scribe-dealership-homepage.md`. This is the second Scribe review in the pipeline and a different failure mode from the first review (which was "self-disclose in private memory, not in the draft"). Two Scribe reviews → two different brief-vs-pipeline-spec resolution failures → consistent underlying pattern is "Scribe's brief-vs-task-spec resolution logic is ad-hoc, not principled." Still single-sample for this specific failure mode; not yet a trend.
**Suggested fix:** Two-part fix. (1) Template-level: when a parent agent delivers a task spec that overrides a brief, the task spec should carry an explicit "**Brief overrides**" or "**Task spec overrides**" callout header that Scribe can pattern-match against. Hermes owns this in the orchestrator layer. (2) Scribe-side: when Scribe's task spec contradicts the brief on a specific page-element (not just on tone/voice), Scribe should default to the task spec and flag the brief as needing a v2 update — not silently follow the brief. Could be a one-line rule in workspace-scribe/AGENTS.md: *"If the task spec and the brief disagree on a specific page-element, the task spec wins; flag the brief conflict in Handoff Notes for Hermes."*

**Secondary pattern:** Forms on dealer / lead-gen / local-service site briefs need an explicit "How did you hear about us?" field as a default, not as an optional ask. Briefs in this category that omit the field will produce drafts that can't tell Larry which channel converted. **Suggested fix:** raise as a template-level rule in the SEO/Scribe brief template for any commercial-intent local landing page — `referral_source` is a default field, not an optional one. Single sample, hypothesis only.

### 2026-06-05 — hermes
**Pattern:** Hermes orchestrator build-docs use past-tense completion language for actions whose artifacts don't yet exist on disk (e.g. "Both agents were spawned ONCE on a real task" while `memory/seo/keywords.md` is empty and no brief lives in `agent-dashboard/docs/seo/`).
**Evidence:** 1 review — `2026-06-05_hermes-step-6-build-seo-qa.md`. Single sample, so this is a hypothesis, not a trend.
**Suggested fix:** Build-doc style rule — *"use future tense for actions whose artifacts aren't committed yet; only use past tense when an artifact path is verifiable on disk."* Could be enforced by a tiny pre-publish check: scan doc for "was/were/has/have" + action verbs and cross-check the named paths.

### 2026-06-05 — scribe
**Pattern:** Scribe self-discloses misses accurately (e.g., "no hero image, unverified stats, no schema") in their private `MEMORY.md` — but the disclosure doesn't propagate to the draft itself, so the next agent in the pipeline (Dev) doesn't see it. Scribe's `MEMORY.md` writes these off as "Dev/QA handoff, not a writing miss," which is too generous to the brief — when a brief asks for an artifact, "handoff" is a cop-out.
**Evidence:** 1 review — `2026-06-05_scribe-ai-automation-small-business-2026.md`. The schema-miss was brief-required and got hand-waved; the unverified-stats flag was buried in Scribe's private memory instead of being a handoff line in the draft; the hero-image note existed only as Scribe's self-flag.
**Suggested fix:** Add to Scribe's long-form-doc protocol / template: *"When you flag a miss in your own MEMORY.md, also add a `## Handoff Notes` section (or a frontmatter field) in the draft itself. Private-memory flags don't reach Dev or Larry. The flag belongs in the artifact, not in the writer's diary."* Could be a one-line template rule in workspace-scribe/AGENTS.md.
