diff --git a/docs/dev/testing.md b/docs/dev/testing.md index 04ead416..bca38ad3 100644 --- a/docs/dev/testing.md +++ b/docs/dev/testing.md @@ -36,7 +36,7 @@ The engine's `tests/` is the principal coverage surface; most graph-shaped behav | `changes.rs` | `diff_between` / `diff_commits` | | `consistency.rs` | Cross-table snapshot isolation, atomic publish | | `lineage_projection.rs` | RFC-013 Phase 7 acceptance gate: graph lineage lives ONLY in `__manifest` — over a realistic history (main commits, a branch, a merge, actors), the production `CommitGraph::open` projection reconstructs the full DAG (commit set, parents, merge parents + merge actor, per-branch heads, inline actors) from the `graph_commit`/`graph_head` rows, and the `_graph_commits.lance` / `_graph_commit_actors.lance` dataset directories are never created at all | -| `schema_apply.rs` | Migration plan + apply, schema-apply lock; index materialization deferred to the reconciler (iss-848): `apply_schema_defers_vector_index_on_empty_table` (an empty-table Vector `@index` never aborts the apply) and `index_only_constraint_apply_touches_no_table_data` (adding an `@index` is metadata-only — no table-version bump) | +| `schema_apply.rs` | Migration plan + apply, schema-apply lock; index materialization deferred to the reconciler (iss-848): `apply_schema_defers_vector_index_on_empty_table` (an empty-table Vector `@index` never aborts the apply) and `index_only_constraint_apply_touches_no_table_data` (adding an `@index` is metadata-only — no table-version bump); enum widening (iss-enum-widening-migration): `enum_widening_apply_is_metadata_only_and_accepts_new_variant` (no table-version bump; new variant accepted, out-of-set still rejected) + `enum_narrowing_apply_is_refused` (OG-MF-106 with the graph left writable). The planner's widening/narrowing matrix lives in `schema_plan.rs`'s in-source tests | | `search.rs` | FTS / vector / hybrid (`bm25`, `nearest`, `rrf`) | | `scalar_indexes.rs` | Per-property index dispatch of `build_indices_on_dataset_for_catalog`: enums + orderable scalars get a BTREE (so `=`/range/IN/IS NULL are index-accelerated), free-text Strings keep FTS — observed via `TableStore::key_column_index_coverage`, the same helper the traversal chooser uses | | `traversal.rs` | `Expand`, variable-length hops, anti-join (CSR path — `OMNIGRAPH_TRAVERSAL_MODE` unset) | diff --git a/docs/user/schema/index.md b/docs/user/schema/index.md index df82a23d..f7385fe5 100644 --- a/docs/user/schema/index.md +++ b/docs/user/schema/index.md @@ -63,6 +63,7 @@ A migration plan compares the accepted schema against the desired one and report - Add a property - Rename a property - Add a constraint +- Extend an enum (pure widening: add variants to an existing `enum(...)` property — same base type and nullability, every existing value retained; metadata-only at apply time, no table data touched, and the new variants are accepted immediately on every write surface. Narrowing, renaming a variant, or converting between an enum and a free `String` still plan as unsupported, `OG-MF-106`. Value *order* is not significant — the schema IR normalizes enum values, so a reorder is not a change at all.) - Update type or property metadata (annotations) - Unsupported change (reports the entity and reason; forces the plan to unsupported) diff --git a/docs/user/schema/lint.md b/docs/user/schema/lint.md index 6635e9fe..2c54591f 100644 --- a/docs/user/schema/lint.md +++ b/docs/user/schema/lint.md @@ -32,7 +32,7 @@ The chassis defines ten families. Today only DS and MF have emitted codes. The r | `OG-DS-105` | Destructive | destructive | error | drop populated vector column (reserved) | | `OG-MF-103` | Maybe-fail | validated | error | add required property without `@default` to populated type | | `OG-MF-104` | Maybe-fail | validated | error | tighten nullable to non-nullable (reserved) | -| `OG-MF-106` | Maybe-fail | destructive | error | narrowing scalar type | +| `OG-MF-106` | Maybe-fail | destructive | error | property type change (incl. enum narrowing / variant rename / enum↔String; pure enum *widening* plans as a supported `ExtendEnum` step instead) | ## Families