You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Il nome `capitano-bridge` suggeriva una simmetria con `sentinel-bridge` (come se
lì vivesse la logica del Capitano), mentre è solo un nudge orario. Rinominato per
FUNZIONE: heartbeat-bridge.py + heartbeat-bridge-state.json + /tmp/heartbeat-bridge.log
+ env JHT_HEARTBEAT_SESSION.
sentinel-bridge e pacing-bridge RESTANO (il primo è coerente col data-layer
sentinel-data.jsonl / tabella sentinel_ticks; il secondo è già function-named).
Fix docstring stale di pacing-bridge (diceva "tick orario al Capitano" → pinga la
Sentinella dal pull-model 2026-06-25).
Cablaggio aggiornato:
- .launcher/start-agent.sh: spawn/kill (grep /proc), env, log del heartbeat
- shared/skills/process_health.py: tabella EXPECTED del canary (bridge-suite)
- .launcher/agent-watchdog.sh: commento della suite bridge
- agents/{capitano ×7 lingue, mantenitore, maintainer-sweep}: prompt allineati
- header role-map nei 3 bridge + NEW docs/internal/architecture/bridges.md (mappa
autorevole chi-notifica-chi-e-ogni-quanto)
Off-limits (lasciati come record storico): postmortem, docs/sessions, CHANGELOG,
migration 013_sentinel_ticks. Verificato: py/bash syntax OK, canary aggiornata,
0 riferimenti runtime residui (solo breadcrumb "ex capitano-bridge.py").
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014AyN8B4WZkQTXBSpmimhEB
### 0. 🫀 Liveness canary dei processi salva-vita (la rete di sicurezza)
19
-
**PRIMO step, prima di tutto.** I bridge/daemon che fanno vivere il container (sentinel-bridge, pacing-bridge, capitano-bridge, window-ratio-meter, codex-auth-healer + tg-bridge) sono lanciati `setsid` detached → **fuori dal respawn-on-crash di pid1**. L'`agent-watchdog` (`maybe_respawn_bridges`) li risorveglia ogni 30s, MA se anche quello fallisse (bug, flap-cap raggiunto, watchdog stesso degradato) tu sei **l'ultima rete**: al primo sweep del giorno rilevi e ripari. Senza questo canary, un daemon morto resta invisibile per ore (è esattamente com'è successo al sentinel-bridge su andris il 2026-06-27 → 8h ciechi sull'usage).
19
+
**PRIMO step, prima di tutto.** I bridge/daemon che fanno vivere il container (sentinel-bridge, pacing-bridge, heartbeat-bridge, window-ratio-meter, codex-auth-healer + tg-bridge) sono lanciati `setsid` detached → **fuori dal respawn-on-crash di pid1**. L'`agent-watchdog` (`maybe_respawn_bridges`) li risorveglia ogni 30s, MA se anche quello fallisse (bug, flap-cap raggiunto, watchdog stesso degradato) tu sei **l'ultima rete**: al primo sweep del giorno rilevi e ripari. Senza questo canary, un daemon morto resta invisibile per ore (è esattamente com'è successo al sentinel-bridge su andris il 2026-06-27 → 8h ciechi sull'usage).
| Nachricht `[SENTINELLA]` mit einem Rat |`sentinel-orders` (du interpretierst + verifizierst + entscheidest, C-01) |
79
-
| Nachricht `[HEARTBEAT]` (stündlich, vom capitano-bridge) — **dein Puls**: neu bewerten | siehe **C-20**|
79
+
| Nachricht `[HEARTBEAT]` (stündlich, vom heartbeat-bridge) — **dein Puls**: neu bewerten | siehe **C-20**|
80
80
|**Das Pacing** on-demand prüfen (Zweifel an einem Sentinella-Rat, oder wer gerade verbrennt) — der Bridge pingt es dir nicht mehr, du **ziehst es selbst** (zero-cost) |`rate-budget` / `agent-speed-table`|
@@ -207,7 +207,7 @@ Ohne das gate-weighted C-09 kann die Autonomie C-07 in Phase 1 mit dem alten Mod
207
207
-**🌅 Abendreserve (2026-06-26):** die `daily:`-Zeile trägt auch `riserva=R%→tieni|brucia`. **Tagsüber (`tieni`):** pace Richtung `budget − riserva`, fülle morgens **NICHT** bis zum Cap — lass R% für den Abend. **Letzte ~2h (`brucia`):** die Reserve wird frei → entweder nutzt der User sie, um **mit dem Team zu chatten**, oder du **verbrennst sie auf der Arbeit** (erhöhst das Tempo via C-02), damit kein Budget verschwendet wird und du beim Reset bei ~100% landest. Es ist der **Anti-Front-Load**: Kimi neigt dazu, am Vormittag fertig zu werden, und so kann der User am Abend noch mit dem Team interagieren.
208
208
- Es ist kein Freeze und kein HALT (es gilt C-09: kein vorzeitiger HALT): es ist ein **Tages-Coast**. Beim Fensterwechsel (nächster Tag) startet der heutige Verbrauch wieder bei 0 und das Team nimmt mit der neu berechneten Quote wieder auf.
209
209
210
-
**C-20 — `[HEARTBEAT]` = dein stündlicher Puls (2026-06-26).** Mit push→pull erhältst du das Pacing nicht mehr alle 15 min, und das Risiko ist, **passiv** zu bleiben, wenn die Sentinella schweigt. Deshalb sendet dir der `capitano-bridge` 1×/Stunde einen `[HEARTBEAT]`: es ist ein **deterministisches Werkzeug IN DEINEM DIENST** (kein Befehl, nicht die Sentinella), das dir auf Basis der **DB-Daten** eine **Frage/Bedingung** stellt, um dich zur **Neubewertung** zu bringen (Queues leer? verbrennt ein Worker ins Leere? bist du on-pace?). Bei seinem Eingang: **führe ihn nicht blind aus** — er ist ein Anstoß. **Verifiziere** mit deinen Skills (`pipeline-triage`, `rate-budget`, `agent-speed-table`, `capture-pane`), ob die Bedingung real ist, dann **entscheide und handle** du (spawn/kill/throttle/nichts). **Niemals einen Subagenten spawnen** für diese Prüfung (so beobachtet: ein `Task`, der einen Sub-Agenten öffnet, um die Pipeline abzufragen = eine volle Runde, zudem NICHT im Verbrauch erfasst) — die Skill `pipeline-triage` ist bereits ein **Skript**: führe sie direkt aus, eine knappe Query. Der Puls ist jetzt ein reines **Signal** (kein „entscheide du" mehr in der Nachricht): lies das Datum und handle **nur**, wenn es eine echte Anomalie bestätigt, mit EINER Skill. Es ist das Gegenteil des Festfahrens: es hält dich **aktiv** in der Koordination, ohne dich von der Sentinella abhängig zu machen. NB: manchmal **schweigt** der Heartbeat (alles in Ordnung) — das ist völlig in Ordnung, du machst deine Runde weiter.
210
+
**C-20 — `[HEARTBEAT]` = dein stündlicher Puls (2026-06-26).** Mit push→pull erhältst du das Pacing nicht mehr alle 15 min, und das Risiko ist, **passiv** zu bleiben, wenn die Sentinella schweigt. Deshalb sendet dir der `heartbeat-bridge` 1×/Stunde einen `[HEARTBEAT]`: es ist ein **deterministisches Werkzeug IN DEINEM DIENST** (kein Befehl, nicht die Sentinella), das dir auf Basis der **DB-Daten** eine **Frage/Bedingung** stellt, um dich zur **Neubewertung** zu bringen (Queues leer? verbrennt ein Worker ins Leere? bist du on-pace?). Bei seinem Eingang: **führe ihn nicht blind aus** — er ist ein Anstoß. **Verifiziere** mit deinen Skills (`pipeline-triage`, `rate-budget`, `agent-speed-table`, `capture-pane`), ob die Bedingung real ist, dann **entscheide und handle** du (spawn/kill/throttle/nichts). **Niemals einen Subagenten spawnen** für diese Prüfung (so beobachtet: ein `Task`, der einen Sub-Agenten öffnet, um die Pipeline abzufragen = eine volle Runde, zudem NICHT im Verbrauch erfasst) — die Skill `pipeline-triage` ist bereits ein **Skript**: führe sie direkt aus, eine knappe Query. Der Puls ist jetzt ein reines **Signal** (kein „entscheide du" mehr in der Nachricht): lies das Datum und handle **nur**, wenn es eine echte Anomalie bestätigt, mit EINER Skill. Es ist das Gegenteil des Festfahrens: es hält dich **aktiv** in der Koordination, ohne dich von der Sentinella abhängig zu machen. NB: manchmal **schweigt** der Heartbeat (alles in Ordnung) — das ist völlig in Ordnung, du machst deine Runde weiter.
211
211
212
212
**C-21 — Scouts im TEAM, nie allein auf gesättigtem Markt (2026-06-30).** Wenn du Scouts zum Sourcing spawnst, behandle sie als **koordiniertes Team**, nicht als parallele Einzelgänger. Den ERSTEN Scout auf leerer Queue spawnst du sofort (C-05, anti-idle), aber **sobald du über 1 skalierst, ist es ein Team**: jeder weitere Scout bekommt ein **geteiltes Territorium** (Circles/Sources/Städte/Ranges via Skill `scout-coord`), die Scouts **sprechen miteinander**, um neu aufzuteilen, wenn eine Quelle erschöpft ist, und ihr **Verbrauch muss AUSGEGLICHEN** sein — ein Scout bei 150 kT während ein anderer bei 16 kT ist, heißt sie teilen **NICHT** (sie kratzen dieselbe Quelle parallel): Territorien neu aufteilen oder den Runaway killen (C-12). Der schlimmste Fall ist ein **einzelner Scout, der einen gesättigten Markt abgrast** (wenige neue Stellen, sehr hohe Kosten/Fund — bei BARTO passiert): lass ihn nicht allein kratzen, **stell ihm einen zweiten zur Seite, der das Territorium aufteilt** — zu zweit decken sie mehr Markt zu geringeren Kosten ab, statt einer, der dieselben erschöpften Quellen wiederholt. Das Team schlägt den Einzelgänger: mehr Abdeckung, weniger Duplikate, faire Last.
0 commit comments