The one place for the signal engine's live status, architecture, change history, weekly operations, LinkedIn archive, and strategic roadmap. This document now replaces four separate artifacts — everything that was scattered across them lives here, and every future update to the signal pipeline lands in this same document from now on.
Every signal ever captured is in one master file (Market research/data/signals/) that every surface and module reads from. As of 16 July, every published week (W19–W29) renders its full analyst content with zero truncation. As of 17 July: all 99 selected signals across those 11 weeks (W24 corrected from a duplicated 20 down to 9 — see Change Log) were rewritten in analyst voice, independently re-verified quote-by-quote against fresh fetches, and trimmed for real scannability on a phone mid-scroll — then rebuilt into live HTML via build_site.py, reconciled with Codex's homepage/archive redesign and responsive marker fix, committed (8f7142d), pushed to origin/main, and confirmed live on ifeed.ie (spot-checked directly: the corrected, trimmed W29 copy is what actually renders on the real site). The one long-open item is Market research/data, the canonical data store, which has never had a GitHub remote configured — a decision, not a routine push.
Not a design doc's description — directly verified against the repos and live sites as of 23 July 2026.
The full-matrix scan (my independent sweep + Sonu’s Perplexity run, cross-verified) reconciled 25 candidates → 23 authored; 2 routed out honestly (Adelaide DSG2 excluded as recycled 2022 research; Samsung Bioepis moved to W29). The published 9 is now lens-diverse — the generic-tariff schedule (#1) and the $2bn Dassault/ArisGlobal deal (#6) lead. All surfaces rebuilt via daily_build.py and pushed live across 12 repos; the canonical data store stays local-only (no remote, by design); ClinAssure held back. The one gap: the W30 PDF re-renders on the next local build (Playwright needs a browser the cloud sandbox can’t fetch). The counts below reflect the pushed state.
6d1023a)3bf3f64); Intelligence dashboard live3a74d2c)70a8f9b)5d9853a)8293b15)bfa8d05)c8ec1f4)bfb08c3)7aab025)daily_build now commits only the feed (never git add -A); re-enabled in one_click push. Pushed live 23 Jul (a4512fa, master) — feed 225→248 + product backlog now on origin; confirm the Netlify deploy.The automated snapshot (build_ecosystem_snapshot.py) still lists connect/signals-feed.json as "file not found." Direct inspection today shows the real file at iFeed Home/ifeed-connect/public/data/signals-feed.json exists, is git-tracked, has 793 records, and the repo is clean — the checker is almost certainly looking at the wrong relative path. The data itself is fine; the checker script has a small bug. Not fixed yet since it's outside anything explicitly asked for — flagging it here so it doesn't get mistaken for a real data gap.
This replaces four separate artifacts. Here's what to expect from each tab, and how it stays current.
| Tab | What's there | Refresh cadence |
|---|---|---|
| Overview | This page — KPIs, live health, anything currently flagged | Every time something material changes |
| Architecture | The full pipeline, every repo/module a scan touches, signal counts by week and module | On request, or after a structural change |
| Change Log | Dated, categorized history of every fix, feature, content update, and decision | Every work session adds an entry — never overwritten |
| Weekly Ops | Volume, source mix, domain mix, day-by-day tracking | Each scan/build cycle |
| LinkedIn Archive | Verbatim text of all published posts + the current draft | Each week's post cycle |
| Strategic Roadmap | Competitive positioning, ranked next moves, format/cadence analysis | On request — this one is judgment, not live data |
The at-a-glance scan tracker — every scan across all platforms lands here, newest first, with before→after counts and the time of each run (Dublin local) so same-day scans stay distinct. The fastest way to see what the last run changed without reading the Change Log prose: read the tiles for “what just happened”, the table for the full history.
One row per scan/run, newest first. Δ = signals added. Pool = the current week’s signal count; Corpus = all weeks + foundational. Both shown as before→after.
| Scan (date · time · type) | Platforms updated | W30 pool | Δ | Corpus | What changed | Push |
|---|---|---|---|---|---|---|
| 23 Jul · 12:26 · W30 full-matrix scan | 3 platforms + 6 modules + Connect + vault | 8 → 12 / 9 | +15 | 793 → 797 | Full-matrix scan (independent sweep + Perplexity, cross-verified): 25 candidates → 23 authored (12 Core / 9 selected + 11 Radar); Adelaide DSG2 excluded (recycled 2022), Samsung Bioepis→W29. Lens-aware 9-selection — tariff #1, $2bn Dassault/ArisGlobal #6. select_signals + daily_build updated; vault docs 19–20 added. |
pushed |
| 23 Jul · 09:53 · Thu daily scan | 3 platforms + 6 modules + Connect | 6 → 8 | +2 | 791 → 793 | Added FDA CMC-readiness strategy for accelerated-development products (QMS; FR 2026-14898) + FDA TEMPO digital-health pilot, Dexcom first participant (Reg; edge-of-scope, flagged). Domain balance → 3 Reg / 3 QMS / 1 CT / 1 BE. | pushed |
| 22 Jul · 20:59 · Wed mid-week detailed scan | 3 platforms + 6 modules + Connect | 4 → 6 | +2 | 789 → 791 | Added FDA CGMP data-integrity warning-letter batch (QMS) + Alembic BE informed-consent citation (BE). Domain balance → 2 Reg / 2 QMS / 1 CT / 1 BE. | pushed |
| 21 Jul · 16:13 · fresh scan | — (no data change) | 4 → 4 | +0 | 789 → 789 | Verified-empty: comprehensive sweep found nothing new in-window. Logged only. | n/a |
| 21 Jul · 11:16 · post-review correction | 3 platforms + modules | 4 → 4 | +0 | 789 → 789 | Editorial: de-templated 3 verdicts + primary quotes; PCAC reframed as scheduled, redated, count 7→14. No count change. | pushed |
| 21 Jul · 07:38 · daily scan + resync | 3 platforms + modules + Connect | 1 → 4 | +3 | 786 → 789 | Added FDA IND-pilot extension (CT), MHRA Xaggitin XL Class-4 defect (QMS), FDA PCAC 503A peptides (Reg). Artifact re-synced 786→789. | pushed |
| 20 Jul · 23:57 · W30 first scan | 3 platforms + modules + Connect | 0 → 1 | +1 | 785 → 786 | First W30 capture: CMS Medicare “maximum fair price” effectuation draft guidance (Reg). W30 registered across the ecosystem. | pushed |
Every scan appends one row here (newest first, stamped with its date and Dublin-local time so multiple runs in a day stay distinct) and refreshes the five tiles above — it is now part of the standard update routine (Architecture §6 and TRACEABILITY-MAP.md). The tiles answer “what just happened”; the table holds the full before→after history across the week.
The Signal Management System OS — the living, AI-agnostic knowledge base in the vault that lets any AI (Claude, Codex, or another) understand, operate, and fully recreate this engine without compromising quality or governance. This tab mirrors its status here, so the artifact shows not just what changed in the signals, but what changed in the operating system itself. Both update together on every change.
552e11c — zero unpushed anywhereiFeed-AI-OS-Vault-v2/06 AI OS/Signal Management System OS/Open 00 Signal OS — START HERE in Obsidian; any AI reads that first and is oriented in 60 seconds. Read order below.
| # | File | What it holds |
|---|---|---|
| 00 | Signal OS — START HERE | master index + bootstrap + the prime directive |
| 01 | What This System Is | purpose, product, north star |
| 02 | Architecture & Data Flow | the full chain, brain → surfaces, 3 registration layers |
| 03 | Data Model & Schema | the signal object + the full-pool-plus-9 convention |
| 04 | The Pipeline & Scripts | every script: inputs, outputs, gotchas, exact commands |
| 05 | Workflow — Daily Scan | the Mon–Sat runbook, end to end |
| 06 | Workflow — Weekly Lock & Roll | the safe lock + registration + roll |
| 07 | Workflow — Authoring Standard | analyst voice, de-templating, no thin signals |
| 08 | Workflow — Ecosystem Update & Fan-out | rebuild every surface + verify live |
| 09 | Workflow — Live Artifact & Scan Ledger | this artifact: update flow, count-sync, ledger, + this Vault OS tab |
| 10 | Surfaces & Infrastructure | every repo, site, path |
| 11 | Git, Bridge & Deploy | FUSE bridge, commit-not-push recipe, push handoff |
| 12 | Governance & Guardrails | the non-negotiables |
| 13 | Traceability & Dependencies | change → every affected area |
| 14 | Automation & Scheduling | scheduled tasks, local vs cloud execution |
| 15 | Current State | the live snapshot (week, pool, counts, open items) |
| 16 | Recreate From Scratch | the zero-to-running rebuild checklist |
| 17 | Maintain This OS | the self-maintenance protocol (what-changed → update-which-page) |
| 18 | Glossary & Index | terms, domains, acronyms, file map |
One row per OS/vault change, stamped with date + Dublin-local time. This is the OS-side companion to the Scan Ledger: the Scan Ledger tracks the signals; this tracks the operating system.
| Date · time | Change | Vault commit | Push |
|---|---|---|---|
| 22 Jul · 23:05 | Post-push sync + audit corrections. After the founder’s pushes (dashboard live), synced OS 15/17 and corrected this artifact end-to-end per the audit: W29 70 (was 72), totals 791/700, stale dates + “push pending” badges cleared, cockpit cell + stamp refreshed. | 552e11c | pushed |
| 22 Jul · 22:35 | Signal Intelligence dashboard built into the cockpit (intelligence.html, cockpit commit c4c94b7): full-corpus analytics over all 700 signals — day/week/month/global scope, domain/type/regulator/lens filters, CVD-validated palette, auto-insight engine, explorer + CSV export, data-quality panel. Computes client-side from the cockpit’s own week files, so every scan updates it automatically. Verified by independent analyst (18/18 displayed numbers exact) + reviewer agents; all confirmed findings fixed. OS pages 10/15/17 + TRACEABILITY-MAP.md #15 updated (vault cacc187, engine 0dd7029). Now live on the cockpit. |
cacc187 | pushed |
| 22 Jul · 21:51 | OS created — full 19-file Signal Management System OS authored in 06 AI OS/Signal Management System OS/ (00–18), grounded in the live repo + vault; wired into the AI OS index, cockpit note, Weekly Signal Cycle, CLAUDE.md end-ritual, and registers. |
1479a0c | pushed |
The vault OS and this artifact are the two anchors of the system. From here on, every change to a workflow, script, surface, or governance rule updates the affected OS page(s) in the vault AND this tab — append one row above (with date + Dublin-local time) and refresh the five tiles — exactly as a scan updates the Scan Ledger. If the system changed and neither the OS nor this tab moved, the change isn’t finished. Protocol: OS file 17 Maintain This OS and TRACEABILITY-MAP.md.
Every file, repo, and Netlify site a single scan writes to, plus the full ecosystem map of every module it feeds. Numbers on this tab are read straight from ecosystem-snapshot.json and the live per-week/per-module JSON files as of 22 July 2026 — not hand-typed.
One script, daily_build.py, runs this entire chain in order, ending with this document's own data refresh.
signal-automation-workflow/weeks/{week}/candidates.jsonMarket research/data/signals/{week}.json — every other step reads from herebuild_ecosystem_snapshot.py writes the live numbers this page reads, plus git ahead/behind + content-integrity + rendered-truncation checks (added 16 Jul) — runs automatically, last step every scanEvery module this pipeline feeds, with signal counts as of the 23 July 2026 W30 full-matrix scan (pushed live) — pulled straight from each module's own signals-feed.json.
| Module | Committed count | Last commit | Status |
|---|---|---|---|
| Library | 797 | 70a8f9b | pushed live 23 Jul |
| Regulations | 363 | 5d9853a | pushed live 23 Jul |
| AI in Healthcare | 218 | 8293b15 | pushed live 23 Jul |
| QMS Training | 359 | bfa8d05 | pushed live 23 Jul |
| Academy | 340 | c8ec1f4 | pushed live 23 Jul |
| Market Research | 797 | bfb08c3 | pushed live 23 Jul |
| iFeed Connect | 797 | 7aab025 | pushed live 23 Jul |
| ClinAssure | 248 | a4512fa | pushed live 23 Jul (feed-isolated) |
The true source-of-truth file per week, from Market research/data/signals/. Grows automatically as new weeks are added.
| Week | Total captured | Selected (published) |
|---|---|---|
| 2026-W19 | 34 | 9 |
| 2026-W20 | 76 | 9 |
| 2026-W21 | 76 | 9 |
| 2026-W22 | 21 | 9 |
| 2026-W23 | 119 | 9 |
| 2026-W24 | 120 | 9corrected 17 Jul |
| 2026-W25 | 108 | 9 |
| 2026-W26 | 27 | 9 |
| 2026-W27 | 24 | 9 |
| 2026-W28 | 19 | 9 |
| 2026-W29 (locked) | 70 | 9 |
| 2026-W30 (current) | 8 | 8 |
| Foundational (standing) | 91 | — |
| Total | 793 | 99 (+8 W30 prov.) |
W24's selected count was 20 until 17 July — the original selection had duplicated several stories (the same MHRA sandbox launch and the same FDA warning letters counted once directly and again inside roundup articles). Corrected to 9 genuinely distinct signals, matching what's actually live on ifeed.ie. See Change Log, 17 July, for the full before/after.
| # | Surface | Local folder | Git repo | Live site |
|---|---|---|---|---|
| 1 | Review Dashboard | signalmanagementsystem/dashboard | ifeed-private-review-dashboards | dashboards.netlify.app |
| 2 | Signal Cockpit | ifeed-ecosystem/modules/signal-cockpit | ifeed-signal-cockpit | signals.ifeed.ie |
| 3 | ifeed.ie | iFeed Home/ifeed-web | ifeed-public | ifeed.ie |
| 4 | Library | ifeed-ecosystem/modules/library | ifeed-library | ifeed-library.netlify.app |
| 5 | Regulations | ifeed-ecosystem/modules/regulations | ifeed-regulations | ifeed-regulations.netlify.app |
| 6 | AI in Healthcare | ifeed-ecosystem/modules/ai-healthcare | ifeed-ai-healthcare | ifeed-ai-healthcare.netlify.app |
| 7 | QMS Training | ifeed-ecosystem/modules/qms-training | ifeed-qms-training | ifeed-qms-training.netlify.app |
| 8 | Academy | ifeed-ecosystem/modules/academy | ifeed-academy | ifeed-academy.netlify.app |
| 9 | Market Research | ifeed-ecosystem/modules/market-research | ifeed-market-research | ifeed-market-research.netlify.app |
| 10 | iFeed Connect | iFeed Home/ifeed-connect | ifeedconnect | live — data tracked & committed |
| 11 | ClinAssure module | Clinassure Working Module | clinassure-working-module | feed-isolated + pushed live 23 Jul (a4512fa, master); scan commits feed-only via git_commit_paths |
| 12 | LMS site | lms.ifeed.ie/lms-master | lms-master | lms.ifeed.ie — own separate week list, W29 not yet registered |
| — | Master signal file | Market research/data/signals/ | own separate git repo | source of truth, feeds everything above |
Surfaced by the automated content-integrity checker, not something introduced by any recent change.
sourceUrl
Spread across Library, Regulations, AI in Healthcare, QMS Training, Academy, and Market Research feeds — all trace back to the same underlying W24 candidates that were captured before sourceUrl was a consistently-enforced field. Cosmetic (the reader-facing content is complete), not a truncation or correctness issue. Not yet backfilled — would need re-deriving each source link from the original W24 research, which hasn't been scheduled.
The anti-drift rule, and the reason this document exists. This artifact is the direction anchor: every change to the signal engine must land in all affected surfaces and here. The full change→area matrix lives in signal-automation-workflow/TRACEABILITY-MAP.md (in memory, read on every session); the essentials are below.
A single count lives in many places at once. After any change, grep every surface — and this whole artifact — for the old number before handing off. The live artifact is refreshed on every change, never skipped. Total signals = Σ weekly canonical pools + foundational; the full-mirror feeds (Library, Market Research, iFeed Connect) always equal that grand total — a fast consistency check.
| Layer | Covers | Action needed |
|---|---|---|
Auto self-heal — cockpit index.json, dashboard COVER/ISO/_WEEKS, build_site WEEKS_ORDER/WEEKMETA | the current/live week only | none — but verify it landed |
| Manual — protected Codex shells (the build never regenerates these) | ifeed.ie /signals/ timeline card + homepage “Current signal” hero | hand-add the week each time — this is exactly what stranded W30 off the timeline on 21 Jul |
| Manual on roll — the static lists | the just-completed week | add to WEEKS_ORDER/WEEKMETA + COVER/ISO/_WEEKS so it doesn’t drop off once it stops being “live” |
| Change | Propagates to (in order) |
|---|---|
| New signal(s), current week | candidates.json → daily_build.py (canonical, MR data, dashboard, cockpit + index.json, ifeed.ie page, foundational, routing feeds) → ifeed.ie /signals/ timeline card → this artifact → commit all (user pushes) |
| Week rolls / new week | state.json + scaffold → register the just-completed week in the static lists + both Codex shells → this artifact (add week row, advance “current”) |
| Week locks (Sun) | final scan, keep the 9 byte-identical, write selected.json + REVIEW.md, roll + register everywhere → this artifact |
| Routing / module change | build_routing.py → module feeds → this artifact: health-grid cells + flow-nodes + ecosystem-map rows (all three, or they drift apart) |
Hero stamp · Total-signals KPI (+ its “N across W weeks + F foundational” sub-line) · Overview banner · health-grid cells (3 core surfaces + 8 modules) · checker-note record count · Architecture flow-nodes · ecosystem-map rows (count + commit hash + status) · both weekly tables · volData volume chart · srcData source bars · domData donut (W26–W29 subset — do not add the current week) · day-by-day table · Change Log (prepend only, never rewrite) · Scan Ledger tab (append one before→after row and refresh its five at-a-glance tiles — the fast “what changed last scan” view). Touch all that apply, then grep for the old value.
A running log of ecosystem-wide refinement initiatives — structural and architectural rework across modules, distinct from the day-to-day operational entries in Change Log. Each initiative gets one entry here that stays updated as it progresses, rather than spawning a new artifact per project.
Three structural pieces landed together. ClinAssure feed-isolation: the Working Module holds both the signal feed and a live inspection-module product build-out, and daily_build's blanket git add -A was sweeping ~17K lines of that product work into “feed refresh” commits; git_commit_paths() now stages only data/signals-feed.json, and ClinAssure is back in the push flow — all 12 modules live. Review-dashboard integration: a sticky top nav on every page, Workflow + Live Artifact cards first, and a new /system/ route serving this live artifact. Full-matrix runbook: the daily scan instructions rewritten from regulatory-only to domain×lens×ecosystem + Core/Radar, so the scan can't regress. All committed + pushed; a full end-to-end alignment audit passed.
Weekly signal pages' "Save as PDF" button relied on each visitor's own browser print engine, which couldn't guarantee one card per page and produced spillover onto blank continuation pages (Sonu's uploaded W29 export ran 18 pages against an expected 10). Replaced with a build-time render through headless Chromium (Playwright): build_site.py now renders and verifies every week's PDF itself, binary-searching a minimal per-card shrink only where content doesn't fit, confirmed by re-measuring real rendered height — never assumed. Content-hashed per week so a build only re-renders whichever week's content actually changed. The button self-upgrades from the old print fallback to a direct PDF download the first run after that week's PDF exists.
Recurrence found and hardened (16 July, later same day): Sonu uploaded a real downloaded W28 PDF still showing the split-card bug (signal 8's source line orphaned onto page 10, plus an extra blank page 12) — after the fix above had already been committed. Root cause: the fix's own code was correct, but build_site.py had never actually been run with Playwright available since it landed, so signals/pdf/ was still empty and every button was silently still on the old window.print() fallback. Confirmed with the file's own metadata (created by desktop Chrome, not headless Chromium) and by re-running the real export pipeline against the real live page, which produced a clean 10-page PDF. Separately, while verifying, found and fixed a genuine latent bug anyway: the card's "Source" pill was hardcoded to a fixed size while every other element correctly shrank to fit — measured directly, confirmed inert before the fix and responsive after. Also added a hard gate: the export step now refuses to write any PDF at all if a card still doesn't fit even at maximum shrink (tested against a deliberately oversized card — confirmed no file gets written), plus a loud per-build warning listing any week still stuck on the fallback, so this class of silent recurrence can't happen again unnoticed. Full writeup in Change Log. Still pending: the one-time Playwright/Chromium install and an actual build run on Sonu's machine — the code fix alone doesn't generate the PDF files.
All 40 reports (20 MRA + 20 QVR) rendered in a completely different visual theme than the platform hub, each carrying its own independent inline stylesheet that had never been wired to the shared iFeed design tokens — not a cosmetic drift, a full architectural disconnect present since the files were first authored. Fixed at the root rather than patched: every report's content was extracted losslessly into structured data (data/reports/*.json, verified byte-identical against the originals across the full 40-report corpus, not a sample) and regenerated through one shared stylesheet and a Jinja2 generator, the same data-driven pattern build_site.py already uses on ifeed-web. data/manifest.json now drives both platform index listings, so adding report #41 is a data entry and a regenerate instead of hand-authored HTML. Full writeup, verification evidence, and the one known scoped limitation (6 MRA reports keep a statically-colored inline SVG hero diagram) in Change Log. Committed locally, not pushed — this repo's own _CLAUDE_PROJECT.md requires Sunita's sign-off before going live, separate from Sonu's approval.
How iFeed guarantees coverage across its full radar — every development scanned across domain × lens × ecosystem, not just the regulatory angle. This panel holds the coverage model (two decisions locked 23 Jul 2026) and the live W30 matrix. It is the anti-compression control: a blank lens or ecosystem shows here as a blank cell, rather than hiding as a question nobody asked.
Core stays pristine: hard, primary-sourced events — agency actions, enforcement, deals, major findings. The weekly selected set (rubric 2 BA / 2 BE / 2 CT / 3 QMS) is Core, and nothing softer is ever dressed up as an agency action.
Radar carries verified-but-lighter cross-lens intelligence — a technical review, a trial-design framework, a routine notice — each tagged domain · lens · ecosystem · significance and clearly labelled. Radar is how the Technical / Operational / Market columns and the Academic / Research ecosystems get served without diluting Core. Rationale: credibility (Core stays clean) and self-sufficiency (every cell can be filled).
The weekly window is a regulatory-lens artifact: agencies publish dated documents every business day, but journals, preprints, conferences and deals cluster and lag. Forcing the slow lenses through a 7-day box makes them look empty when they are only sampled at the wrong frequency. The fix:
| Lens | Window | Why |
|---|---|---|
| Regulatory | Weekly (7-day) | Daily dated agency output; unchanged. |
| Technical / Academic | Rolling 30-day | Journals / preprints lag; W29-tail science stays eligible. |
| Operational | Rolling 14-day | Trade practice / capacity moves at mid-cadence. |
| Market / Business | Event-triggered | A deal lands on its own date, not our schedule. |
Solid n = Core events · Outlined +n = Radar. Window Mon 20–Sun 26 Jul 2026 (scanned through Thu 23). Empty cells shown honestly.
| Domain ↓ / Lens → | Technical | Operational | Regulatory | Market |
|---|---|---|---|---|
| BA · Bioanalytical | +2 | · | · | · |
| BE · Bioequivalence | · | · | 2 +1 | 1 |
| CT · Clinical Trials | +2 | +2 | 2 | +2 |
| QMS · Governance | +1 | · | 3 +1 | 1 |
| Reg · cross-cutting (5th bucket) | · | · | 3 | · |
The compression is gone. After the full-matrix scan (my independent sweep + Sonu's Perplexity run, cross-verified), every lens column is now populated: Technical +5 Radar (bioRxiv single-cell proteomics, AI-impurity, NCI trial design, PumasAI, microbiome), Operational +2 (Anova eTMF, PatientsLikeMe×Science 37), Market 2 Core + 2 Radar (the tariff schedule & the $2bn Dassault/ArisGlobal deal now publish; WuXi, Axiom on Radar), alongside 10 Core + 2 Radar Regulatory. Bioanalytical finally shows Technical/Academic content. Two items were routed out honestly: Adelaide DSG2 (press recycled a 2022 paper) excluded; Samsung Bioepis/Organon (16 Jul) moved to W29 — nothing lost.
weeks/2026-W30/radar-2026-W30.json. The four cards below are my independent-sweep finds.Review (23 Jul) surveying the landscape, challenges and future directions for AI/ML prediction of pharmaceutical impurities — framing LC-MS and NMR as labour-intensive and limited at trace/unknown impurities, and positioning models that forecast impurity formation before experiment as the complement.
JNCI (21 Jul) summary recommendations from an NCI Clinical Trials Planning Meeting — concrete trial-design methodology for a population historically excluded from trials (transplant recipients, immunosuppressed). The Technical/Research cell the weekly regulatory scan never reaches.
FR notice (23 Jul) — routine charter renewal keeping the committee constituted for future adcomm reviews. Low stand-alone relevance; tracked because adcomm constitution decides which expert panels are available for CNS-drug reviews.
FR determination (22 Jul) that lets generic (ANDA) sponsors reference the listed drug. Routine 505(j) enabling notice; previously excluded from Core as administrative, now logged as a minor BE / generics Radar item so the BE domain is not artificially blank.
Seen in the PubMed date-sorted list (J Chromatogr B, 2026-07-18) but not confirmable via Crossref or Europe PMC — Crossref returned only a different June ChemRxiv KRAS-inhibitor method. Not authored until a primary is pinned. Would have been the BA-cell gap-closer.
PubMed-listed (Current Reviews in Clinical & Experimental Pharmacology, 2026-07-17) but not confirmable via Crossref or Europe PMC. Held under zero-fabrication.
Done & committed (23 Jul): W30 Core pool grown to 12 (all tagged domainLens+ecosystem); Radar tier 11 in radar-2026-W30.json; select_signals.py rewritten lens-aware (+ CT-alias fix) so the published 9 is lens-diverse (tariff #1, Dassault #6); daily_build.py carries the new fields; full pipeline rebuilt via daily_build.py — canonical (12/9), ifeed.ie week page, cockpit, dashboard, all 6 module feeds, Connect, Market-research mirror. Every repo committed locally (Market-research is local-only by design). Push pending Sonu.
Still to do: the W30 PDF couldn't regenerate in the cloud (Playwright needs a browser the sandbox can't fetch) — it re-renders on Sonu's next local build; the AI-OS vault docs get the two-tier + per-lens + master-prompt update; and the backward week-by-week re-scan (W29←) using this same full-matrix model.
A running, dated record of every fix, feature, content update, and decision made to the signal management system. Newest first. Entries are never deleted or rewritten — this is the change-control map for a system that gets touched every day.
ClinAssure was the last module held back. Root cause found: daily_build's blanket git add -A was sweeping ~17K lines of in-progress inspection-module product work into commits labelled “signal feed refresh” (the Working Module holds both the feed and a live product build-out). Fixed with git_commit_paths() — the ClinAssure scan-commit now stages only data/signals-feed.json, never git add -A, so a scan can never sweep product code again. Re-enabled in one_click_daily PUSH_REPOS; feed 225→248 + the product backlog pushed live (a4512fa, master). The other ClinAssure repos (v2, platform, DMS) are separate products not fed by the scan. Every scan now updates ClinAssure's feed cleanly, in sync with the other eleven.
The private review-dashboard site (ifeed-private-review-dashboards) got a consistent sticky top nav on every page (Home / Workflow / Live Artifact / Change Log / Daily Activity / Foundational) — fixed in the two generators + the w27 template so it survives rebuilds. The card grid now leads with Workflow then Live Artifact, then the weeks (W30 first). A new Live Artifact route (/system/) serves this Signal Management System artifact itself, kept current. The Workflow page copy was updated to the live engine (full-matrix scan, significance-first + lens-diverse selection, Core+Radar).
The daily scan instructions (RUNBOOK-daily-scan.md + the automation's daily-scan-prompt.txt) were rewritten from the old regulatory-only scrape to the full-matrix model (domain × lens × ecosystem, Core+Radar, new tag fields, master-prompt reference, per-lens cadence) — so tomorrow's scan can't regress to regulatory-only. The W30 PDF regenerated on the Mac (9 signals, matching the page). A full end-to-end alignment audit confirmed: all repos clean + pushed, data consistent (12/9 + 11 Radar), all four generators compile, select_signals yields the lens-diverse 9, and the runner (one_click_daily) clears locks + builds + pushes natively. Verdict: tomorrow's scan runs clean with nothing more needed.
Three sources reconciled — the 8 existing Core, my independent primary-source sweep (4 verified), and Sonu's Perplexity full-matrix run (15 rows → 13 unique). 2 duplicate rows removed, 0 cross-source overlap, total 25 unique. After primary verification: 23 authored (12 Core, 11 Radar), 2 routed out honestly — Adelaide DSG2 excluded (press recycled a 2022 paper) and Samsung Bioepis/Organon moved to W29 (dated 16 Jul). New Core events: the phased generic-drug tariff schedule (BE/Market) and the $2bn Dassault→ArisGlobal acquisition (QMS/Market), plus EMA CHMP July agenda and WHO Drug Info BE consultation. select_signals.py was rewritten to rank by significance + a lens-diversity guarantee (and a domain-alias fix so “Clinical Trials” maps to the CT lane), so the published 9 now leads with the tariff (#1) and Dassault (#6) rather than being regulatory-only. daily_build.py carries domainLens/tier/significance into canonical. Full pipeline rebuilt — canonical (12/9), ifeed.ie, cockpit, dashboard, 6 module feeds, Connect, MR mirror — committed locally, then pushed live across all 12 repos (Market-research local-only by design; ClinAssure held). The master full-scope Perplexity prompt was archived to the week folder and added to the AI-OS vault (docs 19–20). Known gap: the W30 PDF didn't regenerate in the cloud sandbox (Playwright can't fetch a browser with no network); it re-renders on the next local build. Dropped from the published 9 into the pool (not lost): MHRA Xaggitin, FDA TEMPO, WHO consult.
On Sonu's delegated call (“make our signals most credible, insightful, and self-sufficient across domain × lens × ecosystem”), two decisions were locked. (1) Two-tier signals: Core stays hard primary-sourced events (the weekly selected set); a new Radar tier carries verified-but-lighter cross-lens intelligence, each tagged domain · lens · ecosystem · significance — protecting Core's credibility while filling the Technical / Operational / Market columns and Academic / Research ecosystems. (2) Per-lens cadence: Regulatory weekly, Technical/Academic rolling 30-day, Operational rolling 14-day, Market/Business event-triggered — because the uniform weekly window is a regulatory-lens artifact that makes slow lenses look empty. Both are surfaced in the new Signal Matrix tab.
An independent primary-source sweep (Federal Register API, PubMed, Crossref, Europe PMC) across all four lenses corrected an earlier “thin” read: proper primary scanning surfaces cross-lens signal that keyword search missed. W30's 8 Core signals were tagged domainLens + ecosystem (all Regulatory / Industry — the compression, now explicit in data). Four verified Radar items authored to weeks/2026-W30/radar-2026-W30.json: AI-impurity-prediction review (QMS / Technical / Academic, JCAMD 23 Jul, DOI 10.1007/s10822-026-00876-5), NCI cutaneous-SCC trial-design concepts (CT / Technical / Research, JNCI 21 Jul, DOI 10.1093/jnci/djag240), plus two minor FR notices — PCNS adcomm reestablishment (2026-14829) and RASUVO methotrexate “not withdrawn” (2026-14779, previously excluded from Core as routine, now logged as minor BE Radar so the domain is not artificially blank). Held, not authored (zero-fabrication): divarasib LC-MS/MS and a BE intrasubject-variability review — PubMed-listed but unconfirmable via Crossref / Europe PMC. Radar is kept out of select_signals.py so the live pipeline is untouched; published surfaces stay the correct 8 pending the workflow-map phase. Committed locally, not pushed.
A full multi-source sweep for 23 Jul (FDA Federal Register + newsroom, EMA, MHRA, EDQM, RAPS, the national-regulator set) surfaced two primary-source, in-window developments. FDA's CMC-readiness strategy document (Federal Register 2026-14898, Docket FDA-2026-N-7232, CDER + CBER) formalizes the manufacturing flexibilities it will extend to Breakthrough/Fast-Track/RMAT programs on accelerated clinical timelines — a PDUFA VII deliverable; tagged QMS with a de-templated verdict opening on the specific action. FDA's TEMPO digital-health pilot named Dexcom (Glucose Health Program) as first participant, tying device real-world-evidence duties to the CMS ACCESS payment model; tagged Regulatory with an honest edge-of-scope flag (digital-health/device, adjacent to the BA/BE/CT/QMS core). Both quote/cite their primaries; the FDA CDRH quote (Tarver: “…meet patients where they are”) is pulled in.
weeks/2026-W30/candidates.json (6→8), canonical + MR + cockpit + all module feeds; ifeed.ie timeline card hand-updated 6→8.daily_build rebuilt the 3 primary platforms + all module feeds + Connect + foundational (rc 0, 0 build problems); the Intelligence dashboard picks up the new data automatically (client-side). Committed module counts: Library / Market Research / Connect 793, Regulations 362, QMS Training 356, Academy 338, AI-Healthcare 223; ClinAssure 244 (held back). Every touched repo is 1 commit ahead, nothing pushed — Sonu pushes. W29's nine untouched.
Sonu pushed the day’s full stack: 21:08 — all 11 signal repos (W30 Wed scan live) + vault; ~21:15 — the Scan Ledger doc tail; ~22:40 — the dashboard commits (cockpit c4c94b7, engine 0dd7029, vault cacc187). The Signal Intelligence dashboard is live on the cockpit. The hardening commit 4bbbee7 (standalone-viewing error copy + embedded-data preview fallback + boot fix) and the OS sync (vault 552e11c) were pushed ~23:15 — zero unpushed commits across all repos.
552e11c, push pending).Built a full Signal Intelligence dashboard into the signal-cockpit site (new page, linked as an “Intelligence” tab beside Foundational; the existing week view untouched). It analyses the entire 700-signal corpus client-side from the cockpit’s own assets/data/signals/*.json — so every daily scan updates it automatically, with zero new pipeline steps. Features: day/week/month/global scope + grain controls; domain/type/regulator/lens/status/search filters with cross-filtering (click any chart segment to drill); 6 KPI tiles with sparklines; a rule-based auto-insight engine (volume swings, enforcement streaks, domain movers, concentration, editorial-mix-vs-2·2·3 frame, pipeline pacing); 8 charts on a CVD-validated 5-slot palette (light+dark, all six checks passed); a global regulator×week heatmap; a sortable 700-row explorer with CSV export; and an honest data-quality panel (undated shares, W24 selected=20 caveat, placeholder URLs).
c4c94b7 · engine 0dd7029 · vault cacc187 — pushed 22 Jul night; the dashboard is LIVE at ifeed-signal-cockpit.netlify.app/intelligence.html (hardening follow-up 4bbbee7 also pushed).A full mid-week sweep across FDA (Federal Register, newsroom, guidance, warning letters), EMA CHMP, MHRA, EDQM, the Fierce global tracker and RAPS confirmed nothing missed for 20–22 Jul and surfaced one substantive in-window development: FDA’s 21 July warning-letter batch. Captured as two signals — a CGMP data-integrity cluster (Shimoga Chemicals, Almon Healthcare, BioMylz, Island Kinetics/CoValence; QMS) quoting FDA’s finding that a firm “failed to validate or adequately verify multiple test methods…”, and Alembic Pharmaceuticals’ informed-consent failure in its bioequivalence studies (BE). Both dated 21 Jul (posting date), primary-sourced, with de-templated verdicts and quotes. Domain balance improves to 2 Regulatory / 2 QMS / 1 CT / 1 BE.
weeks/2026-W30/candidates.json (4→6), canonical + MR + cockpit + all module feeds.daily_build rebuilt the 3 primary platforms + all module feeds + Connect + foundational; the ifeed.ie /signals/ timeline card was hand-updated 4→6 (protected Codex shell). Committed module counts: Library / Market Research / Connect 791, QMS Training 355, Academy 337, Regulations 361, AI-Healthcare 223; ClinAssure 244 (held back). All 11 deploy repos committed locally (1–2 ahead each); nothing pushed — Sonu pushes. W29’s nine untouched.
An independent review flagged that three of the four W30 verdicts opened abstraction-first (“reflects a shift” / “the underlying shift is”) — the exact tell the authoring standard bans. Rewrote all three (FDA Expedited-IND/TrialBlazer, MHRA Xaggitin XL, FDA PCAC) to open on the specific dated action, company or number, and varied the sentence shape across the four. Pulled a verbatim primary-source quote into the two on-brand signals: the MHRA alert (“physically check the quantity of tablets…”) and the FDA IND notice (“to allow interested persons additional time to submit comments”).
Signal #4 was dated to a future event (the 23 Jul meeting) and sourced to a 16 April Federal Register notice — a scheduled item, not fresh in-window news. Reframed it transparently as a scheduled 23–24 Jul PCAC meeting, redated to 21 Jul (in-window, not a future date), with the April notice cited openly. Reconciled the peptide count against the primary notice: it is 14 substances — seven peptides (BPC-157, KPV, TB-500, MOTS-C, Emideltide/DSIP, Semax, Epitalon), each as free base and acetate (“seven” counted the peptides; RAPS’s “a dozen” approximated the 14 forms).
All 11 deploy repos + the canonical data store were rebuilt from the corrected signals and committed locally (1 ahead each); nothing pushed — the founder pushes after sign-off. The live surfaces still serve the first-scan copy until then. The first scan itself was pushed before review; this pass restores the review gate.
The W30 (and W29) review-dashboard pages carried correct data but stale template labels — a “Private W27 intelligence view” note and a frozen “29 Jun–5 Jul” header date — because build_week_dashboards.py’s repl_labels() never substituted those W27-template strings. Fixed at the source: repl_labels() now rewrites the intelligence note and archive tooltip, and the header date subtitle is derived from each week’s real ISO dates, so every generated week is correct and future daily builds stay correct.
counts.total verified unchanged: W30=4, W29=70, W24=120…). Dashboard commit 82d3215 (push to deploy). The signal cockpit was never affected — it rebuilds its week list from index.json at load (daily cache-bust) and already served W30; a stale view there is browser cache, cleared by a hard refresh.The 07:38 daily scan added three in-window signals to W30, taking the pool to 4: FDA extends the comment period on the Expedited IND Pilot Program (Operation TrialBlazer) (Federal Register, 21 Jul, CT); MHRA Class 4 Medicines Defect Notification for Xaggitin XL (methylphenidate) prolonged-release tablets over incorrect tablet counts (20 Jul, QMS); and FDA’s Pharmacy Compounding Advisory Committee meeting to weigh seven research peptides for the Section 503A bulks list (23 Jul, Regulatory). These join the CMS Medicare price-negotiation draft guidance captured Monday.
weeks/2026-W30/candidates.json (1→4), canonical-2026-W30.json, MR + cockpit data.The 20 Jul evening build (W30=1) was pushed, then the 21 Jul scan rebuilt and pushed again, so every deploy repo is level with its remote and live. Corpus is now 789 (698 across W19–W30 + 91 foundational), matching the full-mirror feeds. Live module counts: Library / Market Research / iFeed Connect 789, Regulations 361, QMS Training 353, Academy 335, AI in Healthcare 223; ClinAssure 242 (held back). W29’s locked nine remain untouched. The canonical Market research/data store stays committed local-only by design.
Ran the comprehensive multi-source sweep for items dated in-window (20–26 Jul) across FDA (Federal Register + newsroom), EMA CHMP, MHRA, EDQM / Ph. Eur., the Fierce global regulatory tracker and the approval trackers. Monday 20 Jul was genuinely light: one capturable, primary-source, pharma-relevant signal — CMS’s IRA Medicare Drug Price Negotiation Program draft guidance (Federal Register doc 2026-14583; comment request, ~60-day window closing Sep 2026) on how manufacturers must effectuate the negotiated maximum fair price via the Medicare Transaction Facilitator. Authored to full analyst depth, tagged Regulatory. Reported honestly — no padding.
weeks/2026-W30/candidates.json (0→1), canonical-2026-W30.json, MR + cockpit data. Edge-of-scope flag: the CMS item is market-access / pricing rather than core BA/BE/CT/QMS — captured under Regulatory(OTH); yours to keep or drop at Sunday lock.daily_build.py rebuilt the review dashboard, signal cockpit, ifeed.ie, foundational and the routing feeds for the 6 modules + iFeed Connect. W30 was registered in the cockpit index.json; build_site.py’s PROTECTED_SHELL preserved Codex’s index / signals / about / foundational shells; the locked W29 page changed by exactly one line (a “← W30” nav link) — the nine are byte-for-byte untouched. Routing added the signal to Library, Regulations, Academy, Market Research and Connect (now 786 / 360 / 334 / 786 / 786); AI-in-Healthcare (223) and QMS-Training (351) unchanged. Nothing pushed from here — 11 deploy repos + the canonical data store committed locally (1 ahead each, 0 dirty); ClinAssure left untouched.
unlink(), so commits stranded on leftover index.lock files and this fresh VM had no git identity. Cleared locks with mv (never rm), quarantined stray tmp_obj_*, set the standing Sonu <upbringing.eipfmoutlook@gmail.com> identity, and committed each repo clean. build_ecosystem_snapshot.py’s remote-fetch 403s are the expected no-network proxy behaviour, not a data gap.Before locking W29, ran an exhaustive multi-source sweep so no important signal could be missed — exactly the fix the weekend's US-only miss called for. 12 agents across FDA (guidance / enforcement / approvals), EMA CHMP + PRAC, MHRA, EDQM / Ph. Eur., ICH / WHO, national regulators (CDSCO, TGA, Health Canada, PMDA, ANVISA, MFDS) and the EU Commission + industry trackers. 36 new deduplicated signals (34 in-window), 7 HIGH — 5 of them non-US, the precise coverage gap this pass targeted. Every in-window item authored to pool quality; the 6 HIGH ones to full analyst depth (verdict / governance / market / takeaways / terms).
candidates.json (+34), canonical-2026-W29.json (36→70), MR + cockpit data.Caught that W29 was on ifeed.ie only via the dynamic “live week” slot — after the roll to W30 (no data yet) the next site build would have dropped W29 off the public timeline entirely. Added W29 to the static WEEKS_ORDER + WEEKMETA (matching the already-published 2026-07-13_weekly-w29.html URL) with an authored theme / intro / summary, and moved the “new” badge from W28 to W29. Registered the missing W27 + W29 in the dashboard generator and hardened it against the week boundary (it crashed building the empty new week — same class of bug already fixed in build_site.py); W30 now builds a clean empty “live” page with W29 auto-carried-over.
Wrote the formal lock artifacts (selected.json + REVIEW.md) and rolled state to W30 scanning (window 20–26 Jul). Per governance the published nine are live on ifeed.ie and were posted on LinkedIn — not silently changed. Two HIGH items surfaced that arguably merited a slot and are flagged in REVIEW.md for your call: MFDS easing biosimilar approval (confirmatory Phase 3 waivable on quality/non-clinical/PK comparability — squarely BE-relevant, 14 Jul) and Health Canada's Ministerial Reliance Order (15 Jul).
All surfaces rebuilt and committed locally (ifeed.ie, review dashboard, signal cockpit, the 6 ecosystem modules, iFeed Connect, and the workflow repo). Routing now tags 785 signals across the modules. Nothing pushed from here (the Cowork bridge has no network) — push_w29_lock.sh is on your Mac to deploy all 11 in one command. PDF export skipped (Playwright not installed in this environment); HTML built fine.
Buttoned up the last items for provable closure. Completed the W29 daily-history.json audit trail (it had stopped at 17 Jul / 36 — now records the weekend +2 and the comprehensive +34, through 20 Jul / 72, derived from capturedAt). Live-verified every deployed surface: the 3 primary sites plus the module feeds all serve generatedAt 2026-07-20T08:21:54Z with W29 present (qms-training 351, Connect 785, market-research 785 confirmed on the live endpoints). Fixed the ecosystem checker's false "file not found" on Connect (it looked at ifeed-connect/data; the real feed is public/data). Refreshed the two dated Weekly-Ops charts (domain + source mix) off the live 785-signal archive — the old "zero from national regulators" note is now closed (Health Canada, CDSCO, TGA, PMDA, ANVISA, MFDS are all in the pool). The W29 PDF is content-current (branded, tuned); a full theme-matched regen is deferred to the Mac Playwright setup.
Ran the daily process for the W29 weekend. A first FDA-press-centric pass returned "0 new" — but that was a scan-coverage gap, not a quiet market. Widening to the EU (Union Register / EMA) and India (CDSCO) via an industry regulatory tracker surfaced two real, in-window actions dated 17 Jul the pool had missed: the European Commission's approval of Boehringer Ingelheim's Jascayd (nerandomilast) for IPF/PPF (first-in-class PDE4B, confirming May's CHMP opinion), and India CDSCO's approval of Novo Nordisk's Wegovy (semaglutide 2.4 mg) for MASH (India tracking the FDA on the ESSENCE evidence). Both authored to full analyst depth and added as candidates 2026-W29-c037 / c038.
weeks/2026-W29/candidates.json (+2). Committed dfd2d9e, pushed to ifeed-signal-workdata. Also found, not added: 14-Jul FDA Leqembi subQ + EU Erbitux label expansion.Root cause of the miss: the scan checked FDA press / warning letters / guidance but not the EU Commission Union Register, EMA, India's CDSCO, or an industry regulatory tracker — so two mid-July non-US approvals slipped through. Logged as a process fix — the daily routine needs standing EU + CDSCO + industry-tracker coverage alongside FDA, so a non-US action is never silently missed again.
This week's LinkedIn update went out as the streak-milestone post: it frames Weekly Signals as an active market-research practice ("stay close to what is changing across life sciences, not occasionally, but every week"), walks through what a week can contain (a new guidance, a warning letter, a work plan, an inspection finding, a post-market signal), and lands on the thesis line: "Individually, these may look like separate updates. But when we keep watching them consistently, they start showing patterns." It links the archive at ifeed.ie/signals/, links the Week 28 issue directly (lnkd.in/egmvR4Nz), and closes by asking the network how they stay updated. The post ships with the externally-generated celebration graphic below, saved on-device in the Social Media folder.
Consistency flags, recorded not fixed (the post is live and editing it is Sunita's call): the post text says "This week's signal, Week 28" and links W28 — while the graphic itself marks W29 NOW LIVE · 17 JUL, and the W29 issue has in fact been live at ifeed.ie/signals/2026-07-13_weekly-w29 since today's deploy. Two conventions are also now in circulation side by side: the post/graphic count 10 weeks and date each week by its publication Monday (W19 → 11 May), while the site data and the reference infographics count 11 published weeks W19–W29 dated by cover week (W19 → 4 May). Neither is wrong on its own terms — but the next milestone asset should pick one counting-and-dating convention and hold it, because the audience iFeed serves is precisely the audience that notices.
signalmanagementsystem/Social Media/ifeed 10 week celebration.png (1536×1024; a second extensionless copy "Week 10 celebration ifeed" sits beside it). Post text captured in this entry; no site files touched.The first draft built for this post (light ground, glossy serpentine orbs, 1600×1317 landscape) was rejected after a design audit Sonu requested on the fable agent. The audit's top finding was not aesthetic but a data-integrity failure: the draft's legend contradicted its own canvas — a "Regulatory" tag appearing on cards but missing from the legend, "Bioanalytical" present in the legend but appearing nowhere, W29 carrying no domain tag at all, and a "4 domains covered" stat inconsistent with what the graphic actually showed. Second-ranked: at LinkedIn's ~550px rendered feed width, nearly every text element fell below legibility.
The rebuild started with data, not pixels: the per-week domain mix was re-derived from the 11 weekly JSONs using build_site.py's own norm() classifier — the same function that generates the live archive's "9 signals this week: …" lines — giving Quality 45, Clinical trials 22, Regulatory 20, Bioequivalence 7, Bioanalytical 5 = 99. Every tag, chip color, and stat in the rebuilt versions traces to that count; W25's genuine 4–4 Quality/Regulatory tie was colored Regulatory per its rank-1 signal (the VRBPAC vote). Two variants were then built as dark editorial 1200×1500 (4:5) posters and both verified legible at simulated feed width: a vertical ledger (the audit's recommendation) and a serpentine "metro line" honoring the original reference shape — flat discs on one continuous rail with direction arrows at the turns. Both delivered in chat as standalone HTML + 2400×3000 PNG exports. The externally-generated light graphic above is what actually shipped with the post; the two rebuilt variants stand ready for future milestone assets.
linkedin_milestone/index.html (ledger), linkedin_milestone/snake.html (serpentine), matching PNG exports. No live iFeed file was modified by this workstream.Sonu directly asked why W24 had 20 selected against every other week's 9. Investigation (not assumption) found 5 real duplicate clusters, each confirmed by an identical sourceUrl or an explicit roundup article covering a company whose warning letter also had its own standalone card: the same EU Joint Clinical Assessment report counted twice, the same EMA/HMA AI Observatory report counted twice, the same MHRA sandbox launch counted twice, a Medline warning letter told once directly and again via a Reuters wire pickup, and two separate FDA warning-letter roundup articles that each re-summarized letters already standing alone as their own cards.
Cutting only the exact duplicates left 13 genuinely distinct stories, not 9 — more than a normal week, since W24 really was a heavier news week. Sonu's instruction was explicit ("do it smartly where we dont compromise anything but make it 9"), so the 4 lowest-priority distinct stories (informational/status items with no compliance deadline or named-party enforcement, versus keeping every warning letter) were cut to reach exactly 9. That edit was then compared directly against the live ifeed.ie page and found not to match — the site was already serving a different, clean 9 from an earlier selection pass that had never been reconciled with the data file's later 20-signal state. Reverted the data file to match exactly what's actually live, rather than overriding a published selection with a second independent judgment call.
ifeed.ie/signals/2026-06-15_weekly-w24.Market research/data/signals/2026-W24.json. Verified: 9 selected, ranks sequential, structure intact.Sonu's screenshot of the live W29 page showed the old, dense, pre-trim copy — still real, still a valid bug report, but the root cause was that build_site.py (the script that turns the JSON data into the actual HTML pages) hadn't been re-run since the analyst-voice rewrite landed, confirmed by every weekly HTML file being older than its JSON source. The data was never wrong; it was never shipped.
build_site.py regenerates the homepage, signals archive, and About page from its own template — with no awareness of Codex's in-progress redesign of those same three files. Running it blind would have overwritten Codex's work. Fix: snapshotted those 4 at-risk files first, ran the real script against the real repo (safe to do live — it hash-checks before touching PDFs and never corrupts HTML on a PDF failure), then restored the 4 snapshotted files byte-for-byte, keeping only the 11 regenerated weekly issue pages and sitemap.xml. Verified via diff that the restore was exact and that Codex's files were untouched.
signals/2026-*_weekly-w*.html + sitemap.xml. Untouched (restored from snapshot): index.html, signals/index.html, about/index.html, foundational/index.html. PDF re-export attempted but skipped cleanly (Playwright browser not installed in this environment) — existing PDFs left as-is, a one-time local setup item, not a data problem.Two handoff reports arrived describing Codex's work on the homepage, signals archive, and support pages. Per standing practice, neither was acted on by authority alone — every specific claim was checked against the actual on-device files and rendered output. First change (homepage teaser + archive overlay-card redesign + claim-safety wording): every claim held up — verified the homepage teaser card is genuinely small/quiet and visually distinct from the "recent issues" strip (not duplicated), the archive's overlay-card style renders cleanly in light and dark, banned claim phrases are genuinely absent from About/Collaboration/Methodology, and the two em dashes flagged as a risk are both inside CSS comments, not visible copy. One real bug found during this check turned out to be in the verification method, not the site: an automated mobile screenshot showed a large blank gap, which was the page's real scroll-triggered fade-in animations not having fired yet under a too-fast automated scroll — a slower, realistic scroll showed every section renders correctly.
Second change (responsive marker-alignment fix): claimed the desktop marker offset (.tnode.left{--marker-y:150px}) was leaking into mobile/tablet, now fixed via stronger resets at both breakpoints. Confirmed the CSS is real, present, and in the correct source order for the override to actually work (verified via CSS specificity + cascade order, not just presence), then rendered the live page at desktop, tablet (768px), and mobile (390px) widths — markers align correctly on desktop and reset cleanly with no leaked offset on tablet/mobile. Confirmed this change is CSS-only, confined to signals/index.html, and doesn't conflict with the W24 fix or the rebuild.
index.html, signals/index.html, about/index.html, collaboration/index.html, methodology/index.html (Codex's work, reconciled and confirmed clean).All of the above — the W19–W29 rewrite/trim, the W24 fix, the rebuild, and Codex's two verified design changes — committed as one change (8f7142d, "Publish W19-W29 signal rewrite + trim; ship homepage teaser, archive redesign, claim-safety wording") and pushed to origin/main. A stale .git/index.lock from an earlier interrupted command blocked the first attempt; identified as safe to remove (no live git process holding it), removed, and the push completed cleanly on retry. Confirmed live directly: fetched the real ifeed.ie/signals/2026-07-13_weekly-w29 page and read back the corrected, trimmed content rendering exactly as verified pre-push. The 3 backup HTML files Codex left for rollback safety (index.backup-before-overlay-20260717.html, index.accepted-card-before-circle-20260717.html, index.accepted-before-marker-align-20260717.html) were deliberately excluded from the commit — committing them would make them live, fetchable pages on the public site.
analyst-voice — researched real competitors first, then built a reusable writing-style fixSonu's ask: study how real regulatory-intelligence outlets write, and fix why iFeed's own copy "sounds AI generated, people should trust us." Read full real articles from RAPS Regulatory Focus and FiercePharma (Endpoints News and Pink Sheet/Citeline turned out to be genuinely paywalled — confirmed directly, not assumed; BioPharma Dive's text is copyright-restricted for verbatim reproduction) and diagnosed a specific, nameable gap: real analyst writing is evidence-first — names the actor, the date, the document, and quotes the document's own words. iFeed's copy was abstraction-first — opened with a sweeping interpretive claim ("this is the current inspection template…") and never quoted the source it cited.
Proved the diagnosis against real iFeed content before building anything: pulled the actual FDA warning letter behind W28's Sanofi Genzyme signal and found it had a specific, damning quote ("your data integrity program was not functioning as represented") that the live card had paraphrased instead of used. Built the skill (5 concrete edits: specific-event openers, quote-don't-paraphrase, a cut-list of AI tell-phrases, sentence-shape variety across a week, specificity over adjectives), tested it on that one real signal, sent the before/after for review before touching anything else.
analyst-voice skill (installed, packaged as .skill). Read skill-creator's own docs before building, per standing project discipline of research-then-build.Applied the new skill across every selected signal in W19–W29, not just W28 — each signal's verdict/why/governance/market fields rewritten to open with the specific dated actor and action, and to quote the real source document wherever one was fetchable. Discovered and documented a real schema split along the way: W19–W25 have no verdict field and use cardInsight for that role instead; W26 onward has a real verdict field. Several agents doing this work also surfaced genuine, separate data-quality problems in the underlying dataset — wrong/generic sourceUrl values, a drug-naming mix-up (Yartemlea/Tacquell) in W26, a warning letter misattributed to the wrong company and date — all flagged rather than silently worked around.
Did not trust the rewrite on self-report alone. Ran an independent verification pass: every quoted string across all 11 weeks (210 total) was re-checked against a fresh fetch of its actual source. Result: 2 genuine mismatches found and fixed — both were accurate paraphrases dressed up in quotation marks as if exact (one in W20, one in W23, plus the one already caught and fixed in W27's Wizcure signal during a manual spot-check that started this verification pass) — and zero outright fabrications. A handful of LinkedIn/robots-blocked sources were correctly left as honest gaps rather than guessed at.
Market research/data/signals/2026-W19.json through 2026-W29.json (all 11). Verified: JSON valid, correct object/selection counts unchanged, audit_week.py --all clean except one defensible case (see below). Written back to Sonu's machine, mtime-guard confirmed no intervening changes were clobbered.Sonu compared two real downloaded PDFs (W28 vs W29) side by side and flagged it precisely: "week 28 is fine… week 29 its too heavy, big paragraphs, certainly i will skip it." A length measurement confirmed a real trend, not just a feeling — average characters per signal climbed steadily from W19 (1274) to W29 (2993) as later rewrite passes leaned harder into citing every verified fact. The instinct behind the rewrite (be specific, quote real sources) was right; the failure was not being selective about which 1–2 facts actually earn a reader's attention versus citing everything verifiable.
Fixed the skill itself first, not just the symptom — added an explicit 6th rule: each field should read in one breath, roughly 2–4 sentences, with the single most load-bearing fact rather than every fact that happened to be verified. Then applied that discipline retroactively to all 11 weeks. Hard constraint honored throughout: never edited text inside quotation marks, only chose which whole quote/fact survives in a field when two were stacked — explicitly instructed and confirmed per Sonu's follow-up ("cutting down mean you should read, understand and rewrite making sure insights not compromised, value still be delivered right").
analyst-voice skill (rule 6 added). Re-verified after trimming: all files still valid JSON, same object/selection counts, audit_week.py --all unchanged from before the trim. Re-written to Sonu's machine.2026-W19-13's why field still contains the word "robust" — but only inside a verbatim MHRA quote ("suitably robust contracts and adequate oversight mechanisms…"). Editing text inside quotation marks was treated as off-limits throughout this work (that's what created the fabrication risk being fixed in the first place), so this was left as-is rather than silently overridden. audit_week.py still flags it as a FAIL since it can't distinguish an authored tell-phrase from a quoted one — a real, small gap in the mechanical checker, noted here rather than fixed unilaterally.
The updated signal JSON is rewritten, verified, and on Sonu's machine, but build_site.py (the step that actually regenerates the live-looking HTML/PDF from this data) has not been run — it needs Playwright, which only works reliably from Sonu's own terminal, confirmed repeatedly this session. Per explicit instruction, stopping here on purpose: Codex is working on the homepage and other non-signal pages in parallel, and both sides need to reach the same readiness point before a single joint deploy. Nothing gets rebuilt, committed, or pushed until Sonu reviews both and says go.
Same day the server-side PDF export fix (below) was marked complete, Sonu uploaded a real downloaded W28 PDF and reported the exact bug it was supposed to prevent: signal 8's source line orphaned onto its own page (page 10), plus a genuine blank extra page (page 12) — asked explicitly for root cause, not a patch, "if this keeps repeating it's the problem."
Read the flagged pages directly first to confirm exactly what was wrong, rather than assuming from the description: page 9 showed signal 8's card body complete, page 10 showed only its orphaned "Source" pill floating alone, page 11 was a clean signal 9, page 12 was genuinely blank. Then reproduced the real production export logic (measure/binary-search/page.pdf()) against the real live W28 HTML in a disposable sandbox — and it came back completely clean: 10 pages, every card fitting, no overflow. That contradiction was the actual lead: the fix in the code was right, but something else was going on.
The PDF's own embedded metadata settled it — Creator: Mozilla/5.0 (Macintosh...) Chrome/150..., a real desktop browser, not HeadlessChrome. Cross-checked against the live page's actual button markup and signals/pdf/ on disk: still empty, no .manifest.json, meaning build_site.py had never actually been run with Playwright available since the fix (efd1d86) was committed. The button was still silently serving the old window.print() fallback — the code fix shipped, but nothing had triggered the build step that makes it take effect. What Sonu downloaded was the pre-fix behavior, not a new bug.
While tracing the code to confirm that, found one genuine latent bug worth fixing anyway rather than leaving for a future card long enough to trigger it: the card's "Source" pill (.sig-src) was hardcoded to a fixed font-size and padding, while every sibling element in the card correctly scaled via calc(… * var(--pscale)) during the fit-check. Measured it directly before and after — completely inert to scaling before (identical height at any --pscale value), genuinely responsive after. Also closed a real gap per Sonu's explicit ask for "strong control": export_pdfs.js previously wrote the PDF to disk before checking whether every card actually fit, so a broken export could still land as a real downloadable file. Now it's a hard gate — refuses to write anything at all if a card still overflows even at maximum shrink, verified by deliberately forcing an oversized card through the pipeline and confirming no file was produced. A build now also prints a loud, unmissable warning every run listing any week still stuck on the fallback, so this exact silent-recurrence pattern can't happen again unnoticed.
window.print(), "Source" pill never actually shrank even when the export step did run, a broken export could still be written to disk.iFeed Home/ifeed-web/_build/build_site.py (.sig-src print-CSS scaling, per-build fallback warning), _build/export_pdfs.js (hard overflow gate before writing, delete-on-mismatch after). Written back to Sonu's machine and verified on disk. Not yet done: an actual build run — the code fix alone doesn't generate the PDF files; Sonu still needs to run the one-time Playwright setup (if not already done) and the build itself for W28 and every other week to actually exist as verified PDFs.Sonu sent screenshots of the live platform: the hub (Overview, MRA platform, Q&V platform) renders correctly in iFeed's dark-teal theme, but every individual report opens in a completely different light-cream page — and he was explicit this needed a real root-cause fix, not a cosmetic patch, treated as an engineering problem end to end. Audited local disk, git, and the live Netlify deploy first: all three identical (0 commits ahead/behind origin), so this was never a deploy gap. The actual cause: each of the 40 reports carries its own fully inline <style> block with a private hex palette, never wired to the shared design tokens in assets/ifeed-platform-shell.css that the hub pages use correctly — true since these files were first authored, not a regression.
Before committing to an approach, tested it directly: pulled one real, live report into a disposable sandbox, extracted its content, rebuilt it through a shared stylesheet wired to the real tokens, and verified the rebuilt text was byte-identical to the original with correct teal theming in both light and dark mode. Then checked real data before scaling — comparing every report's inline CSS found only 3 layout variants across the whole 40-report corpus, cleanly nested (each a strict superset of the last, zero conflicting rules), confirming one shared stylesheet was safe platform-wide. Built the real pipeline: generator/extract_all.py losslessly extracts every report's 25 sections into data/reports/*.json; generator/build_report_theme_css.py builds the one shared assets/market-research-report.css from the union of all 3 variants, every color rewired onto the shared tokens; generator/render_all.py regenerates every report through a Jinja2 template. data/manifest.json (externalized from the platform index pages' own existing report-list data) now drives both platform listings.
Verified before shipping, full coverage not a sample: all 40 reports' visible text diffed byte-for-byte against their originals (891,144 characters, zero differences); the shared stylesheet audited for hardcoded hex left outside @media print (zero, two extras caught mid-build — a .bone-deep literal and an undefined-token fallback that would otherwise have shipped un-themed); headless-browser checks across 6 representative reports (spanning the majority, largest, and known drift-outlier CSS variants) plus both platform indexes confirmed matching computed colors in both themes. One honestly-scoped limitation: 6 of the 40 MRA reports have an inline SVG hero diagram with its own hardcoded internal colors (standard practice for hand-crafted SVG art) — those keep their original static palette; the page theme around them is fully fixed. Also found and deliberately left alone: assets/styles.css (misattributed — it's actually the Academy module's CSS) is still linked from two pages outside this rework's scope (module-root index.html, signals.html) — flagged as a small separate cleanup, not touched here.
generator/*.py (6 new scripts), templates/report.html.j2, assets/market-research-report.css, data/manifest.json + data/reports/*.json (40), all 40 report HTML files, mra-platform/index.html, qv-platform/index.html, HOW-TO-EDIT-A-REPORT.md (new content-editing workflow doc). Committed locally (63a2a42, 92 files). Not pushed — _CLAUDE_PROJECT.md requires Sunita's approval before this repo goes live.Sonu reported cards not fitting one-per-page in the downloaded PDF (uploaded an 18-page W29 export as evidence). Root cause: the "Save as PDF" button just called the visitor's own window.print(), and CSS alone (break-inside:avoid, flex vertical-centering) can only ever be a hint to that engine, not a guarantee — any card whose real content ran a little tall spilled its tail onto an otherwise blank page. Tested wkhtmltopdf directly against the real page first: its old WebKit engine can't render this site's oklch()/color-mix() colors at all, rendering everything black-on-white, which ruled it out.
Built instead: build_site.py now renders and verifies every week's PDF itself at build time via headless Chromium (Playwright/Node, new _build/export_pdfs.js). A --pscale CSS custom property (default 1, no visual change until used) lets the export step shrink only the cards that don't fit — found by binary search, confirmed by re-measuring real rendered height, never assumed. Content-hashed per week so a build only re-renders whichever week's content actually changed. The button itself self-upgrades from window.print() to a direct PDF download the first run after that week's PDF exists, so this ships with zero regression risk even before Playwright is installed.
iFeed Home/ifeed-web/_build/build_site.py (print CSS + export_pdfs() + button logic), new _build/export_pdfs.js, _build/package.json, _build/README-pdf-export.md. Committed locally (efd1d86); push and the one-time Playwright setup are Sonu's next step.This session's shell has no route to GitHub (every fetch/push attempt returns a 403 from its proxy), so the push itself had to run from Sonu's own Mac terminal. Built a small script (push_all_ecosystem.sh) that walks every repo, skips anything with nothing to push or no upstream configured, and pushes the rest — dry-run-tested against the same 403 block first to confirm the path logic and ahead-counts were right before handing it over. Sonu ran it; all 11 pushed clean on the first real attempt.
Deployment wasn't just assumed from the push succeeding — re-checked directly against the live sites afterward, the same way the truncation fix above was verified: ifeed.ie's weekly W29 page now serves the corrected title byte-for-byte (tab title confirmed: "W29 · 9 signals this week: 5 Quality, 2 Clinical trials, 2 Bioequivalence · iFeed Weekly Signals"); QMS Training, Library, and iFeed Connect's live data/signals-feed.json endpoints now report generatedAt: 2026-07-16T10:39:28Z with counts of 337, 750, and 750 respectively — an exact match to what was sitting local-only that morning. ClinAssure's data endpoint sits behind its own login wall (expected — it's access-controlled by design), so that one is confirmed via git state only, not a direct data pull.
Market research/data has never had a GitHub remote configured at all — a setup decision, not a routine push — left untouched.Full remediation of the truncation bug found in the 15 July audit (see below). All five recommendations implemented, then verified by rebuilding and re-scanning every published week.
build_site.py, signals_to_lms.py, and the raw slice in build_week.py. That content now always renders in full.build_site.py and signals_to_lms.py. Self-caught follow-up: the first version's domain-count order list excluded "OTH"-classified signals, so a few headlines didn't sum to their stated total — fixed same day.build_foundational.py needed no change — its inspector already expands to full text on click. The registry table's 70/80-character cell truncation in signals_to_lms.py is legitimate (compact table cells, not analyst prose) and was left alone.check_rendered_truncation) to build_ecosystem_snapshot.py. It now runs as part of every standard verification pass.build_site.py, signals_to_lms.py, build_week.py, build_ecosystem_snapshot.py, Market research/data/signals/2026-W20.json, 2026-W21.json, 2026-W24.json. Rebuilt and re-verified all 11 published weeks (W19–W29): 0 ellipsis-terminated paragraphs remain anywhere.Three research passes across FDA, EMA, MHRA, TGA, and EDQM/Ph. Eur. sources, each with a growing duplicate-exclusion list. Pool grew from 29 to 35 candidates, all eight analyst fields authored to the runbook standard:
Today's new candidates used string confidence values ("high"/"medium"), but the real data model is an integer 2–5 scale — daily_build.py's enrich() threw on the mismatch. Remapped the 6 records (high→5, medium→3) directly in weeks/2026-W29/candidates.json; rebuild then ran clean.
iFeed Home/ifeed-web (clean, carried by its own daily rebuild commit), signalmanagementsystem (script/data fixes swept into daily_build.py's own commit, plus a follow-up commit for the refreshed verification snapshot), lms.ifeed.ie/lms-master (committed separately — also picked up updates/2026-W28.html for the first time, since this site's own week list already knew about W28 but had never had the page committed), and Market research/data (the 13 date-hygiene fixes landed inside daily_build.py's own commit since they were sitting uncommitted when that run fired). Hit a stubborn, ultimately cosmetic git-lock warning chasing this down on the FUSE bridge — the underlying commits succeeded regardless; verified directly in committed file content.
Merged Ifeed Dependency Map, Ifeed W28 Closeout Brief, Ifeed Linkedin Strategy Flow, and Ifeed Ecosystem Roadmap into this single document, refreshed with directly-verified current numbers. Going forward, every change to the signal management system gets logged here instead of spawning a new artifact.
Full end-to-end review requested after the user spotted a cut-off title live on ifeed.ie/signals/2026-07-13_weekly-w29. Confirmed the truncation live via direct DOM measurement, traced the exact root cause in build_site.py's clip()/week_theme()/sig_card(), and delivered an 8-page Word document audit report with evidence tables, exact code citations, and five ranked recommendations (R1–R5) — fully implemented the next day, see above.
User flagged the site as stale and pointed to ifeed.ie/signals/ as the replacement. Verified directly: the old site was frozen at W25 (22 Jun), live at the custom subdomain weeklysignals.ifeed.ie via Netlify, with zero code or automation anywhere referencing it. ifeed.ie/signals/ is a strict superset (W19–W29, no gaps, live on the current week).
Full ecosystem map, verified automation status, historical volume/source data, competitive positioning against Cortellis/AgencyIQ/Redica/RAPS, and a ranked set of next moves. Rebuilt visually with real KPI tiles, bar/donut charts with hover tooltips, and a health-status grid after feedback that the original version read as "plain html." Now folded into the Strategic Roadmap tab of this document.
build_ecosystem_snapshot.py rebuilt as a real, working checker (it had been failing silently on every run — the file didn't exist). Added real git ahead/behind + content-integrity checks, loud "DONE WITH ISSUES" failure reporting in daily_build.py instead of silent pass-through, automatic week-rollover so a new ISO week gets scaffolded without a manual step, and a lock-state guard in build_week.py so a human-reviewed selection can't be silently overwritten.
Found via independently-dispatched audit agents, then verified directly. Fixed in build_routing.py and reconfirmed across every module's signals-feed.json.
Fixed and reverified end-to-end that current-week content is genuinely first across every module.
Grew the W29 candidate pool, then deployed independent audit agents across the whole ecosystem to find anything the standard process would miss; synthesized findings and fixed every confirmed real gap.
W19, W20, and W27 were empty placeholders; W21–W26 turned out to be quietly simplified versions of the real posts (missing bold emphasis, reference-link lists, sign-off lines). User pasted the real text for all 9 published weeks; every week now holds exact verbatim wording. Separately verified all 9 Week PDFs by the date stamp printed inside each card (not file order) and renamed them from cryptic timestamps to clear names.
1783670094893.pdfiFeed-W19-2026-05-11.pdf (8 of 9 — W24's PDF is 28MB, over the transfer size limit, still pending a manual call)The dashboard's LinkedIn page now shows an "Upcoming" banner for whatever's in draft, a direct link to each week's PDF next to its post, and a quiet space for a performance note. Now folded into the LinkedIn Archive tab of this document.
Investigated why W28 had only 16 signals captured against W24's 120; found and scanned a July 11–13 coverage gap, added verified candidates, rebuilt all three core surfaces, and documented a 40–50/week target policy for future weeks.
First "live" status artifacts for the signal engine, reading directly from ecosystem-snapshot.json. Both now folded into this document (Architecture and Weekly Ops tabs).
Studied the engine end-to-end after a Mac reset; diagnosed and repaired a W28 data-loss scare (canonical file's selectionStatus field), rebuilt dashboard and cockpit W28 signal JSON from canonical+locked data, verified all three surfaces live, and designed the original Change Log and Daily Activity tabs for the dashboard site. This period's detailed task history predates this document and isn't itemized entry-by-entry here to keep this log focused on recent, individually-verified work — ask if you want any of it traced back out in full.
Signal volume, sourcing, and domain mix — pulled directly from the 12 weeks of real candidate data on file.
Every week's numbers, straight from the master files.
| Week | Total captured | Selected (published) | Domain mix (top 4) |
|---|---|---|---|
| 2026-W19 | 34 | 9 | 14 CT · 7 REGULATORY · 4 AI · 3 BMV |
| 2026-W20 | 76 | 9 | 11 BE · 10 QMS · 10 MEDTECH · 8 MARKETSHIFT |
| 2026-W21 | 76 | 9 | 19 CLINICAL TRIALS · 13 UNCLASSIFIED · 9 MEDTECH · 6 AI GOVERNANCE |
| 2026-W22 | 21 | 9 | 2 AI GOVERNANCE · 2 QUALITY SYSTEMS · 1 CLINICAL EVIDENCE · 1 CLINICAL TRIALS |
| 2026-W23 | 119 | 9 | 19 QUALITY SYSTEMS · 11 MEDTECH · 9 REGULATORY AFFAIRS · 8 CLINICAL TRIALS |
| 2026-W24 | 120 | 9corrected 17 Jul | Candidate-pool mix shown here (not the selection); the corrected 9 published signals lean QMS-enforcement — 6 of 9 are named-company warning letters |
| 2026-W25 | 108 | 9 | 11 CLINICAL TRIALS · 11 HEALTHCARE AI · 9 QMS QUALITY · 7 HTA |
| 2026-W26 | 27 | 9 | 5 REGULATION · 4 QMS · 4 CLINICAL TRIALS · 3 AUTOMATION |
| 2026-W27 | 24 | 9 | 8 QMS · 8 CT · 4 BA · 4 BE |
| 2026-W28 | 19 | 9 | 10 CT · 9 QMS |
| 2026-W29 (locked) | 70 | 9 | comprehensive final scan 20 Jul: pool 38→72 in-scan, deduped to 70 archived; the nine are unchanged — see Change Log |
| 2026-W30 (current) | 8 | 8 | Scanning 20–26 Jul: 8 in-window signals so far — CMS Medicare price-negotiation draft guidance (20 Jul, Reg), MHRA Xaggitin XL Class-4 defect (20 Jul, QMS), FDA IND-pilot comment extension (21 Jul, CT), FDA CGMP data-integrity warning-letter batch (21 Jul, QMS), Alembic BE informed-consent citation (21 Jul, BE), FDA PCAC 503A peptides meeting (scheduled 23–24 Jul, Reg), FDA CMC-readiness strategy (23 Jul, QMS), FDA TEMPO/Dexcom digital-health pilot (22 Jul, Reg). Daily preview, not the locked nine. |
| Total | 702 | 99 (+8 W30 prov.) | — |
Domain-mix labels vary by week because the scan methodology changed over time — W19–W23 and W27–W28 use the BA/BE/CT/QMS lens codes, W24–W26 show raw category tags from that period's six-tool scan. Both are accurate to what was recorded at the time.
"Roundup / other" = trade-press round-ups plus sources not mapped to a single regulator. The multi-source scans since mid-July now add direct signals from Health Canada, CDSCO, TGA, PMDA, ANVISA and MFDS — the earlier "zero from national regulators" gap is closed.
Taxonomy drift, visible in the raw data: W19–W25 domains are inconsistent free text ("Ireland-Galway / Digital Health," even a couple of internal notes that leaked into the regulatory data). From W26 onward it converges toward BA/BE/CT/QMS, though the "clean" period still carries some free-text stragglers rather than four-letter codes.
Day-by-day tracking since the daily-history tracker was added — every day from here on is logged automatically.
| Date | Total on file | Note |
|---|---|---|
| 2026-07-13 | 19 | 19 captured, 9 selected — W28 close-out |
| 2026-07-16 | 35 | Today's scan: +6 verified candidates (29→35), audit remediation shipped same day |
| 2026-07-19 | 38 | Weekend scan: +2 EU/India approvals a US-only pass had missed (36→38) |
| 2026-07-20 | 72 | Comprehensive final scan before lock: +34 in-window (38→72) across all regulators; W29 locked (nine unchanged), rolled to W30 (scanning) |
| 2026-07-20 | 1 | W30 Monday scan (new week): +1 in-window (CMS Medicare drug-price-negotiation draft guidance) — a verified-quiet Monday; scanning window 21–26 Jul open |
| 2026-07-21 | 4 | W30 Tuesday scan: +3 in-window (FDA IND-pilot comment extension; MHRA Xaggitin XL Class-4 defect; FDA PCAC 503A peptides meeting 23 Jul) → pool 4; last night’s build + this scan pushed live |
| 2026-07-22 | 6 | W30 Wed mid-week detailed scan: +2 in-window (FDA CGMP data-integrity warning-letter batch, QMS; Alembic BE informed-consent citation, BE) → pool 6; pushed 21:08 · live. Late evening: Signal Intelligence dashboard shipped to the cockpit & pushed live |
| 2026-07-23 | 12 / 9 | W30 full-matrix scan: 25 candidates → 23 authored (12 Core / 9 selected + 11 Radar); lens-aware selection (tariff #1, $2bn Dassault #6); Adelaide DSG2 excluded (recycled 2022), Samsung Bioepis→W29; all surfaces rebuilt, committed & pushed live |
Verbatim text of every published LinkedIn post, W19 through W27, plus the W28 draft. The story of how this archive was found, corrected, and rebuilt (empty placeholders, simplified copies replaced with your real wording, PDFs renamed) is logged in the Change Log tab under 13 July 2026 — this tab is the living reference archive itself.
"Trials modernise while enforcement holds the line." Full text is below, tagged W28. This reflects the archive's state as of 13 July — if it's since been posted, flag it and this will be updated to reflect that.
8 of the 9 PDFs copied over and renamed cleanly. W24's file is 28MB — over the size limit on the tool used to place files on your Mac. Compressing it further would mean reducing the actual image quality of the screenshots inside it. It's still sitting under its old name, 1781544932213.pdf, in the same Week PDF folder — either say the word to compress and rename it anyway, or rename that one file yourself.
| What | Location on your Mac | Status |
|---|---|---|
| The post archive data | signalmanagementsystem/dashboard/data/linkedin-posts.json | Updated, verbatim text |
| The LinkedIn strategy page | signalmanagementsystem/dashboard/linkedin/index.html | Updated, live |
| Week PDFs (8 of 9) | signalmanagementsystem/Week PDF/ | Renamed, verified |
| W24's PDF | signalmanagementsystem/Week PDF/1781544932213.pdf | Still old name — needs your call |
| Link from main dashboard | signalmanagementsystem/dashboard/index.html | Card description updated |
Exact original wording for all nine published weeks, plus the W28 draft at the end. Click a week to jump straight to it.
The only text that changed was replacing simplified saved copies with your own real wording. Nothing was deleted — the old cryptic-named PDFs are still sitting alongside the renamed copies, so you can compare or remove them yourself whenever you're ready.
From the 15 July strategic review: real research on where iFeed sits competitively, and a ranked, decisive set of next moves. This tab is judgment and strategy, not live data — refresh it on request rather than expect it to update itself.
Real research, not assumption — what the players your "big company" clients already pay for actually offer.
iFeed's per-signal analyst depth (What-to-do / Market-implication / Reader-takeaways, now consistent ecosystem-wide) reads closer to a $25–75k/seat product than a free newsletter. The gap between what the product is and how it's currently distributed — a free-feeling web app, one manual LinkedIn post — is the single biggest opportunity in front of you.
Dots show impact vs. effort at a glance.
Daily vs. weekly vs. monthly, and every format people actually use.
| Cadence | Good for | Where iFeed sits | Flag |
|---|---|---|---|
| Daily | Time-sensitive alerts, wire-style | Not built | Conflicts with "buttons-only" unless manual-trigger |
| Weekly | Curated + synthesized | What exists today | Working, but input volume still inconsistent |
| Monthly | Synthesis across weeks | Not built | The actual gap — see below |
| Quarterly/Annual | State-of-industry, PR asset | Not built | Natural next step once monthly exists |
| Format | What it is | Fit for iFeed |
|---|---|---|
| Newsletter | Recurring email digest | Closest to what the weekly nine already is |
| Newspaper | Daily, shallow per item | Wrong shape — conflicts with manual-trigger |
| Magazine | Deep features, recurring columns | Academy is already adjacent |
| Brochure | Sales collateral | Already on the roadmap (#2 above) |
| White paper | Deep, single-topic, citation-heavy | Good for SEO/credibility, low frequency |
| Wire/push alert | Real-time, ultra-short | Wrong shape, same reason as newspaper |
| Podcast | Spoken recurring briefing | Genuinely rare in this niche — real whitespace |
| Database/terminal | Queryable raw records | Not iFeed's game — don't compete here |
| Executive briefing deck | Slide-shaped leadership summary | Pairs with account personalization |
| Benchmark/index report | Scored, ranked "state of X" | Rare, high PR value, needs history first |
| Annotated primary source | Real document + inline commentary | Nobody in the competitive set does this well |
| Community/forum | People as the product | Not iFeed's differentiator |