WORLD & OPERATOR AUTOMATION · ACTIONS & WORKER ROUTINES · CLAUDE MEMORY · THE REPOSITORY OUTPUTS always 65 sources · 14 live feeds tripwire Worker (Cloudflare) polls 14 feeds · gate.js admits alert the moment a feed moves poll admitted hit 02:20 stale-branch-cleanup.yml closes abandoned branches ~03:30 · weekdays source-mirror.yml dispatched by the brief · 4–6 min Daily brief six lanes → materiality gate → brief sources/latest/ · priors.md · tracking/tripwire-hits.jsonl dispatch snapshot + extractors reads → pull request routine-pr.yml 7 lints · merge · deploy briefs/YYYY-MM/… events.md Telegram one message per lead item merge items · or one LINT-FAIL hourly :17 · 05–22 you reply to an item feedback.yml Telegram getUpdates feedback.md verdicts, chat-filtered reply_to_message append 05:30 · Mon earnings-fetch.yml Finnhub calendar · prices IR watch (Mondays) overhang board · compiled series earnings.json · ir-ledger.md · data/series/financials.jsonl rebuild PR via gates 06:00 · 08:00 orbit-track.yml · deploy- pages.yml TLEs · Astro build data/orbit → every store the site reads satcomintel.com 894 pages build reads deploy 20:30 · 20:50 EDGAR · FCC · ITU · press · IR source-mirror.yml · tripwire- log.yml 15 steps: fetch → extract → build sources/latest/ · data/spectrum · data/companies · data/financials rebuilt, never hand-edited fetch commit snapshot 21:00 · weekdays Daily retro score → MISS root cause → rewrite doctrine briefs/ · feedback.md · scorecard.md → priors.md · cloud- synopsis.md reads today PR via gates ~22:00 · nightly Dossier deep-dive one dossier forward · absorb rows dossiers/<slug>.md · dockets.md · chart-queue.md stalest dossier PR via gates Sun 09:00 · 10:00 ir-models.yml FinBERT tone · stance · event study Ops repair fixes what the week's retros flagged data/qa/*.jsonl · OPS-BACKLOG.md · tripwire/ rebuild PR via gates on demand you reply 'dd' or dispatch Quick-Byte · Deep-dive one event, one screen email (Resend) archived in the repo first trigger quick-byte.yml the verdict loop: today's reply → tonight's doctrine DATA LANES · where code ends and judgment begins Spectrum filings All code. No judgment writes to this store. FCC Space Bureau notices · ITU as-received register · SNS databases extract-sat-filings.py · extract-itu-filings.py · self-tested parsers build-systems.py assembles one corpus data/spectrum/systems.jso nl 623 systems Fleet board · brief Lane C · Quick-Byte Company financials Two layers kept apart. xbrl: filings parsed by code. compiled: transcripts read by judgment, provenance-tagged. Consumers prefer xbrl. EDGAR XBRL · companyfacts · ESEF fetch-xbrl-filings.py · fetch-companyfacts.py · company desk build-financials.py layer = xbrl data/financials/financial s.jsonl one store per fact company pages · briefs IR watch reads a transcript or release appends data/series/financials.jsonl with layer = compiled Dossier tracked series Judgment extracts the number and cites the document. Code checks the shape: a date, a source, four cells, resolving row citations. primary documents: filings, orders, transcripts Dossier deep-dive reads, computes, cites lint-dossier.sh date · source · 4 cells dossiers/<slug>.md · TRACKED SERIES append-only dossier pages · charts Launch & constellation All code. planet4589 · china-in- space launch logs extract-launch.py · extract-constellation.py source-mirror.yml data/series/launch.jsonl · constellation.jsonl cadence charts · dossiers Earnings calendar US dates by code. Ex-US dates by judgment, from the operator's own IR calendar only. Finnhub scripts/earnings/fetch.m js earnings-fetch.yml · 05:30 earnings.json calendar Daily brief confirms an ex-US date writes earnings-overlay.json overlay Call intelligence Code and a model, not Claude: FinBERT scores are deterministic given the weights. inbox/ transcripts extract-qa.py verbatim question turns score-tone.py · score- stance.py · event- FinBERT · abnormal returns data/qa/*.jsonl IR page Breaking news Code admits, a human escalates, judgment analyses. 14 live feeds tripwire Worker · gate.js rules admit or drop tracking/tripwire- hits.jsonl alert + nightly log you reply 'dd' on-demand deep- dive one-pager Daily brief · runs weekdays ~03:30 UTC READS STEP WRITES STEP 1 · LOAD THEORY Load doctrine and the last brief priors.md, the most recent briefs/ file STEP 2 · MULTI-LANE SWEEP (sweep window derived above) Dispatch source-mirror.yml and tripwire-log.yml, wait for a fresh manifest, then sweep six lanes sources/latest/manifest.json, sources/latest/ LANE 0 · WHAT JUST BROKE (last quarter of sweep window, minimum 6 hours, open aperture) Open-aperture web search for what just broke (last quarter of window, min 6h) web LANE F · TRIPWIRE PRE-CATCH (READ FIRST) Read the tripwire's hits since the last brief so the other lanes hunt only what it missed tracking/tripwire-hits.jsonl, tracking/deepdive-queue.md LANE A · ENTITY SWEEP (full sweep window, all languages, standing watchlist) Entity sweep of the standing watchlist, all languages priors.md, sources/latest/, web LANE B · WEAK SIGNALS (Tier 1 and Tier 2 from priors.md SIGNAL TYPOLOGY) Weak-signal hunt, Tier 1 and Tier 2 patterns priors.md, dossiers/ LANE C · FILING AND REGULATORY CONFIRMATION (full sweep window) Filing and regulatory confirmation from the extracted corpora data/spectrum/systems.jsonl, data/spectrum/itu-comments.jsonl, sources/latest/ LANE D · WAYBACK DIFFS RETIRED 2026-09-13 (owner decision) — web.archive.org unreachable from the sandbox since July; lane is skipped LANE E · MANUAL INTEL INBOX (inbox/ in this repo) Read new inbox documents; log them inbox/ inbox/LOG.md STEP 3 · APPLY THE MATERIALITY GATE The materiality gate: decide push / weak signal / discard for every candidate briefs/, priors.md confirmed publication timestamp? no tag TIMESTAMP UNVERIFIED, never push yes: continue same event already in briefs/? no continue yes: not novel: drop unless escalation age tier permits this weight class? no carry to Detail as STALE-CONTEXT or drop yes: push candidate STEP 4 · WRITE THE BRIEF -> briefs/YYYY-MM/YYYY- MM-DDTHHMMZ.md (UTC run time) Write the brief: Push lines, Detail blocks, Weak signals, Manual scan queue, Sweep ledger, Retro notes with VERIFIED priors.md, .claude/skills/desk-prose/SKILL.md briefs/YYYY-MM/YYYY-MM-DDTHHMMZ.md lint-brief.sh LINT-FAIL → fix, re-run prose-lint.py LINT-FAIL → fix, re-run STEP 4b · SOURCE SCOUT (do this ONCE per brief, after the lanes) Source scout and watch calendar: flag new sources, add or advance dated events earnings.json, earnings-overlay.json sources/candidates.md, events.md, earnings- overlay.json lint-ledgers.py LINT-FAIL → fix, re-run STEP 4b · MAINTAIN THE WATCH CALENDAR (events.md, repo root) Source scout and watch calendar: flag new sources, add or advance dated events earnings.json, earnings-overlay.json sources/candidates.md, events.md, earnings- overlay.json lint-ledgers.py LINT-FAIL → fix, re-run STEP 4c · FLAG CAPITAL EVENTS FOR THE LEDGER Flag every pushed item that describes money moving with a CAPITAL: line for the weekly ledger pass; the brief writes no briefs/ STEP 5 · SHIP Run the format and prose lints, then open a ready-for-review pull request pull request lint-brief.sh LINT-FAIL → fix, re-run prose-lint.py LINT-FAIL → fix, re-run lint-funding.py LINT-FAIL → fix, re-run ready-for-review pull request routine-pr.yml · every check must pass 1. lint: brief format 2. lint: dossier format 3. lint: dossier merges 4. lint: dossier compress-handoff claims 5. lint: stale handoffs 6. lint: thread taxonomy 7. lint: ledgers 8. lint: prose 9. lint: funding store 10. lint: launcher sheets all pass merge · deploy · Telegram items any error PR stays open · one (…-LINT-FAIL) message Daily retro · runs weekdays 21:00 UTC READS STEP WRITES STEP 1 · LOAD Load every brief since the last retro, plus scorecard, priors and feedback in full briefs/ since last retro, scorecard.md, priors.md, feedback.md STEP 2 · SCORE PAST CALLS -> append to scorecard.md Score each pushed item LANDED / WHIFF / MISS; a MISS names the lane, language and source that would have caught it briefs/, feedback.md, web scorecard.md STEP 2b · ZERO-PUSH REPLIES ARE USER-FLAGGED MISSES Treat every reply to a [ZERO] notice as a reader-flagged MISS and diagnose it feedback.md scorecard.md STEP 2c · FORWARD TASKING: process task: verdicts from feedback.md Apply task: verdicts from the reader — add to watchlist, track a topic, add to a lane feedback.md priors.md, scorecard.md STEP 2d · DOSSIER HANDOFF: process DOSSIER-NOTE rows from scorecard.md Process DOSSIER-NOTE rows: FOR-RETRO becomes doctrine input, FOR-BRIEF goes to the watchlist or a thread; FOR- scorecard.md priors.md, scorecard.md STEP 2e · PROCESS THE BRIEF'S ## Retro notes Fold the brief's Retro notes into the MISS diagnosis and the prune; read VERIFIED blocks when scoring briefs/ Retro notes priors.md, scorecard.md STEP 3 · REWRITE & PRUNE priors.md (this is the learning step) Rewrite and prune priors.md: thread weights, entries, watchlist, typology, priorities priors.md, scorecard.md priors.md lint-priors.py LINT-FAIL → fix, re-run prose-lint.py LINT-FAIL → fix, re-run STEP 3.5 · REFRESH cloud-synopsis.md (the Threads-page constellation narrative) Rewrite cloud-synopsis.md: the week, month and year takeaways for the Threads page briefs/, priors.md cloud-synopsis.md prose-lint.py LINT-FAIL → fix, re-run STEP 3.6 · REFRESH desk-ledger.md (cumulative sweep tally) Sum every brief's Sweep ledger block into desk-ledger.md briefs/ Sweep ledger blocks desk-ledger.md STEP 4 · MISS GAP ANALYSIS (separate from scoring) Four-week MISS gap analysis: clustering by language, lane, entity, signal tier; propose one doctrine change scorecard.md scorecard.md STEP 4b · SOURCE CANDIDATES REVIEW Review source candidates from the last 7 days; promote or decline sources/candidates.md, web sources/candidates.md, priors.md STEP 4d · X HANDLE HEALTH REVIEW (two lists, two bars) Every ~14 days, verify, populate or retire both X handle lists priors.md, sources/latest/ priors.md, scorecard.md STEP 4f · TRIPWIRE RECALL REVIEW Tripwire recall review: did the wire fire on what mattered and stay quiet otherwise tracking/tripwire-hits.jsonl, briefs/ scorecard.md STEP 4e · DOSSIER SECTION BUDGET AUDIT Run lint-dossier.sh on every dossier; file a compress handoff for each over-budget section dossiers/ scorecard.md lint-dossier.sh LINT-FAIL → fix, re-run STEP 4c · EXECUTION GAP EMISSION Emit the EXECUTION GAPS block that Sunday's ops-repair greps scorecard.md STEP 5 · SHIP Run the prose lints, then open a ready-for-review pull request pull request prose-lint.py LINT-FAIL → fix, re-run lint-priors.py LINT-FAIL → fix, re-run ready-for-review pull request routine-pr.yml · every check must pass 1. lint: brief format 2. lint: dossier format 3. lint: dossier merges 4. lint: dossier compress-handoff claims 5. lint: stale handoffs 6. lint: thread taxonomy 7. lint: ledgers 8. lint: prose 9. lint: funding store 10. lint: launcher sheets all pass merge · deploy · Telegram items any error PR stays open · one (…-LINT-FAIL) message Dossier deep-dive · runs nightly ~22:00 UTC READS STEP WRITES STEP 0 · PICK THE DOSSIERS (up to two) Pick up to two dossiers: creation handoffs first, then compress handoffs, then the stalest _Updated date scorecard.md, dossiers/ scorecard.md STEP 0b · PICK THE COMPANY PROFILE (up to one, its own slot) Pick up to one company profile by oldest _Updated among Tier 1 companies companies/registry.json, dossiers/companies/ STEP 1 · LOAD CONTEXT Load the dossier, priors, every brief since its last update, and the relevant mirrored primary sources dossiers/<slug>.md, priors.md, briefs/, sources/latest/ STEP 2 · RESEARCH THE TOPIC (this is the deep part) Research: update every TRACKED SERIES row candidate from primary documents, compute derived figures, hunt sources/latest/, inbox/, web STEP 3 · REWRITE THE DOSSIER Rewrite the dossier in the wiki voice; append rows; update falsifiers; resolve open questions dossiers/README.md dossiers/<slug>.md, dockets.md, chart-queue.md lint-dossier.sh LINT-FAIL → fix, re-run prose-lint.py LINT-FAIL → fix, re-run STEP 4 · FEED THE DOCTRINE LOOP Hand doctrine findings to the retro as DOSSIER-NOTE rows; never edit priors.md scorecard.md STEP 5 · SHIP Run the dossier, merge, prose and ledger lints, then open one ready-for-review pull request pull request lint-dossier.sh LINT-FAIL → fix, re-run lint-dossier-merge.sh LINT-FAIL → fix, re-run prose-lint.py LINT-FAIL → fix, re-run lint-ledgers.py LINT-FAIL → fix, re-run ready-for-review pull request routine-pr.yml · every check must pass 1. lint: brief format 2. lint: dossier format 3. lint: dossier merges 4. lint: dossier compress-handoff claims 5. lint: stale handoffs 6. lint: thread taxonomy 7. lint: ledgers 8. lint: prose 9. lint: funding store 10. lint: launcher sheets all pass merge · deploy · Telegram items any error PR stays open · one (…-LINT-FAIL) message IR watch · runs Mondays 05:30 UTC READS STEP WRITES STEP 1 · LOAD Load the overhang board, the last rows of the series, the corporate events and new inbox transcripts ir-ledger.md, data/series/financials.jsonl, data/series/funding.jsonl, events.md, inbox/ STEP 2 · EARNINGS SWEEP (the store) For each covered operator, find newly published periods and append observation rows with provenance inbox/, sources/latest/, web data/series/financials.jsonl json parse of every appended line LINT-FAIL → fix, re-run STEP 2b · CAPITAL LEDGER (data/series/funding.jsonl) Collect the week's capital-event candidates, classify each with the three-question test, write one ledger row per briefs/, dossiers/, inbox/, sources/latest/, data/series/README.md data/series/funding.jsonl, data/capital- floor/read.md python3 scripts/lint- funding.py LINT-FAIL → fix, re-run STEP 3 · OVERHANG BOARD (ir-ledger.md) Update each open overhang: latest evidence, date, source, and direction building / easing / static web, inbox/ ir-ledger.md STEP 4 · DATED OBLIGATIONS (events.md) Append IR-relevant dated events, kind=corporate events.md STEP 5 · SHIP Run the ledger lint, then open one ready-for-review pull request pull request lint-ledgers.py LINT-FAIL → fix, re-run ready-for-review pull request routine-pr.yml · every check must pass 1. lint: brief format 2. lint: dossier format 3. lint: dossier merges 4. lint: dossier compress-handoff claims 5. lint: stale handoffs 6. lint: thread taxonomy 7. lint: ledgers 8. lint: prose 9. lint: funding store 10. lint: launcher sheets all pass merge · deploy · Telegram items any error PR stays open · one (…-LINT-FAIL) message Ops repair · runs Sundays 09:00 UTC READS STEP WRITES STEP 1 · LOAD Load the backlog and grep the scorecard for execution-gap markers OPS-BACKLOG.md, scorecard.md STEP 1c · TRIPWIRE MECHANICAL HEALTH Tripwire mechanical health: compare the worker's diag snapshot against previous ones tracking/tripwire-diag.json STEP 1b · X USAGE CHECK X API spend run-rate versus the project cap sources/latest/x-usage.json OPS-BACKLOG.md STEP 2 · TRIAGE Triage each gap: already open, new, or closed/won't-fix OPS-BACKLOG.md OPS-BACKLOG.md STEP 3 · FIX OR FILE Fix or file each open item: replacement URLs, parser fixes, gate fixtures scripts/source-mirror.sh, tripwire/ scripts/source-mirror.sh, tripwire/feeds.json, tripwire/src/gate.js, OPS-BACKLOG.md STEP 3b · WIRE PROMOTED SOURCES INTO THE MIRROR Wire PROMOTED sources into the mirror's fetch loop sources/candidates.md scripts/source-mirror.sh STEP 4 · OPS-BACKLOG.md Write every change to the repair log OPS-BACKLOG.md STEP 5 · SHIP Open a DRAFT pull request; a human reviews and merges pipeline changes draft pull request DRAFT pull request never marked ready by the routine you review and merge pipeline changes need a human merged main · next runs use the fix
click a routine to fly in · click a step for its criteria · ← → walk the steps · esc whole machine · drag to pan · wheel to zoom

The same content as a document, with the file contracts and the merge gate in full:docs/ALGORITHM.md. A step that exists in a routine but not in the classification fails the build, so this map cannot quietly drift from the machine.