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