10 KiB
id, type, title, domain, repo, status, owner, topic_slug, planning_priority, planning_order, created, updated, state_hub_workstream_id
| id | type | title | domain | repo | status | owner | topic_slug | planning_priority | planning_order | created | updated | state_hub_workstream_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CUST-WP-0044 | workplan | Daily State Hub WSJF Triage | custodian | the-custodian | finished | custodian | custodian | high | 44 | 2026-05-17 | 2026-06-04 | 99993845-be6a-401d-be98-f8107014abed |
CUST-WP-0044 - Daily State Hub WSJF Triage
Goal
Create a daily Custodian operating loop that reviews the State Hub situation, identifies loose ends, and recommends which open workplans or tasks should be worked next, revisited, parked, split, or closed.
The daily output should be a short, reviewable prioritization report with WSJF scores for the most relevant open workplans and next tasks. It should reduce coordination drag without silently changing canonical workplan files or promoting work into execution without human or agent review.
Context
As of 2026-05-17, the State Hub snapshot shows:
- 24 active workstreams and 2 blocked workstreams
- 184 todo tasks, 5 in-progress tasks, and 5 blocked tasks
- 5 open decisions
- several large active workplans with low completion ratios
The system is now good at preserving work, but that also makes it easy to accumulate half-open threads. A daily triage loop gives the Custodian a small, repeatable way to turn State Hub from a passive ledger into an active focus surface.
Scope
In scope:
- Daily State Hub situation review using the local brief, State Hub API, and MCP tools when available.
- WSJF assessment for open workplans and representative next tasks.
- Detection of loose-end patterns: stale active plans, large unstarted plans, blocked work, open decisions, dependency-cleared work, zero-task workstreams, and inconsistent file-backed state.
- A daily recommendation artifact that separates:
- work to do next
- workplans that need review before execution
- cleanup or closure candidates
- blocked items requiring human or cross-agent attention
- A progress event summarizing each daily review.
Out of scope:
- Directly editing
canon/. - Automatically committing, archiving, closing, or reprioritizing workplans without a review gate.
- Solving the canonical workplan state model; that belongs to
CUST-WP-0042. - Replacing human judgment for money, legal, security, or external-reputation decisions.
Daily Review Contract
Each daily run should collect:
.custodian-brief.mdfromthe-custodian- State Hub summary via
get_state_summary()orGET /state/summary - hub inbox via
get_messages(to_agent="hub", unread_only=True)orGET /messages/?to_agent=hub&unread_only=true - open workstreams, open tasks, blocked tasks, blocking decisions, next-step hints, workplan index, and repo goal guidance
- relevant git status and consistency state for repos whose workplans are likely to be touched
Each daily run should produce:
- a dated working-memory note under
memory/working/ - a progress event in State Hub
- a compact top-priority table of no more than 10 workplans/tasks
- explicit "revisit" recommendations for stale, blocked, oversized, or ambiguous workplans
- explicit "do not act yet" notes for items that require human approval
WSJF Rubric
Use a 1-5 scale for each numerator factor and denominator factor.
| Factor | Meaning |
|---|---|
| Strategic value | Alignment with current Custodian, State Hub, Railiance, or dependency-chain goals. |
| Time criticality | Whether waiting increases operational risk, blocks other work, or lets context decay. |
| Risk reduction | How much the work reduces security, reliability, data-loss, coordination, or governance risk. |
| Opportunity enablement | How much the work unlocks other active workstreams or reduces future agent friction. |
| Job size | Estimated effort and uncertainty; 1 is small/clear, 5 is large/uncertain. |
Formula:
WSJF = (strategic_value + time_criticality + risk_reduction + opportunity_enablement) / job_size
Tiebreakers:
- Prefer items that close or unblock multiple existing tasks.
- Prefer finishing nearly complete high-value work over starting new large work.
- Prefer safety, backup, identity, secrets, and deployment foundation work when downstream plans depend on them.
- Prefer explicit revisit/parking over leaving stale plans in
active.
Tasks
T01 - Define Daily Triage Prompt And Output Template
id: CUST-WP-0044-T01
status: done
priority: high
state_hub_task_id: "cb450d56-b606-4c89-9e6e-64e139d6ac6b"
Write the daily review prompt and a concise Markdown output template.
The template should include:
- State Hub headline counts
- inbox and blocker summary
- WSJF-ranked workplan/task table
- loose-end findings
- revisit/park/close recommendations
- proposed next actions for the next Custodian session
- guardrails for items that need human approval
Done when a future agent can run the daily review from the template without guessing what to inspect or how to structure the result.
T02 - Implement Daily Review Automation
id: CUST-WP-0044-T02
status: done
priority: high
depends_on: [CUST-WP-0044-T01]
state_hub_task_id: "078c547b-82e0-4ae9-a29c-7bab930924da"
Create or configure the daily run so the Custodian performs the review once per day.
The automation should:
- run against
/home/worsch/the-custodianand inspect/home/worsch/state-hubwhen available - tolerate State Hub API or MCP downtime by falling back to
.custodian-brief.md - avoid making file changes unless the run is explicitly asked to apply a recommendation
- record a progress event when the State Hub API is reachable
Done when a daily run can complete unattended and leave a useful report.
T03 - Add WSJF Scoring Procedure
id: CUST-WP-0044-T03
status: done
priority: high
depends_on: [CUST-WP-0044-T01]
state_hub_task_id: "85fb98ba-3716-4524-88d2-6340a3674d0a"
Define the scoring procedure for open workplans and next tasks.
The procedure should explain how to estimate:
- strategic value
- time criticality
- risk reduction
- opportunity enablement
- job size
It should also define how to flag confidence as high, medium, or low when the available evidence is incomplete.
Done when daily reports can explain why a high-ranked item is high-ranked, without pretending the score is more precise than the evidence supports.
T04 - Detect Loose-End And Revisit Candidates
id: CUST-WP-0044-T04
status: done
priority: high
state_hub_task_id: "14b3be2c-fe9e-464e-8db5-ec1b293f5829"
Add daily checks for work that should be revisited before more execution starts.
Signals include:
- active workplans with no recent progress
- large active workplans with many todo tasks and no in-progress task
- blocked workplans whose dependencies are now resolved or misclassified
- workstreams with zero parsed tasks
- high-priority workplans with stale
updatedmetadata - tasks still open after their parent workstream appears effectively complete
- workplans whose file-backed state differs from State Hub state
Done when the daily report names concrete revisit candidates and the reason each candidate needs attention.
T05 - Define Recommendation Actions And Review Gates
id: CUST-WP-0044-T05
status: done
priority: medium
depends_on: [CUST-WP-0044-T03, CUST-WP-0044-T04]
state_hub_task_id: "0b2d01e4-8c64-4b2f-bb51-502f6c1af975"
Define the action vocabulary for daily recommendations.
Allowed recommendation actions:
work-nextrevisitsplitparkclose-outneeds-humanneeds-cross-agentneeds-consistency-sync
For each action, document when it is safe for an agent to proceed and when a human review gate is required.
Done when the daily loop can recommend action without accidentally crossing governance boundaries.
T06 - First Three Daily Runs And Calibration
id: CUST-WP-0044-T06
status: done
priority: medium
depends_on: [CUST-WP-0044-T02, CUST-WP-0044-T03, CUST-WP-0044-T04, CUST-WP-0044-T05]
state_hub_task_id: "46c48fde-bb5f-4fe5-98cc-9cf788c98fc5"
Run the daily loop for three consecutive days and compare the recommendations against actual follow-up work.
Calibrate:
- scoring weights
- job-size estimates
- maximum number of recommendations
- treatment of stale but intentionally parked work
- whether daily notes are too verbose or too thin
Done when the daily review is useful enough to continue as a standing Custodian habit.
2026-06-04: T06 complete after reviewing three consecutive activity-core daily triage notes:
memory/working/daily-triage-2026-06-02-f9b97749.mdmemory/working/daily-triage-2026-06-03-6d2737e3.mdmemory/working/daily-triage-2026-06-04-65e273bf.md
The recommendations were stable and useful: CUST-WP-0044 and CUST-WP-0045
were repeatedly ranked as high-confidence work-next, human-gated work stayed
clearly marked, and CUST-WP-0046 remained visible as a revisit/unblock item.
Calibration notes live in
docs/daily-statehub-wsjf-calibration-2026-06-04.md. The main adjustment is
that future executable JSON reports must include rank plus WSJF component
scores; the schema, prompt, and ActivityDefinition were updated accordingly.
The daily review is useful enough to continue as a standing Custodian habit,
so CUST-WP-0044 is finished.
Acceptance Criteria
- The Custodian has a daily review path for the State Hub situation.
- The daily report ranks open workplans and next tasks with a transparent WSJF assessment.
- Loose ends are surfaced as explicit revisit, park, split, or close-out recommendations.
- Daily runs leave progress events so future sessions can see the review.
- No canonical workplan or canon changes happen without the appropriate review gate.
Implementation Notes - 2026-05-17
The daily triage loop initially had two explicit layers:
- Active runner: Codex app automation
daily-state-hub-wsjf-triage. - Durable target substrate: activity-core ActivityDefinition draft at
activity-definitions/daily-statehub-wsjf-triage.md.
The reusable prompt, report template, WSJF procedure, loose-end detectors, and
recommendation gates live in
runtime/prompts/daily_statehub_wsgi_triage.md.
As of 2026-05-17, the activity-core definition was intentionally disabled while the Codex automation was the active runner. It existed so the schedule and context contract were reviewable in the same Markdown-as-definition style activity-core already uses. The intended target was to enable that definition and disable the Codex app automation once activity-core could run the Custodian report action directly.
This changed after the activity-core cutover in CUST-WP-0045; the
ActivityDefinition is now the active runner and the three-run calibration is
complete.