Skip to main content
Suchi captures, extracts, files, retrieves and reviews documents locally. Each step remains useful without an LLM or external service. The production runtime is one static Go binary with an embedded Svelte app, SQLite, immutable CAS blobs and rebuildable filing views under DATA_DIR; no database server, cache or broker. This guide and the pages it links describe the current checkout. Confirm contracts against source and tests; linked feature guides own detailed user and wire behavior.

Architecture guides

How a document flows

Document lifecycle follows each step.

Where to start a change

Keep behavior with its domain owner. plugin-api/ provides vocabulary for compile-linked authenticators, job subscribers and audit sinks, without a runtime Go plugin loader or service framework. The shared assembly injects integration callbacks into the API instead of importing plugins/* there and provides one boot-time callback for compiled native routes and durable subscribers. See Plugins. core/approvals/document_change.go owns review eligibility together with source, field-generation, access and session validation. The classifier records bounded review reasons; Suchi’s approval transaction performs the final checks and write. See Review-first mode.

Change and verification map

Start at the affected boundary, then run the aggregate loop.
Use writable GOCACHE when restricted; force re-execution with make test TEST_FLAGS='-count=1 -timeout 60s'. Race tests need CGO. UI changes also need make ui and relevant browser regressions. Use focused benchmarks for local performance claims and make bench-check for startup/memory/binary guardrails. Update this guide when ownership, entry points, state flow or invariants change; update owning feature/API guides and changelog for observable changes. Report missing runtime/real-tool checks: mocks do not establish end-to-end compatibility.