dare.co.uk — daily hygiene
DARE.CO.UK · DAILY HYGIENE · 10 JUNE 2026
Site hygiene: RED ❌ — 12 ok, 2 warnings, 2 failures.
At a glance
| Check | Verdict | Summary |
|---|---|---|
| 404 audit (pages + images) | ✅ green | 0% broken pages or images — clean run across all sampled article URLs and inline image refs. |
| Sitemap validation | ✅ green | 100.0% of sampled URLs return 200. |
| JSON-LD presence | ✅ green | 100.0% of sampled URLs carry JSON-LD. |
| SEO title + og: hygiene | ✅ green | 2/696 pages have SEO-title issues (0.3%). |
| CLAUDE.md follow-up triage | ✅ green | 16 follow-up(s) audited — 0 likely done, 1 decision pending, 5 parked, 10 open. |
| Canonical site-header rollout | ✅ green | 691/691 pages canonical (100%). |
| snapshots.gf.cx R2 push | ❌ red | 13 surface(s) have a BROKEN LATEST entry — visible as a broken featured card on snapshots.gf.cx: antifragile-gf, dash-gf-cx, dash-reports, data-gf-cx, data-sourced, growth-gf-cx, happiness-gf-cx, pa-gf-cx, patterns-gf-cx, sandbox-fal, sandbox-gf-cx, status-gf-cx, status-transfer-windows. |
| snapshots.gf.cx freshness | ✅ green | Local index 0.45h old + dedup healthy + deploy line in log. Live should reflect the current state. |
| Dashboard inline thumbnails | ❌ red | Live has 0/112 thumb-pop spans (0% of local) — production lost the thumbnail payload. Likely cause: a deploy ran dare_cf_analytics.py --html WITHOUT --thumbs, or an ad-hoc deploy overwrote a healthy build with a thumbless one. |
| Dashboard Site-Health windows | ✅ green | 0/3 window(s) with anchor data render real cards. No regression. |
| Content breadth + depth profile | ✅ green | 697 pages profiled — 227 stubs / 272 brief / 180 medium / 18 long-form; 190 without body image. |
| Body image coverage | ✅ green | 62/690 pages (9.0%) no body image — recover via dare_lost_image_audit |
| NextDNS security threats | ⚠ yellow | 4 threats blocked across 6 named devices · window -24h · breakdown: 4 ai-driven threat detection |
| NextDNS block rate | ✅ green | 6.6% queries blocked — 196,492 queries · 12,889 blocked · top reason: Goodbye Ads (11,398) · 30d baseline accruing (2 of 14 data points) |
| NextDNS device coverage | ⚠ yellow | 34.6% unidentified — 67,922 of 196,480 queries from unnamed devices · 6 named · window -24h |
| Email health (DMARC/SPF/DKIM) | ✅ green | 7 green / 0 yellow / 0 red across 7 email-health checks. |
✅ 404 audit (pages + images) — GREEN
0% broken pages or images — clean run across all sampled article URLs and inline image refs.
- Detail (markdown):
dare_404_audit_2026-06-10.md - Detail (HTML):
dare_404_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
broken_pages=0,broken_imgs=0
✅ Sitemap validation — GREEN
100.0% of sampled URLs return 200.
- Detail (markdown):
dare_sitemap_validate_2026-06-10.md - Detail (HTML):
dare_sitemap_validate_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
total_urls=1181,sampled=50,ok_200=50,rate=1.0,sitemap_ok=True,robots_ok=True
✅ JSON-LD presence — GREEN
100.0% of sampled URLs carry JSON-LD.
- Detail (markdown):
dare_jsonld_presence_2026-06-10.md - Detail (HTML):
dare_jsonld_presence_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
sampled=30,valid_200=30,with_jsonld=30,coverage=1.0
✅ SEO title + og: hygiene — GREEN
2/696 pages have SEO-title issues (0.3%).
- Detail (markdown):
dare_seo_title_audit_2026-06-10.md - Detail (HTML):
dare_seo_title_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
audited=696,with_issues=2,by_issue={'og_image': 2}
✅ CLAUDE.md follow-up triage — GREEN
16 follow-up(s) audited — 0 likely done, 1 decision pending, 5 parked, 10 open.
- Detail (markdown):
dare_followup_audit_2026-06-10.md - Detail (HTML):
dare_followup_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
total=16,likely_done=0,decision_pending=1,parked=5,open=10
✅ Canonical site-header rollout — GREEN
691/691 pages canonical (100%).
- Detail (markdown):
dare_header_audit_2026-06-10.md - Metrics:
canonical=691,drift=0,no_header=0,total=691
❌ snapshots.gf.cx R2 push — RED
13 surface(s) have a BROKEN LATEST entry — visible as a broken featured card on snapshots.gf.cx: antifragile-gf, dash-gf-cx, dash-reports, data-gf-cx, data-sourced, growth-gf-cx, happiness-gf-cx, pa-gf-cx, patterns-gf-cx, sandbox-fal, sandbox-gf-cx, status-gf-cx, status-transfer-windows.
- Detail (markdown):
dare_snapshots_r2_audit_2026-06-10.md - Detail (HTML):
dare_snapshots_r2_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
surfaces=[{'slug': 'antifragile-gf', 'total_entries': 8, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['antifragile-gf_2026-06-09_0f59c41.jpg', 'antifragile-gf_2026-06-10_0f59c41.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'antifragile-gf_2026-06-10_0f59c41.jpg'}, {'slug': 'dash-gf-cx', 'total_entries': 33, 'in_window': 4, 'missing_r2': 2, 'missing_examples': ['dash-gf-cx_2026-06-09_110006.jpg', 'dash-gf-cx_2026-06-10_110005.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'dash-gf-cx_2026-06-10_110005.jpg'}, {'slug': 'dash-reports', 'total_entries': 62, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['dash-reports_2026-06-09_ab6582f.jpg', 'dash-reports_2026-06-10_ab6582f.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'dash-reports_2026-06-10_ab6582f.jpg'}, {'slug': 'data-gf-cx', 'total_entries': 24, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['data-gf-cx_2026-06-09_df04686.jpg', 'data-gf-cx_2026-06-10_df04686.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'data-gf-cx_2026-06-10_df04686.jpg'}, {'slug': 'data-sourced', 'total_entries': 22, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['data-sourced_2026-06-09_df04686.jpg', 'data-sourced_2026-06-10_df04686.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'data-sourced_2026-06-10_df04686.jpg'}, {'slug': 'growth-gf-cx', 'total_entries': 7, 'in_window': 7, 'missing_r2': 2, 'missing_examples': ['growth-gf-cx_2026-06-09_110248.jpg', 'growth-gf-cx_2026-06-10_110255.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'growth-gf-cx_2026-06-10_110255.jpg'}, {'slug': 'happiness-gf-cx', 'total_entries': 22, 'in_window': 20, 'missing_r2': 2, 'missing_examples': ['happiness-gf-cx_2026-06-09_4c2d2dd.jpg', 'happiness-gf-cx_2026-06-10_d7d45a1.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'happiness-gf-cx_2026-06-10_d7d45a1.jpg'}, {'slug': 'pa-gf-cx', 'total_entries': 17, 'in_window': 4, 'missing_r2': 2, 'missing_examples': ['pa-gf-cx_2026-06-09_110127.jpg', 'pa-gf-cx_2026-06-10_110126.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'pa-gf-cx_2026-06-10_110126.jpg'}, {'slug': 'patterns-gf-cx', 'total_entries': 35, 'in_window': 5, 'missing_r2': 2, 'missing_examples': ['patterns-gf-cx_2026-06-09_9c650b3.jpg', 'patterns-gf-cx_2026-06-10_9c650b3.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'patterns-gf-cx_2026-06-10_9c650b3.jpg'}, {'slug': 'sandbox-fal', 'total_entries': 4, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['sandbox-fal_2026-06-09_110237.jpg', 'sandbox-fal_2026-06-10_110244.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'sandbox-fal_2026-06-10_110244.jpg'}, {'slug': 'sandbox-gf-cx', 'total_entries': 4, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['sandbox-gf-cx_2026-06-09_110222.jpg', 'sandbox-gf-cx_2026-06-10_110229.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'sandbox-gf-cx_2026-06-10_110229.jpg'}, {'slug': 'status-gf-cx', 'total_entries': 235, 'in_window': 104, 'missing_r2': 4, 'missing_examples': ['status-gf-cx_2026-06-08_1a1c19f.jpg', 'status-gf-cx_2026-06-08_1a1c19f.jpg', 'status-gf-cx_2026-06-09_1a1c19f.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'status-gf-cx_2026-06-10_1a1c19f.jpg'}, {'slug': 'status-transfer-windows', 'total_entries': 19, 'in_window': 2, 'missing_r2': 2, 'missing_examples': ['status-transfer-windows_2026-06-09_1a1c19f.jpg', 'status-transfer-windows_2026-06-10_1a1c19f.jpg'], 'broken_url_count': 0, 'latest_broken': True, 'latest_filename': 'status-transfer-windows_2026-06-10_1a1c19f.jpg'}],total_missing_r2=28,total_broken_url=0,latest_broken_surfaces=['antifragile-gf', 'dash-gf-cx', 'dash-reports', 'data-gf-cx', 'data-sourced', 'growth-gf-cx', 'happiness-gf-cx', 'pa-gf-cx', 'patterns-gf-cx', 'sandbox-fal', 'sandbox-gf-cx', 'status-gf-cx', 'status-transfer-windows']
✅ snapshots.gf.cx freshness — GREEN
Local index 0.45h old + dedup healthy + deploy line in log. Live should reflect the current state.
- Detail (markdown):
dare_snapshots_freshness_audit_2026-06-10.md - Detail (HTML):
dare_snapshots_freshness_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
local={'exists': True, 'mtime': '2026-06-10T07:03:13', 'age_hours': 0.45},dupes={'surfaces': [{'name': 'dash.gf.cx', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'dash.gf.cx/reports', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'patterns.gf.cx', 'thumbs': 2, 'unique_jpgs': 1, 'max_repeats': 2}, {'name': 'data.gf.cx', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'data.gf.cx/sourced', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'pa.gf.cx', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'status.gf.cx', 'thumbs': 2, 'unique_jpgs': 1, 'max_repeats': 2}, {'name': 'status.gf.cx/transfer-windows', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'happiness.gf.cx', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}, {'name': 'antifragile.gf.cx', 'thumbs': 2, 'unique_jpgs': 1, 'max_repeats': 2}, {'name': 'sandbox.gf.cx', 'thumbs': 1, 'unique_jpgs': 1, 'max_repeats': 1}, {'name': 'sandbox.gf.cx/fal', 'thumbs': 1, 'unique_jpgs': 1, 'max_repeats': 1}, {'name': 'growth.gf.cx', 'thumbs': 2, 'unique_jpgs': 2, 'max_repeats': 1}], 'worst_dupe_run': 2, 'worst_surface': 'patterns.gf.cx'}
❌ Dashboard inline thumbnails — RED
Live has 0/112 thumb-pop spans (0% of local) — production lost the thumbnail payload. Likely cause: a deploy ran dare_cf_analytics.py --html WITHOUT --thumbs, or an ad-hoc deploy overwrote a healthy build with a thumbless one.
- Detail (markdown):
dare_dashboard_thumbs_audit_2026-06-10.md - Detail (HTML):
dare_dashboard_thumbs_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
live={'chars': 306266, 'thumb_pop_spans': 0, 'data_uris': 0, 'link_with_thumb_anchors': 181},local={'chars': 2503080, 'thumb_pop_spans': 112, 'data_uris': 112, 'link_with_thumb_anchors': 181},ratio_pct=0.0
✅ Dashboard Site-Health windows — GREEN
0/3 window(s) with anchor data render real cards. No regression.
- Detail (markdown):
dare_dashboard_windows_audit_2026-06-10.md - Detail (HTML):
dare_dashboard_windows_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
windows_checked=3,windows_regressed=0,windows=[{'window': '7d', 'anchor_iso': '2026-06-03', 'anchor_rows': 0, 'expected_has_data': False, 'rendered_real': 0, 'rendered_pending': 16, 'regression': False}, {'window': '30d', 'anchor_iso': '2026-05-11', 'anchor_rows': 0, 'expected_has_data': False, 'rendered_real': 0, 'rendered_pending': 16, 'regression': False}, {'window': '90d', 'anchor_iso': '2026-03-12', 'anchor_rows': 0, 'expected_has_data': False, 'rendered_real': 0, 'rendered_pending': 16, 'regression': False}]
✅ Content breadth + depth profile — GREEN
697 pages profiled — 227 stubs / 272 brief / 180 medium / 18 long-form; 190 without body image.
- Detail (markdown):
dare_content_breadth_audit_2026-06-10.md - Detail (HTML):
dare_content_breadth_audit_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
total=697,by_bucket={'brief': 272, 'stub': 227, 'medium': 180, 'long-form': 18},by_section={'404.html': 1, 'about': 1, 'albums': 14, 'anti-spam-policy': 1, 'architecture': 43, 'archive': 3, 'books': 11, 'brands': 7, 'cinema': 85, 'contact.html': 1, 'culture-means-thriving-teams': 2, 'daring-acts': 66, 'dmca-policy': 1, 'fields-notes-from-business-design': 3, 'fine-arts': 44, 'future-media': 32, 'index.html': 1, 'industrial-design': 24, 'methods-of-business-design': 3, 'narrative': 5, 'new-york-city': 15, 'observations': 213, 'people': 45, 'photography': 36, 'places': 14, 'privacy-policy': 1, 'psychology': 4, 'sitemap': 1, 'templates': 1, 'user-interface': 13, 'users': 1, 'visual-communications': 3, 'writing': 2},no_image=190,no_image_by_bucket={'brief': 69, 'stub': 84, 'medium': 35, 'long-form': 2}
✅ Body image coverage — GREEN
62/690 pages (9.0%) no body image — recover via dare_lost_image_audit
- Detail (markdown):
dare_body_image_coverage_2026-06-10.md - Detail (HTML):
dare_body_image_coverage_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
total=690,no_image=62,pct_no_image=8.99,by_section={'observations': 30, 'albums': 4, 'photography': 3, 'architecture': 3, 'daring-acts': 3, 'industrial-design': 2, 'cinema': 2, 'books': 2, 'user-interface': 2, 'people': 2, 'dmca-policy': 1, 'privacy-policy': 1, 'brands': 1, 'sitemap': 1, 'anti-spam-policy': 1, 'future-media': 1, 'psychology': 1, 'fine-arts': 1, 'writing': 1}
⚠ NextDNS security threats — YELLOW
4 threats blocked across 6 named devices · window -24h · breakdown: 4 ai-driven threat detection
- Detail (markdown):
dare_nextdns_security_2026-06-10.md - Detail (HTML):
dare_nextdns_security_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
security_blocks=4,named_devices=6,window=-24h
✅ NextDNS block rate — GREEN
6.6% queries blocked — 196,492 queries · 12,889 blocked · top reason: Goodbye Ads (11,398) · 30d baseline accruing (2 of 14 data points)
- Detail (markdown):
dare_nextdns_block_rate_2026-06-10.md - Detail (HTML):
dare_nextdns_block_rate_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
total_queries=196492,blocked_queries=12889,block_rate_pct=6.56,history_points=2,window=-24h
⚠ NextDNS device coverage — YELLOW
34.6% unidentified — 67,922 of 196,480 queries from unnamed devices · 6 named · window -24h
- Detail (markdown):
dare_nextdns_device_coverage_2026-06-10.md - Detail (HTML):
dare_nextdns_device_coverage_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
total_queries=196480,unidentified_queries=67922,unidentified_pct=34.57,named_devices=6,window=-24h
✅ Email health (DMARC/SPF/DKIM) — GREEN
7 green / 0 yellow / 0 red across 7 email-health checks.
- Detail (markdown):
dare_email_health_2026-06-10.md - Detail (HTML):
dare_email_health_2026-06-10.html— surfaces in the dev-reports catalog after the next sync. - Metrics:
checks=7,green=7,yellow=0,red=0,domain=dare.co.uk
What this tells us
- At least one check has failed outright. Treat this as the current top of the queue — broken hygiene compounds (one missing template → dozens of missing pages → degraded agent recommendations).
- Per-check details above name the failing surface. Errored checks (if any) need a re-run before they can be trusted; the rollup’s red-on-error is conservative.
What’s next
- Re-runnable any time:
python3 ~/bin/dare_daily_hygiene.py. - Scheduled daily 07:30 local via
~/Library/LaunchAgents/uk.co.dare.daily-hygiene.plist. - Each detail report in the catalog (sync runs every 30 min from
~/Library/LaunchAgents/uk.co.dare.devreports-sync.plist). - Add more checks: register an adapter in
CHECKSinside~/bin/dare_daily_hygiene.py. Phase 2 candidates parked inPHASE2_PARKED(same file): Broken-link crawl (outbound), Image-naming audit, Content-freshness audit.
Generated 2026-06-10 07:30:34 via dare_daily_hygiene.py.