Commit graph

715 commits

Author SHA1 Message Date
trvon
982e9d2688
perf(search): favor lexical mixed defaults
Signed-off-by: trvon <git@trevon.dev>
2026-08-23 19:36:29 -06:00
trvon
449405aa53
chore(topology): remove parked join knob
Signed-off-by: trvon <git@trevon.dev>
2026-08-23 14:24:38 -06:00
trvon
85cd84e16c
fix(memory-sync): log quarantine from daemon, not header 2026-08-20 22:18:19 -06:00
trvon
b892dddc49
fix(memory-sync): include spdlog in public header 2026-08-20 22:08:21 -06:00
trvon
eea06a55d6
feat(memory-sync): log quarantine reasons and config summary 2026-08-20 21:08:58 -06:00
trvon
788140eeee
fix(cli): discover daemon log via status 2026-08-20 21:00:49 -06:00
trvon
44939e5828
fix(daemon): bypass strand close during global teardown 2026-08-20 19:51:56 -06:00
trvon
8a097a93c5
fix(daemon): serialize socket accept shutdown 2026-08-19 17:26:49 -06:00
trvon
d152b5697d
chore(tooling): mark dependency-managed includes 2026-08-19 08:43:17 -06:00
trvon
d9f914267a
fix(memory-sync): escape acknowledgement keys 2026-08-19 05:25:31 -06:00
trvon
c56cae7961
fix(metadata): normalize extraction status 2026-08-17 21:43:12 -06:00
trvon
5a24effbae
fix(daemon): harden async shutdown 2026-08-17 21:43:12 -06:00
trvon
b152429229
fix(vector): bind rebuild readiness to epochs 2026-08-17 21:43:11 -06:00
trvon
9b1091757b
feat(p2p): expose sync protocol status 2026-08-17 21:43:11 -06:00
trvon
780c602d50
feat(daemon): wire bounded sync lifecycle 2026-08-17 21:43:11 -06:00
trvon
9fdf75eb60
feat(memory-sync): add vector adapter 2026-08-17 21:43:11 -06:00
trvon
e3ce4496f5
feat(memory-sync): add metadata adapters 2026-08-17 21:43:11 -06:00
trvon
86fe2ff6c9
feat(memory-sync): manage session lifecycle 2026-08-17 21:43:10 -06:00
trvon
ccbc7e768e
fix(memory-sync): bound reconciliation 2026-08-17 20:05:07 -06:00
trvon
4340a24bee
feat(memory-sync): authenticate records 2026-08-17 20:03:52 -06:00
trvon
2261019ee9
feat(storage): add sync backend primitives 2026-08-17 20:03:34 -06:00
trvon
5b251a0337
fix(memory-sync): parse s3 URL via storage resolver
Route the s3 backend through StorageBackendFactory::parseURL so scheme
detection, authority credentials, and query params flow through the same
path as the daemon's storage resolver, and reject a backend=s3 config
whose path is not an s3:// URL.
2026-08-13 12:20:03 -06:00
trvon
f5ff83da20
fix(memory-sync): serialize loop access + resume causal history
Add a mutex around all MemorySyncLoop access so the periodic sync worker
does not race publish/read/syncOnce on the loop's mutable version-vector
and logical-clock state. Reconcile before publish so a fresh loop instance
(e.g. a stateless CLI) resumes its node's causal history. Reject a zero
sync interval.
2026-08-13 12:20:03 -06:00
trvon
ed8778163e
feat(cli): add yams p2p publish/read/status
Thin p2p command over the memory-sync service: publish <key> <value|@file>,
read <key>, and status (merged index summary + backend identity). Binary
values are hex-encoded in JSON output; config resolves from [memory_sync]
with --backend/--path/--node-id overrides.
2026-08-13 12:20:02 -06:00
trvon
bdc181b9c6
feat(memory-sync): wire service into daemon config + lifecycle
Add a typed [memory_sync] TOML section (enabled, node_id, backend,
path, sync_interval_ms) parsed into DaemonConfig, and start/stop the
MemorySyncService within ServiceManager: start after content-store init
(best-effort, relative paths resolve against the data dir), stop noexcept
in Phase 8 shutdown. No YAMS_* env knobs.
2026-08-13 12:20:02 -06:00
trvon
347da90df4
feat(memory-sync): add daemon config + service factory
Typed MemorySyncDaemonConfig parsed from the [memory_sync] TOML section
(enabled, node_id, backend, path, sync_interval_ms) plus
createMemorySyncService() which resolves filesystem/s3 backends and
constructs the service. No YAMS_* env knobs.
2026-08-13 12:20:02 -06:00
trvon
b5d50bf9e6
feat(memory-sync): add periodic sync service
Daemon-facing service owns the backend + sync loop and reconciles on a
configurable interval via a stoppable worker thread. Typed
MemorySyncConfig (nodeId, syncIntervalMs); start/stop idempotent and
stop noexcept-safe. Backend injected so filesystem and S3/R2 resolution
stay with the caller.
2026-08-13 08:17:01 -06:00
trvon
24a15e67d3
feat(memory-sync): add backend-agnostic sync loop
Publish memory records as content-addressed blobs plus a
version-vector-tagged index record per write; sync lists the index,
pulls records, and LWW-merges to a deterministic winner per logical
key. Backend injected (filesystem / S3-R2 interchangeable).
2026-08-13 08:13:44 -06:00
trvon
91c64d6192
feat(memory-sync): add version-vector + LWW data model
Version vector (element-wise max merge, dominates/concurrent partial
order) plus hybrid timestamp and LWW resolution: causally-later writes
win, concurrent writes resolve deterministically by (ts, origin). JSON
serialization via nlohmann. Header-only, no library deps.
2026-08-13 08:05:01 -06:00
trvon
be24d07c27
fix(ci): stabilize sanitizer validation
Rebuild macOS TSan outputs so compiler instrumentation and compiler-rt come from one Apple toolchain generation. Preserve daemon fixture dependencies until ServiceManager teardown so sanitizer lanes do not exercise a test-only use-after-free.
2026-08-08 11:42:33 -04:00
trvon
7485b482f8
fix(build): restore clean test and benchmark links 2026-08-06 09:59:07 -04:00
trvon
45d617d5a3
fix(config): revoke removed tuning overrides 2026-08-05 20:53:19 -04:00
trvon
03aed28eda
fix(config): stack daemon environment leases 2026-08-05 20:53:19 -04:00
trvon
30618eb113
refactor(config): consolidate runtime tuning 2026-08-05 20:53:18 -04:00
trvon
424d91f771
refactor(metadata): extract content transaction seams 2026-08-05 20:53:18 -04:00
trvon
4d7f15dd5c
refactor(bench): isolate benchmark controls 2026-08-05 20:53:18 -04:00
trvon
8b501a344e
refactor(config): consolidate embedding policy 2026-08-05 20:53:18 -04:00
trvon
bdd7281077
fix(mcp): restore WASI final linkage
Keep config and native subsystems out of the minimal archive and export the profile definition so consumer ABI matches.
2026-08-05 20:53:17 -04:00
trvon
e85339ac30
refactor(config): unify flat TOML lookups 2026-08-05 20:53:17 -04:00
trvon
34a799d10e
refactor(config): unify environment policy 2026-08-04 14:35:10 -04:00
trvon
72c8d21054
refactor(config): centralize runtime paths 2026-08-04 13:10:40 -04:00
trvon
8ed1cc6696
fix(daemon): propagate startup failures 2026-08-04 11:48:38 -04:00
trvon
1a2d0f905b
fix(daemon): preserve ingestion admission 2026-08-03 17:52:58 -04:00
trvon
3f017dd47a
bench(ingestion): validate Simeon lifecycle 2026-08-03 17:52:58 -04:00
trvon
b319f0de6f
perf(daemon): trust clean metadata restarts 2026-08-03 17:52:58 -04:00
trvon
d03ffd07b3
refactor(plugins): centralize lifecycle policy 2026-08-03 17:52:58 -04:00
trvon
f2c051cf27
fix(daemon): clarify IPC response mismatches 2026-08-01 11:28:04 -04:00
trvon
9ff5aa7ba1
perf(storage): slice-by-8 CRC32 on all crc paths, 13.7x faster
Profiling running daemon: bit-by-bit CRC32 top CPU consumer (2289
samples/15s during grep). Same algorithm/polynomial, byte-identical
output (oracle test 0..512 len), stored checksums stay valid.

Applies slice-by-8 everywhere crc ran:
- yams::common::crc32 (+ crc32Update seeded variant for mid-stream)
- compression::calculateCRC32/updateCRC32 delegate to it
- storage-local duplicate copy removed (dead scope)
- WAL entry checksum copy removed

Also restructures sizeof arithmetic in WAL size math so opengrep does
not misread it as pointer arithmetic.
2026-08-01 00:12:32 -04:00
trvon
4c3eb3d018
refactor: dedup retry helpers + test fixtures
- isTransientMetadataError + MetadataTelemetry: 2 copies (grep/search)
  -> shared service_utils.hpp
- grep_service local string_contains -> shared features::string_contains
- ArtifactGuard: 5 identical copies in corruption tests -> shared
  tests/common/sqlite_corruption.h

retryMetadataOp loops stay split (async coroutine vs sync sleep - real
difference). annotateResultRelations/applyFileTypeFilters/formatSnippet
deferred: behavior parity question, not mechanical dedup.
2026-08-01 00:12:32 -04:00
trvon
728a304f29
refactor(cli): share time filters between get/list
Same 6-field time filter logic copy-pasted in GetCommand and ListCommand
(~72 lines each). Extract to yams::cli::applyDocTimeFilters + DocTimeFilters,
wire both commands, add unit test.
2026-08-01 00:12:31 -04:00