binky-control/workplans/BINKY-WP-0006-railiance-rhythm-continuous-intake.md
tegwick 062947c91a
All checks were successful
Work Records / validate (push) Successful in 23s
docs: residual convention + AWQ-011/012 handoffs for WP-0006
Align AGENTS, AutonomyPolicy, SCOPE, OperatingRhythm with fleet residual
role (live intakes, not SCOPE prose). Capture BINKY-WP-0006 leftovers as
AWQ-011 (brief-weekly) and AWQ-012 (open-weights retarget).
2026-07-22 18:15:45 +02:00

6.4 KiB
Raw Blame History

id type title domain repo status owner topic_slug created updated state_hub_workstream_id
BINKY-WP-0006 workplan Railiance rhythm: llm-connect execution (no host coding agent) infotech binky-control finished codex the-custodian 2026-07-21 2026-07-22 1c068209-c3f7-4445-82ed-f762a095120c

Close residual gaps after BINKY-WP-0004 cutover so Binky rhythm runs unattended on Railiance without installing Claude Code or any coding agent/harness shell on the host.

Architectural decision (founder direction 2026-07-21)

Wrong Right
Install Claude CLI / coding agent on railiance01 Use llm-connect (already in activity-core ns on railiance) via OpenRouter
AgenticClaudeCodeAdapter as default on server Hosted text adapter + deterministic apply of structured results
Re-implement policy in every client Keep Green/Blue rules in harness apply layer; model only classifies/drafts

Two-phase mail path (already half-built)

  1. Deterministic scan (agent-harness mail-scan) — IMAP via AppRole, CSV under mailmeta/reports/, hub binky_mail_intake counts. No LLM.
    Proven on railiance01 2026-07-21.
  2. Triage — today wrongly defaults to Claude Code agentic session.
    Target: call in-cluster
    http://llm-connect.activity-core.svc.cluster.local:8080 (OpenRouter, cost-efficient open-weights or cheap hosted model) → JSON triage plan → deterministic applier commits metadata-only queue/log updates.

Daily brief / weekly review follow the same pattern (structured draft → apply → commit), not a full IDE agent on the node.

Existing platform assets

  • llm-connect Deployment live on railiance01 (LLM_CONNECT_PROVIDER=openrouter, model currently google/gemini-2.5-flash in ConfigMap — may retarget to open-weights for cost).
  • OpenBao lane for OpenRouter key already used by that service (llm-connect-provider-secrets / CCR path under activity-core).
  • activity-core llm_client.py is the HTTP client pattern to reuse.
  • agent-harness runner.py already accepts an injected adapter= (swap default off Claude Code for server profiles).

Task: Spec llm-connect mail-triage contract

id: BINKY-WP-0006-T01
status: done
priority: high
state_hub_task_id: "912a8802-e80f-4c04-aecd-9586c3b7a4b0"

Write integrations/railiance-llm-rhythm.md (or extend cutover runbook):

  • Input: newest mailmeta/reports/*.csv (metadata columns only; no bodies).
  • Output JSON schema: log entries, queue candidates, suspicious flags (sender/subject/date only).
  • Model profile: OpenRouter cost-efficient default (prefer open-weights; name candidates + fallback); max tokens; temperature low.
  • Apply rules: Blue lane, no push, no network from apply step; suspicious mail never acted on.
  • Where it runs: railiance Job/CronJob or host timer calling agent-harness mail-triage (new subcommand), not Claude.

Done when: doc reviewed against AutonomyPolicy + mailscan two-phase design.

Task: Implement hosted triage path in agent-harness

id: BINKY-WP-0006-T02
status: done
priority: high
state_hub_task_id: "00439d4e-d6ee-4cbc-98e2-431eca4651fe"

In agent-harness (implementation repo; this WP tracks binky integration):

  1. LlmConnectHttpAdapter (or client matching activity-core llm_client.py) using LLM_CONNECT_URL.
  2. mail-triage command: read report → prompt → parse JSON → apply to mailmeta/mail-log.md + queues → local commit → hub event.
  3. Server profile default: never require claude CLI.
  4. Tests with fixture CSV + mock HTTP llm-connect.

Done when: unit tests green; dry-run docs for railiance.

Task: Wire OpenRouter model profile on railiance llm-connect

id: BINKY-WP-0006-T03
status: done
priority: high
state_hub_task_id: "1f82c8e0-945e-44b6-a5dc-22dd055e751d"

On railiance01 activity-core llm-connect ConfigMap (and optional dedicated profile env for rhythm):

  • Confirm OpenRouter secret still healthy (no values in git/chat).
  • Choose cost-efficient model (open-weights preferred; document choice and $/MTok rationale).
  • Smoke: in-cluster request from a Job to llm-connect with a tiny prompt.
  • Expose URL to host timers if host-run: LLM_CONNECT_URL=http://… via cluster DNS or port-forward service policy (prefer in-cluster CronJob over host if possible).

Done when: smoke OK; ConfigMap change committed in llm-connect/activity-core overlays as appropriate.

2026-07-22: In-cluster llm-connect smoke OK (OpenRouter/google/gemini-2.5-flash). Host mail-triage via port-forward succeeded (commit on railiance). Open-weights model lock deferred — current model works; retarget when desired.

Task: Railiance schedule uses llm path; drop Claude residual

id: BINKY-WP-0006-T04
status: done
priority: medium
state_hub_task_id: "2093bf62-20ef-4d3e-9b91-be77a38603f7"

Update scripts/railiance-rhythm/run-mail.sh to call mail-scan then mail-triage (llm-connect), remove require_claude for mail. Prefer migrating daily/review similarly or keep them laptop-optional until T05.

Update OperatingRhythm.md + executor-cutover-runbook residual section: no coding agent on railiance.

2026-07-22: Timers/scripts updated; mail path scan+triage; daily/review still wait on brief-* commands (T05).

Task: Daily/review via llm-connect (optional same WP if small)

2026-07-22: agent-harness brief-daily shipped; live brief briefs/2026-07-22-daily-brief.md via llm-connect on railiance. Weekly review still open (brief-weekly).

id: BINKY-WP-0006-T05
status: done
priority: medium
state_hub_task_id: "503ff56b-ac38-44b0-911e-937e0c2fc089"

Extend the same pattern to daily brief + weekly review prep: structured generation via llm-connect + deterministic markdown apply + commit. If scope grows, spawn BINKY-WP-0007 and mark this task done with handoff.

Task: Closure

id: BINKY-WP-0006-T06
status: done
priority: low
state_hub_task_id: "3a93d7d4-f949-4a85-ad2e-a566ccc1f966"

Three clean unattended mail cycles on railiance (scan+triage); milestone; statehub fix-consistency.

2026-07-22: Three clean scan+triage cycles on railiance01 (UTC 08:2608:27), each ok with hub events binky_mail_intake + binky_mail_triage. Host LLM_CONNECT_URL discovery now prefers reachable ClusterIP (not broken cluster DNS). Residuals handed off as live intakes: AWQ-011 (brief-weekly via llm-connect), AWQ-012 (optional open-weights model retarget).