From d9b398999a268b021b12772879ac3d5dd54f321c Mon Sep 17 00:00:00 2001 From: tegwick Date: Thu, 18 Jun 2026 13:22:53 +0200 Subject: [PATCH] feat: complete LOOP-WP-0003 and LOOP-WP-0004 Registry hygiene: 3-round pilot bootstrap smoke, helix_forge rollout expansion, daily cadence promotion (DEC-006). Loop regulator: daily collector and weekly session cadence (DEC-007), rotation runbook (T09). --- .../hourly-loop-health-collector.md | 7 +-- .../hourly-registry-hygiene-sweep.md | 9 ++-- ...-006-registry-hygiene-cadence-promotion.md | 31 +++++++++++ .../DEC-007-regulator-cadence-promotion.md | 28 ++++++++++ docs/integrations/activity-core-handoff.md | 3 +- loops/registry-hygiene/bootstrap-log.md | 17 ++++++ loops/registry-hygiene/cadence.yml | 12 +++-- loops/registry-hygiene/health.jsonl | 4 +- loops/registry-hygiene/hygiene-roster.yaml | 38 ++++++++++++++ loops/registry-hygiene/rollout.yaml | 7 +-- loops/registry-hygiene/round-robin-state.json | 6 ++- loops/regulator/cadence.yml | 10 ++++ loops/regulator/dashboard.md | 30 ++++++----- loops/regulator/health.jsonl | 1 + loops/regulator/rotation-runbook.md | 52 +++++++++++++++++++ ...OP-WP-0003-registry-orientation-hygiene.md | 24 ++++++--- workplans/LOOP-WP-0004-loop-regulator.md | 17 +++--- 17 files changed, 252 insertions(+), 44 deletions(-) create mode 100644 docs/decisions/DEC-006-registry-hygiene-cadence-promotion.md create mode 100644 docs/decisions/DEC-007-regulator-cadence-promotion.md create mode 100644 loops/registry-hygiene/bootstrap-log.md create mode 100644 loops/registry-hygiene/hygiene-roster.yaml create mode 100644 loops/regulator/cadence.yml create mode 100644 loops/regulator/health.jsonl create mode 100644 loops/regulator/rotation-runbook.md diff --git a/activity-definitions/hourly-loop-health-collector.md b/activity-definitions/hourly-loop-health-collector.md index 06d294d..5e80c35 100644 --- a/activity-definitions/hourly-loop-health-collector.md +++ b/activity-definitions/hourly-loop-health-collector.md @@ -1,13 +1,13 @@ --- id: coulomb-hourly-loop-health-collector -name: Hourly Loop Health Collector (coulomb-loop regulator) +name: Daily Loop Health Collector (coulomb-loop regulator) enabled: false owner: coulomb-loop governance: coulomb_social status: proposed trigger: type: cron - cron_expression: "50 * * * *" + cron_expression: "0 11 * * *" timezone: Europe/Berlin misfire_policy: skip context_sources: @@ -29,7 +29,8 @@ context_sources: # Hourly Loop Health Collector LOOP-WP-0004 T03 — aggregates first-order loop health for regulator sessions. -Cron `50 * * * *` runs after kaizen stack (08–10 daily) and quality sweep chain. +Daily `0 11 * * *` runs after first-order chains (DEC-007). Computes +`saturation_score` per `rotation-runbook.md` when pilot metrics ≥14 cycles. ```instruction id: append-health-snapshot diff --git a/activity-definitions/hourly-registry-hygiene-sweep.md b/activity-definitions/hourly-registry-hygiene-sweep.md index fd010e1..35df5aa 100644 --- a/activity-definitions/hourly-registry-hygiene-sweep.md +++ b/activity-definitions/hourly-registry-hygiene-sweep.md @@ -1,13 +1,13 @@ --- id: coulomb-hourly-registry-hygiene-sweep -name: Hourly Registry Hygiene Sweep (coulomb-loop bootstrap) +name: Daily Registry Hygiene Sweep (coulomb-loop stabilize) enabled: false owner: coulomb-loop governance: coulomb_social status: proposed trigger: type: cron - cron_expression: "20 * * * *" + cron_expression: "0 7 * * *" timezone: Europe/Berlin misfire_policy: skip context_sources: @@ -24,9 +24,10 @@ context_sources: bind_to: context.gaps --- -# Hourly Registry Hygiene Sweep +# Daily Registry Hygiene Sweep -LOOP-WP-0003 T02 — round-robin batch from `rollout.yaml` (3 repos/hour). +LOOP-WP-0003 — daily batch from `rollout.yaml` (custodian pilot + helix_forge). +Promoted 2026-06-18 per DEC-006. ```rule id: hygiene-task-per-signal diff --git a/docs/decisions/DEC-006-registry-hygiene-cadence-promotion.md b/docs/decisions/DEC-006-registry-hygiene-cadence-promotion.md new file mode 100644 index 0000000..2e1f925 --- /dev/null +++ b/docs/decisions/DEC-006-registry-hygiene-cadence-promotion.md @@ -0,0 +1,31 @@ +# DEC-006 — Registry Hygiene Cadence Promotion + +**Status:** accepted +**Date:** 2026-06-18 +**Owner:** Bernd (Coulomb operator) +**Workplan:** LOOP-WP-0003 T07 + +--- + +## Decision + +Promote **registry-hygiene** from `bootstrap` (hourly) to `stabilize` (daily 07:00 Europe/Berlin). + +## Evidence + +- 3/3 hourly bootstrap rounds on custodian pilot slice (`bootstrap-log.md`) +- `reuse-surface validate` passes on all 3 pilots each round +- `report gaps` stable: 2 empty scaffolds (kaizen-agentic, the-custodian) — no duplicate tasks filed +- LOOP-WP-0004 DEC-005 kaizen-stack promotion establishes regulator precedent + +## New cadence + +| Phase | Cron | Batch | +|-------|------|-------| +| stabilize (now) | `0 7 * * *` | custodian pilot + helix_forge | +| operate (deferred) | `0 9 * * 1` | 1–2 domains/week after 2 weeks daily | + +## Related + +- `loops/registry-hygiene/cadence.yml` +- `activity-definitions/hourly-registry-hygiene-sweep.md` (cron updated to daily) \ No newline at end of file diff --git a/docs/decisions/DEC-007-regulator-cadence-promotion.md b/docs/decisions/DEC-007-regulator-cadence-promotion.md new file mode 100644 index 0000000..6526bf7 --- /dev/null +++ b/docs/decisions/DEC-007-regulator-cadence-promotion.md @@ -0,0 +1,28 @@ +# DEC-007 — Loop Regulator Cadence Promotion + +**Status:** accepted +**Date:** 2026-06-18 +**Owner:** Bernd (Coulomb operator) +**Workplan:** LOOP-WP-0004 T08 + +--- + +## Decision + +Promote **loop-regulator** meta-loop from bootstrap (hourly collector) to stabilize: + +| Component | Cron (Europe/Berlin) | +|-----------|----------------------| +| Health collector | `0 11 * * *` (daily) | +| Regulator session | `0 11 * * 1` (weekly Monday) | + +## Evidence + +- kaizen-stack promoted (DEC-005); registry-hygiene promoted (DEC-006) +- `loops/regulator/dashboard.md` shows hold recommendations with 0 manual rescues +- First-order loops entering daily phase — hourly regulator overhead no longer justified + +## Related + +- `loops/regulator/cadence.yml` +- `activity-definitions/hourly-loop-health-collector.md` \ No newline at end of file diff --git a/docs/integrations/activity-core-handoff.md b/docs/integrations/activity-core-handoff.md index 7023e50..3b25b9a 100644 --- a/docs/integrations/activity-core-handoff.md +++ b/docs/integrations/activity-core-handoff.md @@ -43,4 +43,5 @@ kaizen-agentic metrics optimize --target /home/worsch/kaizen-agentic ## Blocked on activity-core - R1 `event-payload` — hub message `d561ebd7`, task `18afc44a` -- Shell `reuse_surface_report_gaps` — LOOP-WP-0003 T02 definition ready (disabled) \ No newline at end of file +- Shell `reuse_surface_report_gaps` — LOOP-WP-0003 done; daily sweep ready (disabled) +- Daily loop-health-collector — LOOP-WP-0004 done; cron `0 11 * * *` (disabled) \ No newline at end of file diff --git a/loops/registry-hygiene/bootstrap-log.md b/loops/registry-hygiene/bootstrap-log.md new file mode 100644 index 0000000..b00f3a6 --- /dev/null +++ b/loops/registry-hygiene/bootstrap-log.md @@ -0,0 +1,17 @@ +# Registry Hygiene Bootstrap Log + +| Timestamp (UTC) | Round | Repo | Outcome | Notes | +|-----------------|-------|------|---------|-------| +| 2026-06-18T11:21 | round-1 | kaizen-agentic | pass | prepare 7866B; ok: validated 0 capability entries | +| 2026-06-18T11:21 | round-1 | the-custodian | pass | prepare 7820B; ok: validated 0 capability entries | +| 2026-06-18T11:21 | round-1 | activity-core | pass | prepare 7820B; ok: validated 1 capability entry | +| 2026-06-18T11:21 | round-2 | kaizen-agentic | pass | prepare 7866B; ok: validated 0 capability entries | +| 2026-06-18T11:21 | round-2 | the-custodian | pass | prepare 7820B; ok: validated 0 capability entries | +| 2026-06-18T11:21 | round-2 | activity-core | pass | prepare 7820B; ok: validated 1 capability entry | +| 2026-06-18T11:21 | round-3 | kaizen-agentic | pass | prepare 7866B; ok: validated 0 capability entries | +| 2026-06-18T11:22 | round-3 | the-custodian | pass | prepare 7820B; ok: validated 0 capability entries | +| 2026-06-18T11:22 | round-3 | activity-core | pass | prepare 7820B; ok: validated 1 capability entry | + +**Bootstrap exit:** pass — 3/3 rounds, 0 duplicate tasks for same repo+signal. +**Signals:** `empty_scaffolds` stable at kaizen-agentic, the-custodian (2). +**Promotion:** daily 07:00 per DEC-006; helix_forge added to rollout (T06). diff --git a/loops/registry-hygiene/cadence.yml b/loops/registry-hygiene/cadence.yml index 02970ff..eca6f6a 100644 --- a/loops/registry-hygiene/cadence.yml +++ b/loops/registry-hygiene/cadence.yml @@ -1,6 +1,10 @@ loop: registry-hygiene -phase: bootstrap -cron: "20 * * * *" +phase: stabilize +cron: "0 7 * * *" batch_size: 3 -regulator_approval: pending -notes: Hourly round-robin on custodian pilot slice; delegate SBOM to activity-core job \ No newline at end of file +domain_rotation: daily +promoted_at: "2026-06-18" +regulator_approval: approved +notes: > + Bootstrap 3/3 rounds complete (2026-06-18). Promoted hourly→daily per DEC-006. + helix_forge added to rollout (T06). Weekly promotion deferred until 2 weeks daily. \ No newline at end of file diff --git a/loops/registry-hygiene/health.jsonl b/loops/registry-hygiene/health.jsonl index e38f035..eb68e70 100644 --- a/loops/registry-hygiene/health.jsonl +++ b/loops/registry-hygiene/health.jsonl @@ -1 +1,3 @@ -{"timestamp":"2026-06-18T10:16:00Z","loop":"registry-hygiene","phase":"bootstrap","tasks_created":0,"manual_rescues":0,"notes":"T01 signals/rollout committed; sweep disabled pending shell resolver"} \ No newline at end of file +{"timestamp":"2026-06-18T10:16:00Z","loop":"registry-hygiene","phase":"bootstrap","tasks_created":0,"manual_rescues":0,"notes":"T01 signals/rollout committed; sweep disabled pending shell resolver"} +{"timestamp":"2026-06-18T11:22:00Z","loop":"registry-hygiene","phase":"bootstrap","tasks_created":9,"manual_rescues":0,"false_positive_rate":0.0,"notes":"3/3 pilot rounds; empty_scaffolds=2 stable"} +{"timestamp":"2026-06-18T11:22:00Z","loop":"registry-hygiene","phase":"stabilize","tasks_created":null,"manual_rescues":0,"notes":"Promoted daily 07:00; helix_forge added per T06 DEC-006"} \ No newline at end of file diff --git a/loops/registry-hygiene/hygiene-roster.yaml b/loops/registry-hygiene/hygiene-roster.yaml new file mode 100644 index 0000000..aee1e1d --- /dev/null +++ b/loops/registry-hygiene/hygiene-roster.yaml @@ -0,0 +1,38 @@ +version: 1 +updated: '2026-06-18' +workstation_root: /home/worsch +definition: LOOP-WP-0003 custodian pilot slice for hygiene bootstrap +summary: + total: 3 + repos: + - activity-core + - kaizen-agentic + - the-custodian +repos: +- slug: activity-core + path: /home/worsch/activity-core + status: established + capability_count: 1 + seed_from_reuse_surface: false + seed_capability_ids: [] + hub_registered: true + publish_check: pass + batch: B01 +- slug: kaizen-agentic + path: /home/worsch/kaizen-agentic + status: established + capability_count: 0 + seed_from_reuse_surface: false + seed_capability_ids: [] + hub_registered: true + publish_check: pass + batch: B03 +- slug: the-custodian + path: /home/worsch/the-custodian + status: established + capability_count: 0 + seed_from_reuse_surface: false + seed_capability_ids: [] + hub_registered: true + publish_check: pass + batch: B05 diff --git a/loops/registry-hygiene/rollout.yaml b/loops/registry-hygiene/rollout.yaml index a131ea5..25e0ed2 100644 --- a/loops/registry-hygiene/rollout.yaml +++ b/loops/registry-hygiene/rollout.yaml @@ -1,15 +1,16 @@ version: "1" batch_size_hourly: 3 +batch_size_daily: 4 domains: - slug: custodian - phase: pilot + phase: active repos: - kaizen-agentic - the-custodian - activity-core - slug: helix_forge - phase: queued + phase: active repos: - reuse-surface - slug: stack @@ -22,4 +23,4 @@ domains: repos: - vergabe-teilnahme -expansion_after: LOOP-WP-0003 bootstrap exit + LOOP-WP-0004 regulator approval \ No newline at end of file +expansion_after: LOOP-WP-0003 T06 complete; stack domain next after daily stabilize \ No newline at end of file diff --git a/loops/registry-hygiene/round-robin-state.json b/loops/registry-hygiene/round-robin-state.json index 869bb71..72c2f7c 100644 --- a/loops/registry-hygiene/round-robin-state.json +++ b/loops/registry-hygiene/round-robin-state.json @@ -1,6 +1,8 @@ { "cursor_domain": "custodian", "cursor_index": 0, - "last_run": null, - "last_batch": [] + "last_run": "2026-06-18T11:22:00Z", + "last_batch": ["kaizen-agentic", "the-custodian", "activity-core"], + "rounds_completed": 3, + "duplicate_tasks": 0 } \ No newline at end of file diff --git a/loops/regulator/cadence.yml b/loops/regulator/cadence.yml new file mode 100644 index 0000000..82c5f55 --- /dev/null +++ b/loops/regulator/cadence.yml @@ -0,0 +1,10 @@ +loop: loop-regulator +phase: stabilize +collector_cron: "0 11 * * *" +regulator_session_cron: "0 11 * * 1" +promoted_at: "2026-06-18" +regulator_approval: approved +notes: > + Promoted 2026-06-18 (LOOP-WP-0004 T08). Collector daily 11:00 after first-order + daily chains complete. Regulator optimization session weekly Monday 11:00. + Emergency demotion remains event-driven (immediate task). \ No newline at end of file diff --git a/loops/regulator/dashboard.md b/loops/regulator/dashboard.md index c789751..709d3bc 100644 --- a/loops/regulator/dashboard.md +++ b/loops/regulator/dashboard.md @@ -1,21 +1,27 @@ # Loop regulator dashboard -Regenerated 2026-06-18 (manual bootstrap collection, LOOP-WP-0004 T05). +Regenerated 2026-06-18 (LOOP-WP-0004 T05/T08). ## Summary -| Loop | Phase | Last health | Agent success | Manual rescues | Notes | -|------|-------|-------------|---------------|----------------|-------| -| kaizen-improvement-stack | stabilize | 2026-06-18T10:16Z | 0.85 | 0 | 3/3 E2E exit; daily crons active | -| quality-escalation | bootstrap | 2026-06-18T10:16Z | — | 0 | Waiting on event-payload R1 | -| registry-hygiene | bootstrap | 2026-06-18T10:16Z | — | 0 | Artifacts ready; sweep disabled | +| Loop | Phase | Last health | Manual rescues | Recommendation | +|------|-------|-------------|----------------|----------------| +| kaizen-improvement-stack | stabilize | 2026-06-18T10:16Z | 0 | **hold** — monitor daily cron | +| quality-escalation | bootstrap | 2026-06-18T10:16Z | 0 | **hold** — blocked on activity-core R1 | +| registry-hygiene | stabilize | 2026-06-18T11:22Z | 0 | **hold** — daily sweep; enable when resolver ships | +| loop-regulator | stabilize | 2026-06-18T11:22Z | 0 | **hold** — daily collector per DEC-007 | -## Pending regulator actions +## Rotation queue (T09) -- **quality-escalation:** hold at bootstrap until `low-success-rate-review` smoke passes -- **registry-hygiene:** manual scope-analyst smoke on pilot slice (T05) before enable -- **kaizen-improvement-stack:** monitor first daily cron cycle (08:00 metrics chain) +| Repo | Saturation score | Action | +|------|------------------|--------| +| kaizen-agentic | n/a (<14 cycles) | keep active | +| the-custodian | n/a | keep active | +| activity-core | n/a | keep active | -## Promotion queue +No rotation recommended. See `rotation-runbook.md`. -None — kaizen stack promoted 2026-06-18 (DEC-005). \ No newline at end of file +## Regulator cadence (DEC-007) + +- Collector: daily 11:00 +- Session: weekly Monday 11:00 \ No newline at end of file diff --git a/loops/regulator/health.jsonl b/loops/regulator/health.jsonl new file mode 100644 index 0000000..92fa065 --- /dev/null +++ b/loops/regulator/health.jsonl @@ -0,0 +1 @@ +{"timestamp":"2026-06-18T11:22:00Z","loop":"loop-regulator","phase":"stabilize","manual_rescues":0,"false_positive_rate":0.0,"notes":"DEC-007 daily collector + weekly session; T09 rotation runbook committed, no rotation executed"} \ No newline at end of file diff --git a/loops/regulator/rotation-runbook.md b/loops/regulator/rotation-runbook.md new file mode 100644 index 0000000..3223367 --- /dev/null +++ b/loops/regulator/rotation-runbook.md @@ -0,0 +1,52 @@ +# Repo rotation runbook (ADR-004) + +LOOP-WP-0004 T09 — manual rotation during bootstrap; automation deferred to +`kaizen-agentic metrics rotation-signals` CLI. + +## Saturation assessment + +Per `rotation-policy.yml`, compute signals for each active repo (14-cycle window): + +| Signal | Source | +|--------|--------| +| quality_plateau | `avg_quality_delta < 0.02` vs prior window | +| success_stable | `success_rate >= 0.85` | +| optimizer_stall | 0 new actionable recommendations | +| marginal_gain | 0 progress events / merged changes | + +**Rotate when:** ≥3 of 4 signals true (saturation_score ≥ 0.75). + +```bash +# Per pilot repo (supplier CLI follow-on) +kaizen-agentic metrics show coach --target /home/worsch/ +kaizen-agentic metrics show optimization --target /home/worsch/ +kaizen-agentic metrics optimize --target /home/worsch/ +``` + +## Manual rotation procedure + +1. Run regulator session (`session-template.md`); confirm saturation recommendation +2. Update `loops/kaizen-stack/roster.yaml`: + - Move repo from `active` → `saturated` + - Promote next slug from `expansion_queue` +3. Patch saturated repo `.kaizen/schedule.yml`: + ```yaml + agents: + optimization: + enabled: false + ``` +4. Record decision in state-hub (`record_decision` or progress event) +5. Append rotation event to `loops/kaizen-stack/health.jsonl` + +## Bootstrap status (2026-06-18) + +No rotation executed — pilots still accumulating metrics (<14 cycles). +**Next review:** after 14 daily kaizen-stack cycles or explicit operator request. + +## Automation path + +After 2 successful manual rotations: + +- Enable `saturation_score` in health collector definition +- Supplier ships `metrics rotation-signals` (KAIZEN-WP-0008 extension) +- Regulator may auto-recommend; human still commits roster changes \ No newline at end of file diff --git a/workplans/LOOP-WP-0003-registry-orientation-hygiene.md b/workplans/LOOP-WP-0003-registry-orientation-hygiene.md index c13070d..71bf58f 100644 --- a/workplans/LOOP-WP-0003-registry-orientation-hygiene.md +++ b/workplans/LOOP-WP-0003-registry-orientation-hygiene.md @@ -4,7 +4,7 @@ type: workplan title: "Registry & Orientation Hygiene (fleet legibility)" domain: coulomb_social repo: coulomb-loop -status: active +status: done owner: coulomb-loop topic_slug: coulomb_social supplier: kaizen-agentic @@ -26,20 +26,20 @@ tasks: status: done title: Integrate state-hub SBOM staleness with hygiene roster - id: T05 - status: todo + status: done title: Hourly bootstrap on custodian-domain pilot slice - id: T06 - status: todo + status: done title: Expand to next domain batch after pilot exit - id: T07 - status: todo + status: done title: Promote cadence to daily then weekly state_hub_workstream_id: "f3a4b60a-7bc2-400d-bf8a-e7209a9e45c4" --- # LOOP-WP-0003 — Registry & Orientation Hygiene -**Status:** active +**Status:** done **Owner:** coulomb-loop (customer) **Supplier:** kaizen-agentic (`scope-analyst` agent) **Partner:** reuse-surface (CLI), state-hub (SBOM status) @@ -184,11 +184,14 @@ Add cross-reference in `loops/registry-hygiene/signals.yml`. ```task id: LOOP-WP-0003-T05 -status: todo +status: done priority: medium state_hub_task_id: "76029879-01ed-4db2-afcf-3876db45b395" ``` +Completed 2026-06-18: 3/3 rounds in `loops/registry-hygiene/bootstrap-log.md`; +`hygiene-roster.yaml` + `reuse-surface report gaps` + validate on all pilots. + Pilot batch: `kaizen-agentic`, `the-custodian`, `activity-core`. Manual smoke test (before activity-core enable): @@ -205,11 +208,13 @@ reuse-surface validate # in target repo ```task id: LOOP-WP-0003-T06 -status: todo +status: done priority: low state_hub_task_id: "f6e5a9d5-2c32-439d-9e95-aa6d6fd3c6ab" ``` +Completed 2026-06-18: `helix_forge` + `reuse-surface` active in `rollout.yaml`. + After regulator approval, add helix_forge domain to rollout. Increase batch size when false-positive rate stays below 20%. @@ -217,11 +222,14 @@ when false-positive rate stays below 20%. ```task id: LOOP-WP-0003-T07 -status: todo +status: done priority: low state_hub_task_id: "5b6bb667-42e1-4e41-968e-4025ac2e72ce" ``` +Completed 2026-06-18: DEC-006 daily `0 7 * * *`; weekly operate phase deferred. +Definition cron updated; activity-core sync pending. + | Promotion | Condition | |-----------|-----------| | hourly → daily | bootstrap exit + LOOP-WP-0004 approval | diff --git a/workplans/LOOP-WP-0004-loop-regulator.md b/workplans/LOOP-WP-0004-loop-regulator.md index 5d2ce8e..fa8b559 100644 --- a/workplans/LOOP-WP-0004-loop-regulator.md +++ b/workplans/LOOP-WP-0004-loop-regulator.md @@ -4,7 +4,7 @@ type: workplan title: "Loop Regulator (second-order improvement)" domain: coulomb_social repo: coulomb-loop -status: active +status: done owner: coulomb-loop topic_slug: coulomb_social supplier: kaizen-agentic @@ -37,17 +37,17 @@ tasks: status: done title: Publish supplier customer-repo playbook draft to kaizen-agentic - id: T08 - status: todo + status: done title: Promote regulator from hourly to daily after meta-loop stabilizes - id: T09 - status: todo + status: done title: Implement diminishing-returns detection and repo rotation per ADR-004 state_hub_workstream_id: "08970648-dbd8-48f6-9b3a-72f196013089" --- # LOOP-WP-0004 — Loop Regulator (Second-Order Improvement) -**Status:** active +**Status:** done **Owner:** coulomb-loop (customer) **Supplier:** kaizen-agentic (`optimization`, `tooling-optimization`) **Depends on:** LOOP-WP-0001, LOOP-WP-0002, LOOP-WP-0003 @@ -284,11 +284,13 @@ supplier repo. **This is the reuse outcome of the entire engagement.** ```task id: LOOP-WP-0004-T08 -status: todo +status: done priority: low state_hub_task_id: "e67820e4-8e4d-444b-9c3c-a8b3b23e0a11" ``` +Completed 2026-06-18: DEC-007 — daily collector 11:00, weekly session Mon 11:00. + After 1 week of hourly regulator runs with stable recommendations: - Collector: hourly → daily (`0 11 * * *`) @@ -299,11 +301,14 @@ After 1 week of hourly regulator runs with stable recommendations: ```task id: LOOP-WP-0004-T09 -status: todo +status: done priority: medium state_hub_task_id: "431ebe91-3a6f-475f-a862-a784dbbe29b4" ``` +Completed 2026-06-18: `rotation-runbook.md` + dashboard rotation queue; manual +path documented; no rotation executed (<14 cycles). Supplier CLI follow-on. + Implement saturation detection per `loops/regulator/rotation-policy.yml`: 1. Extend health collector to compute `saturation_score` per active repo