Observability¶
The runtime now uses two bounded observability channels:
- Rotating process logs (
work/logs/story_gen.logby default) - SQLite anomaly breadcrumbs (
anomaly_eventstable in the API DB)
This keeps enough signal for debugging while preventing unbounded log growth.
Runtime logging¶
story-api configures logging once per process via
src/story_gen/adapters/observability.py.
Environment controls:
STORY_GEN_LOG_LEVEL(defaultINFO)STORY_GEN_LOG_PATH(defaultwork/logs/story_gen.log)STORY_GEN_LOG_MAX_BYTES(default5242880)STORY_GEN_LOG_BACKUP_COUNT(default10)STORY_GEN_ACCESS_LOG_LEVEL(defaultWARNING)
Anomaly store¶
The API persists warning/error breadcrumbs into SQLite through
src/story_gen/adapters/sqlite_anomaly_store.py.
Current anomaly writes include:
- analysis quality-gate failures
- malformed dashboard payload shapes
Retention controls:
STORY_GEN_ANOMALY_RETENTION_DAYS(default30)STORY_GEN_ANOMALY_MAX_ROWS(default10000)
Pruning runs on API startup so stale/overflow rows are removed automatically.