B1. The URL migration map is built on slugs that do not exist
B2. Two Phase 1 deliverables prescribe different destinations for the site's most important URL
B3. Conflicting redirect target for /waretreats, and the real retreats page is ignored
B4. The two Phase 1 deliverables disagree on whether to migrate URLs at all
B5. The migration is hard-gated on an issue the client profile ADDENDUM verified as a non-issue
B6. Three deliverables prescribe a 302→301 fix for a redirect that is already a 301
B7. The GBP Q&A pack publishes service commitments every other deliverable holds for sign-off
B8. Prices sourced from a stale test booking page are published as current rates
B9. Blog publish dates precede the pages they publish to
B10. Every CTA button in the five service pages points at a URL with no redirect planned
B11. The Review System prescribes self-serving review schema that Google's guidelines prohibit
B12. /waretreats is recorded as a verified live page in the IA
S1. The email-platform recommendation ignores a Mailchimp install its own Phase 1 audit found
S2. Known collision — Email System supersedes the Review System on platform and timing
S3. NAP canonical format conflicts with every other deliverable
S4. Schema phone format violates the rule the schema deliverable itself sets
S5. "Roughly 40 years across the team" is published copy resting on an unanswered question
S6. Two competing FAQPage schemas for the same /faq page
S7. Structured data broadcasts the exact entity signal the strategy exists to suppress
S8. Blog Post 04's title tag and meta description work against the disambiguation goal
S9. Service Pages 03 and 04 cite the wrong migration tranche
S10. YouTube ownership is resolved in one deliverable and still open in two others
S11. Customer-facing templates hardcode an email address that may not exist
S12. Content Calendar publishes traffic forecasts the Keyword Research forbids
S13. The GBP Q&A protocol instructs vote manipulation
S14. Secondary GBP categories disagree between two Phase 1 deliverables
S15. ZIP 98922 is canonical in one deliverable and unconfirmed in two others
S17. Site Architecture's own URL count is internally inconsistent
N1. External citations — verified clean
N2. The USBR flip-flop source is a 2008 press release, and the posts don't say so
N3. JSON-LD — all 30 blocks parse
N4. No fabricated ratings, review counts, follower counts, traffic figures or testimonials
N5. No invented street address anywhere
N6. Business name is consistent; only the YouTube handle varies in case
N7. British spellings in publish-ready American copy
N8. Blog Post 04 carries no crisis resource line
KRISTEN — commercial and policy facts (149 [CONFIRM] + 21 [KRISTEN] = ~170)
NATE — 19 items, all in Team Bios.md
AGENCY — 66 {{PLACEHOLDER}} tokens + 1 [NEEDS SOURCE]
Should-fix items closed incidentally
Still open — genuinely requires Kristen
Engagement: Local Marketing Playbook, Phases 1 & 2 (18 deliverables)
QA performed: August 27, 2026
Scope: 29 files, ~21,400 lines, ~1.5 MB. Full-corpus grep/parse sweeps plus targeted reads and live verification of external citations.
Verdict: DO NOT SHIP AS-IS. The Phase 2 content is largely sound and unusually well-disciplined about fabrication. The Phase 1 technical track is not internally consistent, and several deliverables were written against site facts that a sibling Phase 1 deliverable had already disproved. Executing the migration plan as written would 301 URLs that do not exist while leaving every real URL unredirected.
Counts: 12 Blockers · 17 Should-fix · 9 Notes · ~256 open client questions
Must be resolved before anything ships to the client or to the site.
Files: Phase 1 - Foundation/Site Architecture Review.md §2.4, §4.1 (lines 52–66, 272–283) vs Phase 1 - Foundation/SEO Site Audit.md §4 (lines 395–407, 550–564)
The Site Architecture Review's redirect table lists 11 page-level 301s. Seven source URLs are marked [CONFIRM] — i.e. guessed. The SEO Site Audit, working from an actual crawl of the same site on the same day, lists the real slugs. They do not match:
| Site Architecture Review says | SEO Site Audit crawled |
|---|---|
/casting-lessons |
/castinglessons |
/casting-camp |
/washington-casting-camp |
/private-education |
/private-fly-fishing-lessons-washington |
/mission |
/aboutthemission |
/book-and-contact |
/booknow |
/gift-certificates |
/giftcertificates |
/waretreats (retreats page) |
/educational-fly-fishing-retreats (/waretreats 404s) |
Four live URLs — /educational-fly-fishing-retreats, /private-fly-fishing-lessons-washington, /washington-casting-camp, /nate — appear nowhere in the migration map at all.
Fix: Rebuild §4.1 of Site Architecture Review.md from the SEO Site Audit's crawled inventory (lines 395–407) as the single source of truth, and delete every [CONFIRM] slug guess. Add rows for the four unmapped live URLs. Do not execute any redirect until this table is reconciled.
Files: Site Architecture Review.md §4.1 row 1 (line 275) vs SEO Site Audit.md M3 (lines 570–583)
/about-the-science → /method/about-the-science → /trout-psychology-methodEvery downstream Phase 2 deliverable (126 references) uses /method. Executing both instructions creates a redirect chain on the single highest-value page in the engagement.
Fix: Adopt /method (it is what 126 downstream references assume). Rewrite SEO Site Audit.md M3 steps 1–2 to match, or explicitly mark M3 as superseded.
/waretreats, and the real retreats page is ignoredFiles: SEO Site Audit.md C3 (lines 173–186, 932) vs Site Architecture Review.md §4.1 row 3 (line 277) vs Phase 2 - Content/Service Pages/05 - Group Retreats.md (lines 6–7, 370)
/waretreats → /educational-fly-fishing-retreats (an existing live page, title "3-Day Fly Fishing Retreats in Washington", SEO Site Audit line 405)./waretreats → a new /trips/group-retreats.The Group Retreats service page claims to "replace /waretreats" and never mentions /educational-fly-fishing-retreats, which means shipping it creates a duplicate of a page already indexed, with no redirect between them.
Fix: Decide one destination. If /trips/group-retreats is canonical, add /educational-fly-fishing-retreats → /trips/group-retreats 301 to the map and say so in 05 - Group Retreats.md §8.
Files: SEO Site Audit.md M2 (line 564) vs Site Architecture Review.md §7 (lines 512–609)
SEO Site Audit M2, on the concatenated slugs: "Do not bulk-rename these. The ranking gain is small and every rename costs a redirect and risks losing accrued signal. Apply the correct convention to new pages only."
The Site Architecture Review prescribes a 12-week, four-tranche migration that bulk-renames exactly those slugs.
Fix: The agency must take one position. Reconcile before the client reads both documents in the same folder.
Files: Site Architecture Review.md (lines 81, 521, 615), Keyword Research.md (lines 459, 492, 496, 521), Analytics Setup Guide.md (lines 59, 488, 824, 838), Schema Markup.md (line 1979) vs 00 - Client Profile.md ADDENDUM (line 150) and SEO Site Audit.md §3 (lines 763–776, 967)
The ADDENDUM and the SEO Site Audit both verify: the HTTP 429s did not reproduce — 8 unspaced Googlebot-UA requests all returned 200, response times improved across the burst, and ~30 audit requests produced zero 429s. The ADDENDUM's Revised #1 priority explicitly states "Not the 429."
Four other deliverables still call it the top blocker:
- Site Architecture §7 Phase 0.1: "This is a hard gate — do not proceed until resolved." The entire 12-week plan cannot start.
- Analytics Setup §4: "This is a higher-priority fix than anything else in this document."
- Keyword Research: "Blocker #5 should be checked before anything else in this engagement."
Fix: Demote to a Search Console crawl-stats spot-check in all four files. Remove the Phase 0 hard gate in Site Architecture Review.md line 521 and the risk-register row at line 615.
Files: Analytics Setup Guide.md (lines 56, 481, 862), Site Architecture Review.md (lines 27, 80, 291, 536), Keyword Research.md (lines 398, 491, 521) vs 00 - Client Profile.md ADDENDUM (line 149), Citation Audit Report.md (lines 34–36), SEO Site Audit.md (line 764), GBP Optimization Report.md (line 70)
Three independent verifications (direct HTTP header inspection, root and deep paths) confirm streamsidecovenco.com returns HTTP 301. Three deliverables still describe it as a 302 and schedule a fix.
Knock-on: Site Architecture Review.md line 27 states the scope as "12 URL changes (11 page-level 301s + 1 domain-level redirect-type fix)." The domain fix is a no-op, so the real scope is 11.
Fix: Delete the 302 language and the remediation tasks from all three files; correct the scope count in the Site Architecture executive summary.
File: Phase 1 - Foundation/GBP Optimization Report.md §13 (lines 741–835)
§13 supplies 20 ready-to-post Q&A answers with posting instructions ("post 3–5 per week"). Several make binding commitments that other deliverables explicitly gate:
| GBP answer | What it promises | Contradicted by |
|---|---|---|
| Q17 (line 817) neurodivergent anglers | "Tell us what helps you learn and what does not, and we will build the day around it." | FAQ Content and Schema.md D2 (line 562): draft is "for Kristen, not for publication"; D3 (line 585): "this answer must be a list of things Trout Psychology will actually do, written by Kristen. We have deliberately drafted nothing." |
| Q18 (line 821) limited mobility | An implied accessibility consultation offer | FAQ Content and Schema.md line 595: "Do not publish an accessibility statement that implies ADA compliance, clinical assessment, or an ability to accommodate needs that have not been thought through operationally." |
| Q13 (line 785) women-only programs | "If you want a women-only group retreat or school … we can build one" | FAQ Content and Schema.md line 548 [CONFIRM: does Trout Psychology currently offer women-only trips, clinics or retreats as a bookable product…] |
| Q3/Q19 (lines 761, 825) gear provided | A definitive included/not-included list | FAQ Content and Schema.md lines 189, 492 and Email Marketing System.md line 656, all [CONFIRM] |
| Q16 (line 813) weather policy | "we will work with you to reschedule" | FAQ Content and Schema.md line 250: "Kristen must state the real policy." |
| Q20 (line 829) gift certificates | Applicable across every service line | FAQ Content and Schema.md line 942 [CONFIRM] |
This is the single largest overclaiming exposure in the package, and it is the one most likely to be published first — GBP Q&A takes minutes to post and is publicly visible immediately.
Fix: Mark §13 Q3, Q13, Q16, Q17, Q18, Q19, Q20 and Q22 (pricing) as ⛔ HOLD — Kristen sign-off required, matching the FAQ deliverable's own convention. Only Q1, Q2 and the purely factual river/season answers should be cleared for posting now.
Files: GBP Optimization Report.md line 773 vs Citation Audit Report.md lines 183–184 vs Service Pages/02 - Virtual Fly Casting Lessons.md line 369
The GBP Q&A publishes "a private education day has been listed at $750 for an individual, with a split option around $350 per person" and "$250 for four weeks of unlimited video analysis."
Service Pages/02 line 369 states flatly: "The $250.00 / month price is the one confirmed price in this content set … Everything else on every other page stays price-free until the rate card is confirmed."Service Pages/02 line 175 defines as "a subscription, not a per-session fee."Fix: Strip $750/$350 from GBP Optimization Report.md line 773 and replace with a pointer to the booking page. Change "$250 for four weeks" to "$250 per month, a subscription."
Files: Phase 1 - Foundation/Content Calendar.md (lines 174–273, 1020, 1026) vs Site Architecture Review.md §7 (lines 515–600)
The Site Architecture plan builds /journal + the four category pages in Phase 1, Weeks 1–2, and moves /about-the-science → /method in Tranche D, Week 9. No calendar date is anchored to "Week 0" anywhere in the document.
/journal exists.DEPENDENCY: /method and /method/think-like-a-trout must be live before this publishes. /method does not exist until Week 9 — roughly two weeks after Post #5's publish date.Fix: Anchor Week 0 to a real calendar date in Site Architecture Review.md §7, then re-time the Content Calendar against it. Either pull /method forward out of Tranche D, or slip Post #5.
Files: all five Phase 2 - Content/Service Pages/*.md; Site Architecture Review.md §4.1
The service pages use /book (29 references) and /gift-certificates (21 references) as primary and secondary CTAs. The live slugs are /booknow and /giftcertificates. /giftcertificates appears nowhere in the redirect map, and /book is only reachable via a redirect row whose source is wrong (/book-and-contact, per B1).
Fix: Add /booknow → /book 301 and /giftcertificates → /gift-certificates 301 to §4.1, or change the service-page CTAs to the live slugs and defer the rename.
File: Phase 1 - Foundation/Review Generation System.md line 1115
"Schema markup — Review and AggregateRating on the LocalBusiness schema once you're past ~10 reviews. This is what gets the star rating into search results."
Google's structured-data policy disallows self-serving reviews for LocalBusiness and Organization; the markup is ignored at best and is a manual-action risk at worst. Schema Markup.md correctly ships no aggregateRating anywhere in its 13 blocks — so the two Phase 1 deliverables contradict each other, and only one is right.
Fix: Delete line 1115's schema recommendation and replace with a note that Google review stars come from the GBP listing, not from on-site markup.
/waretreats is recorded as a verified live page in the IAFile: Site Architecture Review.md §2.4 line 91 (| /waretreats | Group Retreats | Verified? **Yes** | Business value: Medium |)
Verified 404 per 00 - Client Profile.md ADDENDUM line 151 and SEO Site Audit.md line 173. The IA assigns medium business value and migration planning to a page that does not exist.
Fix: Change to 404 — not live and remove it from the business-value column.
Files: Phase 2 - Content/Email Marketing System.md §2 (lines 88–122, 120) vs SEO Site Audit.md (lines 672–678, 857, 952)
The Email Marketing System recommends Kit (ConvertKit), describes the list as "growing from roughly nothing," and files [CONFIRM: does an email list exist today, how large, and where does it live?]. The SEO Site Audit already answered part of that: chimpstatic.com (a Mailchimp popup) is live in the site <head>, with a Meta Pixel alongside it. Analytics Setup Guide.md line 863 also lists the platform as unknown.
An existing Mailchimp account with an accumulated list changes the recommendation materially (migration cost, list warm-up, existing subscriber consent).
Fix: Cross-reference the SEO Site Audit finding in Email Marketing System.md §2 and reframe the recommendation as "migrate from Mailchimp to Kit, or stay," with the list export as the deciding input.
Files: Email Marketing System.md lines 116, 1879 vs Review Generation System.md lines 33, 56, 148
Documented by the authors and correctly reasoned, but the Review Generation System has not been edited to reflect it: it still names "Squarespace Campaigns / email tool" and a $20/mo tool (Mailchimp, Brevo), and still states "0 to roughly 8–15 reviews in the first three weeks." The Email System changes that to Day 8–29 / four to five weeks.
Fix: Edit Review Generation System.md lines 148 and 56 in place. Superseding language in one file is not a fix when both files ship in the same folder.
File: Citation Audit Report.md lines 88–91
The Citation Audit declares the canonical format (206) 659-5501 and lists 206-659-5501 as a variant to avoid. Every other deliverable — GBP report body copy, all five service pages, the FAQ, the Social Calendar, the Email System, the Analytics guide, and the client profile itself — uses 206-659-5501. That is 60+ instances against the declared canon.
The digits are correct everywhere; only the format is inconsistent. But citation consistency is the entire point of that deliverable.
Fix: Change the Citation Audit's canonical to 206-659-5501 to match the corpus, or reformat the corpus. The Citation Audit is the lower-cost edit.
Files: Schema Markup.md line 1922 vs Service Pages/01–05 (lines 310, 289, 290, 279, 288) and SEO Site Audit.md line 88
Schema Markup.md lists "Phone as 206-659-5501 → Should be E.164: +12066595501" as a common failure mode, and uses +12066595501 in all four of its own occurrences. All five service pages and the SEO Site Audit's sample block use "+1-206-659-5501".
Fix: Normalise the six blocks to +12066595501.
Files: Service Pages/01 lines 165, 218; Service Pages/05 line 201; FAQ Content and Schema.md line 432; GBP Optimization Report.md lines 781, 907; Citation Audit Report.md line 602 vs Team Bios.md lines 253–254
Kristen has 25 years. The "~40 years" figure therefore implicitly asserts Nate has ~15. Team Bios.md carries [NATE: years fly fishing] and [NATE: years guiding / instructing] as open questions, and 00 - Client Profile.md line 33 records the 40-year figure without a [CONFIRM] flag despite being an inference.
Seven public-facing instances of a team credential nobody has verified.
Fix: Hold the "40 years" line out of all published copy until Nate answers Team Bios items. It is trivial to answer and trivial to remove.
/faq pageFiles: Schema Markup.md §8 (line 1662, 12 entities) vs FAQ Content and Schema.md (line 1119ff) and faq-schema.json (25 entities)
Both are FAQPage blocks targeting /faq. The 25-entity version is publish-ready; the 12-entity version is stub-filled ({{ANSWER — CONFIRM WITH KRISTEN}}). Neither file says which supersedes. Only one can ship.
Note also that the 12-entity block contains "Do you teach neurodivergent anglers?" — a question the FAQ deliverable puts on hold (see B7).
Fix: Mark Schema Markup.md §8 as superseded by faq-schema.json, using the same explicit language Team Bios.md line 361 uses when it supersedes Schema Markup.md §2.
Files: Schema Markup.md lines 162, 493–495; Team Bios.md lines 494–496
The Revised #1 priority in the ADDENDUM is entity disambiguation away from clinical psychology. The Organization and Person knowsAbout arrays declare, in machine-readable form:
- "Neurodiversity-informed outdoor instruction" (Organization)
- "Neurodiversity-informed instruction", "Autism spectrum education", "Mental health and the outdoors" (Person)
Two problems. First, "Mental health and the outdoors" in a knowledge-graph node for a business named Trout Psychology actively feeds the misclassification the GBP report calls "the single highest-risk field on the profile." Second, "Autism spectrum education" ships a neurodivergence claim in structured data while FAQ Content and Schema.md, Service Pages/03, Blog Post 04 and Blog Post 05 all gate that claim behind Kristen's sign-off.
Fix: Remove "Mental health and the outdoors" and "Autism spectrum education" from both knowsAbout arrays. Retain "Behavior analysis" and "Applied behavior analysis" — those are credentialed and unambiguous. Gate the neurodiversity strings on the same sign-off as the prose.
File: Blog Posts/04 - fly-fishing-and-the-nervous-system.md lines 20–21
Title tag: Fly Fishing and Mental Health: The Science | Trout Psychology
Meta description: …the honest limits of "fishing is my therapy."
The post's body handles this exceptionally well (line 95: "Trout Psychology is fly fishing instruction informed by behavior analysis. It is not therapy. It is not clinical treatment. It is not a mental-health service, and I am not your clinician."). But the title tag and meta are what Google indexes and what an AI answer engine quotes, and they pair the brand name with "Mental Health" and "therapy" with no disclaimer in range.
Fix: Retitle to something like Why a Day on the River Resets You: The Science | Trout Psychology and rewrite the meta to lead with attention restoration rather than "therapy." Keep the body exactly as written.
Files: Service Pages/03 line 5, Service Pages/04 line 5 vs Site Architecture Review.md §7 (lines 565–585)
Both headers say Tranche C. Site Architecture puts /casting-camp and /private-education in Tranche B (Weeks 6–7); Tranche C is /casting-lessons alone in Week 8, explicitly "Alone because this is the $250/mo product." Following the service pages would break the isolation that Tranche C exists to provide.
Fix: Change both to Tranche B.
Files: Video Strategy.md §0.2 (lines 30–40) vs Social Media Calendar.md lines 96, 1565 and Schema Markup.md lines 86–88
Video Strategy.md verified it properly — handle @Troutpsychology held, channel ID UCJap_s1ZkyiXBliN8Eun6Dg, display name "Kristen Bufe", created July 31 2025, zero public videos, RSS empty. It also established that the existing "Thinking like a Trout!" video belongs to an unaffiliated third party (@ricksimon277).
Social Media Calendar.md and Schema Markup.md still carry [CONFIRM channel ownership], and the Social Calendar warns "If it does not, that is a Phase 1 problem." It isn't. It's answered.
Fix: Close the [CONFIRM] in both files and cite Video Strategy.md §0.2. Fill {{YOUTUBE_CHANNEL_URL}} in Schema Markup.md with the verified channel.
Files: Email Marketing System.md lines 6, 1462, 1529, 1855; Review Generation System.md lines 297, 766, 778 vs Citation Audit Report.md line 118
kristen@troutpsychology.com is the send-from identity in the email system and appears inside customer-facing review-response copy. The Citation Audit lists creating it as an open [CHECK] item and "item 1 in §14 because it blocks the build" — the business currently runs on streamsidecovenco@gmail.com.
Fix: Flag every instance as dependent on Citation Audit §14 item 1, or template it as {{SEND_FROM_ADDRESS}} until the mailbox exists.
Files: Content Calendar.md §7 (lines 960–970) vs Keyword Research.md §1 (line 17)
Keyword Research's data-honesty statement: "These bands are estimates, not measurements… Do not put them in a client-facing forecast, a traffic model, or a revenue projection."
The Content Calendar publishes an unqualified forecast table: 150 → 600 → 1,500 → 2,500 blog organic sessions/month, 180 keywords ranking top 20, +800 email subscribers. No methodology, no estimate label, no baseline (two rows read [CONFIRM]).
Fix: Label the table DIRECTIONAL TARGETS — NOT A FORECAST and add the derivation, or cut the session and keyword rows until GSC data exists.
File: GBP Optimization Report.md line 749
"Then upvote the most important answers from a few accounts; the highest-upvoted Q&A is the one that displays by default."
Coordinating upvotes across accounts to control what displays is fake-engagement under Google's Maps user-contributed-content policy, on a profile the same document says is at elevated suspension risk (line 48, line 141).
Fix: Delete the upvote instruction. Seeding a question from a personal account and answering as owner is standard practice; the upvote ring is not.
Files: Review Generation System.md line 31 vs GBP Optimization Report.md §6.3 (lines 291–300)
Review System: "use Tour Operator and Sports School as secondaries" — two categories.
GBP report: five to seven, ranked, with Fishing camp as the #1 secondary (it covers retreats, Casting Camp, Streamer Stomp and the schools) — omitted entirely from the Review System's list.
Fix: Point Review Generation System.md line 31 at GBP Optimization Report.md §6.3 rather than restating a partial list.
Files: Citation Audit Report.md line 75 vs GBP Optimization Report.md line 76 and Schema Markup.md line 89
The Citation Audit prints ZIP: 98922 in its canonical NAP block with no caveat. The GBP report flags it [CHECK] — 98922 is the Cle Elum ZIP, but the business's actual mailing ZIP is unconfirmed. Schema Markup flags {{POSTAL_CODE}} the same way. Building citations against an unconfirmed ZIP creates exactly the NAP inconsistency the deliverable exists to prevent.
Fix: Flag it in the Citation Audit's canonical block and gate citation building on the answer.
/method/neurodiversity-informed-instruction is linked from four deliverables but scheduled nowhereFiles: Service Pages/03 lines 30, 229, 237; FAQ Content and Schema.md lines 577, 1337; Blog Posts/04 line 159; Blog Posts/05 lines 232, 320
Twenty references to a page that has no build slot in Site Architecture Review.md §7, no entry in the Content Calendar.md, and no copy anywhere in the package. All four references correctly gate on it being "live and approved," which means four deliverables ship with a dead dependency.
Fix: Either add it to the Phase 1.6 /method/* spoke build with a ⛔ HOLD status, or state plainly in each reference that it is Phase 3 scope.
File: Site Architecture Review.md line 20 vs lines 52–66 and SEO Site Audit.md lines 228, 791
Line 20: "Three different conventions across five known URLs." The nav tree immediately below lists 14. The SEO Site Audit reports the XML sitemap contains 22 URLs. The Site Architecture Review marks everything outside its five verified entries as "Verified? No — Unknown until crawled" — but a crawl had already been done, in the sibling deliverable, on the same day.
Fix: Replace §2.4 with the SEO Site Audit's crawled inventory. This is the root cause of B1.
Spot-checked all thirteen scholarly and agency citations across the six blog posts. Every one is real, correctly attributed, and says roughly what the posts claim:
| Citation | Status |
|---|---|
| Fausch, K.D. (1984), Can. J. Zool. 62:441–445, DOI 10.1139/z84-067 | ✅ Real, title and finding accurate |
| Bachman, R.A. (1984), TAFS 113(1) — foraging behavior of wild brown trout | ✅ Real, DOI string correct |
| Liao, Beal, Lauder & Triantafyllou (2003), Science 302, DOI 10.1126/science.1088295 | ✅ Real — Kármán gait, correctly described |
| Liao, J.C. (2006), J. Exp. Biol. 209:4077 — lateral line and vision | ✅ Real |
| Askey, Richards, Post & Parkinson (2006), NAJFM 26(4), DOI 10.1577/M06-035.1 | ✅ Real |
| Lovén Wallerius et al. (2020), TAFS 149(4):498 — carp hook avoidance | ✅ Real |
| Bratman et al. (2015), PNAS 112(28) | ✅ Real — 90-min walk, subgenual PFC, correctly caveated |
| White et al. (2019), Sci. Rep. 9:7730 | ✅ Real — 120 min/week, plateau 200–300, cross-sectional caveat present and correct |
| Kaplan, S. (1995), J. Env. Psych. 15(3):169–182 | ✅ Real |
| Baer, Wolf & Risley (1968), JABA 1(1):91–97 | ✅ Real |
| Zoosymposia 5 (2011), Dicosmoecus gilvipes | ✅ Real, PDF resolves 200 |
| EPA Region 10 Temperature Issue Paper 2 (EPA-910-D-01-002) | ✅ Real, resolves 200 |
| USGS gauge 12484500, Yakima at Umtanum | ✅ Real, resolves 200 |
All twelve URLs resolve; the 403s returned by Wiley, Science, PNAS, OUP, Taylor & Francis, ScienceDirect and Company of Biologists are standard publisher bot-blocks, not dead links. No fabricated citations found. This is the strongest part of the package.
Files: Blog Posts/01 line 190, Blog Posts/02 lines 45, 152
usbr.gov/newsroomold/newsrelease/detail.cfm?RecordID=24341 is real and does contain the quoted purpose statement and the cfs figures (Cle Elum to 200–250 cfs by ~Sept 15, Rimrock to ~2,000 cfs by mid-September, ~45-day operation) — but it is dated August 24, 2008. Post 02 does caution readers that "exact dates and flow targets change every single year" (line 49), which is the right instinct; it just doesn't disclose that the numbers are eighteen years old.
Fix: Add "(2008 operating year)" to the figures in Post 02 line 45 and to the source table.
Extracted and strict-parsed every <script type="application/ld+json"> block and every fenced json block across all 29 files. 30 blocks, 30 parse cleanly. faq-schema.json parses. The only regex hit for an unclosed script tag was Schema Markup.md:1910, which is prose describing the rule, not markup — a false positive. Schema Markup.md's self-reported claim of "All 13 blocks parse cleanly" is accurate.
However: 14 of the 30 blocks contain live {{PLACEHOLDER}} tokens (see the dependency register below). Schema Markup.md line 1912 warns correctly that "substituting values is exactly when JSON breaks." Nothing in the package requires a re-validation step after substitution. Fix: add a mandatory Rich Results Test gate to the launch checklist.
Searched the full corpus for aggregateRating, ratingValue, reviewCount, follower/subscriber counts, Domain Authority, traffic estimates and quoted testimonials. Zero fabrications found. The discipline here is genuinely good and worth preserving:
- Competitor Intelligence.md line 11 opens with an explicit statement that no traffic, DA, backlink or follower numbers appear because none are observable without a paid tool; the two review counts it does cite (Yelp 50, Birdeye 526) carry source URLs.
- Social Media Calendar.md line 16 refuses to publish engagement benchmarks without Insights access and labels every posting time a hypothesis.
- Social Media Calendar.md line 1476: "Writing a plausible-sounding testimonial is not an option, ever."
- Keyword Research.md §1 refuses to invent search volumes.
- Analytics Setup Guide.md line 157 labels the $1,500 LTV a placeholder and schedules its replacement.
Grepped for streetAddress, US street patterns and ZIP codes across all 29 files. No fabricated address. Schema Markup.md line 55 handles it correctly and explicitly: "Inventing one would be a fabricated business fact and would also break Google Business Profile consistency later." The only ZIP that appears is 98922 (see S15).
Trout Psychology is used consistently across 600+ instances. Trout Psychology LLC and Trout Psychology Fly Fishing appear only inside do-not-use lists in the GBP and Citation deliverables — correct usage. One case variant: @Troutpsychology (Video Strategy.md line 32) vs @troutpsychology (25 instances elsewhere). Handles are case-insensitive; harmless, but pick one for display.
FAQ Content and Schema.md (43 instances) and faq-schema.json (9) use behavioural, specialises, practises, licence, organiser. These are customer-facing and go into structured data for a Washington State business. Video Strategy.md (38) and Competitor Content Gap Analysis.md (13) are internal and matter less. Fix: Americanise the FAQ deliverable and the JSON before publish.
The disclaimer at line 95 is excellent and the FAQ at line 143 correctly directs readers to a qualified clinician. For a post that will rank on "can fly fishing help with anxiety," a single line naming 988 (US Suicide & Crisis Lifeline) costs nothing and closes the last gap. Not a legal requirement; a reasonable duty of care.
Programmatically validated every weekday/date pair across all deliverables — 30 numeric (Tue 9/17) and all long-form (Tue Sep 1, 2026) pairs. Zero mismatches. The six blog posts' slot numbers, titles, slugs and publish dates match Content Calendar.md §5 exactly. The internal consistency of the editorial calendar is good; only its relationship to the migration schedule is broken (B9).
~256 distinct open questions. Deduplicated by text; grouped by owner and by what they block.
| Marker | Instances | Distinct |
|---|---|---|
[CONFIRM: …] |
278 | 149 |
[KRISTEN: …] |
27 | 21 |
[NATE: …] |
21 | 19 |
[NEEDS SOURCE] |
4 | 1 |
{{PLACEHOLDER}} |
225 | 66 |
| Total distinct | ~256 |
[CONFIRM] + 21 [KRISTEN] = ~170)Tier 1 — blocks publication of finished copy (approx. 45 items)
- The entire rate card. Guided full day / half day / shared "split with a stranger" / walk-and-wade; private education 1-, 2- and 3-day; Casting Camp; retreats; schools; Streamer Stomp. Currently {{PRICE_FULL_DAY}}, {{PRICE_SHARED}}, {{PRICE_PRIVATE_ED}}, {{PRICE_RETREAT}}, {{PRICE_CAMP}}, {{PRICE_SCHOOL}}, {{PRICE_STOMP}}. Blocks: all 5 service pages, 7 Service schema blocks, 6 FAQ answers, GBP Q&A Q22, the entire email system's booking copy. $250/mo virtual is the only confirmed price in the package.
- Cancellation, deposit, weather and refund policy. FAQ lines 250, 264, 952; Email System lines 626, 1204; Service Pages/02 line 163, /04 line 170, /05 line 167; Schema Markup.md FAQ stub.
- What gear is provided vs. brought. FAQ 189, 492; Email System 656, 669; Service Pages/01 188, /04 178; Schema Markup.md FAQ stub; GBP Q3/Q19 (currently published as fact — see B7).
- Virtual subscription mechanics. Video submissions per month, live-session count and length, turnaround time, annotation platform, minimum commitment, cancellation terms. Service Pages/02 lines 108, 116, 175, 179, 371; FAQ 647, 661, 704; Email System 905, 911, 988.
- Casting Camp and Streamer Stomp definitions. Length, dates, group size, venue, on-water vs. grass. FAQ 766, 780; Service Pages/04 88, 349. Streamer Stomp is the brand's signature program and currently has no defined product shape anywhere in the package.
- Retreat logistics. 2027 dates, lodging and meals, non-angler partners, group-size flexibility, invoicing. Service Pages/05 87, 139, 156, 167, 175, 187.
- Which booking tool is actually in use. Gates the Kit/Zapier automation and the Picktime cleanup. Email System 103; Social Calendar 1639.
Tier 2 — professional and legal territory, agency has deliberately drafted nothing (approx. 12 items)
- The five accessibility / neurodiversity answers. FAQ D1–D5 (lines 562, 585, 603, 617); Service Pages/03 line 144; Blog 04 line 159; Blog 05 lines 232, 320. The FAQ deliverable is explicit: "Any specific accommodation named here becomes a commitment." See B7 — the GBP Q&A has already breached this hold.
- Women-only programs — offered as a bookable product, or not? FAQ 548; Service Pages/04 151, /05 136, 251.
- Legal registrant — Trout Psychology or Streamside Coven Co.? {{LEGAL_NAME}}; Client Profile line 16; GBP line 77; Keyword Research line 534. Blocks GBP verification.
- Mailing address and ZIP for GBP verification (hidden from the public profile), plus a CAN-SPAM postal address for email. GBP 76, 78; Email System 1391, 1951; {{POSTAL_CODE}}.
Tier 3 — narrative inserts, only Kristen can write (7 items)
[KRISTEN:] first-person story blocks in all six blog posts (lines 66, 47, 119, 77, 37, 98) plus the Video Strategy script inserts (436, 618, 814, 872). Each is 100–150 words. The blog posts cannot publish without them.
Tier 4 — biography and credentials (Team Bios, 6 items)
- {{UNIVERSITY_NAME}} — the B.S. institution. Team Bios.md line 69 calls it "the highest-value single missing fact in the whole engagement."
- Casting/guiding certifications — FFI CCI, guide licence, WFR, swiftwater, CPR (line 74).
- Phonetic pronunciation of "Bufe" (line 207).
- Whether anyone beyond Kristen and Nate is on the team this season (line 755).
Team Bios.mdYears fly fishing; years guiding/instructing; certifications and licences; background narrative (2–5 sentences, three separate variants at lines 235, 267, 323); hometown and current base; teaching specialism; one non-fishing fact; Instagram handle or an explicit "don't create one"; LinkedIn (optional); what he wants his channel known for; whether he's being approached for media.
Blocks: the Person schema for Nate ({{NATE_PHOTO_URL}}, {{NATE_INSTAGRAM}}, {{NATE_BIO_PAGE_URL}}), the /about/nate-tamarack page, Blog Post 06's co-byline, and — per S5 — the "~40 years across the team" claim currently live in seven pieces of public copy.
{{PLACEHOLDER}} tokens + 1 [NEEDS SOURCE]Assets to produce or collect (23 tokens): {{LOGO_URL}}/{{LOGO_WIDTH}}/{{LOGO_HEIGHT}}, {{HERO_IMAGE_URL}}, {{KRISTEN_PHOTO_URL}}, {{NATE_PHOTO_URL}}, {{METHOD_IMAGE_URL}}, {{TRIP_IMAGE_URL}}, {{VIRTUAL_IMAGE_URL}}, {{PRIVATE_ED_IMAGE_URL}}, {{RETREAT_IMAGE_URL}}, {{CAMP_IMAGE_URL}}, {{SCHOOLS_IMAGE_URL}}, {{STOMP_IMAGE_URL}}.
URLs that depend on the migration being settled (17 tokens): {{METHOD_PAGE_URL}}, {{GUIDED_TRIPS_URL}}, {{VIRTUAL_URL}}, {{PRIVATE_ED_URL}}, {{RETREAT_URL}}, {{CAMP_URL}}, {{SCHOOLS_URL}}, {{STOMP_URL}}, {{BOOKING_URL}}, {{SUBSCRIBE_URL}}, {{FAQ_PAGE_URL}}, {{ABOUT_PAGE_URL}}, {{KRISTEN_BIO_PAGE_URL}}, {{NATE_BIO_PAGE_URL}}. Every one of these is blocked by B1–B4.
Verifiable externally (6): {{FLY_FISH_JOURNAL_URL}} and {{PODCAST_EPISODE_URL}} — both already resolved in Citation Audit Report.md lines 492–493 and just need copying across. {{YOUTUBE_CHANNEL_URL}} — resolved in Video Strategy.md §0.2 (see S10). {{LATITUDE}}/{{LONGITUDE}}/{{SERVICE_RADIUS_M}} — derivable.
[NEEDS SOURCE] (1): Blog Posts/01 line 195 — conditional. Only triggers if Kristen wants a specific Yakima water-temperature figure stated as a number rather than a range; the USGS gauge is already named as the source. Correctly handled.
knowsAbout arrays, retitle Blog 04.Scope of this pass: the seven remediation items assigned against Blockers B1–B10 and B12, plus S3, S9, S12 and S17 where they were the same edit. B11 was not in scope and remains open.
Method: surgical in-place edits (python3 exact-string replacement) — no document was rewritten from scratch and no document was truncated. Line counts before → after are recorded per file below; no file lost a line, and the only file with net movement of existing content (GBP Optimization Report.md) was verified afterwards to still contain all 21 Q&A entries and every draft answer.
| # | Status | What changed |
|---|---|---|
| B1 | ✅ Fixed | Site Architecture Review.md §2.2, §2.4, §3.4 and §4.1 rebuilt from the SEO Site Audit.md crawl. All seven [CONFIRM] slug guesses deleted. Table marked "VERIFIED against crawl 2026-08-27." Four missing live URLs added (/educational-fly-fishing-retreats, /private-fly-fishing-lessons-washington, /washington-casting-camp, /nate), plus /booknow and /giftcertificates. Map is now 13 page-level 301s. A closing row lists the nine live-but-out-of-scope URLs so the map is exhaustive against the 22-URL crawl. |
| B2 | ✅ Fixed | /method wins. SEO Site Audit.md M3 rewritten — /trout-psychology-method marked superseded, redirect example and H8 step 6 changed to /method, findings table and Week-2 action plan updated. Reciprocal "reconciled source of truth" notes added at the top and bottom of both documents plus a division-of-authority table in Site Architecture Review.md §4.5. |
| B3 | ✅ Fixed (one client decision still open — see below) | Redirect source corrected to /educational-fly-fishing-retreats → /trips/group-retreats. Service Pages/05 - Group Retreats.md header and §8 rewritten: it now states it replaces the live indexed page, treats /waretreats as a broken nav link rather than a migration source, and moves from Tranche A to Tranche B because the real source has accrued signal and is not a safe pipeline test. |
| B4 | ✅ Fixed | SEO Site Audit.md M2 rewritten. "Do not bulk-rename these" replaced with "staged, tranche-based renames are approved," with Site Architecture Review.md §7 named as the authority on sequencing. The two constraints M2 legitimately contributes (small ranking gain; every rename costs a redirect) are retained as binding inputs to the tranche design. |
| B5 | ✅ Fixed | 429 demoted to the agreed wording — "Verified not to affect Googlebot (Aug 27, 2026). Confirm once via Search Console → Settings → Crawl stats; no longer a gating issue" — in six files: Site Architecture Review.md (§2.3 row 10, Phase 0.1 hard gate removed, Phase 0 gate reworded, risk-register row closed), Analytics Setup Guide.md (5 places), Keyword Research.md (4 places), Schema Markup.md, Content Calendar.md §9.3, 00 - Client Profile.md. The check is retained everywhere as a one-time spot-check; it gates nothing. |
| B6 | ✅ Fixed | All scheduled "302 → 301" work deleted. Site Architecture Review.md: §2.3 row 9 closed, §4.2 rewritten as "no action required," Phase 1.2 struck. Analytics Setup Guide.md (3 places) and Keyword Research.md (4 places) corrected. 00 - Client Profile.md line 19 corrected with a pointer to its own ADDENDUM. Scope count corrected: "12 URL changes (11 page-level + 1 domain-level)" → "13 URL changes (13 page-level 301s)", in the executive summary, the §3.4 totals line and Phase 4.4. |
| B7 | ✅ Fixed | GBP Optimization Report.md §13 restructured into §13.1 CLEARED (14 questions) and §13.2 ⛔ HOLD — requires Kristen's sign-off before posting (7 questions). A blocking warning was added at the top of §13 stating that only cleared questions may be posted, with a status table. The "post 3–5 per week" instruction now explicitly reads "from §13.1 only." Held drafts are kept verbatim (they are useful once approved) with a per-question "why held / required before posting" block. Pointer stubs mark each gap in the numbering so nothing looks lost. |
| B8 | ⚠️ Quarantined, not deleted | The $750 / $350 figures are now inside the held §13.2 Q6, which carries an explicit instruction to delete them before posting and replace with a booking-page pointer, plus the Citation Audit's test-data provenance. They were retained rather than deleted because the brief for this pass was to preserve the draft text for Kristen's review — they must not survive into a posted answer. The "$250 for four weeks" error was corrected outright to "$250 per month — a subscription, not a per-session fee" in all three live instances (cleared Q10, the §9 service description, and the §14 Google Post). |
| B9 | ✅ Fixed | "Week 0" is now defined explicitly as the week of Monday, Aug 31, 2026, in a shared anchor table published in both Site Architecture Review.md §7 and Content Calendar.md. Consequences applied: /journal is live Fri Sep 18, so Post #1 moves Sep 1 → Tue Sep 22, #2 → Sep 29, #3 → Oct 6 (now an October post), #4 → Oct 13. September carries two posts, matching Phase 1.7's "publish the first 2 posts"; October carries four; Q1 still totals 9. /method was pulled forward out of Tranche D into a new Tranche A2 (Week 6, w/c Oct 12) — it is the authority anchor and now ships before anything depends on it, so cornerstone Post #5 keeps its Oct 20 date and publishes after its dependency. An explicit interim internal-link rule was added to both documents: posts #1–#4 link the hub as /about-the-science until the 301 lands, and the Phase 4.2 link sweep rewrites them. Blog post files 01–05 updated in the header line and in datePublished inside their JSON-LD. |
| B10 | ✅ Fixed | /booknow → /book and /giftcertificates → /gift-certificates are now rows 11 and 12 of §4.1, both flagged with the CTA counts they unblock (29 and 21). /gift-certificates was removed from §4.3 "explicitly NOT changing," which had wrongly recorded it as already correct. Tranche B sequencing note added: run both in Week 7, ahead of gift season, and verify every service-page CTA resolves in one hop before Week 8. |
| B11 | ⛔ OPEN — not in scope for this pass | Review Generation System.md line 1115 still recommends Review / AggregateRating markup on LocalBusiness. This contradicts Schema Markup.md, which correctly ships none, and it is a Google structured-data policy violation with manual-action exposure. It needs one edit and no client input. Recommend fixing before ship. |
| B12 | ✅ Fixed | /waretreats is recorded in §2.4 as ⛔ 404 — not live, with no business value, and §4.1a explains it is a broken nav link to repoint, not a redirect source. |
Citation Audit Report.md §2.1 now scopes (206) 659-5501 to citation and directory submissions specifically, and adds an explicit three-format / three-context note stating that 206-659-5501 in body copy and tel: links is correct and is NOT an inconsistency, and that +12066595501 is correct in JSON-LD. It also explicitly warns against a corpus-wide find-and-replace, which would break the E.164 schema values./private-fly-fishing-lessons-washington, /washington-casting-camp) instead of the invented one, with a note to preserve the keyword/geo-modifier the old slug carried. Service Page 02 corrected to /castinglessons, Tranche C, Week 9.Content Calendar.md §7 is now headed "DIRECTIONAL TARGETS — NOT A FORECAST" with a stated derivation for the 2,500 sessions/month and 180-keywords figures (a decelerating compounding assumption, not a bottom-up volume model), an explicit instruction not to use it in any client-facing forecast or revenue projection, a per-row Status column separating the two controllable rows from the six unvalidated ones, and a replace-with-GSC-data trigger at 90 days.These are not oversights in this pass. They are decisions only the client can make, and each is now blocked visibly rather than silently answered:
FAQ Content and Schema.md D2/D3: unbounded accommodation promises ("we will build the day around it", "we can often find an approach that works") were downgraded to possible to discuss, the boat/moving-water constraint was named explicitly, and D2's required non-clinical boundary line was added. They are still held.$250/month remains the only confirmed price in the package. Until Kristen supplies real figures, §13.2 Q6 cannot post.$750/$350 provenance problem is upstream of the GBP text — the booking page still carries test services under the legacy business name (Citation Audit Report.md). Cleaning the GBP answer does not clean the page it points at./trips vs /learn. Must be decided before Tranche B (Week 7); redirecting twice costs signal.Social Media Calendar.md is now out of date and is flagged, not fixed. It was built against the old blog dates. A warning block was added at the head of its blog-carrying schedule stating the corrected dates (#1 Sep 22, #2 Sep 29, #3 Oct 6, #4 Oct 13) and instructing that blog-dependent slots shift forward three weeks for #1–#2 and one week for #3–#4, and that nothing should be scheduled from that document until the shift is applied line-by-line. Roughly 1,850 lines of dated slots; it is mechanical but it is a separate pass.GBP Optimization Report.md §13 cleared Q3 carries one required edit, flagged inline: the general "we provide the gear" statement is safe and cleared, but no itemised included/not-included list may be added to it until the gear split is confirmed. The itemised version is Q19 and is held.| Check | Result |
|---|---|
| JSON-LD parse | 29 JSON blocks strict-parsed with json.load across all 30 files — 29 pass, 0 failures. Includes faq-schema.json and the four blog-post blocks whose datePublished values were edited. |
| Truncation | Line counts compared before/after for all 30 files. No file shrank. Net +254 lines, all additive: Site Architecture +85, GBP +102 (net of a within-file move), Content Calendar +40, SEO Site Audit +14, Citation Audit +11, Group Retreats +3, Social Calendar +2. Twenty-one files unchanged in length (edits were in-line replacements). |
| Content integrity after the §13 restructure | All 21 GBP Q&A entries confirmed present by count and by ID; all seven held draft answers confirmed present verbatim (except Q17/Q18, deliberately revised as described above). |
| Contradiction sweep — old values gone | grep across the corpus confirms zero remaining instances of: the invented slugs /casting-lessons, /casting-camp, /private-education, /mission, /book-and-contact; /trout-psychology-method as a live recommendation (only as explicitly-superseded prose); any scheduled "302 → 301" task; the phrases "hard gate", "higher-priority fix than anything else", "checked before anything else"; the dates Tue Sep 1, 2026 / 2026-09-01 / Tue Sep 15, 2026; and the strings "12 URL changes" / "11 page-level". The 2,500 figure survives only inside the new NOT-A-FORECAST block with its derivation attached. |
Remediation performed August 27, 2026. Eleven of twelve blockers closed; B11 remains open and needs one edit with no client input; B8 is quarantined rather than deleted by design. Five items genuinely require Kristen and are listed above.
B1. The URL migration map is built on slugs that do not exist
B2. Two Phase 1 deliverables prescribe different destinations for the site's most important URL
B3. Conflicting redirect target for /waretreats, and the real retreats page is ignored
B4. The two Phase 1 deliverables disagree on whether to migrate URLs at all
B5. The migration is hard-gated on an issue the client profile ADDENDUM verified as a non-issue
B6. Three deliverables prescribe a 302→301 fix for a redirect that is already a 301
B7. The GBP Q&A pack publishes service commitments every other deliverable holds for sign-off
B8. Prices sourced from a stale test booking page are published as current rates
B9. Blog publish dates precede the pages they publish to
B10. Every CTA button in the five service pages points at a URL with no redirect planned
B11. The Review System prescribes self-serving review schema that Google's guidelines prohibit
B12. /waretreats is recorded as a verified live page in the IA
S1. The email-platform recommendation ignores a Mailchimp install its own Phase 1 audit found
S2. Known collision — Email System supersedes the Review System on platform and timing
S3. NAP canonical format conflicts with every other deliverable
S4. Schema phone format violates the rule the schema deliverable itself sets
S5. "Roughly 40 years across the team" is published copy resting on an unanswered question
S6. Two competing FAQPage schemas for the same /faq page
S7. Structured data broadcasts the exact entity signal the strategy exists to suppress
S8. Blog Post 04's title tag and meta description work against the disambiguation goal
S9. Service Pages 03 and 04 cite the wrong migration tranche
S10. YouTube ownership is resolved in one deliverable and still open in two others
S11. Customer-facing templates hardcode an email address that may not exist
S12. Content Calendar publishes traffic forecasts the Keyword Research forbids
S13. The GBP Q&A protocol instructs vote manipulation
S14. Secondary GBP categories disagree between two Phase 1 deliverables
S15. ZIP 98922 is canonical in one deliverable and unconfirmed in two others
S17. Site Architecture's own URL count is internally inconsistent
N1. External citations — verified clean
N2. The USBR flip-flop source is a 2008 press release, and the posts don't say so
N3. JSON-LD — all 30 blocks parse
N4. No fabricated ratings, review counts, follower counts, traffic figures or testimonials
N5. No invented street address anywhere
N6. Business name is consistent; only the YouTube handle varies in case
N7. British spellings in publish-ready American copy
N8. Blog Post 04 carries no crisis resource line
KRISTEN — commercial and policy facts (149 [CONFIRM] + 21 [KRISTEN] = ~170)
NATE — 19 items, all in Team Bios.md
AGENCY — 66 {{PLACEHOLDER}} tokens + 1 [NEEDS SOURCE]
Should-fix items closed incidentally
Still open — genuinely requires Kristen