Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 51320@bnt-lap001 Assistant-Session: 9d40b4c7-8e3c-42ee-b755-d658d4640d6c
9.9 KiB
| id | type | title | domain | repo | status | flavor | owner | topic_slug | priority | created | updated | depends_on | related | state_hub_workstream_id | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FI-WP-0005 | workplan | Move the daily brief to a profiled, granted execution on activity-core infrastructure | agents | freedom-intelligence | active | implementation | claude | freedom-intelligence | high | 2026-09-22 | 2026-09-22 |
|
|
00f3ba5e-270d-559d-afb6-8b382507c902 |
FI-WP-0005 — Profiled brief execution
Origin
rein-aharness message d0b45acb (2026-09-04, REINAH-WP-0003-T04): profile-absent
routing now depends on AGENT_HARNESS_LEGACY_APPROACHES_UNTIL (example expiry
2026-12-31). FI must supply an owner-approved replacement for
fi-daily-research-brief: a versioned profile, input schema, allowed paths,
completion evidence, model route, rollback pin and a separate publication
decision. FI replied 2026-09-22 (74afc283): FI-WP-0004-T04 already removed
the swallowed push failure; the declaration follows this workplan.
Decisions (operator, 2026-09-22)
- Publication is generic infrastructure. Request a repository-grant v2 in activity-core with a typed publication field. Do not keep the push as an FI-specific rein capability.
- Execution shape B. The brief runs as an agent under a versioned Glas profile. Its sandbox can reach only the model route and the FI source hosts. The current single llm-connect call writes from model memory, and that caused the V4-Flash mis-sizing.
- Generic due check now. Propose to activity-core replacing the
FI-specific
fi_brief_statusresolver with a parameterised published-artifact resolver. FI is the first user. - Break-glass host timer: retire it (T06, rationale below).
Responsibilities
| Layer | Owns for this job | Does not own |
|---|---|---|
| freedom-intelligence | Definition, inputs, allowed paths, quality rules, source host list, publication decision, durability verifier, canary acceptance | Scheduling code, profile catalog, sandboxes |
| activity-core | Schedule, due resolution, ops_run emission carrying harness_profile_ref + repository_grant, grant validation, close reconciliation and evidence |
Executing anything (ADR-006 §4); the profile catalog |
| glas-harness | Profile harness.fi-research-brief: rein, sandbox, tool profile, model route, limits, rollback pin |
What the brief says; when it runs |
| sand-boxer | Isolation and the per-host HTTPS egress allowlist (docs/bwrap-egress.md) |
Which hosts FI needs |
| rein-aharness | Inner loop; grant enforcement (paths, commits, publication); drops label routing and Binky model env fallbacks | Publication policy |
Reused as-is: harness_profile_ref (WP-0032), grant v1 path and commit
validation plus close reconciliation (WP-0038), profile version pinning as
rollback. Gaps: grant v1 rejects publish: true; fi_brief_status is
tenant-specific code in shared infrastructure; no Glas profile allows
network egress beyond a model provider.
Tasks
T01 — Owner declaration v1
id: FI-WP-0005-T01
status: todo
priority: high
state_hub_task_id: "bf8c1870-bdca-51d6-beaf-c5f000037205"
Write activity-definitions/fi-daily-research-brief.declaration.yaml (or an
equivalent section in the definition) stating: input set (files and prior
brief window), output path briefs/YYYY/MM/YYYY-MM-DD.md, allowed paths,
commit count (exactly 1), completion evidence (fi_daily_brief with
pushed=true, origin_sha, path, date), required model class and tool use,
quality rules (catalog is the authority, no invented sizes, no re-announce),
publication policy (reference T02), and rollback. No Binky-named env vars.
Done when: the declaration is committed, and every field rein listed in
d0b45acb maps to a concrete value or to a named follow-up task here.
T02 — Publication decision record
id: FI-WP-0005-T02
status: todo
priority: high
state_hub_task_id: "25475ede-ebd9-5c31-8c22-718e30acf8ac"
docs/decisions/2026-09-XX-brief-origin-publication.md: FI grants
fast-forward-only publication of briefs/** to origin/main; no force, no
other refs; publication failure fails the run and leaves the day due. Supersedes
the implicit grant wording in FI-WP-0004-T04.
Done when: the decision is committed and cited by T01 and T04.
T03 — Machine-readable source host list
id: FI-WP-0005-T03
status: todo
priority: high
state_hub_task_id: "9b92d7f4-f4c8-5ce5-9367-462653515e90"
docs/sources-allowlist.md is prose with no hostnames. Derive an exact
host:443 list (lowercase, no wildcards, per sand-boxer rules) for axes A–D,
kept beside the prose list and checked by a small test so the two do not
drift. Keep it minimal. Egress is enforced by destination only, not by
path, so every host is a trust decision.
Done when: the list is committed with a test, and the host count and the rationale for each host are recorded.
T04 — activity-core handoff: grant v2 publication + generic due resolver
id: FI-WP-0005-T04
status: todo
priority: high
state_hub_task_id: "d679352f-8b0d-5ca5-9e42-4173ed87f48a"
Request (hub message to activity-core, not tasks registered here):
- Repository grant v2. v1 fields plus
publication: {remote, ref, mode: fast-forward-only}. Validated at definition sync and emission preflight. Close reconciliation requires matchingorigin_shaevidence when publication is granted; publication failure is a failed close, not a success. Needs an ADR amendment and agreement with rein-aharness (ADR-002). - Published-artifact due resolver. Parameters: repo, path template, ref,
timezone, completion event type. Due is true unless the artifact exists on
the remote ref and a matching event reports
pushed=true.fi_brief_statusbecomes a thin alias, then is retired.
Done when: activity-core acknowledges with its workplan id(s), and the agreed grant v2 schema revision is recorded here.
T05 — glas-harness handoff: harness.fi-research-brief@1.0.0
id: FI-WP-0005-T05
status: todo
priority: high
state_hub_task_id: "e1d0bacd-b93d-50d5-b07d-e950e96443dc"
Request a profile: rein rein-aharness, unattended; bwrap sandbox with
network.egress = model route + the T03 hosts, default: deny; a tool profile
that can write only the granted paths and may publish only under a grant;
model route and limits per T01; operational_readiness evidence; documented
rollback pin. Blockers are the sand-boxer and Glas owner-auth items
(SAND-WP-0015-T04, GLAS-WP-0012-T02). Track them, do not work around them.
Done when: the profile exists at a pinned version with a positive readiness proof in a sandbox run.
T06 — Retire the break-glass host timer
id: FI-WP-0005-T06
status: todo
priority: medium
state_hub_task_id: "69abf6cf-95af-51b2-8874-120f30cb4b0a"
Delete scripts/railiance-rhythm/systemd/*, install-on-railiance.sh and
run-daily.sh (keep run-common.sh only if it is still referenced). Replace
docs/recurrence-ops.md and playbook references with a manual one-shot
recovery command, valid until the legacy expiry, and the post-cutover
rollback (T08). Confirm the timer is absent on railiance01 (not-found on
2026-09-22).
Rationale: the timer is a second scheduler outside activity-core. It runs
the profile-absent legacy command with no grant, and its installer runs
enable --now. After cutover it would bypass the profile and grant, and
after the legacy expiry the command it calls stops working. A missed day
costs little: due stays true, the verifier records the gap, and a catch-up
brief closes it (FI-WP-0004-T05 precedent).
Done when: the files are removed, the docs name the one-shot command and the profile-pin rollback, and the host has no FI timer.
T07 — Disabled canary definition
id: FI-WP-0005-T07
status: todo
priority: high
state_hub_task_id: "fd22b96d-39f0-53fd-9cdf-7bd29e758c54"
After T04 and T05: add a disabled, operator-triggered canary definition
(pattern: activity-core glas-profile-pilot) carrying harness_profile_ref,
grant v2 and the generic resolver, targeting a controlled date. Compare the
output with the compatibility executor on the same inputs. Run
scripts/verify_brief_durability.py --require-date on the canary day.
Done when: one canary brief is on origin/main with grant, acceptance
and origin_sha evidence reconciled by activity-core, and the comparison is
recorded in docs/evidence/.
T08 — Cutover, rollback proof, reply to rein
id: FI-WP-0005-T08
status: todo
priority: high
state_hub_task_id: "3bd365ad-7e9c-54cc-ad2b-e1cbbf525636"
Move fi-daily-research-brief to the profiled definition; ask rein-aharness
to remove the FI label route and fi_research_brief compatibility path.
Exercise rollback once: pin the previous profile version or revert the
definition revision, and show that the due and evidence behaviour holds.
Reply on thread d0b45acb with the definition revision, profile version,
grant schema revision, and canary and rollback evidence.
Done when: at least five consecutive weekday briefs have run on the
profiled path, and rein confirms that FI no longer needs
AGENT_HARNESS_LEGACY_APPROACHES_UNTIL. Target: before 2026-12-01.
Risks
- Owner-auth blockers in sand-boxer and Glas may not clear before December. Decision point on 2026-11-15: ask rein for a dated FI-only legacy extension. Do not fall back to shape A silently.
- Egress is enforced by host, not path. A broad source host is a broad channel, so keep T03 minimal.
- Cross-repo contract change. Grant v2 touches activity-core, rein-aharness and ADR-002; schedule slips there move T07.
Out of scope
- Changing brief content, template or axes
- Reserve collection (FI-WP-0004 residuals: restore readback, scoped IAM key)
- Other tenants' migrations (Binky etc.), except as consumers of the generic grant and resolver