Pipeline Wiring

Every repo, every artifact, every routine — and which of them are copies of each other.

Re-audited 25/09/2026, 05:00–06:00 UTC, against live data: gh repo list + the Pages API, curl on every Pages URL, the routine API (list and individual get by id), and the artifact API. Anything not re-checked in that pass is labelled.

Address: ttrng3.github.io/pipeline-wiring/ · source ttrng3/pipeline-wiring · all routines

14
repositories · 10 with a live Pages site
25
artifacts
14
enabled routines (11 scheduled, 1 recurring briefing, 2 one-shot) — Pipeline Wiring weekly added 26/09
2
enabled routines can touch your Mac

Corrected 25/09 The 24/09 version of this page said 12 repos, 20 artifacts, 0 touch your Mac, listed a repo called famrec that does not exist, called Signal Desk broken after its repo had been restored, and swapped two preview labels. All of that is fixed below; the full list is in section 7.

The flow

All nine pipelines are built in this order. The artifact is the last step, never the source, and never a step that can block the repo write.

schedule → cloud routine → source ↓ GitHub ↓ Pages (truth) ↓ artifact (mirror)

An address and a preview, and they are not the same thing. The address is the Pages URL — that is what goes in a document, an email or a message. The Cowork preview is a copy of that same page inside Claude; you open it from claude.ai → Artifacts. Its link is never published here (Ty, 29/09): this repo is public, so no preview link or artifact id appears on this page.

1 · The nine pipelines

Each row: a routine on a schedule → its repo → its Pages site → the preview named in that routine’s own prompt. All Pages URLs returned HTTP 200 on 25/09. Since 26/09 this page is the ninth: a daily routine reads the other eight (and itself) and writes data/status.json, which fills the live cells below.

PipelineFires (UTC)NextLast heartbeat in repoSourceRepoAddressPreview
TMDVSun 11:0027/0922/09Drive trackers + Outlookttrng3/Omni-TMDVttrng3.github.io/Omni-TMDV/preview
OMNI SitecheckMon 15:4528/0922/09SharePoint — OMNI treettrng3/Omni-sitecheckttrng3.github.io/Omni-sitecheck/preview
ECOPM SitecheckMon 14:0028/0922/09SharePoint — ECOPM treettrng3/Ecopm-Sitecheckttrng3.github.io/Ecopm-Sitecheck/preview
ECP × ELASun 14:0027/0923/09Drive weekly PDFsttrng3/ecp-ela-weeklyttrng3.github.io/ecp-ela-weekly/preview
Trade JournalTue–Sat 04:00 11:00 Hanoi, since 26/0929/0926/09Webull CSVs on Drivettrng3/Trade-Journalttrng3.github.io/Trade-Journal/preview
GDSHMon 01:0028/0922/09Drive budget workbookttrng3/gdsh-reportttrng3.github.io/gdsh-report/preview
Ops-Dashboard KSNB1st & 15th 06:0001/1025/09Outlook + Drive 08 Omni Service - OMNI/09 TCKTttrng3/Ops-Dashboardttrng3.github.io/Ops-Dashboard/preview
Omni-Audit1st 03:00 (monthly system run, Part B)
fallback 2nd 01:00
01/1025/09Drive audit handoffttrng3/Omni-Auditttrng3.github.io/Omni-Audit/preview
Pipeline Wiring this pageDaily 16:00 23:00 Hanoi; Sundays only before the daily switch27/09—The nine public repos + the nine previewsttrng3/pipeline-wiringttrng3.github.io/pipeline-wiring/preview

“Last heartbeat” is the timestamp in each repo’s data/.last-check; “Next” is computed from each cron. Static values as of 25/09 until data/status.json loads. Every schedule above is the live cron read from the routine API on 25/09, except Pipeline Wiring’s: its daily cron is the routine update made in the same turn as the daily-detection merge (work/260930-daily-detection/). Mirror check repeated 25/09: all eight previews in section 3 have exactly one <html> tag on read-back, so none renders blank.

2 · The other five repos

14 repos in total: the nine above plus these five.

RepoVisibilityPagesWhat drives itLast push
signal-desk-collectorPrivateNoneGit source of the Signal Desk briefing (daily 00:10). Restored after the 24/09 deletion25/09
passbookPublicLiveBy hand — no routine names it25/09
vitals-journalPrivateNoneBy hand23/09
vitals-appPrivateNoneBy hand24/09
japan-travel-2026PublicOff (404)By hand — store only07/09

Hand-driven repos have no heartbeat, so a stale one looks the same as a healthy one. market-intel-collector is not in the account (deleted 24/09, not restored).

3 · The twenty-five artifacts

Nine are previews of a Pages site

Each is named as its mirror target in the routine prompt that publishes it.

Preview (artifact title)Address (circulate this)Live state
TMDV Điều hànhttrng3.github.io/Omni-TMDV/see section 1
OMNI Sitecheck Điều hànhttrng3.github.io/Omni-sitecheck/see section 1
ECOPM Sitecheck — Điều hànhttrng3.github.io/Ecopm-Sitecheck/see section 1
Điều Hành Vận Hành ECP × ELAttrng3.github.io/ecp-ela-weekly/see section 1
Webull Trade Journalttrng3.github.io/Trade-Journal/see section 1
Thẩm định Giáo dục Sông Hồngttrng3.github.io/gdsh-report/see section 1
Dashboard Giám sát Ngân sách & Dòng tiền — KSNBttrng3.github.io/Ops-Dashboard/see section 1
Ecosystem Auditttrng3.github.io/Omni-Audit/see section 1
Pipeline Wiring (this page)ttrng3.github.io/pipeline-wiring/see section 1

Ecosystem Audit is back in this table, 26/09. Its preview was deleted on 25/09 by reading “one surface” as “no artifact”; Ty’s rule is one address, one preview — the Pages URL is the only link, and the Cowork preview exists but its URL is never circulated. Rebuilt from the repo on 26/09 (fragment + data/), both Omni-Audit routines repointed, docs/audit-refresh.md rewritten. Every pipeline row above now has a preview.

Sixteen have no Pages twin that a routine keeps in sync

For these the artifact is the only copy; open it from claude.ai → Artifacts by its title (links are not published here, Ty 29/09). Deleting one destroys the output rather than de-duplicating it. Dates are the artifact API’s “updated” value on 25/09.

ArtifactUpdatedWhat writes it
Signal Desk25/09Signal Desk routine, daily 00:10. Run logs read 25/09: the 00:11 run failed because the repo was still missing; the 02:06 run, after the restore, succeeded and published the 25/09 briefing with no source errors. There is no briefing for 24/09. The first scheduled run since the restore is 26/09 00:10.
Ecosystem Health12/09Named by title (not id) in the monthly system run: Part A writes Ecosystem Health, Part C writes Second Brain. Next run 01/10 03:00. KB Monthly Update, which used to write Second Brain, is disabled.
Second Brain, Applied15/09
Passbook24/09Renamed from “Vitals Journal”. Preview of the public passbook Pages site. It had fallen a build behind; on 25/09 it was republished from the repo’s frag.html (commit 7ba58c2) and verified byte-identical to it, downloads capability kept. No routine keeps them in sync, so it is republished by hand after each push.
Passbook Review24/09Not duplicates Same title, different documents, both opened 25/09 (tell them apart by opening them): one is the security & council review (“tested, attacked, and put before the council”, ~2,600 words); the other is the product review (~760 words). Consider renaming one.
Passbook Review24/09
Passbook Thirty Visitors24/09One-off document.
Omni Next Level25/09Omni strategy blueprint; record in Claude outputs/Omni Strategy/. One-off, updated by hand.
GDSH Turnaround v224/09One-off document. Not the GDSH pipeline mirror (that is “Thẩm định Giáo dục Sông Hồng”).
Vitals Build Blueprint14/09Describe commercial Vitals, closed 23/09.
Tư Cách Pháp Lý Vitals20/09
Chuyến Nhật 202607/09Japan trip. The repo’s Pages site is off (404), so these are the only readable copies.
Nhật 2026 Bỏ Túi07/09
Mẫu Kế Hoạch Chuyến Đi07/09
Ecosystem Map22/09One-off documents. No repo, no routine.
Portfolio Position23/09

Every artifact is private until you share it from the page’s Share menu.

4 · How the routines connect

One routine carries three coupled parts; one routine is its fallback. Everything else is independent.

1st, 03:00 UTC Monthly system run Part A Ecosystem Audit —writes→ Drive Claude outputs/Audit/ + Ecosystem Health Part B publish —writes→ ttrng3/Omni-Audit → Pages → preview Part C KB update —writes→ Drive Claude outputs/SYS/ + Second Brain, Applied 2nd, 01:00 UTC Omni-Audit publisher (fallback) — picks up the Drive handoff if Part B did not publish 2nd, 02:00 UTC Learning Matrix —writes→ pipeline-wiring/learning-matrix.html independent TMDV · OMNI · ECOPM · ECP×ELA · Trade Journal · GDSH · Ops-Dashboard · Signal Desk own source, own repo, own page, no shared state Daily, 16:00 UTC Pipeline Wiring weekly check —reads→ all nine repos + previews —writes→ pipeline-wiring/data/status.json + .last-check + new triage/ intents (read-only everywhere else) one-shot Nhật 2026 pre-trip brief 23/11 02:00 · post-trip wrap-up 11/12 03:00 disabled KB Monthly Update (folded into Part C) · KSNB weekly (replaced by Ops-Dashboard 1st & 15th) · 9 one-off test/verify routines

The last monthly system run (fired 25/09 02:57 UTC) reports SUCCEEDED.

5 · Mac dependency — two routines and three Mac-only jobs

Found 25/09 Two enabled one-shot routines hold the full remote-devices tool set (device_bash, device_list_dir, device_stage_files, device_commit_files, credential autofill and more):

  • Nhật 2026 — Bản tóm tắt 1 trang trước chuyến, fires once on 23/11/2026 02:00 UTC.
  • Nhật 2026 — Tổng kết sau chuyến + cập nhật Kho điểm, fires once on 11/12/2026 03:00 UTC.

Both were created from a Cowork project on 05/09. Neither appears in the routine list call (see Caution in section 7); they were found only by fetching their ids one by one. Neither has a file mount.

Added 28/09 The knowledge graph is Mac-bound too, by design, and is not a routine. It is the graphify index over 93 Knowledge Base/ (Markdown only), at graphify-out/ on Drive. A cloud routine cannot run it, because extraction dispatches subagents from a live Claude Code session. Rebuilt by hand with /graphify . --update. Last built 28/09/2026: 2,498 nodes, 4,304 edges, health check clean (0 dangling). Next due about 28/10/2026. Nothing from the graph is published here: its content is internal.

Added 03/10 Trade Journal’s monthly Drive backup is a Mac job, by Ty’s choice, and is not a routine. A launchd job runs daily at 14:00 Mac local time (Hanoi while the Mac is in Vietnam) and acts once a month. It copies the month’s master backup from the GitHub release into Drive 09 Trading/Trade Journal/Backups/, then moves the CSVs already in the journal out of Raw Records/. If the Mac is asleep it catches up on the next wake; if it is switched off for the day, the next daily run picks it up. From the 4th of each month the daily check looks for that month’s master in Backups/; if it is missing, the check files a triage note, which emails Ty. Ty chose it over a Google credential in GitHub (Trade-Journal #13, merge 502ae8e). First real run 01/11/2026. Runbook: Trade-Journal docs/backup.md.

Added 08/10 Trade Journal’s bot collector is a Mac job too. The trading bots run on the Mac and write their day files there, so only the Mac can collect them. A launchd job runs at 10:30 Mac local time (Hanoi while the Mac is in Vietnam), Tue–Sat, and copies the last session’s bot rows (an allowlist of fields; no broker ids) plus 1-minute bars to Drive Raw Records/Bots/ with rclone, which reaches Drive by path because launchd cannot read the Drive mount. The 11:00 Hanoi (04:00 UTC) routine reads that folder, so the collector lands first only while the Mac’s clock is UTC+6:30 or further east. If the Mac is asleep at 10:30 the job runs when it wakes; if that is after the routine, or the Mac is off, that day is compiled without its bot rows and its day page says “bot bundle missing” (Trade-Journal docs/wiki.md, step 1); nothing on this page flags it. Trade-Journal #15 and #16 (5864b32, 1aa87e9).

The ten enabled routines in the list, and TMDV (fetched by id), hold no remote-devices tool and have file_mounts: []. The 24/09 claim that every routine reports bound = false cannot be re-checked: the API response has no bound field.


6 · Done — the 24/09 change log, as written then

Open the 24/09 log. Two lines in it are now wrong, and are marked.

The flow is now uniform across all seven. Each routine writes its source into GitHub, Pages serves it, and the mirror publishes last. A failed mirror reports and stops — it can never cause an undo, retry or rewrite of the repo.

Every mirror was verified, not assumed. Fragments built with zero doctype/<html>/<head>/<body> tags; data files published first and the page second on the larger payloads, because a page sent alongside a big files payload comes back blank; exactly one <html> tag on read-back.

Five renderers fetch data/ relatively and only fall back to the absolute Pages URL — which CSP blocks inside an artifact. That is why each mirror carries its own data/ copy. GDSH is the exception: build_auto.py bakes the numbers in and it fetches nothing, so there the mirror is the page. Each routine now carries that distinction in writing.

Superseded Audit publisher moved 02:00 → 04:00 Monday. Since then the publisher became Part B of the monthly system run (1st 03:00), and the old publisher is a fallback on the 2nd at 01:00. It used to fire one hour before its own producer, so whenever the 1st fell on a Monday the fresh audit waited a week — 2027-02-01, 2027-03-01, 2027-11-01. Now one hour behind, with the reason written into the prompt so nobody moves it back.

GDSH renamed to “weekly check, monthly period” — the cron was always weekly. Typo fixed: SINH BẮNG CODE → SINH BẰNG CODE.

Three plaintext credential files moved to Drive trash — a github_pat_…, an sk-ant-oat01-…, and a third PAT-shaped file.

Japan Pages switched off — the public URL 404s; the repo is untouched.

Ops-Dashboard restyled to the Ty Artifact Standard — it was the last page on the retired palette. Variable names were kept, because ksnb-render.js builds its SVG charts from them and writes color:var(--red) onto 12.5px table numbers; so every accent is now a text-safe ink (blue 8.2:1, red 6.6:1, amber 6.4:1, green 6.6:1 on white) rather than a bright mark. Chart pairs checked with the CVD validator: blue/red ΔE 24.3, blue/amber 25.9, green/red 7.0 deutan — the last is legal because the bars also encode sign by position around a zero axis and the MoM table repeats every signed figure. Nothing outside the stylesheet changed; the file is otherwise byte-identical.

That restyle fixed a real defect. The old sheet carried a second, dead :root block from the 20/09 reskin that aliased --blue and --green to the same colour. Anywhere both appeared — the info vs good bullet dots, the KPI border tops — they were indistinguishable. They are now two distinct hues.

Ops-Dashboard became the eighth pipeline. The repo was already repo-first with a runbook, heartbeat and freshness check — but no routine had ever been created, so it only moved when run by hand. It now has one. Superseded not Mondays: the live cron is 0 6 1,15 * *, the 1st and 15th.

Its "mounted folder" was never a Mac dependency. The source it calls thư mục Drive cục bộ 09 TCKT is a Google Drive folder the connector reads from the cloud (since 2026-09-25 at 08 Omni Service - OMNI/09 TCKT, same folderId) — the same false constraint Trade Journal had. Both PnL files are readable; the routine now scans Outlook and that folder, because TCKT has started delivering reports there instead of by email.

Three artifacts became one — Starter Story and Learning Matrix are tabs on this page. One duplicate deleted — the old Ecosystem Audit copy, after confirming the repo already held the same run.

7 · Open — needs you

Changed 08/10 Trade Journal: the bot trading wiki
  • The journal has a wiki page, ttrng3.github.io/Trade-Journal/wiki.html (Wiki button in the journal header). Each trading day’s bot and manual trades are compiled into linked pages (days, mistakes, setups, what-ifs, rules); a one-page weekly report follows on Saturdays. First compiled day 07/10.
  • How it runs: a Mac job collects the bots’ day files to Drive 09 Trading/Trade Journal/Raw Records/Bots/ at 10:30 Mac local time, Tue–Sat (section 5); the existing Trade Journal routine at 11:00 Hanoi then adds a wiki step after the Webull sync. The wiki step runs on every routine run (Tue–Sat), quiet sessions included, and a wiki failure never blocks or undoes the journal’s own data push (Trade-Journal docs/nightly-sync.md). No new routine and no schedule change.
  • Trade-Journal #14 1a9a42e, #15 5864b32, #16 1aa87e9, #17 7092f70. Runbook: Trade-Journal docs/nightly-sync.md, “The wiki step”.
Changed 03/10 Trade Journal: monthly Drive backup on the Mac
  • The master backup now reaches Drive (Trade-Journal #13, merge 502ae8e). Until 03/10 it lived only as a GitHub release. A Mac job now copies it to Backups/ each month and moves synced CSVs out of Raw Records/. October’s copy and the first move were done by hand the same day (recorded in the Trade-Journal PR #13 description). It is a new Mac dependency; see section 5.
Changed 03/10 Trade Journal: rules check on the page
  • The journal page flags rule breaks (Trade-Journal #12, merge commit 1ee5b0d, 03/10). The trade log carries a badge per broken rule and a “Rule breaks only” filter; Reports has a Rules card; Settings has an R field that stays in the browser and never reaches the repo. Page behaviour only: the schedule, routine, data and preview id are unchanged, and the preview was rebuilt from the merged page the same day.
Changed 26/09 Trade Journal: schedule, preview, page · Omni-Audit: preview rebuilt
  • Schedule moved 01:07 → 04:00 UTC (11:00 Hanoi), Tue–Sat. The Webull export lands in Raw Records/ around 08:30–10:00 Hanoi; the 08:07 fire found nothing on 25/09 and again on 26/09, and a manual run on 26/09 brought the new fills in. “The page did not update” in this pipeline means: check the CSV’s modified time against the run’s fire time before anything else.
  • The Cowork preview is a new artifact. The old one was deleted on 26/09 by reading “no artifact link” as “no artifact” — the same mistake as 23/09 — and Ty reversed it within the hour. Rebuilt from the repo (fragment, then the 50 data files), routine repointed, README now reads One address, one preview: the Pages URL is the only link, the preview must exist, its URL lives only in the routine prompt. The rule applies to every row above.
  • The page keeps a per-browser overlay. A CSV dropped on ttrng3.github.io/Trade-Journal/ used to vanish on reload (the snapshot alone was loaded). Imports, notes and settings made on the page now persist in that browser on top of the nightly snapshot, and prune themselves once the sync commits the same fills. The drop zone is also a click/tap/keyboard control — it only listened for a drag before.
  • Omni-Audit preview rebuilt too, same afternoon. Same misreading on 25/09, same fix: new artifact, Part B7 restored in the monthly run, fallback repointed, docs rewritten to One address, one preview. Section 3 counts nine previews and 25 artifacts again.
  • Pipeline Wiring became the ninth pipeline (Ty, 26/09). A Sunday 16:00 UTC routine runs tools/collect_status.py against the nine public repos, checks the nine previews with the Artifact tool, commits data/status.json + a heartbeat, and refreshes this preview. The “Next”, “Last heartbeat” and preview cells in section 1 now render from that file; the prose stays hand-written.
  • Routine renamed Trade Journal daily sync (Drive CSVs → GitHub → Pages, preview after); report now says whether the newest CSV arrived after the fire.
Corrected 25/09 What the 24/09 page got wrong
  • Repos: 12 → 14. famrec does not exist in the account. passbook, pipeline-wiring and a restored signal-desk-collector were missing from the count.
  • Artifacts: 20 → 25, now 24. New since then: Omni Next Level, GDSH Turnaround v2, Passbook Thirty Visitors and two called Passbook Review. “Vitals Journal” is now titled Passbook. Pipeline Wiring now has a Pages site, so it moves to the preview list.
  • Two preview labels were swapped. The Ops-Dashboard preview is “Dashboard Giám sát Ngân sách & Dòng tiền — KSNB”; the Omni-Audit preview is “Ecosystem Audit”. The previews were right; the names were on the wrong rows.
  • Omni-Audit schedule. The page said 1st 09:00. The live system is the monthly system run on the 1st at 03:00, plus a fallback on the 2nd at 01:00. None of the routines I could find has cron 0 9 1 * *.
  • “0 touch your Mac” was false. See section 5.
  • Signal Desk was listed as broken. Its repo is back and the routine created sessions on 25/09.
  • ECOPM was said to be two weeks behind (newest week 2026-09-W01). Its summary index ran to 2026-09-W03, the same week as OMNI. What was wrong: the 22/09 run wrote no detail files for W02 and W03, because the M365 connector returns only the TH summary sheet of these ~30 MB workbooks. Fixed 25/09 W02 and W03 backfilled from the source workbooks, and W01 rebuilt — commit 8fa5121, preview republished. The parser is now in the repo as tools/parse_sitecheck.py and runbook step 4 no longer claims the connector reads every sheet. A request for a lighter weekly file (no photos) has been drafted for Ty to send, so future weeks do not need a manual download.
  • The routine-connection diagram still showed KB Monthly Update and a Monday publisher. Both are retired; section 4 is redrawn.
Found 25/09 ECOPM detail files show a row number where the status should be

Every ECOPM detail file built before 25/09 stored each row’s STT (sequence number) in the status field for most rows. The page shows that number as the row’s status pill, so the “Tình trạng” column and its filter are wrong for most historical rows. September W01–W03 are now correct. Fixing the older weeks means re-reading their source workbooks; not done, awaiting your call.

Parked The two Japan routines with Mac tools — revisit before 23/11

Ty, 25/09: leave them for now. They fire once each, 23/11 and 11/12, and still hold the remote-devices tools. Come back to this before the first one fires.

Fixed 25/09 Second Brain, Applied had silently stopped refreshing

Its owner was KB Monthly Update, which was folded into Monthly system run (1st, 03:00). The merged prompt kept the republish as Part C step 4 — but the 25/09 test run skipped it, and skipped the Ecosystem Health db-write with it.

The cause is worth knowing, because it will recur elsewhere. The run probed for the Artifact tool with ToolSearch, which searches only deferred tools. An already-attached tool returns “No matching deferred tools found” — so a present tool looks exactly like a missing one. The run read that as unavailable and dropped both artifact steps without flagging it. Artifact and ArtifactData were in its allowed_tools the whole time.

The prompt now states the tools are attached, forbids the ToolSearch probe, marks both steps mandatory, and reports each outcome on its own notification line. This page has no Pages site — the artifact is its only address, so a skipped step shows up nowhere. Next real run: 1 Oct.

Closed 25/09 The two leaked tokens

Trashing a file does not revoke a credential. On 24/09 two files needed action at the provider:

  • routine_fire_token.txt — an Anthropic sk-ant-oat01-… session token. Revoke it in your account settings.
  • .github-token — 94 bytes, PAT-shaped, created 20/05. Revoke it if it is not one you already revoked.

Closed on Ty’s word, 25/09: a new token has been generated. One caution kept on the record: generating a new token does not switch off an old one. If either old token was never revoked or set to expire, it still works until it does.

Resolved 25/09 The “DELETE ME” routine is gone

A past session log shows the routine renamed “⚠ DELETE ME — retired Mac-bound Trade Journal” had a trigger id that the routine API returns not found for on 25/09, so it has been deleted.

Caution The routine listing is capped and drops rows silently

On 25/09 the list call returned 20 rows plus a next-page cursor the tool cannot follow. Five routines were missing from it and were found only by fetching ids one by one: TMDV (enabled), the two Japan one-shots (enabled), the retired KSNB weekly (disabled) and a one-off check from 09/09 (disabled). I fetched all 31 ids found in Drive notes, the repos and past session logs: those 5 exist, 26 no longer do. A routine whose id was never written down anywhere could still be missing, but no recorded id is unaccounted for.

Pipeline Wiring · re-audited 25/09/2026, Trade Journal row updated 26/09 · tabs: Wiring · Starter Story · Learning Matrix · repos from the GitHub API, Pages by HTTP status, routines from the routine API (list + get by id), artifacts from the artifact API. Items not re-checked on 25/09 are labelled.