mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-24 02:38:06 +02:00
Add architectural invariants & deny-list as docs/invariants.md
A standing reference for invariants that hold across storage, engine, server, schema, indexing, observability, and the OSS/Cloud split. Used to check RFCs and PRs against the substrate boundaries (don't rebuild what Lance gives us), layering rules (one trait boundary per layer), distributability constraints (Send+Sync, location-neutral IR), honesty expectations (estimate-vs-actual, bounded failure modes), unified patterns (reconciler, Union polymorphism, SIP, factorize), the §IX deny-list, and the §X review checklist. §IV (additivity / migration) and §VIII (OSS/Cloud kernel-product split) are referenced but not yet drafted — flagged as placeholders pending upstream fill-in. AGENTS.md surfaces it from the topic index, the always-on rules section, and the maintenance contract; the deny-list is also inlined there as a fast-pass review filter so it stays in scope every turn. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
a335d98854
commit
c924e121d2
2 changed files with 189 additions and 1 deletions
28
AGENTS.md
28
AGENTS.md
|
|
@ -55,6 +55,7 @@ Full diagram and concurrency model: [docs/architecture.md](docs/architecture.md)
|
|||
|
||||
| Area | Read |
|
||||
|---|---|
|
||||
| **Architectural invariants & deny-list (read before any non-trivial proposal or review)** | **[docs/invariants.md](docs/invariants.md)** |
|
||||
| Architecture, L1/L2 framing, concurrency model | [docs/architecture.md](docs/architecture.md) |
|
||||
| Storage layout, `__manifest` schema, URI schemes, S3 env vars | [docs/storage.md](docs/storage.md) |
|
||||
| `.pg` schema language, types, constraints, annotations, migration planning | [docs/schema-language.md](docs/schema-language.md) |
|
||||
|
|
@ -83,7 +84,7 @@ Full diagram and concurrency model: [docs/architecture.md](docs/architecture.md)
|
|||
|
||||
## Always-on rules (load these into your working memory)
|
||||
|
||||
These invariants need to be in scope on every change — they're the ones that quietly break if forgotten.
|
||||
These invariants need to be in scope on every change — they're the ones that quietly break if forgotten. The full architectural invariants and deny-list live in [docs/invariants.md](docs/invariants.md); §IX (deny-list) is the fastest first-pass when reviewing any change.
|
||||
|
||||
1. **`__manifest` is the atomic-publish boundary.** Multi-dataset commits flip via a single `ManifestBatchPublisher` write. Don't introduce code paths that publish per sub-table outside the batch publisher — you'll lose snapshot isolation across tables.
|
||||
2. **`nearest($x.vec, $q)` requires a `LIMIT`.** The compiler enforces it, but if you're touching the query lowering or executor, don't break this rule. ANN without a limit is unbounded.
|
||||
|
|
@ -96,6 +97,29 @@ These invariants need to be in scope on every change — they're the ones that q
|
|||
9. **Indexes are built on the branch head, not on a snapshot.** Reads always see the current index state. Lazy fork: a branch that hasn't mutated a sub-table reuses the source's index until the first write.
|
||||
10. **Stable type IDs survive renames.** Schema migration uses `stable_type_id` (kind+name hashed at first sight). Don't mint new IDs on rename.
|
||||
|
||||
### Deny-list (fast-pass review filter — full reasoning in [docs/invariants.md §IX](docs/invariants.md))
|
||||
|
||||
If a proposal fits one of these, the burden is on the proposer to justify why this case is the exception:
|
||||
|
||||
- Synchronous-inline index updates for indexes expensive to build (vector ANN, FTS) — use the reconciler pattern.
|
||||
- Custom WAL / transaction manager / buffer pool — Lance owns these.
|
||||
- Job queue for state derivable from manifest — reconciler pattern instead.
|
||||
- Per-feature lowering for shapes that share a structure (interfaces, wildcards, alternation) — use one mechanism.
|
||||
- Eager materialization of cross-products in multi-hop — factorize; flatten only when needed.
|
||||
- Ad-hoc IN-list filtering when SIP fits.
|
||||
- String-flattened SQL filter generation when structured pushdown is available.
|
||||
- In-process-only `Dataset` impls — `Send + Sync`, remote descriptors.
|
||||
- Cost-blind plan choice — lowering-order execution is not a planner.
|
||||
- Hidden statistics — if a metric matters for plan choice, it must be exposed through the trait surface.
|
||||
- Side-channels for query semantics — search modes, mutations, polymorphism are first-class IR concepts.
|
||||
- Discarding rank in retrieval — score and rank propagate as columns.
|
||||
- State that drifts from the manifest — derive from observable state.
|
||||
- Cloud-only correctness fixes — correctness is always OSS.
|
||||
- Forking the codebase for Cloud — trait-extension only.
|
||||
- Hand-rolling something Lance already does — check the spec first.
|
||||
- Mutating in place state that should be immutable (Lance fragments, index segments) — new segments instead.
|
||||
- Silent failures — OOM, timeout, partial result must all be surfaced and bounded.
|
||||
|
||||
---
|
||||
|
||||
## Quick-reference flows
|
||||
|
|
@ -172,6 +196,8 @@ omnigraph policy explain --actor act-alice --action change --branch main
|
|||
|
||||
When you change something user-visible, **update the relevant `docs/<area>.md` in the same change**. Pointers from this file to that doc must keep working — CI enforces cross-link integrity via `scripts/check-agents-md.sh`.
|
||||
|
||||
When proposing or reviewing a non-trivial change, walk [docs/invariants.md](docs/invariants.md) — at minimum the §IX deny-list and §X review checklist. Add to the deny-list when a new anti-pattern surfaces; relaxing an invariant requires the same review process as code.
|
||||
|
||||
Rules:
|
||||
|
||||
1. **Update in the same PR.** New endpoint, query function, CLI flag, env var, constant, schema construct, or invariant: update both the source code and the doc in the same change. Never split documentation drift into a follow-up.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue