c85f6bd701
Reported during v0.2.0 mimir smoke: the Input pane bounces up/down mid-turn and streamed tokens land at shifting screen positions. Cause is the v0.2.0 compose order — `Static(id="thinking-current")` was yielded between hint and Footer in the auto-stacked flow, so each display=True/False toggle per thinking-run shifted Input + identity + hint vertically. RichLog growth from streaming text also drifted Input downward in the auto-layout. Fix: dock the chrome to the screen edges via DEFAULT_CSS: - thinking-current docks top under Header (grows/shrinks above RichLog, doesn't affect Input position). - transcript (RichLog) gets `height: 1fr` — absorbs all layout reflows internally via its scroll viewport. - prompt (Input), identity, hint all dock bottom — locked above Footer. Compose order moves thinking-current to position 2 (right after Header) so its dock-top placement is visually adjacent to where Textual lays it out. Old position (between hint and Footer) would still work with the dock CSS, but the proximity reads more clearly. Screen-relative positions are now stable: Input is anchored to the bottom-dock stack; RichLog's content scrolls inside its bounded viewport regardless of how much thinking-current expands. Tokens land at the same screen position each delta. No public API change; pure layout fix. 209/209 tests GREEN; ruff clean. v0.2.0 → v0.2.1 (patch). Cannot directly verify in TTY from a non-interactive session; operator verification needed in real terminal.
66 lines
1.8 KiB
TOML
66 lines
1.8 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "ratatoskr"
|
|
version = "0.2.1"
|
|
description = "Worldtree Conversation API debug TUI — multi-pane observability dashboard"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
license = { file = "LICENSE" }
|
|
authors = [{ name = "Vuong Hoang" }]
|
|
keywords = ["worldtree", "tui", "debug", "sse", "textual"]
|
|
|
|
# Network + SSE consumer + TUI framework.
|
|
# See docs/design-brief.md §1 (Textual), §3 (httpx-sse).
|
|
dependencies = [
|
|
"httpx>=0.27",
|
|
"httpx-sse>=0.4",
|
|
"textual>=0.85",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8",
|
|
"pytest-asyncio>=0.24",
|
|
"respx>=0.21", # httpx mocking for SSE-recorded snapshot tests
|
|
"ruff>=0.6",
|
|
"mypy>=1.11",
|
|
"textual-dev>=1.5", # textual console + live reload during dev
|
|
"pyyaml>=6", # used by docs/contracts/contract_parser.py and scripts/contract_drift_check.py
|
|
]
|
|
|
|
[project.scripts]
|
|
ratatoskr = "ratatoskr.cli:main"
|
|
|
|
[project.urls]
|
|
Repository = "https://gitea.phasefinal.com/vh/ratatoskr"
|
|
"Design Brief" = "https://gitea.phasefinal.com/vh/brokkr-smithy/src/branch/main/docs/ratatoskr-design-brief.md"
|
|
|
|
# Worldtree spec pin — see docs/SPEC-PIN.md for the full bump procedure.
|
|
# Ratatoskr is built against Worldtree at this commit; the vendored
|
|
# spec snapshot in docs/ reflects that SHA.
|
|
[tool.ratatoskr.spec-pin]
|
|
worldtree-spec-rev = "55101e909abcd2219833266b6f905c5bc956e0f0"
|
|
worldtree-version = "v0.19.0"
|
|
pinned-on = "2026-05-20"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/ratatoskr"]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py312"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "B", "UP", "RUF"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.12"
|
|
strict = true
|