freedom-intelligence/workplans/FI-WP-0002-activity-core-daily-research.md
tegwick a83ef0a79a Register reserve under agents hub and pin VAULT storage.
Classify freedom-intelligence for State Hub (agents domain), sync FI-WP-0001..0003 with hub IDs, enrich catalog entries with profile/SWOT, and pin the open-weight reserve to D:\vault\coulomb\freedom-intelligence\ with strategic S-tier policy.
2026-07-28 00:25:21 +02:00

223 lines
6.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: FI-WP-0002
type: workplan
title: "Activity-core daily research brief rhythm"
domain: agents
repo: freedom-intelligence
status: active
owner: grok
topic_slug: freedom-intelligence
priority: high
created: "2026-07-24"
updated: "2026-07-24"
depends_on:
- FI-WP-0001
state_hub_workstream_id: "aa5b118e-36e2-41a7-b6c1-5d9ac9c7fb41"
---
# FI-WP-0002 — Activity-core daily research brief rhythm
## Goal
Schedule and emit the **Freedom Intelligence daily research brief** via
**activity-core**, following the proven Binky rhythm pattern:
```text
Temporal cron (activity-core)
→ context: fi_brief_status (due?)
→ rule emit activity_task_spawn (state-hub sink)
→ consumer (agent-harness / operator) runs playbook in freedom-intelligence
→ progress event fi_daily_brief (idempotence for next day)
```
activity-core answers **when / what / where**. It does **not** write the brief.
Execution stays in this repo (or a harness checking out this repo).
## Architecture
| Piece | Location | Role |
| ----- | -------- | ---- |
| ActivityDefinition | `freedom-intelligence/activity-definitions/fi-daily-research-brief.md` | Cron + rules |
| External def load | activity-core `ACTIVITY_DEFINITION_DIRS` / external paths | Discover domain def |
| Context resolver | activity-core state-hub query `fi_brief_status` (or shell equivalent) | `due` for today |
| Task sink | state-hub `activity_task_spawn` | Default safe sink |
| Consumer | agent-harness Green/Blue or manual operator session | Run playbook |
| Completion | State Hub `fi_daily_brief` progress event | Clears `due` |
Reference contracts:
- `activity-core/docs/task-emission-consumer-contract.md`
- Binky: `activity-definitions/binky-daily-rhythm.md` + `binky-control/OperatingRhythm.md`
- `docs/daily-brief-playbook.md` (this repo)
## Schedule (proposed)
| Field | Value |
| ----- | ----- |
| Cron | `30 7 * * 1-5` (weekdays 07:30) |
| Timezone | `Europe/Berlin` |
| Misfire | `skip` |
| First enable | after dry-run spawn + one manual brief completion event proven |
Weekends optional later (`0 9 * * 6` optional Saturday scan) — not in v1.
## Tasks
### T01 — ActivityDefinition (domain repo, disabled)
```task
id: FI-WP-0002-T01
status: done
priority: high
state_hub_task_id: "4eb44be8-04b7-45c9-9e78-e573a3501524"
```
Add `activity-definitions/fi-daily-research-brief.md`:
- `enabled: false` until dry-run passes
- cron + timezone as above
- context source for due check (stub params documented if resolver not yet live)
- rule: emit task when `due`, `target_repo: freedom-intelligence`, labels
`["freedom-intelligence", "research-brief", "automated"]`
- description points at `docs/daily-brief-playbook.md`
**Done when:** file exists, frontmatter valid, matches ADR-002 shape used by
existing definitions (binky / forgejo prune).
---
### T02 — Completion event contract + playbook hook
```task
id: FI-WP-0002-T02
status: done
priority: high
state_hub_task_id: "ce61769e-9c32-4757-a691-c443e6cec37d"
```
Document and implement playbook steps for:
```yaml
event_type: fi_daily_brief
author: <agent-or-operator>
summary: "FI daily brief YYYY-MM-DD"
detail:
repo: freedom-intelligence
date: "YYYY-MM-DD"
path: "briefs/YYYY/MM/YYYY-MM-DD.md"
collection_candidates: <int>
```
Wire into `docs/daily-brief-playbook.md` and `docs/state-hub-delivery.md`.
**Done when:** completion evidence shape is unambiguous for a future resolver.
---
### T03 — `fi_brief_status` context resolver (activity-core)
```task
id: FI-WP-0002-T03
status: done
priority: high
state_hub_task_id: "37a5d67c-93b4-4cbd-996c-e87b9308e295"
```
**Cross-repo (activity-core):** implement state-hub (or shell) resolver:
- Query name: `fi_brief_status`
- Returns `{ items: [{ kind: "daily_brief", due: bool, date: "YYYY-MM-DD" }] }`
- `due: true` when no `fi_daily_brief` progress event with
`detail.repo=freedom-intelligence` exists for today (Europe/Berlin)
Mirror `binky_rhythm_status` pattern. Add unit tests with mocked hub.
**Done when:** resolver merged in activity-core and callable from definition params.
**Completed 2026-07-24:** `activity-core` `state_hub.py` `_fi_brief_status` + tests
(`test_fi_brief_status_*`). Ship with activity-core commit/push.
---
### T04 — Register external activity-definitions path
```task
id: FI-WP-0002-T04
status: todo
priority: high
state_hub_task_id: "ecb8df0a-4f5d-494e-9217-2906afbacf9c"
```
**Cross-repo / ops:** ensure railiance activity-core worker loads this repos
`activity-definitions/` (env `ACTIVITY_DEFINITION_DIRS` or documented external
path). Run `make sync-activity-definitions` / schedule reconciliation.
**Done when:** definition appears in automation inventory; schedule id
`activity-schedule-fi-daily-research-brief` (or equivalent) is visible when enabled.
---
### T05 — Dry-run spawn, then enable
```task
id: FI-WP-0002-T05
status: todo
priority: medium
state_hub_task_id: "4d7a7491-f458-4984-bda1-8d212046dbc6"
```
1. Manual `POST .../activity-definitions/<id>/trigger` with def still disabled
or one-shot test path
2. Confirm `activity_task_spawn` in State Hub (no Forgejo spam)
3. Manually execute playbook once; post `fi_daily_brief`
4. Confirm next resolver `due=false` for that date
5. Set `enabled: true` on definition; commit
**Done when:** one full loop proven; weekday schedule live.
---
### T06 — Consumer routing note (agent-harness)
```task
id: FI-WP-0002-T06
status: done
priority: medium
state_hub_task_id: "2df977ea-06b4-468d-b6fb-6b40e00f8928"
```
Document how harness/operator picks up `target_repo: freedom-intelligence`
tasks (checkout path, Green/Blue profile, LLM via llm-connect if used). Prefer
**no** Claude Code install on railiance01 (Binky residual lesson).
**Done when:** `docs/daily-brief-playbook.md` § Automation consumer is enough for
the next agent session.
**Completed 2026-07-24:** playbook § Automation consumer + state-hub-delivery
contract; first manual brief posted with `fi_daily_brief` event.
---
## Acceptance (workplan-level)
- [x] Domain ActivityDefinition drafted (`enabled: false`)
- [x] Completion event contract documented
- [x] Resolver implemented in activity-core (T03) — ship with activity-core deploy
- [ ] External path + dry-run enable (T04T05)
- [x] Consumer path documented for harness (T06)
- [x] First manual daily brief + `fi_daily_brief` progress event (2026-07-24)
## Out of scope
- Writing the LLM brief **inside** activity-core workers
- ISSUE_SINK_TYPE=rest / Forgejo issues for this rhythm
- Weekend or multi-brief-per-day schedules
- Full State Hub domain onboarding for freedom-intelligence
## Residual handoffs
| Residual | Owner repo |
| -------- | ---------- |
| `fi_brief_status` resolver | activity-core |
| ACTIVITY_DEFINITION_DIRS pin | activity-core / railiance ops |
| Harness consumer profile | agent-harness / the-custodian as applicable |