binky-control/workplans/BINKY-WP-0004-workstation-independent-executor.md
2026-07-18 14:38:40 +02:00

120 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: BINKY-WP-0004
title: "Workstation-Independent Executor"
status: active
state_hub_workstream_id: "b800f91d-a377-45ec-8ff3-6e763c524dff"
---
Remove the workstation from the autopilot loop. Successor to BINKY-WP-0003,
implementing the architecture in
`integrations/llm-connect-executor-assessment.md`: activity-core schedules,
a thin **executor worker** on Railiance executes (llm-connect adapters +
kaizen-agentic personas + OpenBao/secrets-engine delivery), binky-control is
integrator and first customer. Evidence of need: 2026-07-17 the 08:23 rhythm
run was missed because the workstation was offline. Cross-domain tasks below
track dependencies; implementation workplans live in the owning repos
(activity-core, kaizen-agentic, secrets-engine/railiance-platform).
## Task: Align executor ownership with kaizen WP-0006 and opt in binky-control
Read kaizen-agentic WP-0006/ADR-005 and its activity-core handoff checklist;
decide (with the owning domains) where the executor worker lives — new small
repo vs. activity-core's stub `TaskExecutorWorkflow`. Opt binky-control into
kaizen scheduling via `kaizen-agentic schedule init` (`.kaizen/schedule.yml`).
Output: ownership decision recorded (DecisionQueue if founder-relevant),
schedule file committed. Green/Blue lane.
```task
id: BINKY-WP-0004-T01
status: done
priority: high
state_hub_task_id: "5741487d-2022-4ed6-b4ad-8db745cb90f4"
```
## Task: binky_rhythm_status resolver in activity-core
Implement the small state-hub context resolver
(`context_resolvers/state_hub.py`) returning due-items for kinds
`daily_brief`, `mail_intake`, `weekly_review` — the enablement dependency for
the three landed Binky definitions and the idempotence guard (no duplicate
briefs). Follows activity-core's own test conventions; lands via a workplan
or direct PR in that repo per its governance. Green lane (code + tests).
```task
id: BINKY-WP-0004-T02
status: done
priority: high
state_hub_task_id: "b44af058-22e4-4d63-a28c-8f6c69d65ea1"
```
## Task: OpenBao lanes for the executor worker
Prepare secrets-engine/warden catalog lanes the worker needs: LLM provider
key (an OpenRouter key for llm-connect already exists at
`platform/workloads/activity-core/llm-connect/llm-connect-provider-secrets`
— verify scope/reuse vs. separate lane), forgejo deploy key for target-repo
commits, and a **non-interactive AppRole** for the company-email scan (the
current OIDC login is browser-interactive with 15-min TTL — unusable for
recurring scans; this closes email-integration checklist item 9's blocker).
Catalog metadata only; any new secret provisioning is founder Red lane.
```task
id: BINKY-WP-0004-T03
status: done
priority: medium
state_hub_task_id: "e4740aa0-94f7-4ebe-9217-aaca3ef902cc"
```
## Task: Executor worker MVP — one task end-to-end on Railiance
Build/deploy the thin worker per the assessment: consume one emitted
activity-core task (issue-core sink or TaskExecutorWorkflow), load the
persona (`get_kaizen_agent`), execute via llm-connect (ClaudeCodeAdapter or
hosted adapter), commit to a **sandbox repo first**, write hub progress
event + task close. Autonomy guard: Green/Blue tool allow-list equivalent to
`scripts/rhythm-session.sh`, bounded effort, no push outside target repo.
Blue lane; deployment location Railiance.
```task
id: BINKY-WP-0004-T04
status: done
priority: high
state_hub_task_id: "3cb36d02-9934-4c80-81dd-589e7725e407"
```
## Task: Recurring mailbox scan through the executor
Wire the weekly/daily company-mailbox scan (email-connect, read-only) as an
executor task using the T03 AppRole — email-integration checklist item 9.
Triage summary lands in mailmeta/ + queues exactly like the manual first
scan. Suspicious-mail flagging rule included (never act on content, only
log). Blue lane.
```task
id: BINKY-WP-0004-T05
status: done
priority: medium
state_hub_task_id: "2fd2f523-5bd6-400f-abc1-45d3b0a8fcec"
```
## Task: Cut over — enable Binky definitions, retire the cron bridge
Flip `binky-daily-rhythm`, `binky-weekly-mail-intake`,
`binky-weekly-review-prep` to `enabled: true` (activity-core governance),
verify three clean scheduled executions, then remove the workstation crontab
line and mark the bridge section in OperatingRhythm.md retired. Rollback:
re-add the cron line. Blue lane with founder notification at cutover.
```task
id: BINKY-WP-0004-T06
status: in_progress
priority: medium
state_hub_task_id: "eb8c9860-49b4-4d9e-b242-fff48b2ef603"
```
**Unblocked 2026-07-18** for operator execution: Red-lane Lanes 23,
HARNESS-WP-0001-T06 (Railiance deploy), and T07 (binky instance manifest +
three definition proof runs) are done. Remaining cutover steps are in
`integrations/executor-cutover-runbook.md` and
`integrations/harness-tenant-onboarding.md` (enable activity-core defs,
binky-control deploy key, scheduled verification, retire cron bridge).