activity-core/workplans/ACTIVITY-WP-0044-repo-manager-bounded-freshness-definition.md
tegwick 8fec564e86
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
ACTIVITY-WP-0043/0044: close delivered tasks, block on owner returns and token
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 692292@bnt-lap001
Assistant-Session: 89c7d8e8-e1b3-47eb-9411-a0ab227fca2f
2026-10-04 16:30:36 +02:00

3.6 KiB

id type title domain repo status owner topic_slug created updated flavor related state_hub_workstream_id
ACTIVITY-WP-0044 workplan Repo Manager bounded freshness ActivityDefinition (RMGR-WP-0020-T03) infotech activity-core blocked claude-activity-core activity-core 2026-10-04 2026-10-04 implementation
RMGR-WP-0020
STATE-WP-0094
85e9d104-05e7-54d3-86d2-466af8cc98c4

Origin: Repo Manager RMGR-WP-0020-T03 hands Activity Core a draft definition for the bounded Forge-sourced freshness runner. Repo Manager owns the engine (rmgr freshness run, RMGR-WP-0020-T02) and receipts (T01); Activity Core owns the schedule. Source level only: no schedule enabled, no deployment, no credential handling, no run dispatched.

Draft definition and bounded operation (disabled)

id: ACTIVITY-WP-0044-T01
status: done
priority: medium
state_hub_task_id: "0cbbadc8-d217-55a3-bc2a-da81e19ec2a8"
  • activity-definitions/repo-manager-bounded-freshness.md: enabled: false, cron 40 */2 * * * UTC, misfire_policy: skip, limit: 6, max_seconds: 240, apply: true; rule condition False (no task spawning).
  • ACT-ADR-007 registry entry repo_manager_freshness (source repo-manager / freshness_run): single Temporal attempt, timeout 300 s, admission requires explicit boolean apply, limit 1..12, max_seconds 1..270, and refuses any definition-supplied command/binary.
  • context_resolvers/repo_manager.py: code-fixed argv rmgr freshness run --limit N --max-seconds S [--dry-run] (executable from worker env ACTIVITY_CORE_RMGR_BIN, default rmgr); only a counted projection (receipt count per outcome, exit code) is persisted.
  • Tests: tests/test_repo_manager_freshness_definition.py (parse, admission, argv, projection, dispatch, DB sync stays disabled, schedule sync paused).

Interface confirmation against the Repo Manager CLI

id: ACTIVITY-WP-0044-T02
status: done
priority: medium
needs_human: false
depends_on: [RMGR-WP-0020-T01, RMGR-WP-0020-T02]
state_hub_task_id: "e4517812-aec2-57e9-9677-de4a89f3f48f"

When RMGR-WP-0020-T01/T02 land, confirm the CLI flags and that stdout is one JSON object with receipts[] carrying repo-manager.freshness-receipt.v1 outcomes; adjust normalize_operation_result if the shape differs. Decide the worker image/packaging of rmgr (no deployment in this workplan).

2026-10-04: RMGR-WP-0020-T01/T02 landed (repo-manager ad1ee3e). Flags match (--limit, --max-seconds required, --dry-run). The run summary is repo-manager.freshness-run.v1 with per-repository rows under results[] (not receipts[]); dry-run rows carry only a planned action. The projection now reads results[].outcome and reports result_count; 35 focused tests pass. Exit 1 with JSON (a failed attempt) still projects; exit 3/4 without JSON raise. Remaining: decide how rmgr is packaged onto the worker.

Founder-reviewed activation

id: ACTIVITY-WP-0044-T03
status: wait
priority: medium
needs_human: true
blocking_reason: "Activation follows RMGR-WP-0020-T04 and is a founder action"
depends_on: [RMGR-WP-0020-T04]
state_hub_task_id: "9aeaf03d-8269-5fd7-8a15-99c7124f0d5c"

Flip enabled: true only after the RMGR-WP-0020-T04 manual dry-run/apply fires. Rollback: enabled: false (or status: paused).

2026-10-04 session close: workplan set to blocked. T02 done: rmgr is packaged into the worker image git-34d1dc5 (pinned repo-manager e77f8b4, isolated venv) and deployed via Argo a86a143. The definition stays disabled. T03 waits for the RMGR-WP-0020-T04 trials, which need the read-only Forgejo token.