pub struct WatchConfig {
pub root: PathBuf,
pub debounce: Duration,
pub rag_override: Option<bool>,
pub rag_delay: Duration,
pub rag_config: EmbeddingProviderConfig,
pub redact: RedactionConfig,
pub json_events: bool,
pub pid_lock_dir: Option<PathBuf>,
pub pid_lock_slot: Option<String>,
pub skip_migrations: bool,
pub stale: Option<Arc<StaleState>>,
}Expand description
Configuration for the watch loop.
Fields§
§root: PathBufRoot directory to watch.
debounce: DurationDebounce window for filesystem events.
rag_override: Option<bool>Auto-embed override. Some(true)/Some(false) force on/off; None
auto-detects (embed only if the DB already has embeddings). Resolved once
at startup against the live DB — see run_watch.
rag_delay: DurationDelay after last index before embedding (only when auto-embed is on).
rag_config: EmbeddingProviderConfigRAG provider configuration (embedding + reranker).
redact: RedactionConfigSecret-redaction policy applied to each re-index pass.
json_events: boolEmit newline-delimited JSON events on stdout. When false, the loop only produces tracing logs on stderr (existing behavior).
pid_lock_dir: Option<PathBuf>Directory for the watcher’s PID file (written on startup, removed on
graceful exit). None disables PID-file tracking. Consulted by
cartog self update to detect a running watcher.
pid_lock_slot: Option<String>Slot name used when acquiring the watch PID file. Required when
pid_lock_dir is set — run_watch/spawn_watch hard-fail
if a directory is configured without a slot, to prevent a
global-slot watcher from silently colliding with DB-scoped peers
in multi-project setups. None is only valid when pid_lock_dir
is also None (untracked mode used by tests).
In the cartog binary the slot is derived via
cartog::state::slot_for_db("watch", db_path). Library
embedders should follow the same shape: <prefix>-<16 hex chars>
where the hex is a SHA-256 prefix of the canonicalized DB path.
skip_migrations: boolOpen the on-disk DB via Database::open_existing_rw instead of
Database::open. Used by the Phase 5 promoter to attach without
re-running schema migrations (the promoter validated the schema
when it pinned PinnedAttach; running them again would re-trigger
the SQLITE_BUSY race the election prevents).
stale: Option<Arc<StaleState>>Shared staleness state for the MCP server to read. None (the default,
e.g. standalone cartog watch) disables staleness publishing.
Implementations§
Source§impl WatchConfig
impl WatchConfig
Sourcepub fn new(root: PathBuf) -> Self
pub fn new(root: PathBuf) -> Self
Build a WatchConfig rooted at root with these defaults:
debounce = 5s, rag_override = None (auto-detect), rag_delay = 30s,
json_events = false, both pid_lock_* = None (untracked
mode), skip_migrations = false. Callers wanting PID-lock
tracking must set BOTH pid_lock_dir and pid_lock_slot after
construction — see WatchConfig::pid_lock_slot.
Auto Trait Implementations§
impl Freeze for WatchConfig
impl RefUnwindSafe for WatchConfig
impl Send for WatchConfig
impl Sync for WatchConfig
impl Unpin for WatchConfig
impl UnsafeUnpin for WatchConfig
impl UnwindSafe for WatchConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more