Part of #3.
Implement the configuration and path-safety foundation for ingester database isolation.
Decisions
- Add a required
paths.staging-directory option.
- Preserve existing semantics:
data-directory: shared/public SQLite snapshots for clients.
staging-directory: durable local ingester-owned SQLite files; must survive ingester restart.
scratch-directory: ephemeral receiver/export scratch; may be deleted between restarts.
- All three path roots must be distinct and none may be nested inside another, using resolved/real paths.
Config should validate path configuration but should not create directories.
DBCache should also validate paths because it can be instantiated directly.
DBCache should require data-directory to exist and may create staging-directory and dedicated export scratch subdir as needed.
Implementation checklist
Tests
Notes
This is the safety boundary for #3: public data, durable staging, and ephemeral scratch must be separate so the ingester cannot accidentally expose live SQLite/WAL files to clients.
Part of #3.
Implement the configuration and path-safety foundation for ingester database isolation.
Decisions
paths.staging-directoryoption.data-directory: shared/public SQLite snapshots for clients.staging-directory: durable local ingester-owned SQLite files; must survive ingester restart.scratch-directory: ephemeral receiver/export scratch; may be deleted between restarts.Configshould validate path configuration but should not create directories.DBCacheshould also validate paths because it can be instantiated directly.DBCacheshould requiredata-directoryto exist and may createstaging-directoryand dedicated export scratch subdir as needed.Implementation checklist
staging_directorytoConfig._init_paths()frompaths.staging-directory.Config.DBCache.__init__().config.toml.templatecomments to document all three path roles.feder-ingestconfig wiring to passdata_directory,staging_directory, andscratch_directoryexplicitly toDBCache.ingester_export_interval, default1 hour.ingester_finalize_after, default12 hours.DBCache.Tests
paths.staging-directory.data-directory,staging-directory, andscratch-directory.DBCachealso rejects equal/nested path roots when constructed directly.Notes
This is the safety boundary for #3: public data, durable staging, and ephemeral scratch must be separate so the ingester cannot accidentally expose live SQLite/WAL files to clients.