Flags and incremental state (all jobs, desktop and online)
Rule (Atul, 18 Oct): every job — desktop (collector, harness, local models such as Gemini or Ollama jobs) or online (Claude check-in, MMDEP Assistant, hosted CI fallback) — follows the heartbeat and does incremental work only: it reads its state, processes only what changed since its last run, and writes its state back, so no other job repeats it. A new job is not merged until it has a row here.
Shared flags
| Flag |
Where |
Written by |
Meaning |
| Heartbeat |
control branch: heartbeat.json, HEARTBEAT.md |
Collector (hourly, wake, unlock, reconnect) |
ACTIVE while now < active_until_utc: the laptop is up and desktop jobs own laptop work |
| Laptop runner status |
inside heartbeat.json |
Collector, from GitLab |
online / offline / unknown |
| Stop switch |
control branch: harness/STOP |
Atul or MMDEP-PM |
Harness does nothing while present |
| Check-in late |
control branch: heartbeat.json (checkin_late, checkin_last_utc), HEARTBEAT.md, and the MMDEP row of latest.md (check-in late: last <time or none>) |
Collector, from the last commit to check-ins/ on reports (or docs/status/check-ins/ on main) |
The Claude check-in (08:50 and 19:50 IST) has left no report for over 14 hours |
| Data source failing |
control branch: data_sources.json (per ID: status, ms, content type, bytes, fails in a row), latest.md section "Data sources (daily)" and the MMDEP row's flags (data source <ID> failing <n> days in a row (<status>)) |
Collector, once a day, a read-only GET of each URL row in docs/registers/data-sources.md (#66) |
A registry source failed (non-2xx or timeout) two daily checks in a row; one failure is shown but not flagged |
| Memory: sessions stale |
control branch: memory.json, the repository's Flags in latest.md (memory: sessions stale) |
Collector, every 6 h (backlog B14, #92), read-only |
docs/sessions/ has no commit within 24 h of the repository's latest commit, or is missing; a repository it can't read shows "not visible" and no flag |
| Memory: CURRENT.md stale |
as above (memory: CURRENT.md stale); counts of open decision-log and question-atul items in the section "Memory (rules §21)" |
Collector, every 6 h (#92) |
docs/knowledge/CURRENT.md is missing or older than the last commit outside docs/ |
Job state (cursor per job)
| Job |
Runs on |
State file |
Incremental rule |
| Collector |
Laptop |
control: latest.json, history/ |
Snapshot each run; daily and weekly checks reuse cached results (site.json, certs.json) until stale |
| Harness |
Laptop |
control: harness/state.json, ledger.csv, LATEST.md |
Skips issues already pushed (waiting for review) and issues that failed until their body changes |
| Claude check-in |
Cloud (scheduled) |
main: docs/status/check-ins/state.json |
Only issues, PRs, branches and panel answers changed since last_run_utc; run-jobs only when heartbeat ACTIVE |
| MMDEP Assistant |
ChatGPT (attended) |
reports: state/mmdep-assistant.json |
Digest covers only items changed since last_digest_utc; ONLINE MODE only when heartbeat INACTIVE |
| Hosted CI fallback |
GitLab / GitHub cloud |
the pipeline itself + minutes in the digest |
Only for security, release or critical items, only while heartbeat INACTIVE, within the group budget (DR-011) |
| Actions sync (#57) |
Laptop, after each collector snapshot |
reports: actions/state.json (last Atul answers comment handled, every decision and whether it was commented and reached main) |
Only answer comments after the cursor; each decision commented and relayed once; a relay row lost before main is written again |
| Knowledge extract (B12) |
Laptop (by hand or scheduled) |
branch knowledge/<date>: docs/knowledge/state.json (hash per chat ID) |
Only chats new or changed since their last extract; cost to harness/spend.csv, stops before the monthly cap |
| Future model jobs (triage, preflight, quota probe) |
Laptop or cloud |
control: jobs/<job>/state.json |
Same pattern: read cursor, process new items, write cursor; check heartbeat first |
State file shape
{"job": "mmdep-assistant", "last_run_utc": "2026-10-18T06:30+00:00", "cursor": {"issues_updated_after": "...", "answers_rows": 142}, "handled": ["MMDEP#21", "PE#337"]}