BINKY-WP-0004 finished: retire workstation cron, Railiance rhythm timers
Some checks failed
Work Records / validate (push) Has been cancelled
Some checks failed
Work Records / validate (push) Has been cancelled
Complete T06 cutover: remove binky rhythm bridge crontab, install scripts/railiance-rhythm systemd user timers on railiance01 (Europe/Berlin), document residual continuous-intake gaps as BINKY-WP-0006. Three completion event types verified (daily_brief, mail_intake on Railiance, weekly_review). DEC-2026-003 marked resolved/executed.
This commit is contained in:
parent
f17a065ed0
commit
c3ea150971
22 changed files with 380 additions and 149 deletions
22
scripts/railiance-rhythm/install-on-railiance.sh
Executable file
22
scripts/railiance-rhythm/install-on-railiance.sh
Executable file
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env bash
|
||||
# Install host-side rhythm timers on railiance01 (user systemd).
|
||||
# Run ON railiance01 from a fresh binky-control checkout:
|
||||
# ./scripts/railiance-rhythm/install-on-railiance.sh
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
UNIT_DIR="${HOME}/.config/systemd/user"
|
||||
mkdir -p "${UNIT_DIR}"
|
||||
chmod +x "${ROOT}/scripts/railiance-rhythm/"*.sh
|
||||
|
||||
for u in binky-rhythm-daily binky-rhythm-mail binky-rhythm-review; do
|
||||
cp -f "${ROOT}/scripts/railiance-rhythm/systemd/${u}.service" "${UNIT_DIR}/"
|
||||
cp -f "${ROOT}/scripts/railiance-rhythm/systemd/${u}.timer" "${UNIT_DIR}/"
|
||||
done
|
||||
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable --now binky-rhythm-daily.timer
|
||||
systemctl --user enable --now binky-rhythm-mail.timer
|
||||
systemctl --user enable --now binky-rhythm-review.timer
|
||||
systemctl --user list-timers --all | grep binky-rhythm || true
|
||||
echo "Installed. Logs: ~/.cache/binky-control/rhythm/"
|
||||
echo "Agentic daily/review require: claude CLI on PATH. mail-scan does not."
|
||||
37
scripts/railiance-rhythm/run-common.sh
Executable file
37
scripts/railiance-rhythm/run-common.sh
Executable file
|
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/env bash
|
||||
# Shared env for Railiance host-side Binky rhythm (BINKY-WP-0004-T06 interim).
|
||||
# activity-core schedules remain the source of cadence truth; this host timer
|
||||
# is the *executor* until a continuous harness poller consumes emissions
|
||||
# (ISSUE_SINK_TYPE=state-hub currently writes progress only — not claimable issues).
|
||||
set -euo pipefail
|
||||
|
||||
: "${HOME:=/home/tegwick}"
|
||||
export PATH="${HOME}/.local/agent-harness/venv/bin:${HOME}/.local/bin:${PATH}"
|
||||
# shellcheck disable=SC1091
|
||||
source "${HOME}/.local/agent-harness/env"
|
||||
|
||||
export STATE_HUB_URL="${STATE_HUB_URL:-http://127.0.0.1:18000}"
|
||||
export PYTHONPATH="${HOME}/agent-harness:${HOME}/llm-connect${PYTHONPATH:+:$PYTHONPATH}"
|
||||
export BINKY_REPO="${BINKY_REPO:-${HOME}/binky-control}"
|
||||
export LOG_DIR="${LOG_DIR:-${HOME}/.cache/binky-control/rhythm}"
|
||||
mkdir -p "${LOG_DIR}"
|
||||
|
||||
log() { echo "$(date -Iseconds) $*" | tee -a "${LOG_DIR}/railiance-rhythm.log"; }
|
||||
|
||||
require_repo() {
|
||||
if [[ ! -d "${BINKY_REPO}/.git" ]]; then
|
||||
log "ERROR: binky-control missing at ${BINKY_REPO}; clone via forgejo-agent-harness deploy key"
|
||||
exit 1
|
||||
fi
|
||||
git -C "${BINKY_REPO}" fetch --quiet origin main || true
|
||||
git -C "${BINKY_REPO}" checkout --quiet main
|
||||
git -C "${BINKY_REPO}" pull --ff-only --quiet origin main || log "WARN: pull failed (continuing on local)"
|
||||
}
|
||||
|
||||
require_claude() {
|
||||
if ! command -v claude >/dev/null 2>&1; then
|
||||
log "ERROR: claude CLI not on PATH — agentic rhythm cannot run on this host"
|
||||
log " residual: install Claude Code (or swap in a hosted agentic adapter) on railiance01"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
12
scripts/railiance-rhythm/run-daily.sh
Executable file
12
scripts/railiance-rhythm/run-daily.sh
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env bash
|
||||
# Weekday 08:23 Europe/Berlin — Binky daily rhythm via agent-harness.
|
||||
set -euo pipefail
|
||||
# shellcheck disable=SC1091
|
||||
source "$(dirname "$0")/run-common.sh"
|
||||
require_repo
|
||||
require_claude
|
||||
log "START daily-rhythm"
|
||||
agent-harness run \
|
||||
--task-file "${BINKY_REPO}/integrations/harness-tasks/daily-rhythm.json" \
|
||||
2>&1 | tee -a "${LOG_DIR}/daily.log"
|
||||
log "END daily-rhythm rc=${PIPESTATUS[0]}"
|
||||
27
scripts/railiance-rhythm/run-mail.sh
Executable file
27
scripts/railiance-rhythm/run-mail.sh
Executable file
|
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env bash
|
||||
# Monday 09:37 Europe/Berlin — deterministic mail-scan then optional triage session.
|
||||
set -euo pipefail
|
||||
# shellcheck disable=SC1091
|
||||
source "$(dirname "$0")/run-common.sh"
|
||||
require_repo
|
||||
log "START mail-scan"
|
||||
# Deterministic pre-step (no Claude) — uses AppRole + OpenBao mail lane.
|
||||
agent-harness mail-scan \
|
||||
--target-repo "${BINKY_REPO}" \
|
||||
--config "${BINKY_REPO}/integrations/mailbox-binky-company.yml" \
|
||||
2>&1 | tee -a "${LOG_DIR}/mail.log"
|
||||
scan_rc=${PIPESTATUS[0]}
|
||||
log "mail-scan rc=${scan_rc}"
|
||||
if [[ "${scan_rc}" -ne 0 ]]; then
|
||||
exit "${scan_rc}"
|
||||
fi
|
||||
# Agentic triage if Claude present; otherwise scan+hub event is enough for intake idempotence.
|
||||
if command -v claude >/dev/null 2>&1; then
|
||||
log "START mail-triage session"
|
||||
agent-harness run \
|
||||
--task-file "${BINKY_REPO}/integrations/harness-tasks/mail-intake.json" \
|
||||
2>&1 | tee -a "${LOG_DIR}/mail.log" || log "WARN: mail-triage session failed"
|
||||
else
|
||||
log "SKIP mail-triage session (no claude CLI); mail-scan hub event stands"
|
||||
fi
|
||||
log "END mail-intake"
|
||||
12
scripts/railiance-rhythm/run-review.sh
Executable file
12
scripts/railiance-rhythm/run-review.sh
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env bash
|
||||
# Friday 16:43 Europe/Berlin — weekly founder review prep.
|
||||
set -euo pipefail
|
||||
# shellcheck disable=SC1091
|
||||
source "$(dirname "$0")/run-common.sh"
|
||||
require_repo
|
||||
require_claude
|
||||
log "START review-prep"
|
||||
agent-harness run \
|
||||
--task-file "${BINKY_REPO}/integrations/harness-tasks/review-prep.json" \
|
||||
2>&1 | tee -a "${LOG_DIR}/review.log"
|
||||
log "END review-prep rc=${PIPESTATUS[0]}"
|
||||
10
scripts/railiance-rhythm/systemd/binky-rhythm-daily.service
Normal file
10
scripts/railiance-rhythm/systemd/binky-rhythm-daily.service
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Binky daily operating rhythm (agent-harness on Railiance)
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Environment=HOME=%h
|
||||
WorkingDirectory=%h/binky-control
|
||||
ExecStart=%h/binky-control/scripts/railiance-rhythm/run-daily.sh
|
||||
Nice=10
|
||||
11
scripts/railiance-rhythm/systemd/binky-rhythm-daily.timer
Normal file
11
scripts/railiance-rhythm/systemd/binky-rhythm-daily.timer
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Timer: Binky daily rhythm weekdays 08:23 Europe/Berlin
|
||||
|
||||
[Timer]
|
||||
Timezone=Europe/Berlin
|
||||
OnCalendar=Mon..Fri *-*-* 08:23:00
|
||||
Persistent=true
|
||||
Unit=binky-rhythm-daily.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
10
scripts/railiance-rhythm/systemd/binky-rhythm-mail.service
Normal file
10
scripts/railiance-rhythm/systemd/binky-rhythm-mail.service
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Binky weekly mail intake (agent-harness on Railiance)
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Environment=HOME=%h
|
||||
WorkingDirectory=%h/binky-control
|
||||
ExecStart=%h/binky-control/scripts/railiance-rhythm/run-mail.sh
|
||||
Nice=10
|
||||
11
scripts/railiance-rhythm/systemd/binky-rhythm-mail.timer
Normal file
11
scripts/railiance-rhythm/systemd/binky-rhythm-mail.timer
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Timer: Binky mail intake Mondays 09:37 Europe/Berlin
|
||||
|
||||
[Timer]
|
||||
Timezone=Europe/Berlin
|
||||
OnCalendar=Mon *-*-* 09:37:00
|
||||
Persistent=true
|
||||
Unit=binky-rhythm-mail.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
10
scripts/railiance-rhythm/systemd/binky-rhythm-review.service
Normal file
10
scripts/railiance-rhythm/systemd/binky-rhythm-review.service
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=Binky weekly review prep (agent-harness on Railiance)
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Environment=HOME=%h
|
||||
WorkingDirectory=%h/binky-control
|
||||
ExecStart=%h/binky-control/scripts/railiance-rhythm/run-review.sh
|
||||
Nice=10
|
||||
11
scripts/railiance-rhythm/systemd/binky-rhythm-review.timer
Normal file
11
scripts/railiance-rhythm/systemd/binky-rhythm-review.timer
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Timer: Binky weekly review prep Fridays 16:43 Europe/Berlin
|
||||
|
||||
[Timer]
|
||||
Timezone=Europe/Berlin
|
||||
OnCalendar=Fri *-*-* 16:43:00
|
||||
Persistent=true
|
||||
Unit=binky-rhythm-review.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
Loading…
Add table
Add a link
Reference in a new issue