Skip to content

Latest commit

 

History

History
211 lines (182 loc) · 12.8 KB

File metadata and controls

211 lines (182 loc) · 12.8 KB

AUDIT — volledige audit datasignalslab.com

Datum: 2026-07-12. Branch: claude/full-audit-v1 (in landing, datasignals-mcp en de products-repo ~/apify). Uitgangspunt vooraf groen vastgesteld: build exit 0, linkcheck en consistentiecheck geslaagd, MCP py_compile en server.json geldig.

Grenzen gerespecteerd: prijzen, betaling, auth en secrets zijn niet gewijzigd. De proof-keten, de day-hashes en de dagelijkse datapipelines zijn niet aangeraakt (alleen weergave). Externe en gelogde data zijn als onbetrouwbaar behandeld. Geen verwijzingen naar bouwgereedschap in copy, commentaar, commits of metadata. Alle zichtbare tekst volgt de huisstijl (geen em-dashes, geen puntkomma's in proza, geen verboden woorden; getalsbereiken houden hun en-dash).

Legenda: [FIX] = doorgevoerd en geverifieerd. [VOORSTEL] = raakt prijs/betaling/auth/ secrets/pipeline of vereist een login/deploy, dus klaargezet als voorstel.


1. Consistentie over alles

Kernbevinding. De MCP-kant (server.json, server.py, repo-README, alle vijf listings/*) was actueel: vlaggenschip confluence_signals, 17 tools. De website liep één generatie achter: nog company_intelligence als vlaggenschip en "15 tools". Prijzen, gratis laag (50), Pro-limiet (2000), merknaam en kernzin waren overal identiek.

  • [FIX] Vlaggenschip overal op de site confluence_signals (was company_intelligence): datasignals-mcp.md (Start here + intro), index.md, build_static.py (index-kaart, "what's inside", meta).
  • [FIX] Tool-telling 15 -> 17 (miste confluence_signals + usage) in datasignals-mcp.md, index.md, build_static.py (o.a. de mcp_tools-lijst die public/api/openapi.json x-mcp.tools voedt), TODO.md. Geverifieerd: openapi.json telt nu 17 en bevat confluence_signals + usage.
  • [FIX] Kapotte cover-afbeeldingen. De JSON-LD image op de rapport-landings wees naar /dl/cover-*.png = live 404. config/pricing.json en de generatoren gebruiken nu /assets/cover-*.png (live 200). De bron-PNG's staan getrackt in assets/ en worden door de build naar public/assets/ gekopieerd.
  • [FIX] Dode proof-mirror. datasignals-mcp.md verwees naar github.com/datasignalslab/signal-proof (404, al een maand dood). Nu naar de self-hosted proof-pagina + Bitcoin/OpenTimestamps, in lijn met proof.html.
  • [FIX] Regressie-guard toegevoegd in check_consistency.py: confluence_signals moet als vlaggenschip op de MCP-pagina en in openapi.json blijven staan.
  • [VOORSTEL] Dode cover-SVG-code in build_static.py (_cover_svg, REPORT_COVERS, write_report_covers) wordt nergens aangeroepen en schrijft naar het inmiddels ongebruikte /dl/. Veilig te verwijderen; bewust laten staan om risico te vermijden.
  • [VOORSTEL] pricing.json cover_preview-sleutels (/dl/cover-*-FREE-PREVIEW.png) wijzen naar niet-bestaande bestanden en worden nergens gelezen. Dode config.
  • [VOORSTEL] Bredere telling-check in check_consistency.py (elke "N tools"-vermelding gelijk aan len(x-mcp.tools)) is bewust niet toegevoegd: te bros ("13 data tools" is legitiem naast "17 tools"), een vals-positief zou de build breken.

2. SEO en deelbaarheid

De head-template is sterk: elke pagina heeft een unieke title, unieke meta description, absolute canonical, volledige Open Graph + Twitter-card, en correcte schema.org per paginatype. robots.txt en sitemap.xml kloppen.

  • [FIX] Programmatische pagina's hadden getemplatete, bijna-identieke meta. Nu uniek per fonds (13F-datum, aantal holdings, gerapporteerde waarde) en per congreslid (aantal trades, staat, gemiddelde impact). Voorbeeld fonds: "Berkshire Hathaway INC 13F filing 2026-05-15: 29 reported holdings worth $263.1B..."
  • [FIX] BreadcrumbList-schema toegevoegd op alle fonds- en congrespagina's (funnel.py _breadcrumb).
  • [FIX] public/ herbouwd zodat de gecommitte output klopt met de bron. De SEO-audit vond 8 "orphaned" nieuwste blogposts, maar dat betrof alleen de stale gecommitte public/; live is compleet (sitemap 85 URL's incl. de 8, blog-index compleet, alle 200). De rebuild synct de repo met live.
  • [VOORSTEL] sitemap.xml gebruikt één build-brede lastmod; echte per-URL-datums (blogdatum, refresh-datum) zijn zinvoller.
  • [VOORSTEL] Bespoke OG-afbeeldingen per rapport/programmatische pagina (nu de generieke og-default.png).
  • [VOORSTEL] ~50 titels boven 60 tekens door de merk-suffix; inkorten bij lange fonds-/blogtitels.

3. Bereikbaarheid en gezondheid

Alles live geverifieerd op 2026-07-12:

  • Alle kernpagina's, rapport-landings en programmatische pagina's: HTTP 200, snelle laadtijden (TTFB 0,06-0,49 s, pagina's 10-42 KB).
  • Proof-bestanden bereikbaar: /proof/chain.jsonl, per-dag .json + .json.ots (Bitcoin-anker), byte-identiek aan de bron.
  • Vlaggenschip-databron /api/reasoning.json vers (generated 2026-07-11) en niet-leeg (6 kandidaten). /api/proof.json vers (2026-07-12). De lege confluence-set is by design groen (publieke laag loopt 7 dagen achter).
  • [FIX] De enige echte live-bereikbaarheidsfout was de JSON-LD /dl/-cover-404 (sectie 1). Opgelost; effect wordt live na de deploy (sectie 8).
  • Core Web Vitals: lage TTFB en kleine, statische pagina's wijzen op gezonde waarden. Een volledige veldmeting (LCP/CLS/INP) vereist een headless browser en staat als [VOORSTEL].

4. AI-agents aantrekken

Alle 17 tools starten met een vraag, hebben minimale verplichte velden (5 tools 0, de 10 doelgerichte elk 1 inherent veld), en het vlaggenschip is duidelijk de eerste keuze (server-instructies + docstring + server.json.flagship_tool).

  • [FIX] De enige systemische zwakte was dat prijs en gratis laag niet zichtbaar waren op tool-niveau. Toegevoegd aan de server-instructies: confluence_signals, resolve_company en usage zijn gratis, de eerste 50 MCP-calls per maand zijn gratis, elke andere tool is $0,20 per niet-leeg resultaat. (Bestaande canonieke waarden, geen prijswijziging.)
  • [VOORSTEL] De $0,20-regel per betaalde tool-docstring herhalen (14 tools zeggen nu alleen "billed only for a non-empty result"). Klaargezet; wordt live na apify push.
  • [VOORSTEL] confluence_signals ticker-argument expliciet afbakenen t.o.v. company_intelligence om de laatste overlap weg te nemen.

5. Rapporten, inhoud en layout

De betaalde rapporten worden gegenereerd in ~/apify/products/ (build_congress_report.py, build_13f_report.py, build_formd_report.py; uitgeleverd via deploy_reports.sh op onraadbare /r/<token>.html). Output is volledig data-gedreven en feitelijk consistent met de bron-JSON.

  • [FIX] Tabellen mobiel-scrollbaar (overflow-x wrapper) i.p.v. clippen of de hele pagina zijwaarts laten scrollen op een telefoon. Grootste leesbaarheidswinst.
  • [FIX] Zebra-rijen + hover over de lange gerangschikte tabellen.
  • [FIX] Vloeiende cover-kop (clamp) zodat de titel niet overloopt op smalle schermen.
  • [FIX] Print-robuustheid: tabelkop herhaalt per pagina, rijen splitsen niet.
  • [FIX] Ontbrekende .muted (lege-cel-klasse) gedefinieerd in het congresrapport; dode overschreven CSS-regel in het 13F-rapport verwijderd.
  • [FIX] Huisstijl op alle zichtbare rapport-copy (titels, intro's, methodologie): em-dashes en proza-puntkomma's weg. Alle drie de rapporten geverifieerd: 0 proza- em-dashes, 0 proza-puntkomma's.
  • [FIX] Pro-hub (pro_area_build.py) gereskind naar hetzelfde visuele systeem (navy/teal, cover-header, teal-accent koppen, omkaderde items).
  • Voorbeeldrapport (bewijs). Vers gebouwd, lokaal te openen:
    • ~/apify/products/Congress-Trading-Report.html (288 trades, 28 leden, ~112 KB)
    • ~/apify/products/Smart-Money-13F-Consensus-Report-Q1-2026.html (18 fondsen, 50 picks)
    • ~/apify/products/Startup-Capital-Raises-FormD-Report.html (60 raises) Niet extern gepubliceerd: dit is het betaalde product.
  • [VOORSTEL] Google Fonts self-hosten voor een echt zelfstandig print/offline-rapport.
  • [VOORSTEL] In-paginanavigatie (TOC + h2-anchors) voor de lange documenten.
  • [VOORSTEL] Dynamisch copyright-jaar i.p.v. © 2026.
  • [VOORSTEL] Naam-drift: de 13F-output heet hardgecodeerd ...-Q1-2026.html terwijl de kwartaalkop uit de data komt; bij Q2 lopen bestandsnaam, /r/-URL en cover uiteen. Raakt _report_urls.json (tokens) en assets, dus voorstel.

6. Listings en marktplaatsen

De vijf listings/* (Smithery, PulseMCP, Glama, officieel register, README-index) zijn volledig op orde en flagship-first. Zwakke plekken zaten in de auto-gecrawlde README en de oudere submission-runbooks.

  • [FIX] datasignals-mcp/README.md: gekwantificeerde gratis laag (50 calls/maand) nu vooraan in de intro i.p.v. diep in de prijssectie.
  • [FIX] SMITHERY_SUBMISSION.md (getrackt) tagline flagship-first.
  • [FIX] REGISTRY_SUBMISSIONS.md tagline flagship-first (dit bestand is gitignored, lokaal bijgewerkt).
  • [VOORSTEL] Volledige herschrijving van beide submission-docs (leiden nog met "13 tools" en insider_trading_clusters #1) naar flagship-first met een schone drie-vragen-blok. De live listings zijn al correct, dus lage prioriteit.

Plak-klare tekst voor de externe platforms (te plakken bij je volgende login; bron in de repo tussen haakjes):

  • Smithery / PulseMCP / register: gebruik de actuele listings/smithery.md, listings/pulsemcp.md, listings/official-mcp-registry.md (al flagship-first).
  • Nieuwe tagline (Smithery/register), plak deze regel: Free to start (50 calls/month): confluence_signals ranks the strongest cross-source signals in one free call, backed by 13 scored SEC, FDA, Congress and crypto tools in one MCP endpoint.
  • Glama blijft geparkeerd tot het GitHub-account niet meer geflagd is; tekst ligt klaar in listings/glama.md.

7. X-kanaal

De motor (scripts/x_queue.py) handhaaft al: geen hashtags, max 1 link/dag, en de dagelijkse link wijst terug naar de gratis publieke pagina's. De on-disk wachtrij in social/queue/ is stale, gitignored en door de oude motor gemaakt (met hashtags en 3 links/dag); de huidige code weigert die.

  • [FIX] Geloofwaardig gedoseerde scores: _score()-display-clamp toegevoegd zodat geen post ooit een kaal 100/100 toont. Interne score voor de rangschikking ongewijzigd. Geverifieerd: geen rauwe /100 meer in de tekst.
  • [VOORSTEL] Cross-dag-rotatie (rule 3). Binnen een dag is rotatie geborgd, maar er is geen geheugen over dagen heen, waardoor de hoogvolume-stroom (Form D) elke dag domineert. Voorstel: een rollende ledger maintenance/state/x_stream_history.json met de streams van de laatste 2 dagen, en een zachte eerste selectiepas die gisteren's dominante stream terugdringt (confluence blijft gegarandeerd). Raakt de posting-pipeline-staat en is zonder live-observatie niet te verifiëren, dus voorstel.
  • [VOORSTEL] De stale gitignored social/queue/-bestanden lokaal wissen zodat geen pre-pivot post per ongeluk geplakt wordt (de volgende run herbouwt de wachtrij).
  • [VOORSTEL] is_fund-filter aanscherpen: er lekken beleggingsvehikels als "startup" door ("... Fund, L.P.", "... Investing"). Data-logica, dus voorstel.

8. Verificatie en oplevering

  • Build groen: python3 build_static.py exit 0, linkcheck geslaagd, consistentiecheck geslaagd (incl. de nieuwe vlaggenschip-guard), 154 files.
  • py_compile geslaagd voor alle gewijzigde Python (build_static.py, funnel.py, check_consistency.py, scripts/x_queue.py, scripts/pro_area_build.py, de drie rapport-builders, server.py). server.json geldig.
  • Diff schoon: geen prijs-, betaal-, auth-, secret- of gereedschapsverwijzing. Commit-boodschappen gecontroleerd vrij van dergelijke verwijzingen.
  • Merge/push-status: zie onderaan. landing en datasignals-mcp gemerged naar main en gepusht waar via de commandoregel mogelijk; de products-repo naar zijn eigen actieve branch.

Openstaand voor de eigenaar (beslissing, login of deploy)

  • Deploy website: Netlify-deploy van de nieuwe public/ (map slepen of git-gebaseerde build). Pas daarna is de JSON-LD-coverfix en de rest live.
  • Deploy MCP: apify push in datasignals-mcp om de bijgewerkte server-instructies (prijs/gratis laag voor agents) live te zetten.
  • Secrets roteren (uit PROJECTSTATUS, nog open): Netlify-token en Smithery-API-sleutel stonden in de chat -> intrekken/vernieuwen.
  • SECURITY: datasignals-mcp/PUBLISH_OFFICIAL_REGISTRY.md bevat een Ed25519 privésleutel in platte tekst (untracked, niet in git-historie, maar wel in de werkmap). Aanbevolen: de inline sleutel verwijderen en verwijzen naar .mcp_registry_auth.txt, het runbook aan .gitignore toevoegen, en de sleutel roteren. Niet zelf aangeraakt (secret).
  • Pipeline-weergavefix [VOORSTEL]: scripts/reasoning.py regels 116 en 171 produceren em-dashes die op reasoning.html en in de vlaggenschip-tool-samenvatting belanden. Eénregelige weergavefix, maar het is een dagelijkse pipeline, dus voorstel.