- a5/rq_heartbeat.py: HeartbeatStore + Heartbeat.run_tick (thin scheduler/resume layer) - a5/rq_heartbeat_cli.py: status/tick/enable/disable/resume/approve/deny/priority - a5/test_a5.py: 31 deterministic tests (tick-lock incl. ownership, eligibility, kill-switch, approval, circuit, git-conflict, bounded single A4) - a5/DESIGN.md, a5/README.md, a5/scripts/a5_heartbeat_tick.sh - a2/rq_mission.py: add read-only mission_list() for A5 enumeration (additive) - Fresh checker: PASS after tick-lock ownership repair (Regressionschutz lock_owned)
14 lines
665 B
Bash
Executable file
14 lines
665 B
Bash
Executable file
#!/usr/bin/env bash
|
|
# A5 E2E: EIN bounded Heartbeat-Tick (synthetische Mission, isolierte DBs).
|
|
# Wird vom nativen Hermes Cron im no_agent-Modus aufgerufen. Fuehrt KEINEN
|
|
# Dauer-Loop aus — ein Tick, Ergebnis auf stdout, EXIT.
|
|
set -uo pipefail
|
|
|
|
REPO="/opt/data/forgejo/trading-system-docs"
|
|
export RQ_DATA="/opt/data/a5_e2e"
|
|
cd "$REPO"
|
|
|
|
out=$(python3 a5/rq_heartbeat_cli.py --execute tick --mission E2E-1 2>&1)
|
|
code=$(echo "$out" | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get("code","?")); print("exit_reason:", d.get("exit_reason","")); print("mission:", d.get("mission_id",""))')
|
|
echo "A5-HEARTBEAT-TICK-RESULT $code"
|
|
echo "$code" | tail -3
|