# Demand-Weighted Suggestion Backlog The `/suggestions` page shows persisted **gated needs** that are not yet real tasks. Each unmet lookup increments `relevance`, which raises WSJF ranking. ## Stages | Stage | Meaning | |-------|---------| | `suggestion` | Recorded need, not yet vetted | | `requirement` | Vetted with structured fields and notes | | `promoted` | Became a real `Task` (`promoted_task_id` set) | | `declined` | Rejected; terminal | ## WSJF projection ```text cost_of_delay = base_value + (relevance_weight × relevance) wsjf = cost_of_delay / job_size ``` `GET /suggestions?rank=wsjf` returns open suggestions/requirements ordered by score. Promoted and declined entries are excluded unless `include_terminal=true`. ## Sanctioned writes MCP and REST: - `create_suggestion` / `POST /suggestions/` - `vet_suggestion` / `POST /suggestions/{id}/vet` - `decline_suggestion` / `POST /suggestions/{id}/decline` - `promote_suggestion_to_task` / `POST /suggestions/{id}/promote` - `bump_suggestion_relevance` / `POST /suggestions/{id}/bump-relevance` Relevance also bumps automatically when: - `GET /state/next_steps` surfaces open suggestions - A `CapabilityRequest` matches an open suggestion ## Daily triage `GET /state/summary` includes `ranked_suggestions` for the activity-core `daily_triage_digest` resolver. See [WSJF Triage](/docs/wsjf-triage). ## Origin Motivated by ops-warden `WARDEN-WP-0012` gated routing scenarios. Example backfill: `scripts/seed_wp0012_suggestions.py`.