feat(#20): worldtree-sdk cutover teardown (slice-7) + v0.22.0
The last slice of the consumer-layer cutover. Teardown only — zero runtime-logic change; the 494-green suite is the regression gate. - Drop `httpx-sse` from pyproject + lockfile: slice-6 deleted its last user, nothing imports `httpx_sse`, the SDK owns SSE parsing now. - Module boundary (operator decision): KEEP `sessions.py` + `sse_client.py` as pure caller-semantic type/exception homes (no rename, no fold — A3 was blocked by the `AgentNotAvailable` name collision + `wt.py` would mis-home `endpoint_for_plane`). Docstrings updated to stop claiming "client"; the `AdminEvent`/`SseId`/exception homes stay put (resolves the slice-6 deferred-home item). - Retire wire contracts #2 (sessions) + #15 (tier3): DEC-1 phase-2 — normative authority already transferred to the cutover contract; the code they specified is gone, so the files are deleted. #1 (SSE event vocab) and `first_message` stay (ratatoskr-owned, not retired). - Final coverage-map re-anchor: tools/list_sessions re-homed to `wt.py`; the Last-Event-ID SSE-resume sub-gap CLOSED (folded into `stream_turn` auto-resume); Surface-2 SSE parsing re-anchored to the SDK. - Stale doc-rot fix: the cli.py transport comment no longer calls `seed_preset_first_message` "not-yet-migrated" (it rides `wt`). - v0.22.0 (minor, DEC-6, operator-approved): publishes the full 6-slice cutover milestone.
This commit is contained in:
@@ -335,6 +335,43 @@ re-anchor its coverage-map rows.
|
||||
`except (…, MalformedSseId, MalformedSseData)` stays a harmless defensive superset
|
||||
(pre-existing, not introduced here).
|
||||
|
||||
### Slice-7 notes (Teardown — the LAST slice, decided at teardown)
|
||||
|
||||
- **Module boundary: KEEP `sessions.py` + `sse_client.py` as pure type/exception
|
||||
homes (operator decision A1, 2026-07-19).** Post-cutover both modules hold NO
|
||||
client — only ratatoskr's caller-semantic exception surface + a couple of
|
||||
dataclasses (`BifrostBinding`; `SseId`, `AdminEvent`) + the `endpoint_for_plane`
|
||||
provider helper. Options weighed: (A1) keep as-is + fix docstrings; (A2) rename to
|
||||
honest names (`session_errors`/`stream_errors`), re-point ~7 importers; (A3)
|
||||
consolidate into one `errors.py` / fold into `wt.py`. **A1 chosen** — teardown is
|
||||
deletion + dep-drop, not a rename refactor; A3 is blocked by the `AgentNotAvailable`
|
||||
name collision (two distinct classes: persona-404 in `sessions` vs eager-turn-409 in
|
||||
`sse_client`) which would force renaming a contract-level caller-semantic type + its
|
||||
§ Error-map rows + catch sites, and folding into `wt.py` mis-homes
|
||||
`endpoint_for_plane` (provider-side). Naming-honesty (principle-2) addressed by the
|
||||
one-line docstring note, not a rename. **Resolves the slice-6 open item** (line ~326):
|
||||
the ratatoskr `AdminEvent`/`SseId` + exceptions stay in `sse_client.py`; the
|
||||
session/tier3 exceptions + `BifrostBinding` stay in `sessions.py`.
|
||||
- **`httpx-sse` dropped from `pyproject.toml` + lockfile.** Slice-6 deleted its last
|
||||
user (`sse_client.stream_admin_events`); a tree grep confirmed nothing imports
|
||||
`httpx_sse`. `uv sync` physically pruned it; suite green (494) with the module absent.
|
||||
- **Wire contracts #2 (sessions) + #15 (tier3) retired (files DELETED, DEC-1
|
||||
phase-2).** Their normative authority transferred to this contract at authoring;
|
||||
the code they specified is gone, so the files are removed now. **#1 (SSE event
|
||||
vocabulary) is NOT retired** — it stays current (amended `4bd9abd` 2026-07-18) as
|
||||
ratatoskr's SSE-event-rendering reference; **`first_message` is NOT retired** (DEC-1,
|
||||
ratatoskr-owned usage contract). Accepted side-effect: `issues/5.contract.md`'s
|
||||
historical "amended #2/#3/#4 in-place" line now points at a deleted #2 — left as-is
|
||||
(frozen issue-record of a past action; not expanding DEC-1's #2/#15 scope).
|
||||
- **Final coverage-map re-anchor.** `GET /sessions/{id}/tools` → `wt.py get_session_tools`
|
||||
(SDK `sessions.tools`) → `web/server.py` (the old `sessions.py`→`tui.py` row was
|
||||
stale; TUI deleted). `GET /sessions` `list_sessions` re-homed to `wt.py`, still
|
||||
caller-less (picker was a TUI frontier, now moot). The `Last-Event-ID` SSE-resume
|
||||
sub-gap is CLOSED — `reconnect_turn` deleted, resume folded into `wt.py stream_turn`
|
||||
auto-resume. Surface-2 SSE parsing re-anchored to the SDK (`_envelope_for_type` gone).
|
||||
- **Ships as v0.22.0 (minor, DEC-6, operator-approved 2026-07-19).** Publishes the
|
||||
full 6-slice consumer-layer cutover milestone.
|
||||
|
||||
## Out of scope
|
||||
|
||||
- Bifrost PROVIDER planes (memory/affect) — hand-rolled, ADR-0009, untouched.
|
||||
|
||||
Reference in New Issue
Block a user