Minor rather than patch, and the tie-break rule says default to patch, so the reason is worth stating: a capability arrived AND one left. Report authors gain a declared public API -- one line, `<script src="/_booth/embed.js" defer>`, plus the `data-booth-mark` anchor syntax -- and the verbatim path loses no-JavaScript operation, which it had since it existed. That asymmetry is what makes it not a tie. Either half alone would have been defensible as a patch. Operator approved 2026-09-22.
38 lines
1.5 KiB
TOML
38 lines
1.5 KiB
TOML
[project]
|
|
name = "booth"
|
|
version = "0.5.0"
|
|
description = "The Booth — a dead-simple standing web server that scans a data dir of drop-folders and renders each as an ephemeral media 'booth' (image/webm/audio auto-gallery, or a folder's own index.html verbatim). Also accepts browser/curl uploads for pickup under a human-readable id. 24h TTL, then the folder is wiped. Fleet tool for CC sessions to surface A/B and smoke results to the operator."
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
"fastapi>=0.115",
|
|
"uvicorn[standard]>=0.34",
|
|
"jinja2>=3.1",
|
|
"python-multipart>=0.0.9",
|
|
"markdown>=3.5",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
test = [
|
|
"pytest>=8.0",
|
|
"httpx>=0.27", # fastapi TestClient
|
|
# U3's embed seam moves placement into the browser, where no string
|
|
# assertion can see it. Browsers are NOT downloaded per project: they live
|
|
# box-wide in /opt/ms-playwright with PLAYWRIGHT_BROWSERS_PATH wired
|
|
# globally. THE UPPER BOUND IS THE POINT -- each playwright release pins a
|
|
# Chromium revision, and one that wants a revision the shared store does
|
|
# not have dies with an opaque "Executable doesn't exist" rather than a
|
|
# missing-dependency error. 1.60-1.62 map to chromium 1223/1228/1234, all
|
|
# present. Raise the bound only after the store has the newer revision.
|
|
"playwright>=1.60,<1.63",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["booth"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|