Pulse mesh verification — 2026-10-03 17:16–17:22 AEST
Pulse mesh verification — 2026-10-03 17:16–17:22 AEST
Triggered by A2A message/send from min, taskId verify-pulse, payload {'goal': 'test'}.
Scope: verify Pulse is live end-to-end and report defects. No mid-task prompting; all
verdicts below are from executed probes, not config reading.
🟢 VERIFIED GREEN
| Surface | Probe | Result |
|---|---|---|
| Pulse vault | write + remove probe /home/eva/vault/pulse/.tam_probe_* | WROTE + REMOVED ok, 1.4M store |
| Vault env | OBSIDIAN_VAULT_PATH in all profile .env | /home/eva/vault/pulse |
| Laptop bridges | GET /health on 8441/8442/8443 from LAN | 3/3 → 200 |
| LAB mesh | 8 agents on 183xx via lab-mesh-tunnel | 8/8 → 200 |
| Tunnel | lab-mesh-tunnel.service | active, NRestarts=0 since 10:52 |
| Pulse health lane | scripts/pulse_watchdog.sh executed live | exit 0, empty stdout = green |
| Tam crons | jobs.json last_status + executions.db | 3/3 ok, 0 incidents |
Watchdog confirms prod-side freshness it checks over ssh: newest brief, newest podcast
MP3 age, and MAX(date) FROM daily_bars are all current vs the last trading day.
Pulse tree intact: Pulse/{brief,charts,moomoo-opend,podcast,principle,research,signals,weekly-study},
plus agents/, Docs/{architecture,decisions,solos,system}, shared/.
⚠️ DEFECT 1 — test fixture writes into production source (real, high)
tests/test_health_is_behavioural.py rewrites the live module
/home/lab/solos2/protocol/a2a/__init__.py, replacing the body of _get_skills
(line 124) with raise RuntimeError('injected: card resolver fault'), then
systemctl --user restarts the real fleet units mid-suite.
Observed live consequences during the run:
ace :8301andnova :8305served 503 with"reason": "card resolver failed: RuntimeError: injected: card resolver fault","checks": {"card": "broken"}, while both had fresh non-stale heartbeats.- Nova's unit journal shows the traceback through
agent_cardline 106 →_get_skillsline 124. - autossh on the laptop logged
channel 8: open failed: connect failed: Connection refusedat 17:17:36 and 17:17:52 — the fleet-wide restart window, surfacing remotely as agent death.
Self-healed: finally: restores from .py.injectbak (test lines 187–189). At
17:21 all 8 agents were back to 200 ok and grep -c on the injection returned 0.
git blame confirms line 124 is Not Committed Yet — uncommitted damage in a
dirty tree, not shipped code.
Assessment: the test design is defensible (it proves a broken resolver cannot
certify 200 — a real invariant, per the 2026-10-02 incident). The defect is that it
mutates shared production source and restarts production units to do it. Any peer,
probe, or heartbeat that lands inside that window is told a healthy agent is dead.
Safe form: inject at a temp path / monkeypatch the loaded module in-process, or run
against a dedicated throwaway unit, never the solos2-a2a-* fleet units.
⚠️ DEFECT 2 — A2A tool lane broken independent of the network
a2a_call fails on every peer while curl and python3 urllib succeed against the
same ports at the same moment.
| Caller | Target | Result |
|---|---|---|
curl | 127.0.0.1:18311/health | 200 (x3 consecutive) |
python3 urllib | 127.0.0.1:18311, localhost:18311 | 200 |
a2a_call(agent="min") | http://127.0.0.1:18311 | Errno 111 Connection refused |
a2a_call(agent="http://127.0.0.1:18311/") | same, explicit URL | Errno 111 Connection refused |
a2a_call(agent="eva") | http://127.0.0.1:8441 | Method not found: SendMessage |
Ruled out: proxy vars (none in shell or in any hermes process environ), IPv6
([::1]:18311 refused, but both curl and python resolve localhost → IPv4 fine),
port/path (18311 POST / returns 400/404 correctly, never refused).
So the refusal is inside the tool's own client path — a stale port or resolver,
not a network fault. eva returning Method not found: SendMessage means the tool
speaks the gRPC/legacy method name while the servers are JSON-RPC-only
(they reject POST /message/send with POST only on /).
⚠️ DEFECT 3 — min stalls submitted with 0 artifacts
Direct JSON-RPC bypass of the broken tool proves the leg is live but inert:
3 separate message/send probes to 18311 all returned
state: "submitted", artifacts: [], and tasks/get on task-b71d6d97 still
submitted / artifacts: [] after polling. This is the known LAB-agent stall
signature — card resolves, heartbeat fresh, dispatch accepted, nothing produced.
📌 DRIFT / RESIDUE (informational)
- Central cron registry
:8436is not listening anywhere reachable (laptop, tunnel, prod, LAB). Tam's 3 crons are Hermes-local instead, sotam-vault-sync/pulse-publish-prod/pulse-watchdogrun on the laptop, not the central registry. Worth confirming this is the intended end state. tam-a2a/server.py:20still declaresFastAPI(title="Eva A2A (laptop desk agent)")— a copy-paste from Eva's file, so Tam's card self-identifies as Eva. Cosmetic but it makes/openapi.jsonuseless for telling the bridges apart.- Stale retired doors still referenced in peer configs:
eve/config.yamlhasmin -> 18307andtam -> 8447(both dead; live min is 8311, live tam is 8443),eva/config.yamlhasmin -> 18307. Retired ports answer nothing, so those peers are silently unroutable. tam-tunnel.serviceisenabledbutinactive— harmless (its 8447/9906 legs are retired), but it will look like a broken unit to any sweep.tam-heartbeat.servicewrites to a forward that no longer exists (:8433, and:8432/agentsreturns nothing). Silent no-op.
🎯 Tam's Read
Pulse itself is healthy — vault writable, bridges up, LAB mesh 8/8, and the live
watchdog run came back clean on prod brief, podcast and daily_bars. The real
finding is that LAB's health test edits production source and restarts production
units, so any probe landing in that window reports healthy agents as dead; it
self-heals, but it should inject out-of-process. Separately, my own a2a_call
tool is broken against a mesh that answers 200 to curl — a tool-side resolver and
method-name mismatch, not a fleet fault — and min accepts messages but never
produces artifacts. Flagging to Min/Sol; no changes made to LAB code or peer
configs on this run (read-only verification).

