vaultspec-rag
Automatic convergence referenceLink to Automatic convergence reference
Automatic convergence keeps code and vault indexes current after filesystem changes. The resident service owns collection, admission, retries, and publication.
For service setup, see Service mode. For command-wide syntax, see
the CLI reference. Automatic updates require watch_enabled = true, which
is the default.
Operator surfacesLink to Operator surfaces
Surface |
Lookup |
|---|---|
CLI, human |
|
CLI, JSON |
|
Filtered CLI |
|
HTTP |
|
Jobs |
|
Service state |
|
Python admin client |
|
The HTTP and JSON surfaces return one canonical controller object. Human output labels the same values without recalculating state, age, deadlines, or pressure.
GET /watcher returns at most 256 controllers by default. limit accepts 0 through
256. The response includes controllers_total, controllers_returned,
controllers_truncated, and the applied filters.
Controller identity and fieldsLink to Controller identity and fields
Each controller owns one canonical project root and one source: code or vault.
Field |
Meaning |
|---|---|
|
Canonical absolute project root |
|
|
|
Current state from the state table |
|
Stable reason code from the reason table |
|
Changed paths waiting outside the captured batch |
|
Age of the oldest pending or captured observation; |
|
Earliest retained observation timestamp |
|
Latest retained observation timestamp |
|
Scope generation captured by the active attempt |
|
Paths captured by the active attempt |
|
Timestamp for the next controller decision, or |
|
Latest bounded convergence timestamp, or |
|
Timestamped, generation-stamped service measurements |
|
Measurement names the service could not observe |
|
Ordered stable reason codes blocking admission |
|
Previous state, new state, reason, timestamp, deadline, and measurement generation |
|
Associated service job identifier, or |
|
Next retry timestamp, or |
|
Retry circuit state |
|
Operator action for a refusal, or |
measurement contains generation, observed_at, job_backlog, index_in_flight,
index_waiters, search_in_flight, search_latency_seconds, gpu_pressure,
storage_available, and service_quiesced. Missing facts stay explicit. They never
justify an unbounded delay.
StatesLink to States
State |
Meaning |
|---|---|
|
No retained work |
|
Changes are accumulating inside the coalescing window |
|
A bounded scope is eligible for admission |
|
The scheduler selected the scope |
|
The associated index job is running |
|
A successful job is inside its post-success cost delay |
|
Current service measurements delay admission |
|
A retry delay or retry admission is active |
|
The controller cannot converge automatically; inspect |
|
The captured scope completed without remaining work |
Stable reason codesLink to Stable reason codes
Reason |
Meaning |
|---|---|
|
A filesystem change entered the scope |
|
The minimum or adaptive collection window remains open |
|
The quiet-tree collection deadline arrived |
|
The captured batch reached its path limit |
|
The freshness deadline requires a decision |
|
The admission arbiter selected this eligible controller |
|
The service admitted the captured scope |
|
Its service job started |
|
Its service job completed |
|
Its service job was cancelled |
|
A newer authoritative attempt superseded the job |
|
The controller is observing its cooling ceiling |
|
Job backlog blocks admission |
|
Search concurrency or latency blocks admission |
|
Device pressure blocks admission |
|
Storage or backend pressure blocks admission |
|
The service is not accepting this work |
|
The next retry time has not arrived |
|
A retry is eligible to run |
|
The retry circuit blocks automatic attempts |
|
Incremental convergence is unsafe; request an explicit rebuild |
|
Persisted scope state cannot be resumed safely |
|
Retained scope exceeded its configured capacity |
|
Persisted controller data uses an unsupported schema |
|
No pending path remains |
Reason codes are additive API values. Automation should handle unknown future values without treating them as success.
Policy settingsLink to Policy settings
Set keys in configuration or use the matching VAULTSPEC_RAG_ environment variable.
Key |
Environment variable |
Default |
Valid values |
|---|---|---|---|
|
|
|
Number, at least |
|
|
|
Number, at least |
|
|
|
Number, at least |
|
|
|
Number, greater than |
|
|
|
Number, greater than |
|
|
|
Integer, greater than |
|
|
|
Integer, greater than |
|
|
|
Integer, greater than |
The complete policy must satisfy these relations:
watch_coalesce_min_seconds <= watch_coalesce_max_secondswatch_maximum_freshness_secondsis at least the coalescing maximum, cooling maximum, and measurement reevaluation intervalwatch_batch_path_limit <= watch_scope_max_paths
Invalid relationships fail configuration loading with a ValueError that names the
conflicting keys and values.
Deprecated timing mappingLink to Policy settings, Deprecated timing mapping
watch_debounce_ms and VAULTSPEC_RAG_WATCH_DEBOUNCE_MS remain accepted for
compatibility. When explicitly set, the millisecond value supplies both coalescing
bounds unless the corresponding adaptive key is explicit.
watch_cooldown_s and VAULTSPEC_RAG_WATCH_COOLDOWN_S remain accepted for
compatibility. When explicitly set, the value supplies the cooling maximum unless
watch_cooling_max_seconds is explicit.
The server updates timing flags retain the same mapping:
--update-delay-ms maps to the coalescing bounds, and
--repeat-update-delay-s maps to the cooling maximum.
Freshness, fairness, and scopeLink to Freshness, fairness, and scope
The coalescing bounds let a busy tree form efficient batches. The freshness deadline bounds that delay. Measurement reevaluation also has a bounded interval, so unavailable or stale pressure evidence cannot postpone work indefinitely.
Admission is fair across eligible root/source controllers. A busy project cannot claim every turn while another eligible controller waits.
Each attempt captures an exact path scope and generation. New observations remain pending for a later attempt. Completion consumes only the captured generation, which prevents path loss and duplicate consumption.
Persisted scope and retry state survive service restart. Generation fencing prevents a stale job or callback from publishing over a newer attempt.
Refusals and remediationLink to Refusals and remediation
A refused controller needs operator action. Read reason, remediation,
measurement_unavailable, and last_transition together.
Reason |
Operator response |
|---|---|
|
Inspect the refusal and request an explicit rebuild |
|
Inspect service logs, then rebuild the affected source |
|
Increase the scope limits or reduce the changed set, then rebuild |
|
Run a compatible service version or rebuild the affected source |
|
Inspect the job failure and retry evidence before requesting another run |
The service supplies remediation. If a refusal lacks a specific message, the canonical
default is Inspect the refusal reason and request an explicit rebuild.
Troubleshooting lookupsLink to Troubleshooting lookups
This passage is corrected at the top of the page
vaultspec-rag server updates status --state refused
vaultspec-rag server updates status --source code --limit 20 --json
vaultspec-rag server jobs --trigger watcher
vaultspec-rag server logs --limit 200
Use the job_id from a controller with the jobs and logs commands. For service startup,
shutdown, and recovery details, see Service mode. For every jobs and
updates option, see the CLI reference.