Implement ratatoskr.sessions — create + list against Worldtree #2
Closed
opened 2026-05-20 21:44:57 -07:00 by vh
·
1 comment
No Branch/Tag Specified
main
diag/r30-gap-injection-harness
diag/r30-phi0-step-response
diag/r29-pad-series
graphify-tooling
v0.22.3
v0.22.2
v0.22.1
v0.22.0
v0.21.20
v0.21.19
v0.21.18
v0.21.17
v0.21.16
v0.21.15
v0.21.14
v0.21.13
v0.21.12
v0.21.11
v0.21.10
v0.21.9
v0.21.8
v0.21.7
v0.21.6
v0.21.5
v0.21.4
v0.21.3
v0.21.2
v0.21.1
v0.21.0
v0.20.17
v0.20.16
v0.20.15
v0.20.14
v0.20.13
v0.20.12
v0.20.11
v0.20.10
v0.20.9
v0.20.8
v0.20.7
v0.20.6
v0.20.5
v0.20.4
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.9
v0.19.8
v0.19.7
v0.19.6
v0.19.5
v0.19.4
v0.19.3
v0.19.2
v0.19.1
v0.19.0
v0.18.11
v0.18.10
v0.18.9
v0.18.8
v0.18.7
v0.18.6
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.17
v0.17.16
v0.17.15
v0.17.14
v0.17.13
v0.17.12
v0.17.11
v0.17.10
v0.17.9
v0.17.8
v0.17.7
v0.17.6
v0.17.5
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.1
v0.16.0
v0.15.1
v0.15.0
v0.14.2
v0.14.1
v0.14.0
v0.13.0
v0.12.0
v0.11.0
v0.10.0
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.1
v0.7.0
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.1
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.1
v0.2.0
v0.1.0
Labels
Clear labels
blocked-needs-contract
blocked-needs-dependency
bug
cli
documentation
duplicate
enhancement
invalid
needs-architect-decision
needs-info
needs-triage
observability
ready-for-agent
sse-client
task
tui
wontfix
Sleipnir refuses dispatch — issue-scoped contract missing
Sleipnir holds dispatch — INV-029 dependency-aware gate
Something is not working
Command-line surface (--send, --new, --session, etc.)
Docs / contract / spec work
Duplicate of another issue
New feature or improvement
Not a real issue
Escalated for a design call
More info required from reporter
Newly filed, not yet sorted
Log-pane / debug-surface work (persona, admin events, Bifrost, tools)
Gates AFK dispatch via Sleipnir (applied by /sleipnir-preflight)
SSE consumer module (src/ratatoskr/sse_client.py)
Implementation task
Textual app shell + presenters
Accepted as not-fixing
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: vh/ratatoskr#2
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
The
--sendnon-interactive mode (design-brief §8b) needs to create a session before streaming when invoked with--new. The Textual TUI's startup session picker (design-brief §4) needs to list existing sessions. Both touch the session-lifecycle API but neither belongs inratatoskr.sse_client, which is scoped to per-turn streaming.Without these primitives,
--send --newcan't synthesize a fresh session against Worldtree, and the TUI picker has no source for itsDataTableofGET /sessionsresults.Solution
Implement
src/ratatoskr/sessions.pyper the contract atdocs/contracts/issues/2.contract.md. Two entry points + two shared dataclasses:create_session(client, agent_id) -> SessionInfo— POST/sessions.list_sessions(client, *, include_archived=False, limit=50, cursor=None) -> SessionPage— GET/sessions; cursor-paginated.SessionInfo— frozen dataclass carrying the shape both endpoints share (session_id,agent_id,created_at,last_active,metadata) plus list-response-only fields (name,archived,tags) typed as optional.SessionPage— frozen dataclass:items: list[SessionInfo],next_cursor: str | None.Spec-conformance discipline mirrors issue #1: no
core.*/worldtree.*imports (boundary already enforced bytests/test_no_worldtree_imports.py); caller owns thehttpx.AsyncClientandAuthorizationheader lifecycle.Out of scope (this issue)
GET /sessions/{id},PATCH /sessions/{id},DELETE /sessions/{id}— admin-side or mutate-side operations outside Ratatoskr's TUI surface (per design-brief §4 negative clauses: "no in-app rename", "no in-app session deletion").GET /sessions/{id}/messages(history pagination) — deferred until the TUI needs scrollback-replay; not used by--send.Benefits
--send --new(the next vertical slice toward exercisingsse_clientend-to-end against a live Worldtree).sse_clientfor turn streaming + cancel,sessionsfor session lifecycle.Acceptance
uv run pytest tests/.tests/test_no_worldtree_imports.pycontinues to pass (no Worldtree-source imports added).uv run ruff check src/ tests/clean.55101e909abcd2219833266b6f905c5bc956e0f0).Dependencies
ratatoskr.sse_client) closed-on-main. Not a code dependency —sessions.pydoes not import fromsse_client.py— but a convention dependency: the API-consumption posture (caller-owned httpx client, async-native, no Worldtree imports, response-parsing into typed dataclasses) is established there andsessions.pyfollows the same shape.Closed — shipped. ratatoskr.sessions create+list implemented via TDD (commit
4ba143c, Volva-reviewed ind6f9327).