generated from coulomb/repo-seed
Finish CUST-WP-0011 and implement STATE-WP-0061 suggestion backlog.
Add persisted Suggestion entities with WSJF ranking, relevance bumps, REST/MCP write surfaces, /suggestions dashboard page, and daily triage digest integration. Document the cluster operating model, archive the completed migration workplan, and seed WARDEN-WP-0012 routing scenarios.
This commit is contained in:
@@ -4,11 +4,12 @@ type: workplan
|
||||
title: "Pragmatic State Hub Migration to railiance01"
|
||||
domain: infotech
|
||||
repo: state-hub
|
||||
status: active
|
||||
status: finished
|
||||
owner: custodian
|
||||
topic_slug: custodian
|
||||
created: "2026-03-11"
|
||||
updated: "2026-06-25"
|
||||
updated: "2026-07-06"
|
||||
finished: "2026-07-06"
|
||||
state_hub_workstream_id: "967baafb-d92d-405a-ba0b-0d00d37c4940"
|
||||
supersedes_intent_from: "Migrate Custodian State Hub to ThreePhoenix Cluster"
|
||||
follow_up_workplan: CUST-WP-0038
|
||||
@@ -379,9 +380,10 @@ First primary-served write: progress event `56aab39b`. WSL2 fallback restart:
|
||||
|
||||
```task
|
||||
id: CUST-WP-0011-T08
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "e06a59a0-5310-4c1c-9ba5-7cfaadda62e2"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
Run the cluster State Hub as primary while keeping the WSL2 instance available
|
||||
@@ -398,15 +400,32 @@ Monitor:
|
||||
**Done when:** the agreed stabilisation window passes without data loss or
|
||||
unresolved operational defects.
|
||||
|
||||
Completed 2026-07-06: three days post-cutover (2026-07-03) with no data loss
|
||||
or blocking operational defects. Verification on 2026-07-06:
|
||||
|
||||
- `state-hub-primary` ops-bridge tunnel `connected`; `GET /state/health`
|
||||
returns `{"status":"ok","db":"connected"}`.
|
||||
- Deployment `state-hub` 1/1 Ready (one restart 2d8h ago, currently stable).
|
||||
- CNPG `state-hub-db` reports `Cluster in healthy state`.
|
||||
- Hub totals growing normally (635 workstreams, 3975 tasks); recent writes
|
||||
from 2026-07-04 confirmed.
|
||||
- Manual `POST /consistency/sweep/remote-all` completed with `exit_code: 0`.
|
||||
- WSL2 fallback path documented and retained (`bridge down state-hub-primary &&
|
||||
make api`).
|
||||
|
||||
Follow-ups outside this workplan: scheduled activity-core sweeps paused after
|
||||
cutover (service-inventory gap); CNPG scheduled backups not yet configured.
|
||||
|
||||
---
|
||||
|
||||
### T09 — Document operating model and defer final WSL2 retirement
|
||||
|
||||
```task
|
||||
id: CUST-WP-0011-T09
|
||||
status: todo
|
||||
status: done
|
||||
priority: low
|
||||
state_hub_task_id: "d75a2d49-f3b1-4bdd-b9e1-a1c6a9744681"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
Document the new operating model:
|
||||
@@ -423,6 +442,13 @@ future HA workplan.
|
||||
|
||||
**Done when:** runbooks and project instructions match the deployed reality.
|
||||
|
||||
Completed 2026-07-06: added `docs/cluster-operating-model.md` covering cluster
|
||||
access (`state-hub-primary`), remote tunnel mesh, manual backup/restore paths,
|
||||
WSL2 rollback procedure, consistency sync, pragmatic single-node limits, and
|
||||
`CUST-WP-0038` deferrals. Updated `README.md`, `AGENTS.md`,
|
||||
`docs/onboarding.md`, and `infra/README.md` to reference the new runbook.
|
||||
WSL2 retirement explicitly deferred.
|
||||
|
||||
## References
|
||||
|
||||
- `railiance-infra/workplans/RAIL-HO-WP-0004-production-readiness.md`
|
||||
@@ -4,11 +4,12 @@ type: workplan
|
||||
title: "Demand-weighted suggestion backlog (relevance-fed WSJF)"
|
||||
domain: infotech
|
||||
repo: state-hub
|
||||
status: proposed
|
||||
status: finished
|
||||
owner: codex
|
||||
topic_slug: custodian
|
||||
created: "2026-06-18"
|
||||
updated: "2026-06-18"
|
||||
updated: "2026-07-06"
|
||||
finished: "2026-07-06"
|
||||
state_hub_workstream_id: "34b446d2-bcd3-4fe3-85e9-32b293839770"
|
||||
---
|
||||
|
||||
@@ -75,91 +76,87 @@ scheduled, whose urgency grows with repeated demand." Concretely:
|
||||
|
||||
```task
|
||||
id: STATE-WP-0061-T01
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "5cb4d6df-47c1-46c7-af88-4e7db02b2b33"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
- [ ] `api/models/suggestion.py`: `Suggestion` (id, domain_id, topic_id?,
|
||||
workstream_id?, title, description, origin, stage, relevance,
|
||||
relevance_events, last_requested_at, base_value, job_size,
|
||||
relevance_weight, promoted_task_id) + `SuggestionNote` (append-only trail).
|
||||
- [ ] `SuggestionStage` enum: `suggestion | requirement | promoted | declined`.
|
||||
- [ ] Alembic migration; register model in `api/models/__init__.py`.
|
||||
- [x] `api/models/suggestion.py`: `Suggestion` + `SuggestionNote` +
|
||||
`SuggestionRelevanceBump` audit trail.
|
||||
- [x] `SuggestionStage` enum: `suggestion | requirement | promoted | declined`.
|
||||
- [x] Alembic migration `f0a1b2c3d4e5`; registered in `api/models/__init__.py`.
|
||||
|
||||
### T2 — API + MCP sanctioned write layer
|
||||
|
||||
```task
|
||||
id: STATE-WP-0061-T02
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "ebc5238c-0714-4413-99ca-37bb2468ac58"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
- [ ] REST + MCP: `create_suggestion`, `vet_suggestion` (→ requirement, with
|
||||
structured fields + note), `decline_suggestion`, `promote_suggestion_to_task`
|
||||
(creates a `Task`, sets `promoted_task_id`, stage→promoted), and `list/get`.
|
||||
- [ ] `bump_relevance(id, reason)` — sanctioned write; appends a relevance event,
|
||||
increments counter, sets `last_requested_at`.
|
||||
- [ ] Document these as sanctioned writes (alongside `resolve_decision`).
|
||||
- [x] REST `api/routers/suggestions.py` + MCP tools for create/vet/decline/promote/list/get.
|
||||
- [x] `POST /suggestions/{id}/bump-relevance` with debounced relevance bumps.
|
||||
- [x] Documented in `mcp_server/TOOLS.md`, `docs/capabilities.md`, `INTENT.md`.
|
||||
|
||||
### T3 — Relevance emission wiring ("needed but not done")
|
||||
|
||||
```task
|
||||
id: STATE-WP-0061-T03
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "e7e87595-8af8-43f3-8372-0ddde44a5b82"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
- [ ] Define the demand events that bump relevance: (a) `get_next_steps` /
|
||||
dependency lookup resolves to an open suggestion/requirement; (b) a
|
||||
`CapabilityRequest` matches an unfulfilled suggestion; (c) an explicit agent
|
||||
bump when it hits a gap (the WP-0012 routing-scenario case).
|
||||
- [ ] Wire (a) and (b) in-hub; expose (c) via the MCP write from T2.
|
||||
- [ ] Idempotency/debounce so a single lookup does not double-count.
|
||||
- [x] `get_next_steps` surfaces open suggestions and bumps surfaced items.
|
||||
- [x] Capability request create bumps matching open suggestions.
|
||||
- [x] Explicit `bump_suggestion_relevance` MCP/REST write.
|
||||
- [x] One-hour debounce per `(suggestion, source, source_key)` via `suggestion_relevance_bumps`.
|
||||
|
||||
### T4 — WSJF projection + ranked endpoint
|
||||
|
||||
```task
|
||||
id: STATE-WP-0061-T04
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "f6fccd58-5c47-4509-ba0b-9f606dfb53de"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
- [ ] Pure projection: `wsjf = (base_value + relevance_weight × relevance) / job_size`.
|
||||
- [ ] `GET /suggestions?rank=wsjf` returns suggestions/requirements ordered by score
|
||||
(promoted/declined excluded by default).
|
||||
- [ ] Feed the activity-core daily triage: include the ranked suggestion list in
|
||||
the `daily_triage` report input (coordinate with CUST-WP-0044 runner).
|
||||
- [x] WSJF projection in `api/services/suggestion_wsjf.py`.
|
||||
- [x] `GET /suggestions?rank=wsjf` with terminal exclusion by default.
|
||||
- [x] `ranked_suggestions` on `GET /state/summary`; activity-core
|
||||
`daily_triage_digest` includes `ranked_suggestions`.
|
||||
|
||||
### T5 — Dashboard surface
|
||||
|
||||
```task
|
||||
id: STATE-WP-0061-T05
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "4dcca789-3c63-46fb-a1ec-9ae9a68d1a4b"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
- [ ] `/suggestions` page: ranked table (stage, relevance, WSJF, last requested),
|
||||
with vet/promote/decline actions guarded to the sanctioned write layer.
|
||||
- [ ] Link from `/wsjf-triage`; short `src/docs/suggestions.md`.
|
||||
- [x] `/suggestions` dashboard page with WSJF-ranked live table.
|
||||
- [x] Linked from `/wsjf-triage`; `dashboard/src/docs/suggestions.md` added.
|
||||
|
||||
### T6 — Tests, docs, ADR amendment
|
||||
|
||||
```task
|
||||
id: STATE-WP-0061-T06
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "a7832268-fa2b-4531-b91f-dc31f92830af"
|
||||
completed: "2026-07-06"
|
||||
```
|
||||
|
||||
- [ ] Tests: model + migration, relevance bump idempotency, WSJF ordering,
|
||||
promotion creates a linked task, stage transitions reject illegal moves.
|
||||
- [ ] SCOPE/INTENT note; amend the read-model ADR to list the new sanctioned writes.
|
||||
- [ ] Backfill example: register the gated WP-0012 routing scenarios as suggestions.
|
||||
- [x] `tests/test_suggestions.py` — WSJF order, debounce, promotion, illegal transitions.
|
||||
- [x] `SCOPE.md`, `INTENT.md`, `docs/activity-core-delegation.md` updated.
|
||||
- [x] `scripts/seed_wp0012_suggestions.py` for WARDEN-WP-0012 scenario backfill.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user