2026-08-20 08:11:14 +02:00
|
|
|
"""Retired: the suggestion backlog.
|
2026-07-06 10:52:49 +02:00
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
Slice E1 of the State Hub retirement (`STATE-WP-0079-T05`). The capability was
|
|
|
|
|
superseded by the **intake** work-record entity; mutations were retired
|
|
|
|
|
2026-07-21 under `CUST-WP-0061-T06`, and the reads were kept live only so the
|
|
|
|
|
historical record stayed reachable.
|
2026-07-06 10:52:49 +02:00
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
That history is now archived at
|
|
|
|
|
`the-custodian/docs/archived-suggestion-backlog.md` — all 10 suggestions, 10
|
|
|
|
|
notes and 5 relevance bumps, every one closed as `declined` during the intake
|
|
|
|
|
migration and none promoted. With a durable record outside this repo, the read
|
|
|
|
|
surface has no remaining job, so the whole router answers 410.
|
2026-07-06 10:52:49 +02:00
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
The `suggestions`, `suggestion_notes` and `suggestion_relevance_bumps` tables
|
|
|
|
|
are deliberately left in place: they are `retire`/`archive` in `SHR-INV-0001`
|
|
|
|
|
and are captured by the final dump at `STATE-WP-0079-T06`. Dropping them here
|
|
|
|
|
would remove data ahead of the dump for no gain.
|
|
|
|
|
"""
|
2026-07-06 10:52:49 +02:00
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
from fastapi import APIRouter, HTTPException
|
2026-07-06 10:52:49 +02:00
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
router = APIRouter(prefix="/suggestions", tags=["suggestions"])
|
2026-07-06 10:52:49 +02:00
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
_DETAIL = (
|
|
|
|
|
"suggestions are retired (STATE-WP-0079-T05, slice E1). "
|
|
|
|
|
"Use POST /intakes/ for new discovery work. The historical backlog is "
|
|
|
|
|
"archived at the-custodian/docs/archived-suggestion-backlog.md — see also "
|
|
|
|
|
"the-custodian/intake-legacy-suggestions-migration.md and "
|
|
|
|
|
"canon/standards/work-record-types_v0.1.md."
|
|
|
|
|
)
|
2026-07-06 10:52:49 +02:00
|
|
|
|
|
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
def _retired() -> HTTPException:
|
|
|
|
|
return HTTPException(status_code=410, detail=_DETAIL)
|
2026-07-06 10:52:49 +02:00
|
|
|
|
|
|
|
|
|
2026-08-20 08:11:14 +02:00
|
|
|
@router.api_route(
|
|
|
|
|
"/{path:path}",
|
|
|
|
|
methods=["GET", "POST", "PATCH", "PUT", "DELETE"],
|
|
|
|
|
include_in_schema=False,
|
|
|
|
|
)
|
|
|
|
|
@router.api_route("/", methods=["GET", "POST", "PATCH", "PUT", "DELETE"])
|
|
|
|
|
async def suggestions_retired(path: str = "") -> None:
|
|
|
|
|
"""Every suggestion route is retired; see module docstring."""
|
CUST-WP-0061-T06: retire suggestions to read-only legacy
Founder-reviewed decision (WorkOrchestrationArchitectureDraft.md v0.2
section 8 item 6): the fresh intake work-record entity replaces
suggestions, not a rename-bridge. All 5 mutation endpoints (create, vet,
decline, promote, bump-relevance) now 410 with a pointer to POST
/intakes/ and the migration doc; GET/list stay live for the historical
record (10 rows migrated to file-backed intake records in the-custodian,
see that repo's intake-legacy-suggestions-migration.md and CUST-IN-0001
through CUST-IN-0010).
Removed dead code the retirement makes unreachable: Task/TaskPriority/
TaskStatus/normalize_task_status imports (only used by the deleted
promote body), the suggestion_relevance.bump_relevance import, and the
_ALLOWED_*_FROM stage-guard sets + _reject_stage helper (only used by
the deleted vet/decline/promote bodies). WSJF ranking (compute_wsjf,
cost_of_delay, suggestion_sort_key) stays -- still exercised by the
surviving GET /suggestions/?rank=wsjf read path.
MCP tool docstrings (create_suggestion, vet_suggestion,
decline_suggestion, promote_suggestion_to_task,
bump_suggestion_relevance) updated to point at the replacement
(create_intake/route_intake/close_intake) rather than silently 410ing
with no guidance.
tests/test_suggestions.py rewritten: verifies all 5 mutations 410,
GET/list still work for historical rows (seeded directly via the DB
session since creation is retired -- there's no other way to get
historical data into the table anymore), 404 still behaves normally on
unknown ids. Live-verified against the running dev API: POST 410s,
GET with include_terminal=true still returns all 10 migrated-and-declined
historical rows. No regressions: full repo suite green (563 tests).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 01:51:59 +02:00
|
|
|
raise _retired()
|