```
Outcome: done
Changed:
src/typosaurus_sandbox/core/__init__.py — new file, barrel exports for core package
src/typosaurus_sandbox/core/config.py — new file, Config dataclass loads .env.json
src/typosaurus_sandbox/core/logging.py — new file, RotatingFileHandler setup
src/typosaurus_sandbox/__init__.py — added Config, setup_logging to barrel exports
src/typosaurus_sandbox/__main__.py — wired setup_logging() + Config.load() + main() guard
src/typosaurus_sandbox/app.py — added startup event log + debug log on health check
.gitignore — added .env.json and logs/
Verified by: make verify — passed, 67 tests, no failures, no new warnings
Findings:
- src/typosaurus_sandbox/core/config.py:13 — Config dataclass loads .env.json at startup with plug-and-play defaults (host=127.0.0.1, port=8000). Falls back to defaults when file is absent.
- src/typosaurus_sandbox/core/logging.py:7 — setup_logging() configures RotatingFileHandler with 10MB max size, 5 backups, writing to logs/typosaurus-sandbox.log.
- src/typosaurus_sandbox/__main__.py:12 — main() calls setup_logging() then Config.load() before starting uvicorn with the loaded host/port.
- src/typosaurus_sandbox/app.py:17 — on_event("startup") hook logs application startup complete; health endpoint logs DEBUG.
- .gitignore now includes .env.json and logs/ to prevent committing user config and runtime logs.
O
Typosaurus-Run: 34b5946ec981488091bee588eb919ff2
Typosaurus-Node: 4a61ee3c929a41ae9e29e0823617b58a
Typosaurus-Agent: @nadia
Refs: #28
retoor retoor@molodetz.nl
typosaurus-sandbox
Sandbox for Typosaurus end-to-end verification.
A FastAPI application serving arithmetic operations over HTTP with JSON request/response bodies.
Configuration
The application uses a single .env.json file at the project root as its central point of truth
for configuration. Defaults are plug-and-play and require no setup:
{
"host": "127.0.0.1",
"port": 8000
}
When no .env.json is present, the application starts with these defaults. To customise, create
.env.json in the project root and populate only the keys that differ.
Usage
Start the server
python -m typosaurus_sandbox
The server listens on http://127.0.0.1:8000 by default.
Health check
GET /health
Response:
{"status": "ok"}
API endpoints
All calculator endpoints accept POST requests with a JSON body and return a JSON response.
POST /api/v1/calculator/add
Add two integers.
Request:
{"left": 3, "right": 5}
Response:
{"result": 8}
POST /api/v1/calculator/subtract
Subtract the right integer from the left.
Request:
{"left": 10, "right": 3}
Response:
{"result": 7}
POST /api/v1/calculator/clamp
Clamp a value between a low and high bound.
Request:
{"value": 15, "low": 0, "high": 10}
Response:
{"result": 10}
Boundaries are inclusive. A low > high combination produces a 422 validation response.
POST /api/v1/calculator/clamp-to-byte
Clamp an integer to the byte range [0, 255].
Request:
{"value": 300}
Response:
{"result": 255}
Verification
make verify
Runs compile-all checks against all source and test files, then executes the full test suite. Zero warnings are tolerated.