The weekly signal engine, now automated.
Every morning at 7:30 an agent runs the full-matrix scan across every domain (BA/BE/CT/QMS), lens (technical, operational, regulatory, market) and ecosystem (academic, research, industry, business), adds what's new to the current week's pool, and rebuilds all three surfaces — the review dashboard, the signal cockpit, and ifeed.ie — from that single pool. It runs Monday to Sunday; on Sunday at 8pm it locks the week's nine and drafts the LinkedIn post; Monday it rolls to the next week. Forever, same path.
How the nine are selected
The pool grows all week, so the nine are chosen by a lens-aware rubric — re-scored every morning, frozen Sunday. It is not "keep the old nine": each day the whole accumulated pool competes, and a new signal only displaces one if it scores higher.
Aim 2 BA · 2 BE · 2 CT · 3 QMS. If a lane is empty (BA/BE were, this week), carry fewer there and backfill with the next strongest — and flag it.
Enforcement & hard deadlines first, then binding framework/guidance changes, then methodology shifts, then approvals/context.
Breaks ties within a priority tier (1–5 significance).
Significance (high > moderate > minor) ranks first; then a lens-diversity guarantee keeps at least two non-regulatory-lens Core events in the nine, so market/technical developments (a tariff, a $2bn M&A) surface instead of an all-regulatory set. Core publishes the nine; a Radar tier carries lighter cross-lens items (technical, operational, market) so every domain×lens×ecosystem cell can be served.
Anything already published in a prior week is dropped.
Mon–Sat it's a rolling "best nine so far" preview; Sunday 8pm the nine freeze and become the published digest.
select_signals.py applies the rubric; the rest of the pool stays visible as candidates on the dashboard and cockpit.
1. The automated cycle
Two scheduled agents drive an ISO-week loop that never needs reconfiguring — W28 becomes W29 becomes W30 on its own.
Agent ifeed-daily-signal-scan runs the full-matrix scan for the week's new BA/BE/CT/QMS signals, dedupes them into the pool, then rebuilds and commits all three surfaces.
Agent ifeed-sunday-signal-lock selects the strongest, lens-diverse nine (target 2 BA · 2 BE · 2 CT · 3 QMS), locks them, rebuilds the surfaces with the final set, and drafts the LinkedIn post for Monday 7:30.
The 7:30 run computes the new ISO week and creates its folder + registers it. The old week stays frozen; the new week starts filling. No manual step.
2. What runs each morning
One scan, one build command, three surfaces — all from a single canonical file.
Primary sources only (FDA, EMA/CHMP/PRAC, MHRA, ICH, EDQM, RAPS), real in-window dates, deduped. Broad capture — awareness first, selection later.
The pool is written to Market research/data/signals/2026-Wnn.json — the single source of truth every surface reads from.
daily_build.py regenerates the review dashboard, the cockpit data, and the ifeed.ie week page, and commits each repo. Push = deploy.
3. The three surfaces
All three are projections of the same canonical week — internal working surfaces plus the public digest.
| Surface | What it shows | Repo → live |
|---|---|---|
| Review dashboard | Every raw signal in the pool, with source audit + intelligence view | ifeed-private-review-dashboards → dashboards.netlify.app/weeks/wNN |
| Signal cockpit | The editorial room — all signals across the four domains, premium design | ifeed-ecosystem module → ifeed-signal-cockpit.netlify.app |
| ifeed.ie | The public weekly digest — the finalized nine (on approval) | ifeed-public → ifeed.ie/signals/ |
4. Sunday lock & LinkedIn
The Sunday agent picks the nine by importance and domain balance, validates them (unique ranks, no empty fields; count/mix are targets that warn, so lumpy weeks still lock), and freezes them as the week's canonical set.
build_week.py drafts the weekly post from the nine + the ifeed.ie week URL into linkedin-draft.md, ready to review and post Monday 7:30 (by you, or via n8n).
5. The engine
Small deterministic scripts in signalmanagementsystem/signal-automation-workflow/ — the agents call these, so every run follows the same path.
Resolve the current ISO week (auto-roll) and ensure its folder exists.
Dedupe the day's finds by URL/title, append to the pool, log to capture.md.
Validate + freeze the nine; write the week's canonical; set state to locked.
The selection rubric — picks the nine (domain frame + priority tier + confidence).
Enrich canonical → apply the rubric → run all three surface builders → commit each repo.
One double-click in the signal-management folder → pushes all three surfaces live.
Fan the locked nine to every surface's data + draft the LinkedIn post.
RUNBOOK-daily-scan.md and RUNBOOK-sunday-lock.md are the exact prompts the two agents follow.
6. Local · Git · Netlify
Everything is traceable: edit data or builder → build → commit → push → Netlify auto-deploys.
| Surface | Local | Git | Deploy |
|---|---|---|---|
| Dashboard | signalmanagementsystem/dashboard | ifeed-private-review-dashboards | git push → Netlify |
| Cockpit | iFeed Home/ifeed-ecosystem/modules/signal-cockpit | ifeed-signal-cockpit | git push → Netlify |
| ifeed.ie | iFeed Home/ifeed-web | ifeed-public | git push → Netlify |
| Canonical | Market research/data/signals/2026-Wnn.json | — | source of truth |
7. The two human gates
The agents scan, build, and commit autonomously. Two steps stay with a person, by design.
After the morning build, run deploy.command in the signal-management folder — it pushes the dashboard + ifeed.ie and deploys the cockpit in one step, so local, git and all three live sites match. (Wire a GitHub token / Actions later to make even this hands-free.)
ifeed.ie's public digest and the LinkedIn post go out on your approval — never a raw, unvetted daily scan. The agent drafts; you release.
This is the living source of truth for the iFeed signal process — it runs on schedule (daily 7:30 scan + build, Sunday 8pm lock + LinkedIn draft, Monday roll) and on-demand (whenever you ask, e.g. a mid-week scan across Perplexity / Comet / Gemini + verification). Any confusion, follow this page; it is updated as the process evolves. One canonical file → three surfaces → one deploy.