From 502d6259201de430c144d109194dea7430d824f3 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 07:21:11 -0600 Subject: [PATCH 01/19] Deepen core concepts docs --- docs/content/deep-dives/core-concepts.md | 153 +++++++++++++++++------ 1 file changed, 117 insertions(+), 36 deletions(-) diff --git a/docs/content/deep-dives/core-concepts.md b/docs/content/deep-dives/core-concepts.md index 376edf5..8b4a38d 100644 --- a/docs/content/deep-dives/core-concepts.md +++ b/docs/content/deep-dives/core-concepts.md @@ -5,43 +5,103 @@ weight = 30 # Core concepts -> **Status: work in progress.** A deliberately abstract sketch. These concepts -> are not about `katalyst` specifically; katalyst is one instantiation among -> many. Expect revisions until they settle. +Katalyst reasons in a small vocabulary that is general enough to describe a +Postgres table, a directory of markdown files, a MongoDB collection, and a +hosted API response the same way. That shared vocabulary is what lets checks, +inspectors, selectors, and future backends fit the same model instead of +becoming one-off adapters. -The vocabulary katalyst reasons in, general enough to describe a Postgres table, -a directory of markdown files, and a MongoDB collection the same way, so the -abstractions built on top bridge them too. Each term's canonical definition -lives in the [glossary]({{< relref "../reference/glossary.md" >}}); this page -introduces the concepts and how they fit. For the katalyst-specific -instantiation, see the [domain model]({{< relref "domain-model.md" >}}). +This page introduces the concepts and how they fit. Each term's canonical +definition lives in the [glossary]({{< relref "../reference/glossary.md" >}}); +for the katalyst-specific implementation map, see the +[domain model]({{< relref "domain-model.md" >}}). ## The concepts -- **Project** is the whole workspace katalyst operates over: a configured root - that binds one or more storage backends into named collections. Its - configuration is the **Config** (katalyst's is the `.katalyst/` directory); - the collections, items, checks, and inspectors below all live within a - project. It is the scope an empty selector addresses. +- A **project** is the whole workspace katalyst operates over: a configured + root that binds one or more storage backends into named collections. Its + configuration is the **config**; in katalyst today, that config is the + `.katalyst/` directory. An empty selector addresses the whole project. - **Storage** is a backend that holds data: a filesystem, a SQLite database, a - Postgres instance, an S3 bucket. Katalyst's realization is the - [storage layer]({{< relref "storage.md" >}}). -- **Collection** is a group of items sharing structure: a directory of similar - files, a relational table, a Mongo collection. See - [collections]({{< relref "collections.md" >}}). -- **Item** is one unit of data in a collection: a markdown file, a table row, a - Mongo document. -- **Attribute** is a named characteristic of an item: a column, a frontmatter - key, a response field, even its name or path. A key in a structured object - specifically is a **field**. -- **Operation** is something storage lets you do with its data: read, list, - aggregate, write, and eventually query. Which operations a backend supports is - the subject of [progressive operations]({{< relref "progressive-operations.md" >}}). -- **Check** asserts a condition on an item or its attributes and reports a - violation when it fails. See [checks]({{< relref "checks.md" >}}). -- **Inspector** is the descriptive dual of a check: it measures a distribution - and returns evidence, never a verdict. See - [inspectors]({{< relref "inspectors.md" >}}). + Postgres instance, an S3 bucket, or another store. Katalyst's implementation + is the [storage layer]({{< relref "storage.md" >}}), where a storage instance + maps backend-native references into the domain model. +- A **collection** is a group of items that share structure: a directory of + similar files, a relational table, a Mongo collection, or a family of API + resources. Collections are the unit that owns checks and that users address + by name. See [Collections]({{< relref "collections.md" >}}). +- An **item** is one unit of data in a collection: a markdown file, a table row, + a Mongo document, or one API resource. +- An **attribute** is a named characteristic of an item: a column, a + frontmatter key, a response field, its filename, its path, or another + backend-derived property. A key in a structured object specifically is a + **field**. +- An **operation** is something a backend lets you do with data: read, list, + aggregate, write, and eventually query. Which operations a backend supports, + and what structural commitments those operations require, is the subject of + [progressive operations]({{< relref "progressive-operations.md" >}}). +- A **check** asserts a condition on an item, an attribute, or a whole + collection and reports a violation when the condition fails. See + [Checks]({{< relref "checks.md" >}}). +- An **inspector** is the descriptive dual of a check: it measures a + distribution and returns evidence, never a verdict. See + [Inspectors]({{< relref "inspectors.md" >}}). + +## How the concepts fit + +The hierarchy is intentionally small: + +```mermaid +flowchart TD + P["Project"] + S["Storage"] + C["Collection"] + I["Item"] + A["Attribute"] + O["Operations"] + K["Checks"] + N["Inspectors"] + + P --> S + S --> C + C --> I + I --> A + S --> O + K --> I + K --> A + K --> C + N --> C + N --> A +``` + +Storage locates data, collections group it, items are the units commands act +on, and attributes are the named things checks and inspectors can read. +Operations describe what the backend can do with those units. Checks and +inspectors sit on top: checks enforce a rule; inspectors measure the same +surface without enforcing anything. + +That separation is why katalyst can start with markdown files but leave room +for richer stores. The check engine does not need to know whether an item came +from a file or a row if the storage layer can present the item, its attributes, +and the operations available on them. + +## The workflow + +The concepts also explain Katalyst's intended loop: + +1. **Catalog** a source with inspectors. Start from evidence: what files, + fields, headings, paths, and recurring shapes actually exist? +2. **Define** collections, schemas, and checks. Turn the discovered structure + into a project config that names the collections and their expected shape. +3. **Enforce** the rules with checks. Run the same assertions locally, in CI, + or through an agent workflow. +4. **Reshape** the content as the project changes. Use fixes, migrations, and + storage-aware operations to keep the data aligned with the model. + +The important boundary is between evidence and enforcement. Inspectors report +that 94% of items have a field; they do not decide that the field is required. +That threshold belongs in a check, chosen by a human or an agent using the +evidence. ## The same vocabulary across backends @@ -53,7 +113,28 @@ instantiation, see the [domain model]({{< relref "domain-model.md" >}}). | A REST API | The API | A resource type | A resource | A response field | | An S3 bucket of JSON | The bucket | A key prefix | An object | A JSON key | -An operation defined once in this vocabulary, check an attribute, aggregate over -a collection, applies to every backend that supports it. Which operations a -backend supports, and the structural commitments each demands, is the -[progressive operations]({{< relref "progressive-operations.md" >}}) story. +An operation defined once in this vocabulary, such as checking an attribute or +aggregating over a collection, applies to every backend that can support it. +The backend still decides the mechanics: a filesystem may list files and parse +frontmatter in memory, while a database may push filtering and aggregation into +queries. The domain vocabulary stays the same. + +## Why this vocabulary matters + +The point is not taxonomy for its own sake. The vocabulary keeps Katalyst from +hard-coding "markdown file" everywhere while still making markdown useful +today. + +- **Portable checks.** `object_required_field` can mean "frontmatter key" for + markdown, "column" for a table, or "field" for a document store. +- **Storage-aware growth.** A backend can start with read and list operations, + then add query, aggregate, or write support as it becomes more structured. +- **Agent-friendly structure.** A project exposes the same nouns everywhere: + collections to inspect, items to check, attributes to reason about, and + violations to fix. + +This is the through-line for the deeper pages: [storage]({{< relref "storage.md" >}}) +explains how backends attach to the model, [collections]({{< relref "collections.md" >}}) +explains how config names and routes items, [checks]({{< relref "checks.md" >}}) +explains enforcement, and [inspectors]({{< relref "inspectors.md" >}}) +explains evidence. From 74695d08123931c640c67afb862ea5dc04d1237e Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 07:25:55 -0600 Subject: [PATCH 02/19] Refine storage layer docs --- AGENTS.md | 2 +- docs/content/deep-dives/checks.md | 6 +- docs/content/deep-dives/storage.md | 114 +++++++----------- docs/content/reference/glossary.md | 2 +- internal/checks/AGENTS.md | 2 +- internal/checks/registry.go | 6 +- .../checks/structuredobject/unique_field.go | 4 +- internal/storage/AGENTS.md | 4 +- internal/storage/collection/collection.go | 2 +- .../collection/filesystem/collection.go | 2 +- internal/storage/doc.go | 17 +-- internal/storage/storage.go | 8 +- 12 files changed, 68 insertions(+), 101 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 141aba2..6f4acea 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -159,7 +159,7 @@ you add a fixture. descriptor is malformed, so a new check type ships with a complete descriptor. The `json:` tags on `Descriptor`/`Field` are the published wire contract for `katalyst check-types list --json`; keep them stable. - A check type's **family** groups it by source-data kind, and is orthogonal to - its granularity: a collection-scoped check is filed by the data it reads + its scope: a collection-scoped check is filed by the data it reads (`unique_field` → `structuredObject`, `unique_filename` → `fileSystem`). The `kind` id is the wire contract and never changes, even when the family does. - A **CheckLibrary** (`internal/checks`, `CheckLibrary`/`SchemaLibrary`) is the diff --git a/docs/content/deep-dives/checks.md b/docs/content/deep-dives/checks.md index 0d9a2d8..fc6fce2 100644 --- a/docs/content/deep-dives/checks.md +++ b/docs/content/deep-dives/checks.md @@ -43,13 +43,13 @@ orthogonal, and a single family spans libraries: `structuredObject` holds both structured-object library). Family answers *what data*; library answers *who runs the engine*. -**Granularity.** Most checks run once per item, implementing `Run(Context) +**Scope.** Most checks run once per item, implementing `Run(Context) []Violation`. A few reason across an entire collection (uniqueness, a required index file) and implement `RunCollection(CollectionContext) []Violation`: they run once per collection, after the per-item pass, so even a single-item selector re-scans every sibling (a uniqueness verdict is only correct against the whole -set). Granularity is independent of family: `unique_field` is collection-scoped -and `structuredObject`; `unique_filename` is collection-scoped and `fileSystem`. +set). Scope is independent of family: `unique_field` is collection-scoped and +`structuredObject`; `unique_filename` is collection-scoped and `fileSystem`. A check also carries a **severity**. The default is `error`, which fails the run; `warning` is advisory and never changes the exit code. Warnings exist for diff --git a/docs/content/deep-dives/storage.md b/docs/content/deep-dives/storage.md index 5f80127..6c36d21 100644 --- a/docs/content/deep-dives/storage.md +++ b/docs/content/deep-dives/storage.md @@ -19,8 +19,8 @@ contain, and where does each one live?*, in both directions. It is Katalyst's realization of the general **storage** concept from [core concepts]({{< relref "core-concepts.md" >}}): the filesystem is one backend; SQLite, directories of CSVs, S3 buckets, and hosted APIs are others. -The first real stress test is **SQLite**, because it is the first backend that -forces the granularity question below. +The first real stress test will be **SQLite**, because it is the first backend +that forces the scope question below. ## Three concepts @@ -45,17 +45,9 @@ checks and inspectors consume. The markdown filesystem reader uses `internal/codec/markdownbodytext` for frontmatter/body parsing; codecs are shared content adapters, not storage backends. -## Lineage: GX legacy DataConnectors +## The heart: a two-way mapping -The design is adapted from Great Expectations' V3 `DataConnector` layer -(recovered for reference *outside this repo*; originally GX commit -`6cd804579`, removed in `27eb8d28b`). A GX `DataConnector` defined a -`regex + group_names` naming convention that mapped each file/key in a store -to a `BatchDefinition`, plus the inverse mapping back to a path. GX's -`Datasource` (the store) versus `DataConnector` (the mapping) split is exactly -the StorageInstance versus CollectionDefinition split here. - -### The heart: a two-way mapping +Storage mapping has two directions: - **Forward (discovery):** `path → match pattern → captured groups` become the unit's *coordinates*. @@ -66,33 +58,20 @@ The reverse direction is **not optional**. Katalyst needs it the moment path-reconstruction problem. Today it is the degenerate, stem-only case (`Reference(c, id) → /.md`); it grows with the layout. -## Concept mapping: GX → Katalyst - -| GX (legacy V3) | Katalyst | -|----------------|----------| -| Datasource | **StorageInstance** (+ its StorageType) | -| **DataConnector** | **CollectionDefinition** | -| DataAsset (`data_asset_name`) | **Collection** | -| **Batch / BatchDefinition** | **Item** *(markdown)* / Collection *(tabular)*, see granularity | -| PartitionDefinition (`group_names` → values) | the item's **coordinates** (today: the stem) | -| BatchRequest / PartitionQuery | a **selector** (the [addressing] grammar) | -| BatchSpec | the resolved fetch instruction (a `Reference`, the file path) | -| Configured vs. Inferred | `check` (declared) vs. `infer` / `profile` (discovered) | - -### The granularity principle (locked) +## The scope principle **"What does one matched store unit become?" has no global answer, it is a property each StorageType declares for its backend.** - **Markdown filesystem:** one file = one **Item**; a directory of files = - a **Collection** (`Granularity` is `FileIsItem`). + a **Collection**. - **Tabular (CSV / SQL):** one file/table = one **Collection**; its rows = - **Items** (`UnitIsCollection`). + **Items**. -This is why a GX *Batch* maps to a Katalyst *Item* in the markdown world but -to a *Collection* in the tabular world, and both are correct. The definition -absorbs that impedance: alongside the path↔coordinates mapping, it declares the -**level** at which a store's units attach to the collection/item hierarchy. +Both mappings are correct because item and collection are domain roles, not +file counts. The definition absorbs that difference: alongside the +path↔coordinates mapping, it declares the **scope** at which a store's units +attach to the collection/item hierarchy. Implication: **Item and Collection are roles, not file counts.** A backend that packs many items into one physical unit (rows in a table) and one that spreads a @@ -100,8 +79,6 @@ single item across a whole unit (a markdown file) are both valid. ## Two modes: Configured vs Inferred -GX shipped both, and they map cleanly onto Katalyst verbs: - - **Configured:** collections and their patterns are declared explicitly (the instance's `collections:` block). This is the `check` path: known structure, enforced. *Shipped.* @@ -111,11 +88,14 @@ GX shipped both, and they map cleanly onto Katalyst verbs: ## Unmatched references are first-class -GX tracked files that matched no pattern (`get_unmatched_data_references`) -rather than silently dropping them. Katalyst already treats unmatched as an -error. GX's `self_check`, "here are your -collections, some examples, and the files that matched nothing", is the -template for a future `doctor` / `explain` that diagnoses a definition's mapping. +Katalyst treats unmatched references as errors rather than silently dropping +them. A file inside a configured collection's scope that matches no pattern is +usually a signal of config drift: the pattern is wrong, the file is misplaced, +or the project has gained a new shape that has not been modeled yet. + +The same evidence can power a future `doctor` / `explain` command: list the +collections, show representative examples, and surface the backend references +that matched nothing. ## Variants route checks, not membership @@ -131,42 +111,38 @@ deferred precisely to keep the seam closed for now. ## Coordinates are the selector -GX's `group_names` *are* the addressing grammar: a batch is addressed by its -asset plus its captured coordinates (`{year, letter, …}`). In Katalyst, the -flat `stem` identity is the degenerate one-coordinate case; richer layouts -(`notes/2020/dune`) grow into multiple coordinates parsed from the path. The -selector grammar and the definition's pattern are two views of the same thing. - -## Design lessons (carried + corrected) - -Reuse as-is: - -- The contract is **two-way**, not one-way (discovery *and* reconstruction). -- **Configured / Inferred ≙ `check` / `infer`:** same axis, already planned. -- **Surface unmatched**, don't swallow it. -- **Coordinates = selector:** design them as one concept. - -Do better than GX did (straight from its own TODOs in the recovered code): - +In Katalyst, the flat `stem` identity is the degenerate one-coordinate case: +`notes/dune.md` becomes the item id `dune`. Richer layouts (`notes/2020/dune`) +grow into multiple coordinates parsed from the path. The selector grammar and +the definition's pattern are two views of the same thing. + +## Design lessons + +- **The contract is two-way, not one-way.** Discovery and reconstruction are + both core storage operations. +- **Configured and inferred modes are the same axis.** `check` uses declared + structure; `infer` / `profile` discovers structure from the data. +- **Surface unmatched references.** Silent skips hide drift between the + backend's real contents and the configured model. +- **Coordinates and selectors are one concept.** The fields captured from a + backend reference should be the same fields users and agents use to address + the item. - **Prefer an inherently two-way template** (`{name}_{year}.md`) over inverting - an arbitrary regex. GX inverted a capture-group regex into a `str.format` - template and the author flagged it as *"almost certainly still brittle"*, a - template is bidirectional by construction; a regex is not. + an arbitrary regex. A template is bidirectional by construction; a regex is + not. - **The pattern must own the file extension**, or reconstruction is ambiguous - when several extensions are allowed (a GX limitation noted in `util.py`). + when several extensions are allowed. - **Keep collection identity separate from within-collection coordinates.** - GX leaked `data_asset_name` into the coordinate map and regretted it; keep - them distinct fields. + Collection names and item coordinates answer different questions and should + stay distinct. ## What is built, and the seam left open - **Built:** the `internal/storage` seam (`StorageType`, `StorageInstance`, - `CollectionDefinition`, `Granularity`, `Reference`), the filesystem - collection definition (collection = directory, item = each `*.md` file, id = - stem, granularity = *file-is-item*), the SQLite collection definition - (collection = table, item = row, id = configured column, attributes = - configured column captures, granularity = *unit-is-collection*), and the - config model where an instance declares its collections. + `CollectionDefinition`, `Reference`), the + `FilesystemCollectionDefinition` (collection = directory, item = each `*.md` + file, id = stem, item scope), and the config model where an + instance declares its collections. - **Open seam:** anything that turns a path into an item identity (or back) passes through `CollectionDefinition`, so a second backend (SQLite) can be added later without touching the check engine, the CRUD verbs, or selector @@ -182,7 +158,7 @@ Do better than GX did (straight from its own TODOs in the recovered code): | **CollectionDefinition** | The backend↔domain two-way mapping; yields one or more collections. | | **Data reference** | A backend-native locator (file path, S3 key, table name). | | **Coordinates** | The captured fields that identify a unit within its collection. | -| **Granularity** | The level (item vs. collection) at which a StorageType attaches a store's units to the domain model. | +| **Scope** | The domain level, item or collection, at which a StorageType attaches a store's units to the model. | [addressing]: {{< relref "core-concepts.md" >}} diff --git a/docs/content/reference/glossary.md b/docs/content/reference/glossary.md index 92f0b9a..ee9c533 100644 --- a/docs/content/reference/glossary.md +++ b/docs/content/reference/glossary.md @@ -30,7 +30,6 @@ how each term maps onto today's code is documented in the per-package | **Evidence** | The structured result of one inspector: counts and distributions with the unit count `n` as denominator. Never a recommendation or verdict. | | **Field** | A key in an item's structured object (its frontmatter map). A field is an **Attribute**; a filename is an attribute but not a field. The term used wherever object or frontmatter keys are meant (`object_field_type`, `name_matches_field`). | | **Frontmatter** | The on-disk metadata block at the top of a markdown file, in YAML (`---`), TOML (`+++`), or JSON (`{ … }`). | -| **Granularity** | The level, item vs. collection, at which a StorageType attaches a store's units to the domain model (a markdown file is an item; a SQL table is a collection). | | **Inspector** | A read-only operation that measures content and returns evidence. The descriptive dual of a check: a check asserts a predicate, an inspector reports the distribution. Inspectors come in two layers. | | **Item** | The unit of data in a collection, addressed by a selector and operated on by `check`, `fix`, and the `item` subcommands. In the filesystem backend an item is one file matching the collection's pattern, its id the filename stem; its markdown file-form is a **Document**. | | **Measurement primitive** | A reusable building block the inspectors are built from: `object_fields` (a data dictionary over object maps), `markdown_body` (body structure), and file-metadata. | @@ -43,6 +42,7 @@ how each term maps onto today's code is documented in the per-package | **Schema** | The definition of a collection's shape, expressed in a CheckLibrary's format (JSON Schema today; a Vale style config later). Named in `schemas:`; located by path. The katalyst concept, not the JSON Schema document specifically. | | **Schema directive** | The inline `schema:` key inside a document's frontmatter, opting it into a named schema. | | **Selector** | How a command names what to operate on: nothing (whole project), ``, or `/`. | +| **Scope** | The level an operation or backend mapping applies to: item, collection, project, or across collections. In the storage layer, scope answers whether one matched backend unit becomes an item or a collection. | | **Span** | The slice of body text a text rule is evaluated against, chosen by its `target`: the whole `body`, each `line`, the `first-line`, or `matched-lines` (lines matching a `select` regex). | | **StorageInstance** | A configured instance of a StorageType plus how to reach it (for `filesystem`, a root directory). Declared under `.katalyst/storage/`; it embeds the collections it maps. | | **StorageType** | A known backend kind capable of holding collections and items (`filesystem` today; `sqlite`, `postgresql`, `mongodb` later). | diff --git a/internal/checks/AGENTS.md b/internal/checks/AGENTS.md index 5526f6b..e3620c5 100644 --- a/internal/checks/AGENTS.md +++ b/internal/checks/AGENTS.md @@ -4,7 +4,7 @@ The check engine: the check types Katalyst ships, the libraries that run them, and the violations they produce. **Architecture and design rationale** - the model (check type vs. instance, -family vs. library, granularity), check libraries, how a check runs, and the +family vs. library, scope), check libraries, how a check runs, and the trade-offs - live in the [How checks work](../../docs/content/deep-dives/checks.md) deep-dive, which is the source of truth. The per-type catalog is the generated diff --git a/internal/checks/registry.go b/internal/checks/registry.go index 8976b0d..9e0e5bb 100644 --- a/internal/checks/registry.go +++ b/internal/checks/registry.go @@ -40,9 +40,9 @@ type Descriptor struct { // is provenance, orthogonal to Family (source-data kind). Library string `json:"library,omitempty"` // Family groups the check type by source-data kind: "structuredObject", - // "markdownBodyText", "fileSystem", or "plainText". Family and granularity - // are orthogonal, a collection-scoped check is grouped by the data it - // reads, not by its scope (e.g. unique_field is structuredObject). + // "markdownBodyText", "fileSystem", or "plainText". Family and scope are + // orthogonal, a collection-scoped check is grouped by the data it reads, + // not by its scope (e.g. unique_field is structuredObject). Family string `json:"family"` // Slug is the page basename under the family directory. Slug string `json:"slug"` diff --git a/internal/checks/structuredobject/unique_field.go b/internal/checks/structuredobject/unique_field.go index 20eb3cb..39a9c08 100644 --- a/internal/checks/structuredobject/unique_field.go +++ b/internal/checks/structuredobject/unique_field.go @@ -14,8 +14,8 @@ type uniqueFieldArgs struct { // UniqueField requires that no two items share a value for Field. It is // collection-scoped (it reasons across siblings) but belongs to the -// structuredObject family because it reads a frontmatter field, granularity -// and family are orthogonal. Its kind keeps the historical filesystem_ prefix. +// structuredObject family because it reads a frontmatter field; scope and +// family are orthogonal. Its kind keeps the historical filesystem_ prefix. type UniqueField struct { Field string } diff --git a/internal/storage/AGENTS.md b/internal/storage/AGENTS.md index 4d3460e..de1ee01 100644 --- a/internal/storage/AGENTS.md +++ b/internal/storage/AGENTS.md @@ -16,7 +16,7 @@ read stack has its own local guide in configured storage types. `filesystem` and `sqlite` are implemented. - `Reference` is opaque. Treat it as a backend-native locator, not always a filesystem path; filesystem interpretation belongs in `collection/filesystem`. -- Granularity is a property of the storage type, not user configuration. Keep - that decision in code so collection/item roles stay portable across backends. +- Scope is a property of the storage type, not user configuration. Keep that + decision in code so collection/item roles stay portable across backends. - Keep this package small and dependency-light. Backend-specific parsing, discovery, IO, and persistence belong under `collection//`. diff --git a/internal/storage/collection/collection.go b/internal/storage/collection/collection.go index c4ea0ab..da5909f 100644 --- a/internal/storage/collection/collection.go +++ b/internal/storage/collection/collection.go @@ -29,7 +29,7 @@ type Item struct { // (Collections, Items, Unmatched); the reverse direction reconstructs a backend // locator from an item identity (Reference). Both directions are mandatory. type CollectionDefinition interface { - // Granularity reports how this backend's units attach to the model. + // Granularity reports the scope where this backend's units attach to the model. Granularity() storage.Granularity // Collections returns the collections this definition maps. One definition diff --git a/internal/storage/collection/filesystem/collection.go b/internal/storage/collection/filesystem/collection.go index 450646b..91a27d5 100644 --- a/internal/storage/collection/filesystem/collection.go +++ b/internal/storage/collection/filesystem/collection.go @@ -35,7 +35,7 @@ func New(root string, collections []collection.Collection) *Definition { return &Definition{root: root, collections: collections} } -// Granularity is FileIsItem for the markdown filesystem. +// Granularity reports item scope for the markdown filesystem. func (f *Definition) Granularity() storage.Granularity { return storage.FileIsItem } // Collections returns the collections this definition maps. diff --git a/internal/storage/doc.go b/internal/storage/doc.go index 961a40b..0db50a2 100644 --- a/internal/storage/doc.go +++ b/internal/storage/doc.go @@ -20,19 +20,10 @@ // filename stem) and Reference is Join(dir, id+ext); richer layouts grow into // multi-coordinate templates. // -// # Granularity +// # Scope // // Whether a matched store unit becomes an Item or a Collection is a property of -// the StorageType (Granularity), not user configuration. A markdown file is an -// Item (FileIsItem); a SQL table would be a Collection (UnitIsCollection). Item -// and Collection are therefore roles, not file counts. -// -// # Lineage -// -// The design adapts Great Expectations' V3 DataConnector layer: its Datasource -// vs. DataConnector split is this package's StorageInstance vs. -// CollectionDefinition split. Corrections carried from GX's own TODOs: prefer a -// two-way template over inverting a regex, let the pattern own the file -// extension, and keep collection identity separate from within-collection -// coordinates. See docs/content/deep-dives/storage.md. +// the StorageType, not user configuration. A markdown file is an Item; a SQL +// table would be a Collection. Item and Collection are therefore roles, not file +// counts. See docs/content/deep-dives/storage.md. package storage diff --git a/internal/storage/storage.go b/internal/storage/storage.go index 10cc9cd..076f0c1 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -23,10 +23,10 @@ var registered = map[StorageType]bool{ // layer, so the storage registry remains the source of truth for backend kinds. func Known(t StorageType) bool { return registered[t] } -// Granularity is the level at which a backend's matched units attach to the -// domain model. It is a property of the StorageType, not user configuration: a -// markdown filesystem makes each file an Item, while a tabular backend would -// make each table a Collection and each row an Item. +// Granularity records the scope at which a backend's matched units attach to +// the domain model. It is a property of the StorageType, not user +// configuration: a markdown filesystem makes each file an Item, while a tabular +// backend would make each table a Collection and each row an Item. type Granularity int const ( From 8e204d1396f99fd748fe4deeb7000670d87003a8 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 10:23:57 -0600 Subject: [PATCH 03/19] Reorganize domain model docs --- cmd/check.go | 2 +- cmd/fix.go | 2 +- cmd/testdata/snapshots/help/check.txt | 2 +- cmd/testdata/snapshots/help/fix.txt | 2 +- docs/content/contributing/how-we-document.md | 2 +- docs/content/deep-dives/_index.md | 18 +-- docs/content/deep-dives/domain-model.md | 114 ------------------ .../_index.md} | 15 ++- .../deep-dives/{ => domain-model}/checks.md | 14 +-- .../{ => domain-model}/collections.md | 6 +- .../{ => domain-model}/formatting.md | 2 +- .../deep-dives/{ => domain-model}/storage.md | 9 +- docs/content/deep-dives/inspectors.md | 8 +- docs/content/deep-dives/vision.md | 2 +- docs/content/how-to/add-a-schema.md | 2 +- docs/content/how-to/validate-in-ci.md | 2 +- docs/content/reference/configuration.md | 8 +- docs/content/reference/glossary.md | 4 +- internal/checks/AGENTS.md | 2 +- internal/fix/AGENTS.md | 2 +- internal/project/AGENTS.md | 4 +- internal/project/project.go | 4 +- internal/project/selector.go | 2 +- internal/storage/AGENTS.md | 2 +- internal/storage/collection/AGENTS.md | 4 +- internal/storage/doc.go | 2 +- product/specs/codec-layer-spec.md | 6 +- product/specs/collection-reorg-spec.md | 4 +- product/specs/config-distribution-plan.md | 2 +- product/specs/dogfood-docs-spec.md | 4 +- product/specs/domain-model-cleanup-plan.md | 36 +++--- product/specs/domain-model-cleanup-spec.md | 16 +-- .../specs/domain-model-terminology-matrix.md | 4 +- product/specs/listing-predicate-plan.md | 18 +-- product/specs/listing-predicate-spec.md | 6 +- 35 files changed, 108 insertions(+), 224 deletions(-) delete mode 100644 docs/content/deep-dives/domain-model.md rename docs/content/deep-dives/{core-concepts.md => domain-model/_index.md} (93%) rename docs/content/deep-dives/{ => domain-model}/checks.md (94%) rename docs/content/deep-dives/{ => domain-model}/collections.md (97%) rename docs/content/deep-dives/{ => domain-model}/formatting.md (98%) rename docs/content/deep-dives/{ => domain-model}/storage.md (96%) diff --git a/cmd/check.go b/cmd/check.go index 6608879..c5276c1 100644 --- a/cmd/check.go +++ b/cmd/check.go @@ -27,7 +27,7 @@ func newCheckCmd() *cobra.Command { Long: `check parses each selected item's frontmatter (YAML, TOML, or JSON) and runs the checks configured for its collection under .katalyst/storage/. -Selectors (see docs/content/deep-dives/domain-model.md): +Selectors (see docs/content/deep-dives/domain-model/_index.md): (none) the whole project (every collection) one collection (all its items) diff --git a/cmd/fix.go b/cmd/fix.go index 0d0843d..518d4bd 100644 --- a/cmd/fix.go +++ b/cmd/fix.go @@ -23,7 +23,7 @@ top-level keys sorted alphabetically, yaml.v3 default block style, and exactly one trailing newline. The body is preserved verbatim. fix never invents semantic values: it will not inject placeholders for -missing required keys. See docs/content/deep-dives/formatting.md for why. +missing required keys. See docs/content/deep-dives/domain-model/formatting.md for why. Selectors follow the same grammar as 'check'. With no selector, every item in the project is considered. diff --git a/cmd/testdata/snapshots/help/check.txt b/cmd/testdata/snapshots/help/check.txt index 203ddce..db59ae9 100644 --- a/cmd/testdata/snapshots/help/check.txt +++ b/cmd/testdata/snapshots/help/check.txt @@ -1,7 +1,7 @@ check parses each selected item's frontmatter (YAML, TOML, or JSON) and runs the checks configured for its collection under .katalyst/storage/. -Selectors (see docs/content/deep-dives/domain-model.md): +Selectors (see docs/content/deep-dives/domain-model/_index.md): (none) the whole project (every collection) one collection (all its items) diff --git a/cmd/testdata/snapshots/help/fix.txt b/cmd/testdata/snapshots/help/fix.txt index 29c8267..a18c429 100644 --- a/cmd/testdata/snapshots/help/fix.txt +++ b/cmd/testdata/snapshots/help/fix.txt @@ -3,7 +3,7 @@ top-level keys sorted alphabetically, yaml.v3 default block style, and exactly one trailing newline. The body is preserved verbatim. fix never invents semantic values: it will not inject placeholders for -missing required keys. See docs/content/deep-dives/formatting.md for why. +missing required keys. See docs/content/deep-dives/domain-model/formatting.md for why. Selectors follow the same grammar as 'check'. With no selector, every item in the project is considered. diff --git a/docs/content/contributing/how-we-document.md b/docs/content/contributing/how-we-document.md index 5a3b788..cecbe9d 100644 --- a/docs/content/contributing/how-we-document.md +++ b/docs/content/contributing/how-we-document.md @@ -34,7 +34,7 @@ The durable home for everything a user needs, organized by - **`reference/`:** information-oriented lookup: configuration, the generated check-type reference, the glossary, the command surface. - **`deep-dives/`:** understanding-oriented "why" (the Diátaxis *explanation* - quadrant): the vision and scope, the core concepts, the storage layer, + quadrant): the vision and scope, the domain model, the storage layer, progressive operations, and **design rationale at the behavioral altitude** - any *why* a user can observe, whatever subsystem it touches. A short **Why Katalyst?** orientation page sits at the top level. The narrower *why* that diff --git a/docs/content/deep-dives/_index.md b/docs/content/deep-dives/_index.md index 51b2040..1367ae0 100644 --- a/docs/content/deep-dives/_index.md +++ b/docs/content/deep-dives/_index.md @@ -6,15 +6,15 @@ bookCollapseSection = true # Deep dives -Understanding-oriented discussion of the *why* behind Katalyst, the -[vision and scope]({{< relref "vision.md" >}}), the [core -concepts]({{< relref "core-concepts.md" >}}) the tool is built on, the -[domain model]({{< relref "domain-model.md" >}}) that instantiates them in -katalyst, and the deeper design discussions that no single page or package -owns: how [checks work]({{< relref "checks.md" >}}) and the libraries that run them, -how the [storage layer]({{< relref "storage.md" >}}) maps stores onto the model, -and how operations grow richer as a backend's capabilities increase. For the -short version, start with [Welcome]({{< relref "../welcome.md" >}}). +Understanding-oriented discussion of the *why* behind Katalyst: the +[vision and scope]({{< relref "vision.md" >}}), the +[domain model]({{< relref "domain-model/_index.md" >}}) the tool is built on, +and the deeper design discussions that no single page or package owns: how +[checks work]({{< relref "domain-model/checks.md" >}}) and the libraries that +run them, how the [storage layer]({{< relref "domain-model/storage.md" >}}) +maps stores onto the model, and how operations grow richer as a backend's +capabilities increase. For the short version, start with +[Welcome]({{< relref "../welcome.md" >}}). These pages carry the **behavioral *why*** - any rationale a user can observe - and each subsystem's **architecture**: how it is built, its entities, and the diff --git a/docs/content/deep-dives/domain-model.md b/docs/content/deep-dives/domain-model.md deleted file mode 100644 index 7c3bd7f..0000000 --- a/docs/content/deep-dives/domain-model.md +++ /dev/null @@ -1,114 +0,0 @@ -+++ -title = "Domain model" -weight = 40 -+++ - -# Domain model - -What `katalyst` is *about*: the concepts it manipulates and how they relate. -This is the conceptual map and the entry point to the subsystem deep-dives - -each piece is summarized here and documented in full on its own page. - -This page is the katalyst-specific map; [core concepts]({{< relref "core-concepts.md" >}}) -is the same map at the general, tool-agnostic altitude (the same vocabulary -applied to a Postgres table or a MongoDB collection). For *what* the commands do, -see the [getting-started tutorial]({{< relref "../getting-started.md" >}}) and the -[configuration reference]({{< relref "../reference/configuration.md" >}}). - -## At a glance - -```mermaid -flowchart LR - subgraph Disk["On disk"] - MD["Markdown file
(frontmatter + body)"] - SF["Schema file
(JSON Schema)"] - CF[".katalyst/
(config)"] - end - - subgraph Parsed["In memory"] - DOC["Document
Meta + Body + Lines"] - SCH["Schema
(compiled)"] - CFG["Config
Schemas + Collections"] - end - - subgraph Decide["Schema selection"] - FLAG["--schema flag"] - INLINE["inline 'schema:' key"] - COL["collection's object check"] - RES["Resolver"] - end - - MD --> DOC - SF --> SCH - CF --> CFG - - FLAG --> RES - INLINE --> RES - COL --> RES - CFG --> COL - - DOC -- "Meta (minus schema directive)" --> VAL["Run checks"] - RES -- "selected Schema" --> VAL - VAL --> RESULT["Result
(OK + Violations)"] - DOC -- "Lines" --> RESULT -``` - -## The pieces - -Each entity is summarized here; follow the link for its full treatment. - -**Content and parsing** - see [Frontmatter and fix]({{< relref "formatting.md" >}}): - -- **Markdown document** - a file's frontmatter (`Meta`) plus its body, parsed - into a `Document` with source-line tracking. - -**Configuration and collections** - see [Collections]({{< relref "collections.md" >}}): - -- **Config** - the loaded `.katalyst/` directory: which schemas exist and what - each collection checks. -- **Collection** - a named, directory-backed group of items that owns a set of - checks. **Item** - one file in it, addressed by a **Selector** - (`/`). -- **Schema** - a named JSON Schema describing an item's legal `Meta`. The - **schema directive** (`schema:` in frontmatter) opts a document into a schema, - and the **Resolver** picks the applicable one by the three-tier precedence. - -**Checks and inspectors**: - -- **Check** and **CheckLibrary** - a check asserts one condition; a library - provides and runs it. The product is a **validation result**: a flat list of - violations, or `path: OK`. See [Checks]({{< relref "checks.md" >}}). -- **Inspector** - the descriptive dual of a check, reporting the distribution a - check would assert against. See [Inspectors]({{< relref "inspectors.md" >}}). - -## Lifecycles - -- **`check`** resolves each item's schema and check list and runs them; the - end-to-end flow is in [Collections]({{< relref "collections.md" >}}). -- **`fix`** rewrites frontmatter into canonical form without touching the body - - see [Frontmatter and fix]({{< relref "formatting.md" >}}). - -Each subsystem page lists its own invariants; the repo-wide engineering rules -(such as "production code lives in `internal/`") are in the root `AGENTS.md`. - -## Vocabulary - -The canonical definitions of frontmatter, metadata, schema, collection, item, -selector, check, and the rest live in the -[glossary]({{< relref "../reference/glossary.md" >}}). Use those terms -consistently in code, docs, and user-facing copy. - -## Out of scope (today) - -Absences worth being explicit about; they shape what katalyst currently is -*not*: - -- **Relations between items.** A schema constrains one item at a time; no - cross-item `$ref`, no foreign keys. Planned. -- **Schema evolution.** No "this field was renamed in v2" migrations. Planned. -- **Query.** Katalyst has `item list` filters and sort keys for one collection, - implemented as an in-memory listing pipeline. A first-class storage query - operation, "find all docs where year > 1980" pushed into the backend, is - planned. -- **Derived state.** `.katalyst/` holds only hand-authored config; nothing is - generated into it. Every run is stateless. diff --git a/docs/content/deep-dives/core-concepts.md b/docs/content/deep-dives/domain-model/_index.md similarity index 93% rename from docs/content/deep-dives/core-concepts.md rename to docs/content/deep-dives/domain-model/_index.md index 8b4a38d..d563c9b 100644 --- a/docs/content/deep-dives/core-concepts.md +++ b/docs/content/deep-dives/domain-model/_index.md @@ -1,9 +1,10 @@ +++ -title = "Core concepts" +title = "Domain model" weight = 30 +bookCollapseSection = true +++ -# Core concepts +# Domain model Katalyst reasons in a small vocabulary that is general enough to describe a Postgres table, a directory of markdown files, a MongoDB collection, and a @@ -12,9 +13,7 @@ inspectors, selectors, and future backends fit the same model instead of becoming one-off adapters. This page introduces the concepts and how they fit. Each term's canonical -definition lives in the [glossary]({{< relref "../reference/glossary.md" >}}); -for the katalyst-specific implementation map, see the -[domain model]({{< relref "domain-model.md" >}}). +definition lives in the [glossary]({{< relref "../../reference/glossary.md" >}}). ## The concepts @@ -39,13 +38,13 @@ for the katalyst-specific implementation map, see the - An **operation** is something a backend lets you do with data: read, list, aggregate, write, and eventually query. Which operations a backend supports, and what structural commitments those operations require, is the subject of - [progressive operations]({{< relref "progressive-operations.md" >}}). + [progressive operations]({{< relref "../progressive-operations.md" >}}). - A **check** asserts a condition on an item, an attribute, or a whole collection and reports a violation when the condition fails. See [Checks]({{< relref "checks.md" >}}). - An **inspector** is the descriptive dual of a check: it measures a distribution and returns evidence, never a verdict. See - [Inspectors]({{< relref "inspectors.md" >}}). + [Inspectors]({{< relref "../inspectors.md" >}}). ## How the concepts fit @@ -136,5 +135,5 @@ today. This is the through-line for the deeper pages: [storage]({{< relref "storage.md" >}}) explains how backends attach to the model, [collections]({{< relref "collections.md" >}}) explains how config names and routes items, [checks]({{< relref "checks.md" >}}) -explains enforcement, and [inspectors]({{< relref "inspectors.md" >}}) +explains enforcement, and [inspectors]({{< relref "../inspectors.md" >}}) explains evidence. diff --git a/docs/content/deep-dives/checks.md b/docs/content/deep-dives/domain-model/checks.md similarity index 94% rename from docs/content/deep-dives/checks.md rename to docs/content/deep-dives/domain-model/checks.md index fc6fce2..5e167d9 100644 --- a/docs/content/deep-dives/checks.md +++ b/docs/content/deep-dives/domain-model/checks.md @@ -11,9 +11,9 @@ verdict on each item: it resolves the checks that apply, runs them, and collects their violations. This page explains the model the engine is built on, how check libraries supply and run checks, and why the pieces are shaped the way they are. For the per-type catalog see the [check types -reference]({{< relref "../reference/check-types/_index.md" >}}); for the +reference]({{< relref "../../reference/check-types/_index.md" >}}); for the end-to-end data flow of one `check` invocation see the [domain -model]({{< relref "domain-model.md" >}}). +model]({{< relref "_index.md" >}}). ## The model @@ -106,11 +106,11 @@ item, the simplest correct path. Per item, the engine resolves which checks apply, then runs them. Resolution starts from the collection's configured checks and adds the checks of -the first [variant]({{< relref "../reference/configuration.md" >}}) whose `when` +the first [variant]({{< relref "../../reference/configuration.md" >}}) whose `when` predicates the item's metadata satisfies. The object schema is selected by a precedence the JSON Schema library owns (a forced `--schema`, then an inline `schema:` directive, then the collection's object checks); see the [domain -model]({{< relref "domain-model.md" >}}) for the precedence table and the +model]({{< relref "_index.md" >}}) for the precedence table and the full per-item lifecycle. Before any schema compiles, the engine confirms the owning libraries are available. @@ -169,11 +169,11 @@ real out-of-process library exists. ## See also -- The [check types reference]({{< relref "../reference/check-types/_index.md" >}}) +- The [check types reference]({{< relref "../../reference/check-types/_index.md" >}}) for the precise per-type surface, generated from the registry. -- The [domain model]({{< relref "domain-model.md" >}}) for the per-`check` +- The [domain model]({{< relref "_index.md" >}}) for the per-`check` lifecycle, the schema resolver, and the validation result. -- The [glossary]({{< relref "../reference/glossary.md" >}}) for the canonical +- The [glossary]({{< relref "../../reference/glossary.md" >}}) for the canonical terms (check type, check instance, CheckLibrary, schema, violation). - The [storage layer]({{< relref "storage.md" >}}) for the collection and item identities checks run against, and the inspector that is a check's descriptive diff --git a/docs/content/deep-dives/collections.md b/docs/content/deep-dives/domain-model/collections.md similarity index 97% rename from docs/content/deep-dives/collections.md rename to docs/content/deep-dives/domain-model/collections.md index 8b05569..b5d7e6f 100644 --- a/docs/content/deep-dives/collections.md +++ b/docs/content/deep-dives/domain-model/collections.md @@ -12,7 +12,7 @@ storage registry validates a declared `type`, and a collection parses its own block in `storage/collection`). It decides which schema applies to a given item, and the `check` lifecycle is driven from here. This page is the model and the *why*; for the key-by-key surface see the -[configuration reference]({{< relref "../reference/configuration.md" >}}). +[configuration reference]({{< relref "../../reference/configuration.md" >}}). ## The `.katalyst/` directory @@ -185,10 +185,10 @@ The data flow per item, end to end: ## See also -- The [configuration reference]({{< relref "../reference/configuration.md" >}}) +- The [configuration reference]({{< relref "../../reference/configuration.md" >}}) for the precise `.katalyst/` surface. - The [storage layer]({{< relref "storage.md" >}}) for how a backend maps onto collections, and the instance model. -- The [domain model]({{< relref "domain-model.md" >}}) for the cross-subsystem +- The [domain model]({{< relref "_index.md" >}}) for the cross-subsystem entity map and invariants. - `go doc ./internal/project` for the code-level contract. diff --git a/docs/content/deep-dives/formatting.md b/docs/content/deep-dives/domain-model/formatting.md similarity index 98% rename from docs/content/deep-dives/formatting.md rename to docs/content/deep-dives/domain-model/formatting.md index bd60843..41cdf3a 100644 --- a/docs/content/deep-dives/formatting.md +++ b/docs/content/deep-dives/domain-model/formatting.md @@ -6,7 +6,7 @@ weight = 60 # Frontmatter and fix How Katalyst parses a markdown file's frontmatter, the in-memory document that -produces, and why [`fix`]({{< relref "../reference/cli.md" >}}) rewrites +produces, and why [`fix`]({{< relref "../../reference/cli.md" >}}) rewrites that frontmatter the opinionated way it does. The codec (parse and encode) lives in `internal/codec/markdownbodytext`; the `fix` transform that drives the canonical form, and the backend write that persists it, live in `internal/fix` diff --git a/docs/content/deep-dives/storage.md b/docs/content/deep-dives/domain-model/storage.md similarity index 96% rename from docs/content/deep-dives/storage.md rename to docs/content/deep-dives/domain-model/storage.md index 6c36d21..48b92f0 100644 --- a/docs/content/deep-dives/storage.md +++ b/docs/content/deep-dives/domain-model/storage.md @@ -17,7 +17,7 @@ The **storage layer** is the two-way mapping between a backend store and the Katalyst domain model. It answers: *what collections and items does this store contain, and where does each one live?*, in both directions. It is Katalyst's realization of the general **storage** concept from -[core concepts]({{< relref "core-concepts.md" >}}): the filesystem is one +[domain model]({{< relref "_index.md" >}}): the filesystem is one backend; SQLite, directories of CSVs, S3 buckets, and hosted APIs are others. The first real stress test will be **SQLite**, because it is the first backend that forces the scope question below. @@ -36,7 +36,7 @@ and *how does its content map to the model*, so it was split: In config, a StorageInstance declares the collections it maps, the instance file *is* where the CollectionDefinition lives (see -[Configuration]({{< relref "../reference/configuration.md" >}})). In code, the +[Configuration]({{< relref "../../reference/configuration.md" >}})). In code, the seam is `internal/storage/collection.CollectionDefinition`; `internal/project` consumes it rather than implementing the filesystem mapping inline. @@ -100,7 +100,7 @@ that matched nothing. ## Variants route checks, not membership A collection may run different checks on different items via -[variants]({{< relref "../reference/configuration.md" >}}#variants), but that is +[variants]({{< relref "../../reference/configuration.md" >}}#variants), but that is a *check-engine* concern, not a storage one. A variant's discriminator is a predicate over an item's **attributes**: portable across every StorageType, since each yields a structured attribute object (frontmatter fields for a file, @@ -160,5 +160,4 @@ the definition's pattern are two views of the same thing. | **Coordinates** | The captured fields that identify a unit within its collection. | | **Scope** | The domain level, item or collection, at which a StorageType attaches a store's units to the model. | -[addressing]: {{< relref "core-concepts.md" >}} - +[addressing]: {{< relref "_index.md" >}} diff --git a/docs/content/deep-dives/inspectors.md b/docs/content/deep-dives/inspectors.md index 58bbca4..f6bb60e 100644 --- a/docs/content/deep-dives/inspectors.md +++ b/docs/content/deep-dives/inspectors.md @@ -7,7 +7,7 @@ weight = 46 An **inspector** profiles content and returns *evidence*: counts and distributions, never recommendations. Inspectors are the descriptive dual of -[checks]({{< relref "checks.md" >}}) - a check asserts a predicate and reports +[checks]({{< relref "domain-model/checks.md" >}}) - a check asserts a predicate and reports violations; an inspector reports the distribution that predicate would be tested against. They drive the [`inspect`]({{< relref "../reference/cli.md" >}}) command. For the per-inspector catalog see the [inspectors @@ -31,7 +31,7 @@ Inspectors come in two layers, distinguished by *how they reference the data*: The two are **distinct interfaces, not one type at two scopes**, precisely because they reference the data through different machinery. This mirrors the -seam in the [storage layer]({{< relref "storage.md" >}}). +seam in the [storage layer]({{< relref "domain-model/storage.md" >}}). ## Built from primitives @@ -98,8 +98,8 @@ tool, not in the engine. - The [inspectors reference]({{< relref "../reference/inspectors/_index.md" >}}) for the per-inspector surface, generated from the registry. -- [Checks]({{< relref "checks.md" >}}) - the prescriptive dual; an +- [Checks]({{< relref "domain-model/checks.md" >}}) - the prescriptive dual; an inspector measures the distribution a check would assert against. -- [Core concepts]({{< relref "core-concepts.md" >}}) for where profiling sits in +- [Domain model]({{< relref "domain-model/_index.md" >}}) for where profiling sits in the catalog-define-enforce loop. - `go doc ./internal/inspect` for the code-level engine contract. diff --git a/docs/content/deep-dives/vision.md b/docs/content/deep-dives/vision.md index 509f4e7..415cf4d 100644 --- a/docs/content/deep-dives/vision.md +++ b/docs/content/deep-dives/vision.md @@ -88,7 +88,7 @@ These form factors share one core idea: schemas and linters are closely related and should compose across storage boundaries. The conceptual basis, why each backend tier unlocks new operations, is in [Progressive operations]({{< relref "progressive-operations.md" >}}) and the -[core concepts]({{< relref "core-concepts.md" >}}). +[domain model]({{< relref "domain-model/_index.md" >}}). ## Current implementation status diff --git a/docs/content/how-to/add-a-schema.md b/docs/content/how-to/add-a-schema.md index 54fdaaa..0b6c7e0 100644 --- a/docs/content/how-to/add-a-schema.md +++ b/docs/content/how-to/add-a-schema.md @@ -88,7 +88,7 @@ katalyst check books --schema ./schemas/strict-book.json The precedence is `--schema` > inline `schema:` key > the collection's object check. See the [configuration reference]({{< relref "../reference/configuration.md" >}}) for the key surface, -or [Collections]({{< relref "../deep-dives/collections.md" >}}) for why. +or [Collections]({{< relref "../deep-dives/domain-model/collections.md" >}}) for why. ## See also diff --git a/docs/content/how-to/validate-in-ci.md b/docs/content/how-to/validate-in-ci.md index f290a1e..0753cad 100644 --- a/docs/content/how-to/validate-in-ci.md +++ b/docs/content/how-to/validate-in-ci.md @@ -58,7 +58,7 @@ It prints one line per non-canonical item and exits 1, writing nothing. Here The `check` step enforces schema and structural checks; the `fix --check` step enforces canonical frontmatter without modifying files. See -[Frontmatter and fix]({{< relref "../deep-dives/formatting.md" >}}) for why +[Frontmatter and fix]({{< relref "../deep-dives/domain-model/formatting.md" >}}) for why `fix` is opinionated and non-destructive in this mode. ## See also diff --git a/docs/content/reference/configuration.md b/docs/content/reference/configuration.md index 023f9ea..f368d2d 100644 --- a/docs/content/reference/configuration.md +++ b/docs/content/reference/configuration.md @@ -10,7 +10,7 @@ current working directory to the nearest ancestor that contains one. That ancestor is the repo root; all relative paths resolve against it. For *why* the config is shaped this way, see [How collections -work]({{< relref "../deep-dives/collections.md" >}}). To set one up step by +work]({{< relref "../deep-dives/domain-model/collections.md" >}}). To set one up step by step, see [Configure checks for a collection]({{< relref "../how-to/configure-rules.md" >}}). @@ -242,7 +242,7 @@ failure (`matches no variant`), so every item is provably accounted for. Discrimination is by metadata only; selecting items by path or filename is not supported yet (a page type distinguishable only by location needs a frontmatter marker). `pattern` still governs collection **membership** and which files are -reported as [unmatched]({{< relref "../deep-dives/domain-model.md" >}}#invariants); +reported as [unmatched]({{< relref "../deep-dives/domain-model/_index.md" >}}#invariants); variants only route checks. ## `listing` @@ -293,8 +293,8 @@ variant), even when `--schema` is used. ## See also - [Check types reference]({{< relref "check-types/_index.md" >}}), every check type. -- [Storage layer]({{< relref "../deep-dives/storage.md" >}}), the storage +- [Storage layer]({{< relref "../deep-dives/domain-model/storage.md" >}}), the storage instance / collection-definition model and its lineage. -- [Collections]({{< relref "../deep-dives/collections.md" >}}), the +- [Collections]({{< relref "../deep-dives/domain-model/collections.md" >}}), the config/collection model and rationale: schema resolution, variants, unmatched-as-error. diff --git a/docs/content/reference/glossary.md b/docs/content/reference/glossary.md index ee9c533..70a2be9 100644 --- a/docs/content/reference/glossary.md +++ b/docs/content/reference/glossary.md @@ -7,7 +7,7 @@ weight = 50 The canonical vocabulary for Katalyst. Use these terms consistently in code, docs, and user-facing copy. The general, backend-agnostic vocabulary is -introduced in [core concepts]({{< relref "../deep-dives/core-concepts.md" >}}); +introduced in the [domain model]({{< relref "../deep-dives/domain-model/_index.md" >}}); how each term maps onto today's code is documented in the per-package `AGENTS.md` files under `internal/`. This page is the quick lookup. @@ -23,7 +23,7 @@ how each term maps onto today's code is documented in the per-package | **Collection** | A named entry in `collections:`: a directory, a filename `pattern`, and the checks its items must pass. | | **Collection layer** | Inspectors that profile a configured collection's items, addressed by domain identity (collection + item id) and probing through the same substrate the checks use. | | **Collection-scoped check** | A check type that runs once per collection over all its items (e.g. `filesystem_unique_filename`), rather than per item. It re-scans the full collection even under a single-item selector. | -| **CollectionDefinition** | The two-way mapping from a StorageInstance's contents to collections and items. Yields one or more collections; the filesystem is the only backend today. See [storage layer]({{< relref "../deep-dives/storage.md" >}}). | +| **CollectionDefinition** | The two-way mapping from a StorageInstance's contents to collections and items. Yields one or more collections; the filesystem is the only backend today. See [storage layer]({{< relref "../deep-dives/domain-model/storage.md" >}}). | | **Config** | A **Project**'s configuration: the schemas, storage instances, and collection definitions that declare what the project contains and how its items are checked. Katalyst's config is the `.katalyst/` directory; it is loaded by the `project` package's loader (`internal/project/loader.go`). Each object type owns the parse of its own config — the storage registry validates a declared `type`, and a collection parses its own block in `storage/collection`. | | **Discriminator** | The `when` predicate that selects a variant: a list of `item list --filter` expressions over an item's metadata, ANDed together. | | **Document** | The markdown file-form of an **Item**: a parsed markdown file (frontmatter metadata + body + a line map). Use it where parsing or the on-disk file is the subject; elsewhere prefer **Item**. | diff --git a/internal/checks/AGENTS.md b/internal/checks/AGENTS.md index e3620c5..0b2a61b 100644 --- a/internal/checks/AGENTS.md +++ b/internal/checks/AGENTS.md @@ -6,7 +6,7 @@ and the violations they produce. **Architecture and design rationale** - the model (check type vs. instance, family vs. library, scope), check libraries, how a check runs, and the trade-offs - live in the -[How checks work](../../docs/content/deep-dives/checks.md) deep-dive, which is +[How checks work](../../docs/content/deep-dives/domain-model/checks.md) deep-dive, which is the source of truth. The per-type catalog is the generated [check-types reference](../../docs/content/reference/check-types/), and the code-level contract is `go doc ./internal/checks`. This file keeps only the diff --git a/internal/fix/AGENTS.md b/internal/fix/AGENTS.md index 1f83e67..16c0d65 100644 --- a/internal/fix/AGENTS.md +++ b/internal/fix/AGENTS.md @@ -7,7 +7,7 @@ job (`storage/collection/filesystem.Write`). Why the canonical form is deliberately inflexible, and why `fix` never injects missing values, lives in the -[Frontmatter and fix](../../docs/content/deep-dives/formatting.md) deep-dive. +[Frontmatter and fix](../../docs/content/deep-dives/domain-model/formatting.md) deep-dive. ## Conventions diff --git a/internal/project/AGENTS.md b/internal/project/AGENTS.md index 789af5e..2f52879 100644 --- a/internal/project/AGENTS.md +++ b/internal/project/AGENTS.md @@ -5,9 +5,9 @@ instances, exposes collections, resolves selectors, and enumerates concrete items for the CLI. Architecture and rationale live in the -[domain model](../../docs/content/deep-dives/domain-model.md), +[domain model](../../docs/content/deep-dives/domain-model/_index.md), [configuration](../../docs/content/reference/configuration.md), and -[storage](../../docs/content/deep-dives/storage.md) docs. This file keeps only +[storage](../../docs/content/deep-dives/domain-model/storage.md) docs. This file keeps only local code conventions. ## Conventions diff --git a/internal/project/project.go b/internal/project/project.go index ef301a0..73d9296 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -3,8 +3,8 @@ // enumeration, and reverse id→path resolution on top of it. The path↔item- // identity mapping itself lives behind the internal/storage seam; this package // selects the right CollectionDefinition and orchestrates it. See -// docs/content/deep-dives/domain-model.md (selectors, collections, items) and -// docs/content/deep-dives/storage.md (the seam). +// docs/content/deep-dives/domain-model/_index.md (selectors, collections, items) +// and docs/content/deep-dives/domain-model/storage.md (the seam). package project import ( diff --git a/internal/project/selector.go b/internal/project/selector.go index 3fd082d..c6f9a9e 100644 --- a/internal/project/selector.go +++ b/internal/project/selector.go @@ -11,7 +11,7 @@ type UsageError struct{ Msg string } func (e *UsageError) Error() string { return e.Msg } -// Selector identifies a target by depth (see docs/content/deep-dives/domain-model.md): +// Selector identifies a target by depth (see docs/content/deep-dives/domain-model/_index.md): // // → one collection (Item == "") // / → one item diff --git a/internal/storage/AGENTS.md b/internal/storage/AGENTS.md index de1ee01..5dad06c 100644 --- a/internal/storage/AGENTS.md +++ b/internal/storage/AGENTS.md @@ -5,7 +5,7 @@ small registry of implemented backends; `collection/` holds the mapping from a backend store to Katalyst collections and items. Architecture and rationale live in the -[storage deep-dive](../../docs/content/deep-dives/storage.md). The collection +[storage deep-dive](../../docs/content/deep-dives/domain-model/storage.md). The collection read stack has its own local guide in [`collection/AGENTS.md`](collection/AGENTS.md). diff --git a/internal/storage/collection/AGENTS.md b/internal/storage/collection/AGENTS.md index aa1265f..e17b843 100644 --- a/internal/storage/collection/AGENTS.md +++ b/internal/storage/collection/AGENTS.md @@ -12,8 +12,8 @@ decode and encode with; `predicate` is the attribute/object predicate grammar; Architecture and rationale — why a collection owns the read, why items are thin, and how a backend attaches — live in the -[storage layer](../../../docs/content/deep-dives/storage.md) and -[collections](../../../docs/content/deep-dives/collections.md) deep-dives. +[storage layer](../../../docs/content/deep-dives/domain-model/storage.md) and +[collections](../../../docs/content/deep-dives/domain-model/collections.md) deep-dives. ## Conventions diff --git a/internal/storage/doc.go b/internal/storage/doc.go index 0db50a2..c4e17e5 100644 --- a/internal/storage/doc.go +++ b/internal/storage/doc.go @@ -25,5 +25,5 @@ // Whether a matched store unit becomes an Item or a Collection is a property of // the StorageType, not user configuration. A markdown file is an Item; a SQL // table would be a Collection. Item and Collection are therefore roles, not file -// counts. See docs/content/deep-dives/storage.md. +// counts. See docs/content/deep-dives/domain-model/storage.md. package storage diff --git a/product/specs/codec-layer-spec.md b/product/specs/codec-layer-spec.md index 717f363..e8efab3 100644 --- a/product/specs/codec-layer-spec.md +++ b/product/specs/codec-layer-spec.md @@ -240,12 +240,12 @@ Update package comments to describe the codec role, not storage placement. lives under collection; point readers to `internal/codec/markdownbodytext`. - `internal/checks/AGENTS.md`: note that check contexts use codec-owned content shapes. -- `docs/content/deep-dives/formatting.md`: update package references from +- `docs/content/deep-dives/domain-model/formatting.md`: update package references from `internal/storage/collection/document` to `internal/codec/markdownbodytext`. -- `docs/content/deep-dives/storage.md`: mention that storage readers use codecs +- `docs/content/deep-dives/domain-model/storage.md`: mention that storage readers use codecs for content decoding, but codecs are not storage backends. -- `docs/content/deep-dives/collections.md`: update any reference that treats the +- `docs/content/deep-dives/domain-model/collections.md`: update any reference that treats the markdown codec as a collection subpackage. - `product/specs/collection-reorg-spec.md`: add a short supersession note or leave it as historical context and reference this spec from the implementation diff --git a/product/specs/collection-reorg-spec.md b/product/specs/collection-reorg-spec.md index ab4fb87..42c4d95 100644 --- a/product/specs/collection-reorg-spec.md +++ b/product/specs/collection-reorg-spec.md @@ -215,10 +215,10 @@ _None._ Both prior questions are resolved: - **`internal/frontmatter/AGENTS.md`** — deleted; new `AGENTS.md` files for `storage/collection/` and `internal/fix` pointing at the formatting deep-dive's document and fix sections. -- **`docs/content/deep-dives/formatting.md`** ("Frontmatter and fix") — update +- **`docs/content/deep-dives/domain-model/formatting.md`** ("Frontmatter and fix") — update the "parsing and formatting live in `internal/frontmatter`" line to the `collection/document` + `internal/fix` split. -- **`docs/content/deep-dives/storage.md`, `collections.md`** — align to the new +- **`docs/content/deep-dives/domain-model/storage.md`, `collections.md`** — align to the new module homes (storage = backend registry; collection = read stack). - **`docs/content/reference/glossary.md`** — confirm Document, Item, and the (existing) fix wording point at the new packages; no new terms. diff --git a/product/specs/config-distribution-plan.md b/product/specs/config-distribution-plan.md index 4eb6a23..4b3164a 100644 --- a/product/specs/config-distribution-plan.md +++ b/product/specs/config-distribution-plan.md @@ -198,7 +198,7 @@ loader in Phase 6 rather than moving twice. a check is a kind constant plus one family file (args + parse + build + Descriptor + registration), no central-config step. Its getting shorter is the proof the change worked. -4. **Files:** `docs/content/deep-dives/collections.md` + +4. **Files:** `docs/content/deep-dives/domain-model/collections.md` + `docs/content/reference/glossary.md`. Updated to "the project loader" and the object-owns-its-config model. 5. **File:** `product/specs/domain-model-terminology-matrix.md`. Updated the diff --git a/product/specs/dogfood-docs-spec.md b/product/specs/dogfood-docs-spec.md index 93836bd..f18fa69 100644 --- a/product/specs/dogfood-docs-spec.md +++ b/product/specs/dogfood-docs-spec.md @@ -91,10 +91,10 @@ A survey of `docs/content/` found: `docs/content/explanation/general-model.md` and `.../technical-spec.md`, neither of which exists. - **domain-model vs core-concepts overlap.** `explanation/domain-model.md` - (katalyst-specific architecture) and `deep-dives/core-concepts.md` (general + (katalyst-specific architecture) and `deep-dives/domain-model/_index.md` (general theory, marked *work in progress*) cover adjacent ground; #29 calls for one canonical home per topic. -- **WIP / future pages shipping unmarked-as-draft.** `deep-dives/core-concepts.md` +- **WIP / future pages shipping unmarked-as-draft.** `deep-dives/domain-model/_index.md` ("work in progress") and `deep-dives/connectors.md` ("future — not shipped") ship in the build with status only in body prose. diff --git a/product/specs/domain-model-cleanup-plan.md b/product/specs/domain-model-cleanup-plan.md index 9e95f81..1557185 100644 --- a/product/specs/domain-model-cleanup-plan.md +++ b/product/specs/domain-model-cleanup-plan.md @@ -12,17 +12,17 @@ code already matches the settled terms (`frontmatter.Document`, `field`, - `docs/content/reference/glossary.md` — meant to be canonical but missing *attribute*, *field*, *operation*, *aggregate*, *validation result*, and a uses "Raw-source layer." Family is intentionally not a standalone term. -- `docs/content/deep-dives/core-concepts.md` (170 lines) — encyclopedic: a "Data +- `docs/content/deep-dives/domain-model/_index.md` (170 lines) — encyclopedic: a "Data interface" concept, a structured/unstructured "Goal," full definitions of item/collection/attribute/check/inspector, and an "Implications" section that states the operations thesis. Weight `20`. - `docs/content/deep-dives/progressive-operations.md` — the tiered model; lede "How data interfaces evolve." Weight `30`. -- `docs/content/deep-dives/domain-model.md` (112 lines) — the katalyst hub #73 +- `docs/content/deep-dives/domain-model/_index.md` (112 lines) — the katalyst hub #73 built; indexes the subsystem pages. Uses "Markdown document." -- `docs/content/deep-dives/collections.md`, `inspectors.md` — new in #73; own the +- `docs/content/deep-dives/domain-model/collections.md`, `inspectors.md` — new in #73; own the detail. `inspectors.md` uses "raw-source layer." -- `docs/content/deep-dives/storage.md` — calls itself the realization of "the +- `docs/content/deep-dives/domain-model/storage.md` — calls itself the realization of "the data interface concept." - `docs/content/deep-dives/command-organization.md` ("How the core commands are organized") — referenced only from `cmd/AGENTS.md:9` and @@ -75,15 +75,15 @@ pairs and their relationship explicit. **Goal:** core-concepts becomes a general-altitude hub mirroring domain-model; the operations thesis moves to where it is demonstrated. -1. **File:** `docs/content/deep-dives/core-concepts.md` — delete the "Goal" +1. **File:** `docs/content/deep-dives/domain-model/_index.md` — delete the "Goal" structured/unstructured dichotomy (duplicates `vision.md`); keep one sentence motivating a shared cross-backend vocabulary. -2. **File:** `docs/content/deep-dives/core-concepts.md` — collapse each concept +2. **File:** `docs/content/deep-dives/domain-model/_index.md` — collapse each concept (item, collection, attribute, operation, check, inspector) to a one-line intro that links to the glossary (definition) and to its discussion page; rename the "Data interface" concept to **Storage** and drop "data interface" from the prose and the examples table header. -3. **File:** `docs/content/deep-dives/core-concepts.md` — fix the attribute/field +3. **File:** `docs/content/deep-dives/domain-model/_index.md` — fix the attribute/field synonym line (currently "a named characteristic or field") to state the specialization instead; remove the "Implications" section, leaving a one-line pointer to progressive-operations. @@ -92,20 +92,20 @@ the operations thesis moves to where it is demonstrated. supported; checks are the means) as the page's opening thesis; reword the "data interfaces evolve" lede to "storage backends." 5. **File:** `docs/content/deep-dives/progressive-operations.md` — set - `weight = 20`. **File:** `docs/content/deep-dives/core-concepts.md` — set + `weight = 20`. **File:** `docs/content/deep-dives/domain-model/_index.md` — set `weight = 30`. Order becomes vision → progressive operations → core concepts. ### Phase 3 — Align the hub and subsystem pages **Goal:** the katalyst-altitude pages use the settled terms consistently. -1. **File:** `docs/content/deep-dives/domain-model.md` — sharpen the one-line +1. **File:** `docs/content/deep-dives/domain-model/_index.md` — sharpen the one-line statement of how it differs from core-concepts (specific map vs general map); apply item/document usage; confirm "raw-source" wording matches the glossary. -2. **File:** `docs/content/deep-dives/storage.md` — reword "the data interface +2. **File:** `docs/content/deep-dives/domain-model/storage.md` — reword "the data interface concept" to name the deprecation explicitly or drop it; the storage vocabulary stands on its own. -3. **File:** `docs/content/deep-dives/collections.md`, +3. **File:** `docs/content/deep-dives/domain-model/collections.md`, `docs/content/deep-dives/inspectors.md` — apply item/document where the form is the subject; keep "raw-source layer" (consistency check only). @@ -113,8 +113,8 @@ the operations thesis moves to where it is demonstrated. **Goal:** plain key-term titles, and CLI-org rationale lives next to `cmd/`. -1. **File:** `docs/content/deep-dives/collections.md` → title "Collections"; - `docs/content/deep-dives/checks.md` → "Checks"; +1. **File:** `docs/content/deep-dives/domain-model/collections.md` → title "Collections"; + `docs/content/deep-dives/domain-model/checks.md` → "Checks"; `docs/content/deep-dives/inspectors.md` → "Inspectors". Title-only; filenames and `relref` links are unchanged. 2. **File:** `cmd/organization.md` (new) — move the body of @@ -144,12 +144,12 @@ reference is unchanged. | File | Role | |---|---| | `docs/content/reference/glossary.md` | Canonical definitions; gains attribute/field/operation/aggregate/validation-result/family + the general/specific rule. | -| `docs/content/deep-dives/core-concepts.md` | Slimmed general hub; loses Goal + Implications; reweighted `30`. | +| `docs/content/deep-dives/domain-model/_index.md` | Slimmed general hub; loses Goal + Implications; reweighted `30`. | | `docs/content/deep-dives/progressive-operations.md` | Gains the operations thesis; reweighted `20`. | -| `docs/content/deep-dives/domain-model.md` | Katalyst hub; terminology-aligned. | -| `docs/content/deep-dives/storage.md` | Drops the "data interface" framing. | -| `docs/content/deep-dives/collections.md` | Retitled "Collections"; item/document aligned. | -| `docs/content/deep-dives/checks.md` | Retitled "Checks". | +| `docs/content/deep-dives/domain-model/_index.md` | Katalyst hub; terminology-aligned. | +| `docs/content/deep-dives/domain-model/storage.md` | Drops the "data interface" framing. | +| `docs/content/deep-dives/domain-model/collections.md` | Retitled "Collections"; item/document aligned. | +| `docs/content/deep-dives/domain-model/checks.md` | Retitled "Checks". | | `docs/content/deep-dives/inspectors.md` | Retitled "Inspectors"; item/document aligned. | | `docs/content/deep-dives/_index.md` | Drops the command-organization clause. | | `cmd/organization.md` (new) | CLI command-grammar rationale, moved from the deep-dive. | diff --git a/product/specs/domain-model-cleanup-spec.md b/product/specs/domain-model-cleanup-spec.md index 3dfbe03..2eaab52 100644 --- a/product/specs/domain-model-cleanup-spec.md +++ b/product/specs/domain-model-cleanup-spec.md @@ -29,9 +29,9 @@ from reappearing. Three docs define overlapping vocabulary at different altitudes, and neither the code nor the CLI fully agrees with them: -- `docs/content/deep-dives/core-concepts.md` is the tool-agnostic model +- `docs/content/deep-dives/domain-model/_index.md` is the tool-agnostic model (data interface, item, collection, attribute, operation, check, inspector). -- `docs/content/deep-dives/domain-model.md` is the katalyst-specific model +- `docs/content/deep-dives/domain-model/_index.md` is the katalyst-specific model (markdown document, schema, config, resolver, the check families, invariants). - `docs/content/reference/glossary.md` is meant to be the quick-lookup source of truth, but it omits some core-concepts terms (*attribute*, *operation*, @@ -120,12 +120,12 @@ The glossary is canonical; the deep-dives narrate. term defined exactly once, here, including the specialization links (document = markdown item; field = object attribute). Both deep-dives link to it for definitions instead of restating them. -- **Core concepts** (`deep-dives/core-concepts.md`) is the general, +- **Core concepts** (`deep-dives/domain-model/_index.md`) is the general, backend-neutral model, written entirely in general terms (item, attribute, collection, storage, operation, check, inspector). It explains *why* the abstractions exist and what they would mean for Postgres or Mongo. It narrates and links to the glossary; it does not define terms. -- **Domain model** (`deep-dives/domain-model.md`) is katalyst's concrete +- **Domain model** (`deep-dives/domain-model/_index.md`) is katalyst's concrete instantiation: the filesystem backend, markdown documents, object fields, JSON Schema, the Go types, the `check`/`fix` lifecycles, and the invariants. It uses general terms by default and the specific terms where the concrete form is the @@ -177,7 +177,7 @@ terminology-align the new pages. the specialization link), *operation*, *aggregate*, and *validation result*; keep *family* defined in the CheckLibrary row and checks.md, not its own entry; apply the storage / source / item-document decisions. -- **`docs/content/deep-dives/core-concepts.md`** — the primary doc target now: +- **`docs/content/deep-dives/domain-model/_index.md`** — the primary doc target now: slim from the encyclopedic definitions into a general-altitude hub mirroring `domain-model.md`. Define each general term in a line, link to the glossary for the definition and to where the general idea is discussed (e.g. *operation* → @@ -190,13 +190,13 @@ terminology-align the new pages. - **`docs/content/deep-dives/progressive-operations.md`** — gains the operations-thesis sentence relocated from core-concepts' Implications as its lead, since the page already demonstrates the claim tier by tier. -- **`docs/content/deep-dives/domain-model.md`** — **kept** as the katalyst hub +- **`docs/content/deep-dives/domain-model/_index.md`** — **kept** as the katalyst hub #73 built. No structural change; terminology-align it (item/document, raw-source consistency) and sharpen its one-line statement of how it differs from core-concepts. -- **`docs/content/deep-dives/collections.md`, `inspectors.md`** — new in #73 and +- **`docs/content/deep-dives/domain-model/collections.md`, `inspectors.md`** — new in #73 and the homes for the former domain-model detail (resolver table, `check` lifecycle, invariants, inspector layers). Apply the item/document decisions here; keep "raw-source" consistent. -- **`docs/content/deep-dives/storage.md`** — confirm wording now that "data +- **`docs/content/deep-dives/domain-model/storage.md`** — confirm wording now that "data interface" is deprecated in favor of the storage vocabulary. - **Deep-dive titles** — rename to match the key terms, not "How X work": `collections.md` → "Collections", `checks.md` → "Checks", `inspectors.md` → diff --git a/product/specs/domain-model-terminology-matrix.md b/product/specs/domain-model-terminology-matrix.md index 3bf27c3..1b5bb76 100644 --- a/product/specs/domain-model-terminology-matrix.md +++ b/product/specs/domain-model-terminology-matrix.md @@ -16,8 +16,8 @@ hand when the code or docs move. |---|---| | **Internal code** | Package names and exported Go identifiers under `internal/`. | | **CLI** | Command/subcommand names and the user-facing nouns in their help text (`cmd/`). | -| **Domain model** | Terms as used in `docs/content/deep-dives/domain-model.md` (katalyst-specific). | -| **Core concepts** | Terms as used in `docs/content/deep-dives/core-concepts.md` (tool-agnostic). | +| **Domain model** | Terms as used in `docs/content/deep-dives/domain-model/_index.md` (katalyst-specific). | +| **Core concepts** | Terms as used in `docs/content/deep-dives/domain-model/_index.md` (tool-agnostic). | | **Glossary** | Entries in `docs/content/reference/glossary.md` (the intended single source of truth). | `—` means the source has no term for that concept. **Bold** marks a term that diff --git a/product/specs/listing-predicate-plan.md b/product/specs/listing-predicate-plan.md index 570b2c3..7dc1435 100644 --- a/product/specs/listing-predicate-plan.md +++ b/product/specs/listing-predicate-plan.md @@ -217,17 +217,17 @@ Goal: Update callers and docs to the new names. Rename the `query` section to `listing`, show `listing:` examples, and note that `query:` has been replaced. - **File:** `docs/content/deep-dives/collections.md` + **File:** `docs/content/deep-dives/domain-model/collections.md` Replace references to the query package with the metadata predicate grammar. - **File:** `docs/content/deep-dives/domain-model.md` + **File:** `docs/content/deep-dives/domain-model/_index.md` Replace the "Query" out-of-scope note with the explicit split: listing filters and sort keys are shipped for one collection; first-class Query is planned. - **File:** `docs/content/deep-dives/core-concepts.md` + **File:** `docs/content/deep-dives/domain-model/_index.md` Mark **Query** as planned rather than shipped. Keep listing filters out of the operation list unless they are named as part of Listing. @@ -300,9 +300,9 @@ Goal: Verify the rename is complete and behavior stayed stable. | `cmd/engine.go` | Variant predicate evaluation | | `internal/storage/collection/AGENTS.md` | Package conventions | | `docs/content/reference/configuration.md` | User-facing config reference | -| `docs/content/deep-dives/collections.md` | Variant terminology | -| `docs/content/deep-dives/domain-model.md` | Query/listing vocabulary | -| `docs/content/deep-dives/core-concepts.md` | Query operation vocabulary | +| `docs/content/deep-dives/domain-model/collections.md` | Variant terminology | +| `docs/content/deep-dives/domain-model/_index.md` | Query/listing vocabulary | +| `docs/content/deep-dives/domain-model/_index.md` | Query operation vocabulary | | `product/specs/domain-model-terminology-matrix.md` | Naming matrix | | GitHub issue #76 | Terminology contradiction this plan resolves | @@ -326,11 +326,11 @@ Documentation ships in Phase 4. - `internal/storage/collection/listing/doc.go`: add listing package docs. - `docs/content/reference/configuration.md`: rename the `query` section to `listing` and document the migration error. -- `docs/content/deep-dives/collections.md`: describe variants as using metadata +- `docs/content/deep-dives/domain-model/collections.md`: describe variants as using metadata predicates. -- `docs/content/deep-dives/domain-model.md`: distinguish shipped listing filters +- `docs/content/deep-dives/domain-model/_index.md`: distinguish shipped listing filters from planned Query. -- `docs/content/deep-dives/core-concepts.md`: mark Query as planned. +- `docs/content/deep-dives/domain-model/_index.md`: mark Query as planned. - `product/specs/domain-model-terminology-matrix.md`: update the Query/filter row. diff --git a/product/specs/listing-predicate-spec.md b/product/specs/listing-predicate-spec.md index fe6753f..1dc6e53 100644 --- a/product/specs/listing-predicate-spec.md +++ b/product/specs/listing-predicate-spec.md @@ -265,12 +265,12 @@ Resolved: item-list pipeline. - `docs/content/reference/configuration.md`: rename the `query:` section to `listing:` and document the config migration. -- `docs/content/deep-dives/collections.md`: update variants to say they use the +- `docs/content/deep-dives/domain-model/collections.md`: update variants to say they use the metadata predicate grammar, not the query package. -- `docs/content/deep-dives/domain-model.md`: replace the current "Query" out-of- +- `docs/content/deep-dives/domain-model/_index.md`: replace the current "Query" out-of- scope note with a precise distinction: listing filters are shipped; a first-class Query operation is planned. -- `docs/content/deep-dives/core-concepts.md`: mark **Query** as a planned +- `docs/content/deep-dives/domain-model/_index.md`: mark **Query** as a planned operation, not a currently shipped one. - GitHub issue #76: close once the docs and code use the new terminology. - `product/specs/domain-model-terminology-matrix.md`: update the Query/filter From 80d7e81c29ddc5696df61ceaf28439677e214e92 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 10:34:50 -0600 Subject: [PATCH 04/19] Refine domain model docs --- .../content/deep-dives/domain-model/_index.md | 79 +----------------- .../deep-dives/domain-model/collections.md | 20 +++++ .../{ => domain-model}/inspectors.md | 14 ++-- .../images/domain-model-core-concepts.png | Bin 0 -> 156672 bytes internal/inspect/AGENTS.md | 2 +- internal/inspect/doc.go | 3 +- product/specs/domain-model-cleanup-plan.md | 6 +- 7 files changed, 35 insertions(+), 89 deletions(-) rename docs/content/deep-dives/{ => domain-model}/inspectors.md (88%) create mode 100644 docs/static/images/domain-model-core-concepts.png diff --git a/docs/content/deep-dives/domain-model/_index.md b/docs/content/deep-dives/domain-model/_index.md index d563c9b..94eea7a 100644 --- a/docs/content/deep-dives/domain-model/_index.md +++ b/docs/content/deep-dives/domain-model/_index.md @@ -44,34 +44,13 @@ definition lives in the [glossary]({{< relref "../../reference/glossary.md" >}}) [Checks]({{< relref "checks.md" >}}). - An **inspector** is the descriptive dual of a check: it measures a distribution and returns evidence, never a verdict. See - [Inspectors]({{< relref "../inspectors.md" >}}). + [Inspectors]({{< relref "inspectors.md" >}}). ## How the concepts fit The hierarchy is intentionally small: -```mermaid -flowchart TD - P["Project"] - S["Storage"] - C["Collection"] - I["Item"] - A["Attribute"] - O["Operations"] - K["Checks"] - N["Inspectors"] - - P --> S - S --> C - C --> I - I --> A - S --> O - K --> I - K --> A - K --> C - N --> C - N --> A -``` +![Domain model diagram showing project containing storage, collection, item, and attribute, with checks and inspectors operating on the data model.](../../images/domain-model-core-concepts.png) Storage locates data, collections group it, items are the units commands act on, and attributes are the named things checks and inspectors can read. @@ -83,57 +62,3 @@ That separation is why katalyst can start with markdown files but leave room for richer stores. The check engine does not need to know whether an item came from a file or a row if the storage layer can present the item, its attributes, and the operations available on them. - -## The workflow - -The concepts also explain Katalyst's intended loop: - -1. **Catalog** a source with inspectors. Start from evidence: what files, - fields, headings, paths, and recurring shapes actually exist? -2. **Define** collections, schemas, and checks. Turn the discovered structure - into a project config that names the collections and their expected shape. -3. **Enforce** the rules with checks. Run the same assertions locally, in CI, - or through an agent workflow. -4. **Reshape** the content as the project changes. Use fixes, migrations, and - storage-aware operations to keep the data aligned with the model. - -The important boundary is between evidence and enforcement. Inspectors report -that 94% of items have a field; they do not decide that the field is required. -That threshold belongs in a check, chosen by a human or an agent using the -evidence. - -## The same vocabulary across backends - -| System | Storage | Collection | Item | Attribute | -|----------------------|---------------|-----------------|------------|------------------| -| Postgres | The database | A table | A row | A column | -| MongoDB | The database | A collection | A document | A field | -| A directory of CSVs | The directory | A CSV file | A row | A column | -| A REST API | The API | A resource type | A resource | A response field | -| An S3 bucket of JSON | The bucket | A key prefix | An object | A JSON key | - -An operation defined once in this vocabulary, such as checking an attribute or -aggregating over a collection, applies to every backend that can support it. -The backend still decides the mechanics: a filesystem may list files and parse -frontmatter in memory, while a database may push filtering and aggregation into -queries. The domain vocabulary stays the same. - -## Why this vocabulary matters - -The point is not taxonomy for its own sake. The vocabulary keeps Katalyst from -hard-coding "markdown file" everywhere while still making markdown useful -today. - -- **Portable checks.** `object_required_field` can mean "frontmatter key" for - markdown, "column" for a table, or "field" for a document store. -- **Storage-aware growth.** A backend can start with read and list operations, - then add query, aggregate, or write support as it becomes more structured. -- **Agent-friendly structure.** A project exposes the same nouns everywhere: - collections to inspect, items to check, attributes to reason about, and - violations to fix. - -This is the through-line for the deeper pages: [storage]({{< relref "storage.md" >}}) -explains how backends attach to the model, [collections]({{< relref "collections.md" >}}) -explains how config names and routes items, [checks]({{< relref "checks.md" >}}) -explains enforcement, and [inspectors]({{< relref "../inspectors.md" >}}) -explains evidence. diff --git a/docs/content/deep-dives/domain-model/collections.md b/docs/content/deep-dives/domain-model/collections.md index b5d7e6f..0c8b4cf 100644 --- a/docs/content/deep-dives/domain-model/collections.md +++ b/docs/content/deep-dives/domain-model/collections.md @@ -80,6 +80,26 @@ collection's object schema must reference a known schema, and a collection must configure at least one check (via the `schema:` shorthand or an explicit `checks:` list). +## Collections across backends + +The collection model is intentionally broader than "a directory of markdown +files." A collection is the named group Katalyst can list, select, inspect, and +check, even when the backing storage has a different native vocabulary. + +| System | Storage | Collection | Item | Attribute | +|----------------------|---------------|-----------------|------------|------------------| +| Postgres | The database | A table | A row | A column | +| MongoDB | The database | A collection | A document | A field | +| A directory of CSVs | The directory | A CSV file | A row | A column | +| A REST API | The API | A resource type | A resource | A response field | +| An S3 bucket of JSON | The bucket | A key prefix | An object | A JSON key | + +An operation defined against this vocabulary, such as checking an attribute or +aggregating over a collection, applies to every backend that can support it. +The backend still decides the mechanics: a filesystem may list files and parse +frontmatter in memory, while a database may push filtering and aggregation into +queries. The collection name stays the user's handle either way. + ## Why schema resolution has three tiers When `check` validates an item against an object schema, it resolves which diff --git a/docs/content/deep-dives/inspectors.md b/docs/content/deep-dives/domain-model/inspectors.md similarity index 88% rename from docs/content/deep-dives/inspectors.md rename to docs/content/deep-dives/domain-model/inspectors.md index f6bb60e..617bead 100644 --- a/docs/content/deep-dives/inspectors.md +++ b/docs/content/deep-dives/domain-model/inspectors.md @@ -7,11 +7,11 @@ weight = 46 An **inspector** profiles content and returns *evidence*: counts and distributions, never recommendations. Inspectors are the descriptive dual of -[checks]({{< relref "domain-model/checks.md" >}}) - a check asserts a predicate and reports +[checks]({{< relref "checks.md" >}}) - a check asserts a predicate and reports violations; an inspector reports the distribution that predicate would be tested -against. They drive the [`inspect`]({{< relref "../reference/cli.md" >}}) +against. They drive the [`inspect`]({{< relref "../../reference/cli.md" >}}) command. For the per-inspector catalog see the [inspectors -reference]({{< relref "../reference/inspectors/_index.md" >}}); this page is the +reference]({{< relref "../../reference/inspectors/_index.md" >}}); this page is the model and the rationale behind it. ## Two layers @@ -31,7 +31,7 @@ Inspectors come in two layers, distinguished by *how they reference the data*: The two are **distinct interfaces, not one type at two scopes**, precisely because they reference the data through different machinery. This mirrors the -seam in the [storage layer]({{< relref "domain-model/storage.md" >}}). +seam in the [storage layer]({{< relref "storage.md" >}}). ## Built from primitives @@ -96,10 +96,10 @@ tool, not in the engine. ## See also -- The [inspectors reference]({{< relref "../reference/inspectors/_index.md" >}}) +- The [inspectors reference]({{< relref "../../reference/inspectors/_index.md" >}}) for the per-inspector surface, generated from the registry. -- [Checks]({{< relref "domain-model/checks.md" >}}) - the prescriptive dual; an +- [Checks]({{< relref "checks.md" >}}) - the prescriptive dual; an inspector measures the distribution a check would assert against. -- [Domain model]({{< relref "domain-model/_index.md" >}}) for where profiling sits in +- [Domain model]({{< relref "_index.md" >}}) for where profiling sits in the catalog-define-enforce loop. - `go doc ./internal/inspect` for the code-level engine contract. diff --git a/docs/static/images/domain-model-core-concepts.png b/docs/static/images/domain-model-core-concepts.png new file mode 100644 index 0000000000000000000000000000000000000000..68a57ece1132d5768594059205c1a6f12be1112a GIT binary patch literal 156672 zcmaHT2Rzm7`+r1MLLr$+vR5)PPi2&yve$|1kZi{>T8i*gR%Ar>-kC>c*_#MO_8!OK zaQNTH?)g36|Et&YdX95GpL<;QHQ(2D-LKVDCx))K{?o;ryAwk2-OJ{KOrZ8~0stW(NtpFKa|eFKP+;yLfNk zI34Tacl-WRT-?%E#P0-7ynDvZe&fcSD_!UKeZ0?VTqZe-&#L$iYJ6TFazpm}FQTXP zSC(IT?W88TyPK7;`OZ(bmUL?%r@PZoQr%ZeF@suz$So4SmLmQ|#{cz?9SN%(#=y6K zOa40cukFEtPYh=3{0iHX4{s3Cj;shm@{17YbKKN(7a`s!aB%T<|NeuUXV$Dhed<{` zL7@12-$P5*XFXGmD&q6u+@~YT2|{(y0pF`)+hNco2AAZmB9oC&v^DiYD>}x6Wv8>F zQt-LnolX9fc3A8--%24o z_WllI_$1l8d}({84&~4}`+7~!A>FgSJ`2xu^2{`EJ|^+4Tktu9<|_MCm3BTuoL=zxj)qh@ z^{?DwWr{t$b>hXH?uVgd?>zny{sx2Qd)-*@iiYn|0K4!xUbQWTt5QsUk1RfqUg#ya z)>MU3G118T8mH`3CSvC?CtVIBtfx&{)&Ju74OZ#PeQ$NR{_VD!ddvYO_elEYMr8_? zux(YiZ%Jisuf5~9Zes39FZq>9m~N&a#clI|&4A^A{50wi{G&zeo=5B!?tAGf!aU=v zU5_&*rol>B%l!NaGhbGxpV>dMy@`SiD^C#Z(;d7?6Iz+BBiQ-a%rro>CPITKEABU8 zmYD|c)%2lc8SfK56vW9YdoLco6KqsTh#es|58qg`2O4yq{_ZO(Qd!sTAD`t^_n)=6 zgA;Y>V7dEj)4-=zLLv8$kabV`%TZeAS5!e~-n^tOjQi(rO5{g*pE<^9ZN#|E%SjJj zXfLf->M%0&5u@%h5$0!lM^hZ*M(nI(=lO5$5``ZJ_w9|^hpF4jWEYHu#8SLi)($r; z$NTH_|D~LqsDuw;t{D=R{wtPQ(}SRgTQK`&QX2Ik;e4pig-e;Z=kl}vfK|f!cd`by zC9{XOH`z!|F5rNFK0U5vA7NiNzE@SkpsNc$+dDk|2-q8BR;~Elms>GcB3^1!K!sqZ z9>h@BS+bonUphZ)hJDIBTbfaNva$Uo)7AJL=1wAKGKnp<++C5K{DZ12p3w4C(LPJC zfStuh)17R#bjS0174*sQ$uc(>*)SEe^>l5IOXdQ0Y+>*B5+o=h>w zAYrKp4H3FDw^vTHIq^2qvJ=zN^Z_bl1vS68w~gCpvCp4g!~BkSC3~|bo!v6?hN&ff z`^LBoZZlr+u@l%mMnK&v0iqi7q9q-#=Q{D0$(~O&s>!*`9t0%*o>Y6T(O!%udnMl) z>VQ=ahYS;o!GCl32jHd_%2)hcSL4IiubuVLaWZn~7OkPJRjN2dl>E<1y0tW{QQjGd)_K_zYo=oFEC88ML-3jRFZV-9OjL=OkbL<|y)uYMwYO zkDPqqs9`S|18znR(Tg>-cez3uD4=tIq9HtpLk7VvKXwlP^s!ar;Er;WpZg@Yto>C- zGKi9%+?Z;r=kX?6C2eM~dlWmgX;%P`UVv=izuD($8eQlxMN6F@_2zSJ7I-kUsmf1| zd;f7C`?GDQ4>@e_19qLW5TEb>p?42jBZRn+L^*O#o^%;lKR2qOn$Z4>wonQDeA%N} zPx!2n(|l*aH<5wg1QKm7`y)H-ZK7GVt+p)gJ=R|(|9g?)XMNsEsb|~0>Ryr6sh%p9 zCpsg4hhdkR*!5gKI?mnM8u*~k@vi7WHCgkf&lxK_6X*vWCpQB-^xI!^@t?+F?&1IE zzNIM+{7{1(ssu3B?yew7L^WE_Zm{$`xiz@9b#wTTrD2`o-i*vp%D;w$c<<5}LPD$* zBbECoh1$5_m$u{U`{We0cBWq%|vpV{+xc_O(Z09|4lCo9O~Y zpZAXk`V{Zl-cpWEU{4E9@?ET%<}*H~%zf6*^W*-dVk}@d%$ftkRj--6xsD45c5jDD z3v4Nkh%iTYE^v|zJ8STbN}8j|c3<;ZCZS=*!9B-)u_givZ9XO@{PZ|Ze?JT{0&^M# zJ(<0L{~s)NaHPTdkXIVZbdOxIl;W4bDfoMk6Z z;R00sp%-s*`1>4NZ2jRMdmk!Y3Dbq(8C@mJJ+5!m=>GL9#F}K1VQC@2 z_X9g@3&ce${U>2BwsC-`REj(6?i~Eyb{lfxaFD$ZZE?7xG{yy!giij)g$hhhBafqe zWO>8s0dfC`mJ);4Xi3=j&qslU-)m^=nwO{PR1t6U3DW0#W6+d)3u37cy$@D!H|P4H zyh2m)^ur)rL^6+sP_@Mzp>7Tn32qLYiU=qANO5ypE+<$6`Yf{%&Da%5+k!d2yEG~~ z6Z+vt3-bv*`>KU7=jPYryaYTKnO|oWF_x_oD@r93(XftNWRk(-Eg2-4<4F>esaXTB z2PmMj|8zf|rHYrJOntUx_+j>g7qa1$PPSiuzg!(cJqp#-aZAXbxlxmCe@ZnqhLM8jH%#WZHa2CKX<>JjRzKxz;BsQnIz&*s;J$rnAQoId@!@-H2h@a4WuNZ7ST^>_751W$yRIvoUo|K!n$z%fLokF? z#?;Dpr3+cUSvG%F_Q;w(nJ(BODmk~^9`w0%p#oOs{Noz0vA59%QFCYLk}K3dlV*A-$<% zpFD*gf-T(fW%AVaQ=6$gNp^c@yd%#A zSwLu~L}#1rSuz<%;vYwm#aFyOlHdN4?z5g*b7~Y_@2mRLJ;VxSci*fawr3D8g&M{} z^`x@2@UCyDB$eME@)h{=wW=j4##5}8g(u!{fJf|@GOGMSLYPw*b^jS2;Tw(0jeR}0 zPTXZyct0Xa66V}*Sa@s(#iigxbH=$Wa&0lTcI^EWhYlA7oweVV4zvZARC zU4JvnqoYw3MY>57Wz#C=71TJ;ymr+{;fx>5W7u)kuHsbhvFa^gTVI}i@^PO<+t9e~ zw_{Tvj5MowY=FatJL;tiwK_}UC9{F1_{oufxM!{l49_%$U3Zu`Ew-4M8I4HP98!Fy>39^;KqiPBf4+ikJGa@7 z3PX=5%`mH}AaZ~OF!Oua+MQh-<6{!z70gCg*S<-&C}n4wwYQgzayBwID1Xp(CDJy+ z_RCUTej_iFf^~Y1oUZX})($_e%;3VlCykEt#S;mt9wYAye)q&^anT#Im=!fg35qns z?OhwouCJgaq@KJQXTvN??<}?6$kHLnaeqyaA&q|4a^MMIz20v865aA=XnAi49pU7q zeM69oTbrI-&*UXx;8sg@uBSCd-_6uUxX0C3yOsu>C4VjaQsWGQ@h(ewNFKK$(x+?2 z5QSb%ct)l&5$)oMuI2Lz;VoY6aO}D}tYn>DY&Q3qdj_U52Z;|*kY;(~_lpyiK8wnt z4to7j#LjSMgi^&`W$q`AP@T5gl%hV125(fBKc>N5lt+5w&+w^?ar>vwmPKy^g_uJ1 z*lCxV{NI5wxpT_p`aW$TgxZ8kg_W#f`V#4iE#U$z@Ub)_<)mn5T_E=U9Yky%;x+}{ zJ=J2UT!qJi>3+BFH=GPF`5-SF-f1zIp0aJzWpJuYZZM)hb8ejJ(&(=Hk{$Yf@TPg&2IiGe%{=rc_zix>=}WxsfL_ zRL}WC{`We%BvlXN7{}G3ijYjiHd>-aK@t&{L36Kl{*_j{uLTQkPQQANzwipVO-mUi zycxwcc9*U29sBGucl+3ogx zjPpR^FlIhex3nFB7Pclh^@9*W<0X1cOawQ5a-f<_`r|fc!3$-{k$HY}Qcru(e`R`8 zlV=WY;JGmdb2(*8%Kq9~XlB&Af%ureY9a2ESvZpea0dP}xDortRP1K#+3Xt8(P!J@ zwg^e#NZxvSn7*zy2w5(o*iSzw7{XuE6r2)V#N4kiYaZ< zEBaF{ql&Vk3Wwa&$_5zP;Imd@s`_L&69<`uA_sUE0g#M-j-2aP(( zaxf08*PK)BI#0T}nX){y`ZLes*K#AD;)0>wpd)%JDFLf@{azNxd@I=49F7STTYjaB zDT{Hk={>VL@Qu{yW2CWx*JK53L0MXKCVlnopmQUS3AJ|9DgW(qBv0BO(|QKjBlPAl zZ1^MvFO|)6jYrbxFhou2)N)BLg0~iq__ejN0?X}Np+4(}l?N@=Jyzc^g`oV&wKZ82aBT>Cc0sX5*Ji*^Fj&D6HQl#vN71{j7cPWR4m)?IvUWy>`VXAwq&YKDpYnMa>e@5oE%QQ#Q zpBA{86S7=VIqUbK3wFZi20r~G4xh}>>427FQ78XAuGaH!lt~K zJRRy8sH&Aa8DX>0p1@eIr44$BJpG#2x_zUdYAZOEE~Gd5_s*26SL*DW;RQmpU(Yzo z%k!aqWyCRZ6jA{WoXhB3I&+R+f8SVCzQTXG`DuH(F-y%xT#*z}ni4J$!im`4`oQ9^h zqWrCtzZ6hSrpmOv=u6u|O`F^9Np;E9U%ppzyBEYF&Urg1->b?^7NOl{mIhK6HzYX zr8=5!w`w(2y{RHy1~nw92S#&b9{7$ettB51J9D!=D9sj~30GmA* z)5q4Ff-p2-KX*O?Gh<6bu0mC*jX#t@3tVgU)^HTlylww|#s=gn z52MK!RK4`jL}`9RwCFbdLq5l$$00dP~AMld#G-wDYb!qmYF-7m6fjduu{kB*UwQVmO(> z{{n#KJcit7GPJ~{g-66Q&q!}&_tB$RE1pd~9}UVX&|{LQZAu_4u_D;CkyvfJg;8*K znHktP)QuWBB^?QAzD>(yKWAL4!thdX6 z+>W+|hiYi)2}vWu;nWKW>{z?`meK9c?>_n>)~B6X2y}P%+H{>J&!WOHJ6;O><$lbW zX|G1&Nt*pFLL2aNt;kABOVj9-4QCL798Uwnqs}Sb#r!ajQQn*@TKFfZSkG;&LNJF~ z-{NcBYn+*womulKV7e4~jlAGuGfjd7^i1i$24}KjdbCZNbwdc{M+7_yo)Yzm{(e5% zIlQxdf9MHCLrn{aMw!wQ8$q1fwyLdN{}oX3itZz_LT=zJOeM!xe8Bp5t1tLG1m-F> z87=u81OF$wpY7p{o2twhntaaM2xC>U?8g=7+SK@x&i1}dJYk4?&nObE zt;n4t_~_x0i>Ge$V7lr0ero%c7|y6HZfQ%@Vy^?4Qe6JBU^FPWk*{SymxB|)K; zdYau5{(1ejqS)M`O7bA9bh3Z^+ESnBrVdw(Pp5T4gDl^m8@clym8|v8M7-2kaBGFd z>vkrr4<*Ol{5fF^8*hs2{9x{h=wo=oz&s+g>2axO00iEfT}E(ZcV`1v*2geY9Rp)c zj*Z5hZM!iiR|HG8Kg@A54Dn7y9JA_(?C$+6?zuAHxBy2b8Eq|VP034Fh{DJ7Vw4MX zv_s7D(if1NvYv;KV1A;vAq7n#q&M3-6}ZcXa-m0DHm#9Gn?H=eG~1~QG_rHnHN|eu zm+~=qZP`!37hra&@T`0Ek8(Yp3}dXms)uS+KNsrJj=wW!wS>hkBr&U<-BC9TSuXlt zxGgfYn&&Zo7w+xUYv7Uq0)w%O<|xV4lHPJD19)@6l%71(`@%un()<+y>F_|&+yEyMCVRm3%_+FcS7!gQ_(k(hwM#-KB`SIP4T_qwRYiR0D5*FASFT!2XQ!#;u4 zgngnvvQ(V2&h{Sv=+L5Krw2#oH+9%4S!Wc>?czUmbT;9ElH=j`r4`dIs6JPUv?<_2IaNmGUpm*vb54j~}LCq#KeN0w?FI zNcb9_rPZD{x}-9bS2mVmr_3}6M*(oFf{*75bb;lvKY3d6Rxd(0hUfh6k=MhUhKz4A zva5(w2&?=Yuyh+VaMSLV%n*0tYb%xU4l$LqEBSLCu;WYSSS)4;WV=lm*TAOp9>YF% zsH+0;1vr{;@5!;uB#+g-gfx^1SSl++dB+xRy5;tj|ZX=pvlD zH9E(%^xp~(8~f`Hv_tY49>_hCCwE*5@}iHt#Y<9eGz zE3_T~xQzbVD_uCU2pJutaWj2Gk|8BH8ou@;q<0)Kx*ZK0a^ra9r>he>_CUSQR3|hy zeOSGChvI62CxQ{v7>_j`VcKynp*q3TsO$Z&S?4u^Nwamr3jEoxUpZn6%IUjT+gz2jfS}vDN7{Y`k z&e}w;4=yAs3lCX*tCzH0i$<;5#3#`$!3_|bg9h**(g4$B`s9c z)YYFW5#9b5#MrcO1JOD+DU4UMq`Oe|$gG_}mkL1!=f2-5YwM*7FDyi=-Zz+Si#O(a zU_f;6XU2>#2Hlm^nF3sEW8r%)E-o3m&o3kM+@`DFX;mzT6u1Wn8+t6&TG^|TQ;Ik8 zmg=WR@Or_P?Yd1QCn%Zqo2F^4#s{K-M=G_Q69fQ{ZFMogOv`i4z;x!X^$T{~m1nsA zXOz)p(5WcDLxF3ow>39a&mJSbP$tM{x3)Zw>{Z=GL>~Y2bx-T}d0;DnS*=_+#ifF2 zEvYA`Hthk@F-f%tA>t7_rUESb-a?r@R>wokiD`sD*#wuGbf;-L;Y@m-N(nl``W_}8 zRZ>z4wDzrc7SfHW1O7aP+Oub@b<94Pc4Cnap6p88Zgj|%lJk@EowoGsX4im1N0<~% zb?i|1QB=ynlvR`Izm=45W;J`YMu``>XLl5Fro>4o#l1&lLaT}NVCX7)USmT&>M6^lGwR=_`Eh2Z>48>jB#<8xl&Cyix5fXZgg9h z&zkaar3&lweQA4IuuPa07gO-GB*55Aof5M&Uux2Ao-(ZCu~c%wrrY*2x}Kw_m!~ks zb!*93(C9p~{#o)}$2wzbYDAG&`NiE((-f~)PQVhMac>XNGAwp3+bJ$M84|Fu z!pRb0q=U}j@UqlQZ@4<#C)S1rI{by~y3%(j;@9@yqeN}@84 zc3F9+F~X3-VNYMjZG35^-r>i${N^%Cekd4pmYjOdf;_Ja)m`}&S22_rY11>&?nEKh z&6G8qS;M+9f64!}R3c()jL)sy^@E6uVLC1E%J?c{DJF1$u7`toX9lsI)|cK)uIJb; zyZPL%fLM|)2!qU$)a%w@RcR2}Mr#i*mp!I8T>CL`ZmKD-MFANk_lWXWIsdoWBtj1V z1#)X@=!>bJ=O+@ieSdp9MOmM=&iaRDfmAMY)7;D^-7##-y^ zwiE8{k^cs61km!8H2AsG8#+CCcLy03(E%)hx6f}aRymHKD#BVMQDv*0Gj_LKhLEMJ zk;6kDjMusW)@w*&GxCQ}_>x6K?v=SUN;0Htg#}kA$V>2PZgj9e{!X@9_E4u_NtRmY zbJFLf>6Z$Vn)KhzNt)?IYuT#8;#%T^q#`_@jD^(Bdn2)!snu|X#?;MF4MTS;thJKV zJE;|<(VxM`bMuR?9+E)5m?6kt;+OZy&Mfm*mCZSXmz^}MADfEutK{gBl(qcyf|^&D zAbkg!<<;F#m08%CM`4Q`TN17OAZVwuvx(RlxW|%!zF>Q|Z*Wketqj?t*D1Zd6qF2< z>-NMrLD@k(uD}C*j7NCwEV;3e`dzt0KP~nl?#eisRH^Bb7GJcco=rji*Hd)kf^nhx zPrm2>dRiVd+IXGwgEF2Hg<-82AKeIRBPSc_U2_nx-BIMrQ!3C*aL0St9re|S<%^|u ze9|I1X8W3f%V2>dEJfIao%qt_*J^A%IZTaT3A{KomBXZhdj0J+(7N|MtLZ{H!MKt`+L5?0XscGXV0M)xFP)N!B5}gUv z>#Ro&iSv|9Hf|Pl*cDCm-_@0{;xF9fQrsm z+9`@J!J!AVl#%#=4p?1BGqhY}8s^q&k>U_bvr>+bOJ znEnY!IXAc&)!W>sJ%;gs-e^=bJZ%%mbRHtD~P+*!d`)O~S8!uy&L*Qp10l&trRKD#&Zgv)%rPlBt|+g4}d5?-$hi$vdB_cqEyTpcy|D^Ifo)&k|UA6r5Jq!!j9RG zq{2V5o!J{-Rv3mNdwzh3&w4_*-xUk*!h{E|F<>(663k=V%pf6z%2N4_1f6f?=>>ji z!*58aEb-X6DHbH7mQ%i27$Q@(63h_OC!^6~J9cls-um3gSDIdd&Mxu-INP|%_9NC4 zT#PBMQwd>-X_@FdF~Vj|+NG_YJ5fLK%#%n(w57djMzBCI)?Q0|M9&y8DTe8L*!Mpi z4d}G5XB^nc_t?R@b`>pf_p(#4KgRb1VM{}(GPc^LOi}5Z>4fdJ)fGy%mL!j8=y*n=o{~iLss$%h+m_p9ZqJ+_^ylNBl9cLy z)+)L4Gd77gr{=8XYu3G2osmD{S=(bsh_vZ z5bFJgva8q_Prf?2{5Hrl-?=O;4V86QCuqUgpGQ+%>W`deM$U9q}!1eVo=jPKv{+WoTlc3_gzWd1&)NyCvP|;GBp~@E&>1@B;ox2_H2?R>fy56^RX?O=SY?*SS zf{pWOa=0wD;M+@|r-yANTKJx(oKuw$*x^l;bl$N*Z?t;$Aare{EAFKg-uv;YUZ4(T zr6F98bn&q3gBc#J+ly%Q#+qoEqYEixbgc>6ukqoJMLt73 z7W;Vxu8iO_lBCg1XgY=T&$ ze<6BG;ON*WNVrQTe+?s6BYMlsF58?boj1;+*%E*Ou*bb12)xX0aH zS2rP46}1rMsIF`A=|w83CR*F8xhz|qdWPbKw$s-}Uzb6lZfSSEeyhTtum#Df^N4lX zlF_w+drciynpt-@01y|}qwmnXrKU*~I^r@5rjDBmHwp4@w%0MH){KeeOuMGX9nw4& zW+YV(DhpIiFvyqD7apznu4fkI7}oD+ly{j?DFd=Fj7}_MV(@S}R6Y7-M4{b^D~A)8B8k)~k=!qU;E-Jav()gG@eDCbain+W%a zAeh!)qIrFCQw<=;A!4G^b?N#Dg83Wdz<+ZBF#)g@83&;&-W)30T z8J*Wf)Ys)UEJBrqe_VbsVA0}q<|y%r)zxo_SGSdoKbxoSmE9&PRPIKI&>CEdOY|O# z%%so!K(<=iR7dq!TOREaK04|j)9#m8FeT*&>Y`1>1~mtoD#=Wz!1Gbi!>Q@{={eX~ zO|!_bgn`4HlL_&iGorsL9j7gmP;O0zz4@66GaxL86ffHN+VIwGWn9A$=4C!uK00U? zY13KSYlJ}k61B}J=vj3f+L%a?rJjm<9p>Q!c9|44Mk zrtrrVgT-o+PA^QaSHg%^xsH9aC^d7hO9jl>Z;^XVK3C?V%ObPyTD1BF`Gr89J;*-R z5%-jgH>92f#0NQn6F3Jp45Y8i@s}4bCQ!x$G*hTkHM2wvzUC042nt=~(QUp`A62Br zx+rmE=z~}r>o};AtwFMOLrM3+3!l8ok-P5p&DztO7dBaRE^((w?*!O+n23#TnkUZK zeG!-|9rlD*C7aF3?O;8Wq~Wc#mer+llnPQX#Q2nEXg6u{4Hk!&ggN7_F~bw-+>Pq( z6JL5NUWqYeO`!h)6_Ky5OTLV zUEznC*_enK7AN6SgyS~tLM#W7Qvv`^1GYlNo*k-Zh#pZ_>lZfw$wm@TQas*j4XX$q zDShYnwTpmO_J>6;kd0f&S!@&xFa*Ba@{CUR{d81v^x;S$j;h2mxdf{U#%jekIbM&K z(Y**MU{hk01kDHE*%l*v-9#M#!z5HA>}AB(zKnLDDqPe{R&yIWG7!;Gyoiy8{K2&W z)Q6N%QypxkFX1b?_q{S;ND|9zBaFGREI=R9O{V7OTdHg0gRTq9ic*@!>s)dr9yV%? zjvAh@D6(KfO^JkN&SwUPoe$xh5hgR(grIqACJNo5tAtKJDUotm@rf{CHZR#qMh&DVp> zT!hqed(b$1*r|801HhhA2rZG;k0B!%TER_s71ef>@jwKCo-INTC<^t%f3AJc&0LA- z3o`a9u2ge1+fYS;>S+M|)1~WLQ5x40*@N1YxtUFX(>Y>DMLs*UTo=zZHtiI2XjM?>?1qPa>2b zH)#>16GA$z4Ob%W?|_w2PRM(QpoQO}cl-q82hq#xw)tO}#Jv`uxjm+0o;hE!UQ6kt z`7;f@P}z{1zUHZN0G{$(i4_Obp#k-&J?rjP0S6@Xu3RU4}bh&$FXz{9r_VH(Y!r}VkQy+`Y9 zF3k|uMt~C5G1kXt*{eL7aC+(bLE6qUqb_E9wZ7juJ|HtQQ?Axc$7_eXu_MAdBP394 zIucl-Ee-T&%={gYhiTqL*rSlo@;YUu(e~&mq{!!RR%8-vzL^P!MzCch$Ai!9yW+C& zD42=T#BZ&W-*fCtXNfuu<-`lw;0eWqa_*U>)HiH_vIBRed+wUkgndtw8QdzH&!ijx zyBupaTo$vB;lwm%3CUp0=Gc!_l*X3hmGq~T#?NHr9SAWXS@tt-*<}37A&^Ur zoK#nGtwY8)2`*AZ%P<+ghFnIUcT!KV9STtp7IJC%c@0&2BeY=&)KZRhkB)`v6xF2u zJ{v@!5B0&PW#l4`Cu`5r?nSpdWS5qT*P5(q>X?RHGpT#C8d_Aw%7cZY&F(m9RDF)N z+Td)=?dmoljWd3P8BnOkXykm$%|1u0$O`4hio>p^9s{9n$c!f~Dex`o6d_nn0Gitbe_4J<<7qnXuOH^o zclavSjdS!2dKnONg##VRB7@pIc8efOZ)c;{|AqZ#6k)F)e-dFp3FiY1`ZS|uC|gyG z-= zLao?LDt%+_wdo(4-}&~Z-eu_gLWuQC?F^elm&2_C2+zBcD$FRF7u3@A-^M!mt3O&j zuGo~dznsdj(_uAQ`>{DXHI)>T*=?D>lqiBI*46(WnM!9!M4n94cTn&NoXuC>xCW1O7t0q$56jxa$glIMld{_F=z;J*!n4Eho3 zj>~}dfiH_UjsNJJ1@}K1{z*L95GRw7_63XG%LV$$?kWN@AV!);do)N%3bEn>lRroJh2=KB5wr*Ib^ek8onz(Pj z%vx6$y3#D7n&n!{B{x`~#pLWd4GckRtNDZP*-uFJ+|<}nywkg-zjC0;lU69|+~Fp! z=v5*Km0s?W0h_Uia_b>e_sHtLompB(YyCOK(CZd3_f%F%PEMO?TBOyd4*gs3;Uziy zna#-i%nyzgP@VAcgY+1X=5R(@Zj6PgieP3ZEEmdAuLp00g%==0vOI;N;4Q_w?q4?* zw442rQh;~bZn?|u$QF7atR5H=V_<_om+|%A?rFM7JRhLj;fwi`asG)IGSQ2eB~{et zw5(!bkb)zcA~9Mw7MoqP`<&&4$#(oo#;25LS1Q?DGS-t{eMUSH>ld0iDbFbAXxXuc zZtc^*9|Ad#B}1$RUWsl33;HlRRlA9E>rz`HE`@}X>Wqp`4;`cyrN>jg+F^;UxWQ(v z`+@J)Q8-`|whJ?TyX3!m!P0XZ7v8#X@9STEV-1)2Z7QpT7 z2ycqL0;b=Dpnx>~^8rm_o$yzW#k;!)&W?b{2dcg5ep@scdyGaG+rH!09qXZkh=ZZ} zfAdbU_-InMi5yoO*fZS1mD|hMCPDz#fIrE*U$o&^=-qyRs~)OT(3F*ft){h2{<|MA zTpK6j*u!l;AcJzIZ0hCDDcrh)7QF+Fa?sA_4S|uQ1MmHEjnx7y8MQC#4++2gB`9F( z-DaxmfVmq7&oUew9#+9aHc4o3c1f{6b{!{>(X`kVBBiqbU+YV349IOTy)xJ%MeJ$Z zx+AxK@0hS_Y~%&y)0+&!QpYKFS{}03skHw_emEGa*7ntW@U2Sr12XOF;Dc5V@HKx9 zAjoTEx7gll|5xja4+V&Y{0V#?Xvf4?tAiG8S2Za6WGzs%VAUrh@ zLJpdGPWtA1?D1DHw?D=1`9nGJt(bf6J69F_#YZ@}FOMbj0W-6Z1K0k9Vz=hmw)4lS z^7qV+xqv3`7blwoUwmJ;{Ah{XZ=*J}KBLj3{`L!4KEt zOWTt;Y3&$qWUEe<0zF(7kxV+zL-+`6A$D6yl&lA{(uANmo z!rphcP77p;wlv>7#qgLA?M{2VUn`Qh33N-yNS-$ic%``8eaIf^y>yIx$KL3_2W)OM zN;&I@YDyvAGe_0}OLU(*pmRu>*dfpVxHq`FqCI-;j~!1j`Hh?_x|pUh2b5Si_t}!S047Q+tB z!yc;$h>=X_c>fg@)7Bs6n!*sW5w1o7d8R0{A^i>h&$;)xw`?z}t!rxyv(byyGjDG~ zuZsyl+c+0|7&xVic)Fz#k7<5>+Gb*{joI{TEB(skAeQi7vo836TQ;_vw!DL6j|Z`PGo=9Ky`aqi0ZF-)PMAGn^ea$0 zlKODKew~X|>7mgf-7R0x$9NDsaowHRd;mj21Kz(kJ5(bIS1x|z{6Q*24}2)Y6WGUg ze}Zh_DO@ln%5Ff(30(phu|{Pr_`Xd5_i1`yarddiQZ9Zq2(~3m*D%(RSyO`A>`M?i z2&ucVWsPrDB$jGCib1029v6=+B0UXd&dD%hA9iZ+01JQ{|6tkKQ53D&ap6u&;=jGe z=K~}%{|GsZHwgq*PaWfEEWs;XN%9R}3Dr^5`I6rfqF}0$*QWaP4ODbSdyx(@;vJVekxgt}tx(#MGTm;_0= zPxH<w%EGolC2kFNc1&4V#s%&7AzRZrApBXOl*7qq&YYGt~WX5BK&uRwu9dsK3y@HCVQ; z#v*l}J~evu@QHI=QLeGDW{SY+Kya=m)NO~S3!1N}*p*)ib&VRm zT=`o2r=ye>@Es3y5xWxp6x`}Fxn?aNyF7~zO7pxS-|6c&Nye99R9fX0pw_=^}y5`((D6AKhYA&{L`JR zkL}n~;Dl-){m`!)YjQLF({{Iw-mq*Ga5~T8=|9D8qv0ZdR}7JPOIh*h>T9PCq{HVf ziRi9Rs(UB)8gnQaz3!Av!XXqKtnPp5G}Xfbi=uyb0OluF;;p4hF!zuHZ{O!-#32{3 zzphmBO62|?b?r3n99Qhb(aH!{iG#1yOf$U0f_Q&$4R@vH7=ia&FbRXTfvO*gw6@rP z)#ojdqnu69x!E_Hk9HxIL(Si&6bo+v-W^Cv1|JQC6)t6n*RkQl`LW(zyHz+AD^32N zo=@dt;89kGs2{k0ZSJ`4;PL}7-qBdWMzJRH>^0MUdUn5#eN8_3cPnwM0WdIgPm)&O zL%4`1&;2#Tp6j&Na&r&#u0~vP4ck|NV)rVO5B1XCq*!<5_d4(u>+0`v9iQ_OxG0lkh~Si)<-K@o!7-KS-Ko_EFZQLq%o z-YcL2o^q-(5SBYW<>@QG4kZdZvaTAipif0)!}|3g3;#i?ecywB3G3O3IPd$z(8oCP z|MjpB1u*e)O5=FPr&KENo;kigu#ubT%flut^a_>s#~%dx_1GrCg%#v!bG9G$ZmsZ1 zIp22jzaECBVnISUfqo3w&UK(ev_hqB>a-bgo~#col>@e zVVv@r;)9E(s754wQ-TuFNUS3noLoC#oT`}!^^0y)oBMehFC~bS z?Bd3{Y`3!C3DRJBg_fB8GAOVmEO<$r+f>6jU?9SHjL%-4ef$yJfPwAtSSY85Zviw5wx^MN>AevG@G`y>>_V=QtI2qSLekU7JkMllE+q|wLD((>?ry}# znX=6sJf-vofQ!cZ1&2;61nP*}@|R44vv}g8?yJ2)Sbj)@{SOJ${Gtbk;)h`X`4p}nR_jm$6;b#_nPuTKS)!cn_`xkbm6LcM4{)9X zkx_aMv3{X_PT;1^At_FiYl9lyQ^6d2&%D3#>*kU9ddUo6h*R%4!8aEF`w|jh$eA_S zhMY_eJevPPTx>4#*O8}@$|d_B8=iw7Ubp(7=RP)>5p@MxcJ$K~BfuLQ zRW8T=@5@K9?81qA1akt)?Oi^i1;T^V|34Jw_~j$mDSIf|&izH*UBk{GdGoK!M;f@X z2Yi*RwGYh9PmGgvKt=3AQ~&{;OZ3nRu_1V?FAiz2_uzr?CFDD3C16IM9yRDZgT^>ChIaehPDZ_)^Fn$NW$Z_E&ZYQ>bBe zjobX#E4ix<Iz@GHygDPu zF*!Kg1=iML-vc+jSmDO+U({hCj{`qG3icW7lu_WR>0oi2kKpJi!(%$O+*V*=#pMGh zxwsB)nFzjLnY}ysK6SzEBsbHk%LPihqjB8_rEpg!T2&n;nv_?@TV@Q#k+!XHds{}^ zg4S363J$I)R_!2nfIJd6wa{><{x$h$=Q{W<$ zxh-S|n!586{aDvnJf;zWqjwEgVVx()$F2~o~J1#HTZnwBrd!W2Q~G0V@& z%%uDBqy2NqV2Nb|#MBXyUpc@64uyFVT&<*O{?k1E(UsV;IlN1+{OV6of4U$4LA_OK z^O5`FSAtF^a9@O!VA`eC>F=3VqZM1ZjaCD-b@iY?U2=PUbi+1&ZROpViZEm=3t{NVy8ct_50>S+me4mZBm&2yGjJBWj+YZ=t=vrsK)ikuM&HsvC zP+9o#s55`Qbm#-G=+0J|ZCO*K2%lyOVIHH$qR+JF;7q5gbd)W~e_7obEJ(!%`7I!I zgZO5x(S!51+PscaROyR1$?;21z?BU#i>XPPcv@NpP8y(o|BRA#nGJIFlL5Fz1>9Jo z?!gYO22ow>O3ehQO3vy=D^oB!Oe-kyn)&=s&~u6I(X*Y(vpaBg`A^{_{Uth;>_GnF zAr1}qiN83r5!JAqT#-MqcG}&R^>N9c5r0tSq9?N3p~mnL*tQHV9NurQvZ+ou&Tpr?6#@!#*-*D~$GzCwK4>-J+b<^QLS0O^SNh219>9nvLGeF!9H7GXKI|f) zAlnnu5xSU2dlnRNzN)mE|2QPSCAm49XW1%=`W6OTC^zrAHSqAg@`{7?@avF;gw>`_ zRn#M-fift>FRDCn$nWBw`unb{d*F_%2sDhJRWjUdrRjS~<_tN_+e&b)gcZ_ct;<(B zU$JC6Njf7Wz|rIdmFDeX>6LVB-9ooYKx}%S<(gS_{dydlOgHhyoaxw|X0grqjtAxs^ex{^w`c3Vh;=5ywTRgK z9GG@yj5@(xHIaaG3@AyhG1&TKY_-nR8^MYgPlM~IWv)ym>;*E`6XO7^KomxTUdy*b zQ6(9@ppvJc-0YJa-i7uFLVc@{O`Dn}vk4SOjG%}tjN;Ad9z(>qZ+Rpt{z-sTuZO+u zc3)i_cc$d*DYjVSH{z$`q;mqL-V4AwgDwA z{+2BtuVei0bp<%Y#k3dUP}S+j{_EWK!^lcCu(?mq0cHm6!1E&?dvV_Iw)kAW32n>h z$@Acvll;wj*k?uF@@u=vLLfdYyEQj6Wupw1?XpHgNec#pAv=FeImj-KRE`EoM@KZ* z=-L*K#WetI7rVo&m)erE=*K7mYf380rkqu8pPQ3`+1sW^b_Y4r@nBAdSn&1xm0*I9 zcH+}(d|Ydz+N*4!KCfnppQGi%_Yw=x65Z!H`N_8OO!tKiPTFxJkqgBW(W}jNj3H9lW7JbTY3Uz_@~f6Dk=>fjMK1mJ^^S{Q zjTF4loiSEPHA3~YpSx-EZb0AR%b|ntt`x&~<)MFYTaK6;Yp6Sj?n|}v42GY!c!R6L z#?Oiy!XNi#{)hR_Majj=leMy{UBj}Th^XFAcigLFSL+cGUoD5v> z1U1yyUOoZ6bkXZK;|Q-AOFw-}Xlg7TO4tw=Fer_FyL-_?L61JmT){+iNVZK3wtiSK zDf)>*$?unR9oP$=##`nvQrX~gj0g+y{_kN5!|~kxcKI@~XM2N6{vTiG0Z;WC_Wu&4 zA=xCOB-vz@twAAVZz6kVkAssUyJ7DVvNzdemA&@}*(-aVbN=`D80q&s&;QlyRp|JR zdtCQ*U-$KSU)dUN=C3`3N`JkwsYLE2Kke0xsU{TreSVidV~-mwyo!?t`~2=%c?(^<6m_Xi2%q(^NZ z&)r^Qd?F`pgh>TKFiQQgQy@|GI#>x3=QB#UYnwh}2j9r@b~o|Z7>y3mGVe!2op#w6 zzo!`TMWn^PA)I&{{sf{9$ho*FgA~Drc&gg8FNX6Ud|9R11F@S~z?r$~V+VjmNNRQ2 z?X*(0ot<@R7fnk&C+j0Nui=K+D5@27cH@stC#;fwEf^@cYxs=0Hec7BGT| zG3f=dK9b8Tln#){I4XG6l72{Vw>>b?AQr}rm}GVP`E;Ifx_6080_JEc=C06J!xfK; zG%d9%24?~jf3iYyTlhI(FA6nG0HSHV+Kx(aA$VQY5J=3dHRYL`O@|NXM1k%1bncFb>3~ry$BQ`)k zxN#*J1ie-S#M!M)fRg&!m8{=HXC3eD|EccaRo}+XSHlDirNtIufea=87WL$M)OxAC5dm>N* zh-35f>X)dR4H5u`MuA?R@zEcGPa|}K*{$v-Vt+!;iMCsMBp|P{Gn$9uE=764*yoc) zHcmgnyOL4b;WHb(tV|a>TmV5<0Ij7=F;nmlNNSP>@t(1fDy>~v!IF%-f*)-CP$i=X zsl}ku#eo-o9dD8M}EmB@|Pf`kkJNppO_8LZaM!JqNML_XUuI za<*h9gTkzWTMOoxDQr>&4Zlrn@|{iR8}fjpx+x0I`pAbfYo9diej1o7;QH-zVSI4N z(?G-{=N`mLuom6iz)iSeSiC(>)yqPhn`?*oGURS4z68G3^)#UfKROctR$p6$2nHtO67l62LtQFin0 z?ta2u{D4Gm#nkU_3NDCr zpgM3J;4AoTM<;=C)xhzgu&c%i1#y~n%*(8>*~SRFl@`9`g|)s??8mG1JJE{q6T`yn-Dj>q#$Qv@gh)*Hd-H-=M<2omIt|z7U zoY*tcPl|rD1vH$4_M_5Mf!KbCY!eR*%1(+kr~ zT*2*MeOJ+0PAA~zxd+-aHNv1|B(l-{x9}U)vd_=bSLpGbb z*`(fxa2_|!^0Jz73Fvj%$!FbATdlKdqr3VSGLiM zpyElmj1G`NO71x&o+L)MmkI;U%dm)^GQduXptOeU0WAR=IHmlj4U&P6@nn*PMIWet zPQm9eo(AVa0T7?VjO@Cr zv#+Q$!vt5nr8kKc3tEIwrR+lbnH`e6n_=;~!L0dv>_Vf>TIOJ#`XR=$l+)r*IY3d%#@-`8igqS~d36e`^Mo}_TU4Va@ix8MOJPsL8U%_@CTqV32^ z!1`P*iF6}#p}J38rb^|&j8lHy(cTN>?0s_|J3bQddlW~kiYfIxmvVevI9JSiBLU=JQ~um{`Ag8HaUTn4Nr@)y-&s zSPk#lW?zZ{enu+pe<*TN=kgs`^a)nC8cLrjNd5S7Kaz_%VNS$hw8BM|b50 zVaY0;&=W|CIG{gh)=5(Sr`D!9zc(QvL^Y*H5#>J!Y@livN7OeY{!>3d`dTm^zLg0{ z-_g{wqUq?^U9actsWZM>+xI_mIQ!DP-s`A3m!w}M)fEMhduDa&csfK#t9?I?mbXAo zA34g)TgzoU>Y_;+pq5{+bY7Xtj0C=`;F~|bljlvHkW5Nj9Jp+j=)hg5mHLaVu)@0}@>9%r0arRv^ zKu#T$JLV7Nh1=@UyVlzCMZ-36b*$SaKgJI6Ji43v>(#~0Fj#S z^ubhfQLR+9YG;4Cv4f`%X2mx2$}!BB1&};69srx!aTqnBiKnJu1@_v*5Jm zTALKC3dkvgmx-^-X1mTMCv|Z3%2$*yWXf#eBmCZ(fgHxnV11SDdlvwEyfT(*$2#pSlW#AqR~|IkZWo%)Afo}{?UZwtnDhirE2iu_ z{eho5i(_*m?B04CYm)R*i3Q~=1*s?W5{_!g)4hWun+2X@ve#VK+u_%HRv9^QUyeuZ z(q79f+bmvhu`f?8zpJOBI2c$@JObMq&PO20WA}zcc62vKfRmX7Mu<&wxBr8$yKCkp zWi0Z3Dlf9-8TP?uBD0hmi3o3X%?Ny;Xcdr9zUep}tyVE;u-7i;Y|vi|V||qibSDWC ztYu%Mhjr+dT0uI4=0Z;oU|$LWf%~=CO~i{)F&1K?@lw4ImBhaMw&(Uskk)*P9cM4nr+kdF$baO`?ETQIl`ws57^ zwR=*F)d zNWqvCYo}`EP`L{sb_7*PR!hN#au%Qlsbn%OM8qq~H+oc`y?$KV0`?cmrk9m1a+|sH zb7l+{Y7oA*Oi*;BINqUDhj3kO{Mkn+8l)K!m`QiHWN%4`6Xz<4+5*w+2k}ZGGcDI0 zy&ZcW7+7-?yA@$3yi+srYXw)!T$bWIWC0by^>(9^xn%kDeWCvNgof{!D5l#WhhjM6 zW$)N8MK#P9yY9cSIK@V(9OkaSaY;_8<`9iv>fR%06L0*_5gx<{&qKH z_O~if(NsPv&jd82QCn{QR1ZiwBGK5ZjS1TCsr#jU$xIbR69IXxBUG8DILH!ig3PUu zq`f5*O3pgv@si5Viw%?m z96iWI^PjjprZGkWPPQ>ko(Ldvod<*soe&w=Z9rnU_+_zRv>abwBeX?uI*PDL@oHTr zh5gWVC@|;P?4l@D9^B!!U+=aKLNo%1rcT&J&w=^#PmrUiJ-4SOEr8Ep$5hwdJ-j7U zwo<0?=*=i<$-Y)Ub_3FA2<~O)g5|x|xJ_>qu_>_vQ+t%4v#GSu>&$u46e6eEfK^L$ zV_@}9HEvRT0RQI#p{_cAo{=`Sg!*}fOeX~km0`u#fq_8cZcE$U%vK6Ou$?R=E?KH< zHS-?0{O@|hVpCAQ(O#6sf_sbsfiHFdCP_R={#9v4##~vNTV}u)iodjyI+nP@^LSwS zS1-s5!5Ejf{rpbBxryIq(cO>Tb*Bbemmby5HL**`^i=E0JG^a|ACg8~O375(L-cSd0-|v>nwqhC-uVyWjwF(+l756`PL+y<+e(FJ< znZr@E1hnDa%OtvHgbhT&c7tZUfJl%b0qFr`n||}A;}ZiMoak&W*!lRpOa02zw~O3c z&ZJyA->hSh)&J7UI+40x!TL z-6v=(AoC0W3DIZa*r%pi!Xs~7`l|JrpGr$wJIF#w6O#U;-6u$q204hqAL=TWi|1QT zpCeY!T490`{}}*$ny$uHH$;9tS(#)oTMP5fv#m*1Elx$8P>$Ap*L40@*>`y^tS%O< z0knmb;LaD9;TgSfz0hQ0FA=8TvNQu?8NJ-G<**`R5yfjwK;)r99GOqsn6ekhzxp^m z4OIsuk8+GY%h>}jeVNZ91XENei~XSuw!lW0oGmRqbNMztY;)dzseErK58~)4d zwgO#mqBrok>rH7XnLK@VvCFsT&*#ile?v}}gRS2lN%y7_ke}rBYC0!SMZxTLe<~;? zY?V%zmA+ewEO@*=$P4WqA^d=~wxfq^+7N_{`Ni{LKjg3U+W z6~kh)bK&ndwkM=78JdIieJUAZEcVXnabM?(i}biD486=f?G=3iwBNrnrJfaOWUaXG z1R$w+PcJFA2rZYcr)nWm6e*`gACp{HdFBA|t#kwLCH7HdX#&CB8fY5&-79>MQUy?9 zmR;)kOzKxvl=I8V0g%}!*W#Jka-F!a1B8_fbX(9h0$~S%nJw+bvMs^-tV`|C2_CnB5@ru%m&rjH+WMXX)F& zhr^nu4-exZ&%%=)oQmEGG6oJrOeNT{e-z?1FSG4^3K49fppUGJL1(M0ogCzVbu@+Z zB!vxILwHdrI-L$}!GC#Fbme*Y>pv+2{#s-YYMi9}-8pf{+3;D`aoP+wkX7Fciw~57 zeEs6(5ohPt#q-PnSqCZEI@LxjOrU*z0J5hL?7RdAryn;BdA~FCZ5|y>Ds?po)esCK z*05$W}y#ywse!U-J#f>Iwo0Sd$4)6(I!M@(bU}60h=92 z=Qpx8GQ|<3Kpgi~Yx0k$}=#cC&(uL*)r5of)iEuuTOR{2chxu8c?tgb7*grn6& z9QhDaYki6*GfXFB^mFj8l~%k|b`1gzWQU^uZmqRNXvsTrtMy0f3l-h@{kZ?+T(gOv zP6EetadKdr8SOOfA1QqC;x#~n1pG0Lu-0Ag<+nbkenaTj#e(?^qd~I*DF}TrVA3kk z*;~HbZS%911oz&DT`?Se6|NV`MhR1aRDNdzg^=I!kR`nmjjV;Hsz8FbY7%StePy<0 z*_8+O>x`Oc@SN|2>~3t|qPro<}G46-%=T_(hCr_HMah|@V{ z7E)Ldtt4wQS%xNy`MpvANMf7K_jv_-~0V; z9Y|PG+dq{q0B)(lZk38bfmdg|l>%bqD*%4H8BHIFRj_54*l)0+6-lz=F|@5j_=92lks z@s5&&*1}6&vO+=Fu#jFq1hH=*B+=fZZHvo0vo;F}d^I77AVb9(ZNmD#b*q9VIZ6|- znoQ0`yirym_E$)yu&ji4`{R|@**~GMs(DYZ&-AFWK#o@1wCADU9soC5#a3$xEo7|+ zi<7Fj*ek_);Mjd0fyARN_qIy&e%-&Az?1$b@oav|BhZHqw(-+kOOCl&Ecy{<#Xsw2 zv#QHu0PZHr2CP;IfQ`aayHJ8nuB5h+KKt&$Whq?F9rKKCrOXzmNFg`Z*6y?;%cqCW zM*Mdbk)r`eGgs}EXoch8!g#0B@;VxD0s=B-d{Jvcvw%(mbA1VXe89Zo)7%`I*Ui4# zExXPo)l%#{I0V}g=m7CRl3M>zyda3z^<`La_5A?ZMz8mGNXDLR{H;mZS+sgp|IMIj ziJ2$@D<_)bj);UX_Yxh_UNn{aW@Wn#BlpzIhB@LTJ-cJ;1W#^{juI%f)u9vg?|rKN zH50w6sbWqKv|nIQ?L1zKd;X32(I31|^4j1t{#MeVnaoC!{^C01jC0cK;WDHl>B zl0tz@+-mVF8OImFjb!O0Ilyp1jE7c;quEEfv8WqbsHsBx#E(+E_aI_9IOy36C_=gB zacL*3r{3OsJXuD>G3A3;QKqu(;*kq`sHUQ5pM5(ExD_lISC5X)kIo1|?Jc42<5WWz zv*#2{38>rfF_tym5d75MY`6UX^zx1DwAjpi(vpIZj{NJlr2;E&Hm00@U@GQ_$%98| zmR04M&9^YQrnNopUaZmSgtCU}@1c=4~IN7vqP&UC09Nn1g4O&#dRP}-tjQ2Lk!4}ZQ*4`B~VA{_u+uA;w z+kUniuSa_C(uLesv8+P*b-$Ac(Q}N(B37oRa2~S48D70WrKxnMSdm{GpT8a zMPADfthl&Opx{<*Jc6MaQnIJw_Lgv6JcO2h6+FJgT+Zv{Z`$CcK(LUcwWfB-J6Z1}SM6RM-rBg|W3l?srB zizC8v67n{!9hvQXeW9t?aq4wJrWFPa(Ob*Uf|$xL-akTX6?uS0*9_G}r+aYrN24cK? zzu!HOa}kr{A7{D$)t6=WS@HGbB%w ze{y_tT~kMK;Ck>@Eps7~mqPvgwRr#WpzmM$3U9ToV1Tr+<8TP{1xPlR{El66YwRk- zHiAFD_^|Ct)zjA)H0Pg>gD7XhUDlRNEGCs}Mx_s!Do>^YrY*} zc$=wO!%;VGL;Hjz?8O^weiJH_s@VaP&~e?~a-ju;lj(%AOk9z1MQ(uB$)pa0ztJT1)zJnl-#asYGO&-F{#)b ztlML6&}a#J)Qa>@TAqVe&6X>X8N|wL-nF7TR+B>H!V^o<8Q=z@OI!lqCYYb@KD_FC zkO)Rd5W{rRb7VtiuCTq2t>SsboV1mnPyWa^bE+5xdM zGKY!L2Y_z%`~;lEC>bU|Yd7C8leeWBjKJVgD_|G3*3v_B8AWh?kAQDrHlJnw^PJLLm zx1X$+n8&kkk$tHXQbWu-6`Bt23&0{w%Fs8jDR=2DY)Z5@w zk;W$4Dw;6~(o?BTU*%iY(u>wp0T_u|($AV*fwY@)Kv)gbkPrUn8rtScvtV4oGLKd$ z<`qM7R0Q zn72UPHmT#`5Wu0^Pru8)%a&dMge>9)LURfUG>i(Nm$2E-mST zjqL^!d*DUqQwSX#4#6*;S)qyMz>SeUNA=Qh(dD$F|94Se?3w>f{(MafJ|cakzEI;J zFB8;S$jM-;m6eCKBprdSE>?h9MU{ZNlp~=E_9DIyp7yRFl=zmu$rX>)MMBZ7NaHHy zklnoKV+sE=;n))|J!1)8+NMiY z*EYPPF$L!)Yy&Y|Fxq5Tz@3YhlG>rwcoB28%?Q2(PPKs7yITQ{P!hLW(ztq68A0g` zC!=Z{9`R+T-eP)vv)XLIV8$d-0Hax_FMOb#htcxCDSnxm+qyf-I*ZN|g@Gy?=gqVr zIUlLFa8GbThLJ{c3BF-1{&RVzXEEscn6Ryp46x`vy4eqhUA+61f+vn38`=$+C+oj~ z0-aDSL;9&19>}p~#+z|~Gks5Kz!y1@s! zh&z5?@c&Td)c=8Z0H64uDuDFsY@o<-PxAve6$g_`&sZbQH$`nb_bqfZoR~(?wc)GS zq>$_ux|8;OOi>D*r;jZ-5A+QuRlFw~U0C}rI4mE#oqQ}41~*((nf`q-^h+Ho=-{s4yI}}15|Nmj9Y3qR2Bbeu-O^1>b2Dvp7XF{;DQ(lm$G;L+FIf; zsvW!9;&7n)WKiqmeF3M7Jh=U=s6Tp-ZxBKK6<3R8bEGj9jvE3mjz2Q`-ld|}Qt%hU z_4j~oexMPjB?z14%NDm2!#T=S22zv7c#RMz#0UD2Z57H!OG+aC4?;ATmWM~U^KJgs{{nx3 z2L8-b*^Kl1<)u0Bj#zR{KNtiheGyV>yKX;>D|V}_S7Nf35S5O3RGguR((Nn5vN!}6 zys!zG1{08HSJvuY+NAKj{biKb_}ERe-u}7&dMh?fnddIl-!ivO>;Cl$K~2#6Y00^< ze;Dg4asu>jk}wF$FbcXaez8U2sw^rAIk1cn^psKE4czpY3g=OJRfW$=vt!{8D&GQ7 z&?yt+A&p@4K!FBEHRdI>8mkV{qL~M!_qTb2wOsV-i~Om_M~MKWzQQGEm37H-Pn0MH zzY9#<<`u&p3Bd4uVE{jh1#pDp2Vcw)x8cA!IJxz^FYL~BffJIh#KExEj|w4znP3DA zd_qyM2QEMfd<%>}tm6t`Fb^GU0c!NtD7<@Q>)Bt)?JZSda2f+vtQ7G2ie(%GZJF3P zB4OKrLObX$P=WF6$PZ%JBUMn&Gj{8?;2}UyJc}dw^kc{-oJh-vOOJ#*MXTl?0 zarUDt`fb2!PIF~UVLv`tdE5ZGotHuc8ICZ+(~HN6I9Fx};Xtl*tzG7gGR-)H^yId7 zDt7LTHXmBSZJz}Gc+L-(3E5tNUklQtc2y*i*xwJJy`QS%t(zdmCJbE--D*-KY_8BZ zGglyIYiLHl+K(+&*$21c#t=iuZC~7aCg(57Y}js%-riL+IA{0R_(nSQ@|lt3`Y;n6 z89|R-)F`n~^#p1@n{&@m$e}3y@WMwk2CQZS*01lUZI)Vm?3v#dPTO{Ga@ykTKRafj zBEU{sR;7)~hE!|fCVYM0D31IkKNaCKCoUxE18k{mn8xc?37lAoY{dH>wjiI+>wipf(!KHuxY%{~Yllk=Sjqo}tPTeeSazQ$0X-D&VgNbo z;d7uL{C?#>)rg6SludS39a~>3-}4~BI3%&1XmvDI>G0)mDFGu;G?HVlOA^^@C>2yd>f0M zj_4L;bHvCv;o%+(5~zlE-UmplyyRJa)WP5d{a|) z+7?%IHdOl#x^ohr?LZp+_dU`6L0k>!0sK+*2PcLW2}cfw=) z``m|*KyVA3mawVfpnv)Q211Z#fWh%icJ8F)?tcIw62Q|3Z}tSZX#cBJ01f+h`~aFd zB*$%x?vREW0)W=hjP;YlI%zqjc@^O#s z0I=>yGzf?U5zPQlO#goPU<(5O4-EngmCA?b4NoY7p@)?826vS0*Z7~LvqLNz^dUbl z;riFg&;|mR6>KiSgt1;fxo;&?zFPJolh2uYtxaE{4uXvif`H@^RA?k<`OL~t|iU!fn^O1KNp z-cLJCBM*)E%XoJ|#i=^Zj<9^9#;~hae|cf>C-|0-!-Kvj=q7;Ra0~Q@Jfa8Z53YTp zdk&wc%?^zDf)YKbXfnv*2bmpC6K7~{Qv`C0THaFt{%2bqM)7}mMc9&gm0e!S1OoS= zRWj}YrXBFn*!^ulQ8m)e9jW6yIBK@9?jC<{DGEwbU%ehS2YzCR1s8?ARgur;MuDqo-xhvqUqE?;G7q!_1Y$AwZ z8J;M@axl^=Dz#~v9;B({>f-2AZnBuCf3HG{e4(JQ5fI@Y)(whWX#no zsq!>;NTJ*M3h(jUkryV)%^Gk6w6cE(S>26a=xUQdcn%!2Q3@C^WR;|tI=2*=nj=UV zejD4xyaX5FB(nVX_aLEnWk{EFb-ILolA9g&iDq&%v|)K@t2n5U~h&gT}pl zNu!vF_ba*nc{uPq$41f+54^7L5ccrFVv6~HL?SG8pybAh6or4D=D#eKcVI5OJj;sN zzyOY(|1&b7a0a^df&l(ap=HnbFyK*Xh!u6*frkSIn*4+JL8ySZ@Cn_?M{g^}aQcVx z;SF#(PhY2SpZC+O4F5lGd4<#yOb61(DTn4Rohi=ZfBA400T?jR4!!%{UqQg0qj3iKA6G#5Nr z)9b5;t$$!y{!2QD1{F)^N}bJX{`1Tyx{*wq?&meu6QM>*OzAF=Phw!elt`{9^OXv&sa#m;Ddz z1q}(?8Ry^nN1l!+p$r7ygL;PT6X=5TlV;I%Sjy?vtm}}mfYt!OoDk`$Aul=H92|7e zSrSWtS$z+M5k7Y(+F~i2IZfCc0IMY3-KkA5WVr6xVq}12?|3Ml#z=sQyY6l#at@th zBu#7$i)ktQwLh?0S&d68q3hv9H(0hD{$6#V5QY4CM-X7_v>MkrDbKEqKDY?axrm+9 z;OganV3asXERRgt5wwAzs}~z@_0QP;TIc#~FfQCVkqrE?eYAAAfLA5V*JRW7gg$WO>Owk|)2sC;nZ z=@qa?&*W+x#R3kT4{p4-v5R>6wF_yVikW^~75{M%25!T^C_d;OusUml0pM+cl*!HN ziC{0QiRXbltV@J4_v1cd>e%(ji1f&yekFV?^*fGSKywToV4Vb>Zt%2bfZ@%RPm27B zh7akI4?8k1xDqs^kfB?1&DEg#suXvne?}cOn;sZLPvR}oFFuVGjL+x&!gDa^L1bMr zR#2c;NS!S0xd?zV1)$#^-j03uI4lNWD&Qw&iMgS4NdpG=M&=)*7M z7=J+?536lZ;oqGIUhjHAK2bg}|k6&Pn8dw0bFycv6j_P8+)zBux+ z;FrMyXxoRwgZ4y0Hwi0LLe-T|KBEZ6+`PvuExdZ7Bb*kitBezP6;?C;c7aI7y7U6R{IvK49bq zc9v%O;Q!xR^Nn4XF${LGAa^X!?RawSpyXQ|EtiI>`0SJ>*PF4IsLM-eR6 z?Z86Be}#=^Ho(Y?BIizyEA5*YbB9w%?r#z+7S>dAq|$shSFd_Bl=1`>M0>oqfLK`v zb!HU#LeA0Um(7V{GG}iraI^wdqToFs#;5}a(LK^)6pjxg`0UNEi9d>VNqWu7UM|XA zD>LEnTBa8HZeIK@R1<@6`eBKcYit5Oujn@-+wtvpi^=~1Nuj4VdLQlwti6dkDc5~> zVR}r4Pfz?Nz?r!O6{@ekqt$IQ7Y!Fk%_wF7qWs};nd$^V;d>x&v181ODg=_3tb-!6 zU!cNcu*@7z{_GcT)}}X4Dc0G7s>D&71JPk|;OV;+?6;PKZsQdZyYe*Y4GUe7#K(gZCt+1>OQ8AhuJm<)LTf zJ6|q7{C4H}!_MXK6cjS~p0yl|nlm{%{i1{`sQr0{1!(f@la$AWo6h>!W)to~c{0<{ z&gRe5)lh%Dgwo9Hzt@3}go3oxGo7G>TqMYm*ZQIxAjk_enalA$4Iu^Xl>6o0k z24tWdu+@*TkIBlRell)PZSkS^v&V=hx; zZ+@tFh3;OUTPYt@lRUfM0FYh0_7*~6(-Enelx#Jlh@}jhS|TO+M(5HLzNeb=a|;zf zgWWJbR6NHnVIB+Hl!CPNnyPNNYZ$B(x8kn@~-*-sDs%F<=KR&?E0e<_S`JG0EQse2ArVud>bF)-%kma z+!s~n$iNT$YC_B_ux2_D{;;;FRx;f%2_=hysUZS`^+2X~F6u%Oav}nxM<5?PSQ>Rh zA!ZXJ%}rI8fm~GrH+@tjR?40M3WePOgaTQqr|PxVkJzuj zu-UW^C@#*%u$c-VMrQr#o0Ddxd`J0hu%3VGPjaS4iNNQW;r^cMB_*!CU%x$9!Fx=! z9PAnFbRpJ|`$5L^H=+|ywMZQoc=(8Ls1yPGmN-}|lZ9zZ-=0dnYqm60G<(h7xO6ThuLN8IZG#48>3f(1&vzu$R~y9&ua%k1AB_hrqXOu^Lc_Wub(RD+^0 z>#s5$n@v`AL0yfG zKIcw2i9oF^4?WNH&aTnI%qHi8&U+bbX9m<*qGoO0C6eHpql!cmQJ8uNNuv@6t6x5_N~?cZ3`;pWlg>pKg`=+ItP$9kYwg8LC8Hz)MVfk03Iu^^a?<>nX0I2A z?MJ#l`O$~b2d!v(N@Cq1EbZWR0VZ3h;K|2Z{o5;r{bB9#W(x{R{WQ2jra)qp2t&c< z7wE8_-08+G3^r2Ruz5-pCXd*Z6-VKF8gI>`T+=E8tn zl1N?dl>olQ80Y2OWY!9u=~y=raqafC`@tU!d@8h_noaQ%cE8#p|-w&`I#Xua=EInnoQc06$Lsei~p3Y0wD*=s>gWZ(FYre#_;z&fUnxqI^@`=c);AfVV3JuxV4KC~L zVk!~{t7f4B%8MJ!U-yvbmJ2DR2UQ(|71RT!-!K$M6;u zXp<+U)7xmfxnw&a#_I=A6;m3~YkDP1Ilk!?BgH-Ig%t_>-`n#)icyQ|zWdblf*kXf zhu{mfR2VIV61gfPVsA8j6sKU7!P_MDK0Upym{~IGEJtdHiayzVXHsB#ZVPWg4ZcL4 z;;M>CE`LfJ)@#+Nhyl~|cQA>`7jag}8R|iy`JT(CV4R3ceD)?@k29n9R3RB5B{7 zzrs&pl)JyWglvF~0=2pwm?1@rroJAR1^YBzvimii5jZ7#G0uwtd>o<6y_s62=TUWT zF7dX>zg}TrUbt#lvhjG38SAvXC_UF~EwI&B9dK`omD}+p(~p+o^3?`L(?;gAUxE~_ zFqvSX++Bk93s3VtI*J7}|K0+c_r=Y@`jS)q<|RwU2%ZIl)U?tMkgAn?KdaibL4uXG z@hl>^@Qy)qL@@qiIn8$=8u}`Gy%k8ki8}vW>sEpK0C2285;O>qazneNYc2V>Li=pD z&5cX!%2iWmpXqYtyQX;4W%l?k?>S!3q)!-3$;fcLOT9G}i7K#ey;sjOJlvyZPf>`J zn7GXc7!nKPzAQN23_bfRmM4jn0_rcKHMPm>#(z2Ncj2D zEHb??$DcdJJ|?2-8>oOh5WBmXf06ZD<%eELv!)Fakw-mHFDbj5{nxCe2*)K}s0*`x zd+p&Va1MpZGr56`_hmJPu|9J$kzmdb64?I{Z`VMdG;jxGQ1h39>R$!n{@o?^7K6{d zC^X1g*M@kNZ!5of?A8s=ejG%nIaHLi>5@ zEWGt$y4%A3Wa>L*7sN)d-TGU+o)KL#TNW(G@5EGY>+dh7+`eKrN1qf%sqnQja6ovntHzxKTCPsi|7v(zqS)nI_I-bso|&Li!Fb2tGDrh^HL1bj=i?LwsxvTIk+!Ne{y~R{ryms7N8;x*Dyoc4OeP#PT@n%^ zf8s~H|4b%cvRLd3$ZV8}m2WYqFT5W5bxxGCb1JLavma=?P2AM2ad;*kakvq#%c_Y- zP{a#+6=;Y{+U+cKE{LT4DpQOhnF~w3rUfd!(3HO~PzUN?RqH!Sw)NGC5m*WCK74KP zHyQO4qePFt6`K)b+sJ6YwBF;m$JfW%{nzqe z5vCr%@Vg9F_!+y?uat*f&(EB~2&TI-RNCvm!yYeYKq1^Y!(ITiNVfueZ&IR&U#MG6 z2HVYlv$7jSYz-1f3mOSHZ(h0_-e6phbrYXwm5cEahY{xkqk%jl-XZf2Ka%EsvO5kk z4e@j8B}VyNowu18i%Lv&h{LDzML%PlBkFL>lagl4=;I5YbWFGX7>@LOWeg0a5NgOe zQANf)iNF`+M$@e6B3v5(^l7=QJR+GPAMTQG>*pM?w50pG-xFzp6-l8v&pVSl+3j#k zcgK)eKJv?!)SFl0yq_A3)4$k1orOK0OWoxAz?o`X0rOI3Q^Yz&K(NK6Jl{7AP%Ry$ z`c6;7?p96CZvS{MHrSOcH|#3tOKwrh9;*{10t&t1$L0QGyx<` zYIOGX>=dtE{!RSn%ykCfWVV_FvjZ{gNI|Uv=q9;$qEE<-r}H|cI`vz=keT1<a)$B?RGrpicv z#Q|Ug!(WLGu-=?y_ZHc)++(eXa*Mn5HMU$6xRj<uwaac5F8qA*%rSUcp7jnO^}J7vs@ad~M^;z-c`g&PRSCJFh5V_$7vuu^ zlAa${(tw+Hv;4XK0QNaYfSM)eTYu*fJp3sSsHzIiQW9JiLha|$v-NyBix9uyw=v(_ z8X+3U-YS6=dCxj=HrfF4S|A5ST3{nciw2o49HRfIXnxkfXi9G4>wB^@63DU3u=$}X z=ek#GGf~D103gtn@^se?)b;Jx4HVGdT`0I0_M<4~9obg>Ld^uLX<4ce5tBT0|rO}Fv zjdpierthgMBtPR^A*hTUYa8*Ywl4{vOS zocJw1Z0fddj3`|A7hy{RNt5B%*M{1(gCn|7FU5oBl%FD&hI2#THw7n@eF9=7ex_qfd4XE#!`u^-N$X*2d_6R3g;?{P9VN~Y0< zsDFN{qK8R5Iu+)fU-LmCc-fU?bhQaXS`Q*-Z4TwO8guA&EX0|htfB?h7OWvxhPM+4i2IQ{+XQyaT)hKp ztfht^B%xWFF>3cxR5pOR=b4y))}T4L1_ejABRD`uG^aJaLGoVOGe>wY_aZ+3Vq3At-< z7JQku1}w(=JYKeESbDDIia(umyO$tto0jNGvKdRB0L_q9qPEtG5m#-^DyD?hMS6h; z(B>8U;+2{UCRzTcFcvR3Xzte)Q!a<3|1nNYkKzCAxU%}w&xHqH) z!hj^n!?4ye^PYE<*<0%zt%*&l;ugQa-p)=%Ve*A zC9VDybq@%aOzD#(5K1l>)=72Fw5JCyN&GfRDA%&rclZ4`|pI3*S(F$NVdP+-D(?>P zhKo6TH(%j{m_;YyyFMVMl9P%TRCjo`S-(ba`J3Tp-9$kylj}!^o7$1p-o@7Xtwz?j ze<+(~*A694>lHdog(qo*OI|EfGhL}2Jo{a6=Qly;C0YR;RylzpCNQMZz3^eM-|xj# z*E$O1r(3{Yv0G7%+3_Ye3;oyM-A;-5t3$rg#Rr(F8i)YDVro-nLfrh#= zc(d$kg&8U=0fwLxJC$2dAf{@>Az+^MRR8va(zy{{f}3ooaig8L$HZ<1CRog9 z=rml!upfxw-Oy5<3=ZI5y-m_|@q$UBN*0ACBOCdM0r_dnRf0G|jM^)0O^m~R45Dgz zVEc!593~m#Vz+jSw8{m(7@&WE|F!)Fb2j;Dc(PoQs5arHPuH+sMQ&YW$`bBbLV#(# zq%703_(H`{v~eh;h&xj+rf6emoA)*nD84Zx&3eFYD0LVnZ7h7h>RsHgt0rmB#j9K$ z5THD;r~Sue9`T=&3rsmbK6|G(rS@CroXehyv_Lx0vX(dGxqy}Xj$TRW)~NGnU0_8s z<%Wm!)~+svbGHJwX`jrXOYYOBfvMJS?l4ISP58Yq@B1B|L`S>U$-`3q8~@_DD0NFZ zJoSzO{j)~tn?t#f70?w+_|SXsdZ5tI;-Pz33ekX#Hvy1SHa zq#G7QP*OSsR_X38F=$x2OOXcYuJYj=6vQeGo=f#CgViM zt$MvTXP$@ONXe+kMlwF86i?W7j1r1dF4>fOp^{H6R%A^rfTM!9R{RDn&mI*>&AV@% zxdnamf<|}Yyy%S~holGPd3sW4j&(T%jtr^?qqw~>nOX7uh_xn-fm`<5diH4T;N*t=51HaSC zDG#m@%Tf?Ke(5xpojIl;PO)UHt7F&pEoRF)gNM7b{)TkeB|Lmr-H)kWViic_6ly0^ zmXU?4?hiu$#8P-He=)coY-9xSNcfY8r6?X7{(7GQWDE}MxLU# zLlBg-)?X4+UFwE+T<9b4XG0-Jho!Ou>VL6-!s$y}>*TZ-dqRyOIBlt!+p}WbrJix! zBtOMvjXM=P-$n_=-d>t`xH+TD`DMB%m}%}f@s}26S}dJh#mmYm^U^-!ZA08gEH$Rf zt65`|<-a!lVfau{_VQz(6V>)5}OF6Ovim0_u}QHRk;WJH5`$92-sp#@pP|?bgLWyU>sp)9kO#0b`fv7~35kho0aRW%PD(><`@*!w5>Qe9 zs7G&-QoLma`&bot-X&?X#2Kh+Zt&GnFTTr*3QWOTSC^c3wtXBXbK8A)(5XE;Q>pEUzKfuvs%)v7%Nls6h zl}~PFVXKcsimlW^@V=K@WxaIx!k#86mvOiBuf^Wzwxq9OJtAujN6So_M$+K4DBX6x z6~v~rSGxAzV~b(lbu-lML%i=OCHaB;6-Wqb>|6Pjm!o7X@L$h=(#sA{#|oudGFJj|4CfG)ADd+OQx zJYfKpH7J>@>*i#q$7KmT6_atx(sG&jh+E+>kuBDKOLFcll((=kC{A6;Gy4oP+V$*i z!-6sIY5Gg$7lmu)gDPrLZ3DC8BpQbAqU!V)YHb>?^0460S0QEZI%lVIqRx8117t^& zNeuIW4OE?ol%rcJ$!Ii|PV zsmc~_eno|9ZtzmSoba=GY_7b47Tca@VQ-Xu?7jx3u5PxR$1_u@GuQQeZmZjP4SB;> zzoW=0gR9^K0w9H=;39P}1%yY%5| zJQTsa%i$0xbK!yA#r^62MH1n+dE@@bPCS?8$*U`E5BknM{T{S4wo!YW=9p=vOq$Cc ztygL)m1B?Xt~-}!+&yp2`#Hb$%bl5|qm~)^dq)vN?#gNozYi;odiUw4u@`%6?_5?~ zfs3xiC;g86iuSQ}-szLdwW3p}z2Q<+#qqEDVO>y+(*3(Xsr0%F|9YLh6~Hk^$TCx6 zUS-@~I z;$*ACqW^R03sv>!(Ad}pmvg_NmJWujRAhiJ8_YLr)rPAs@!6r|di`;MYW}mAJR(rU z8-LR7+Xo8%sp6p}l~c*aVS-0-A+>8fqgrop~Q0%I^ z;uz0km4Lg^rpao~BryuH2D#Bv?Wwo9E0AG1xh?Z+#mCk>#yh4;@WqYqUm{D_1lhcP z4XWwsJmt#JvThi4@bvXF7m$EaL&vvNVC^8BDFm`XW-HzkOJOn zQGtJOl=vg$F?10V(tEv!Id4x)Sxqk%Pa8BXDOYCJ zOT(g{+>}i#92(9agqWGPSJKa+?QkG&6lw$KMKr1$c^^mlHJn}_93N`6Dv%QFaf#M7 zy%$)tZA$&xr%QX4{c-|b1&zP>d6gLHBO7!r^2;MNU{OYichVohvR1)b-OFt7v;=)2 z%2_Vs6#;1Yz6JFoM|^UxIMq#}TPRTKe2+qk(P3Z5IiAuz3*ON}Px z$c%lD>@yH#|K;muP*~From9T#X&koYOBBSNXl$Nevz(LhDbZI29C(szP(X z&JV*V>^7Pzwq*qpARZ+R%Q=nMUDb}$4c>MuJO0LJtJN)(d!1ZzSh5*4K2{k@Hg(JaQ#YX%@Z}HlELXlI`Z|(ja5*Eqyz+q z$}d-+P^W}4o$eUyQ4cASO*l`y6j$kp+i_`2avp2b1sgI?3%8U->x?KG-Yb7dVu(k{ z$u}Zh;N4AVsPti~-d(HlD(^ssR2$OlGqW1Ob_lPovtyb3CmDLapa@V@k#d8TyuO9cGH+g)m`$oIM_RDRFN4LaxJ3(5`;mT zLJmN2uFu_q+j$@H&74KTuj9j5Kw(m+WwXp$dm@A4CF8_V5PgoZY~Q}#izQ;>clGF? zqhcC1Z&{{LkB-~$=zp58Q1DC=+8Z%w^K~m!s1QGwN#Y-@Uy#}jpmK_1$Z~F@B^}p0 zcXKN7s%YVy^5~bzKx&le$Ao~m+jy7xxLYoZ4gsUKbm_q7V}T>gf(6WGf(#BrgOEA%LFJ>hX-O{pt*3;oCL|=7c^~Ebaef~Wptw;VeSI|# zu}WO*6c~2QZh*;JL`RWA#}#fMa)`6C%}z570w|mxOwO=fer@cSE@9|A#ISAus+;Q zpzg!=>QC&X2U^dM>!Qir;kQj0TGwtCJ*_QW z&~6eWS;;FcVB%)m$*X?_o@7ga7y0tq!6IHEzXH*Poh0=w&yn!cnm|A@% zQg?JU!xh5cwu#jpOCV49FqF_n0uJx;Ku!7S!%;E?_&hS)e~+eg2oH#c8>1wzV_5%P zfHWo%23k%I3G}|BxO?d_2I3>`0q@Kg-k)q$8;=CsezwXciG>l=og=U{FEN`f@a>lM zuYS68KJnciUB(2M3f=_cFlY#t!G_?uq1SxPO2N3Bm$%69{{0k>2s@W!3MYwC8yk~1 zw6W48qX0vQ9A6@b?U`0YP%cz%s=iO+Y z*QoM-9aQ>k_S#OI{z~4T{b;sp4@Z(X=39hR^9nSDdoDAx=FD+PqwO@&rlAeAoF<#z zM^Q}cUmTc#K+=hkju-Zu9+y5`MJ?s@Jm9J8YVcK{WLZxD>L2YgxX1-DqMo4)iK)si z&|nv*66!0cp4U{OrXQ^r*MS!YRJk>dAx6v?C z(V(Hw8e`6EBv>D1f=^+(x$=qDr zpxSYQPsvB+Sn|8QX`^>2hVmDrDC3WaGxC?@z@eBnTR#`{JlSk1KrYZSRtf!HqDjQ2 z>xFraez~O!Na5dWRE0+V`6Y_ck+|{}H#XHFzuOm1{-PZappIrt3Y^u=eF$wzuVe32G?9h-5|u{ZARt%SiquipRV zJd>f<^625fJQqsX1jf3^;Rmo2uB@06RrWPddB3cUO{N&2$E+5|IYe0cWs^PZt#(j4 zWihjvPnUs>j|Uu?Vd;XSBe!t?{3tF{@_4wA=SD%GzZN;1U`NnFq9-p!o1Qek6Q?v9 zKAWxa^%HDKvGuj_PK0s=PpsZQ*YqEsGGEEhH`|H(8o#B*FjCP*msr72*B>fS-lo(n zMsDQdVW26(Gv#97e)8sisc?bZnxWJYp5WQR4OKO@6y_hziz#1>?hPecj#Z%e3qGl( z2)}`6wlgll>0NaN?LjTej>D=>bdi4h@(Dcd%5Qg z#wOYRc#}c>_#o+#c_xTAZ`U1kd6uWA*;irsI-R7AvO9X&em}uwEqf*>Vzu6|-@tG) z!)FjUZS&o!@oL9Zws1-Lwr#nzq-Gy~Eo#QNg1jzJ@ITyxAaNIYnf` z25`4Z@&k@B>pEB)?~WFXZFbs!bNmIC#FP~_Zph0pp?w%Q^yO$NjUT1Ta8>NwY{RB< z8^H&~`JMcnYS)VcWa3-`sItgSI+$xMORUPXEBx?KLHlx;be{Nr9{Gcf_9y|lMApGq zQ+F0PuLs$>w@`T35>mJDSCpQw#8t0L1T%v zO^l^Ux71_=P7i>+(b(Wq;=pe&o?3-9U(7B)YmZxI;jEQBFl%>ddWsQ?mm7T_Yr5;6 z%zL>>3Ayb^pzMy(@EmlPr6X2tR-;6EjDhH0&v85`gvTHK9fNBM7O>apRJePC z0s30&U48DU87CGwXb)UTUIOtJ4OGhs9vZf<-Y%!GR>KS+x2YM`wG53nPRK6sePS+- zSqDy#6+NGEu`}%qU{0WH_On`0a%q*#`yn0e0m*GtxhjSX7s_F3(rLQBJj*71)Kc{I z(JjgqKw7c}bcRaYiMrjr2kv{-3u^_n>o2*MlU=qL+!rSIwR<-6O1ouU^O6@_Hye)E zw0=mfwbK+^Fcp@()p6;4y7wcfivQ5S0Dgt^1)h-N-N}jB<~V1c2`yuPUJxbpaP$tWQv% zc=q=~MRH=9Go~i)T*t&>6ovDyIDXM<%J7J6&(&?1RnmYOMXVh+F;wblSy)r7S_q}2 zEMz8(-I9`CE!Nh{p<>-n1QDhk^@mV@qO6f3@AIFQcgj4hR*nO>fLD#9f zdSOh2%KI}Bb$=&U7erA&a#^d&YK{SVsA(Z0;g&WFici|0oqhMp(YH(mah$r*+k&VE z);hc$8_|L!uqsorNaJoZ)uHd=x4%=;K6Ke2=$B@P;`td1qNEaByn6b!HOUq90MA#T zfA;u+R`+#1T`Pz#>oq8!G$G6NF^L#2N=(z4c&3 zRnsipP{?X=qJYhdK`7Du##;=}Tk;;ttd zfL@4q>XuWumAsJBqu3~j;-XNBM|xDf>P}DNTxuKKycCtZ;GbJIswz}YxTCWhwcwgu zTQDCFKbit-4I(5?I67{;1o*NDQK^nyr9v{CZc7PB|;V!`P=n@ z`@?$vP<`4p^zFF9ZZI#bJe~%qQ4N-Pjzv{438M81J5mwn9t0cqgg)zCgt>*ZsJ~_A zt{@663pRVJr29A?F1j&~;&YCkPCh(EzFS_Ih<`iR4zy?BwXYht7j;Ma*nzqbszZf) zg#$!qta3z}Mg|(G8RS}&#hTtrUj>TH7?~_6qHhTGa@95WcJP7*l&LBvCNB^V8szL)#$Kau4eT^y~v%=AKv=HTuwv zbA=u!f;)>tFFzgYVOa`}gG(~i)i>dn9*ZI!AZ5XSVi3Re1idx)lIp)wAjo?2nfm6X z|LPEU^cAS-tqX&U2)r^dIQ-P|2_8B&9hdo+6x!iXcc z0i}}PMgsTG>*O^tHPJ`Qx2&J^^hlGUE?=NOzwckn!`LM>rGbO&(JN&C4iEi_>9{@K z|MM2)78KA;&$tb-(n&xM+TRbzx`n9Wp9+!ZCQU@3-G1OBuzvdEtKmc?fiaiV-gChD z{Xy-d`dI(-67=;1o|s~R@NDqxXwA62|BMZYbq`AaH-7WyzHmA?0n^o2lk_<3m;YyU z=uZ!9z@WLXh~U;N+$!p!pKZliVUe3g1cBW4lUzmN{@{hmnHZ^Pl=6QBh*-pBe}u&- z{Rvvkn1^y8{h$8^q#XW>PeV@}QQ)_P)Q9Y17mq@M?}OEu60UMSe)Rj12gKrwN+a~ym*{)GKSD^oj~G1iq-82 zH9uVW=h29WD?RK$Z$iKgIn@JrM1MaVXjuj1=YNEAF*5lAwAh@DOt1WV-Jieyvq-^! zYb4NoUs3y8=r5N0{2ZN2rLm$a%?*W>c*3#9cmZ#)q%C{n^anMc4SdW zIl$fnTA&DIzDhLE|GU8u5@h93t73g3gZxLz7xE@%Vn<1rrtV~k)O%;wr#WlQ!LkIm z7HO>LL5X%p_oJm}n;z#Ln^$9=BhaPs>sBhf558lAsCB>uPuPuMuA(Q@v2Yz7&w?+v zFUC!O15Brp-JP0T^2kJkNk{YUAPk7ky-#NUQQ5^jA4-D-h^oD&^!VZBXGEXu5P8*R zy;)y>fe1%Jv4xz_p<(lhIqH3^&-srIHcrL5tt}?9?KVK1T_(_vLQf14*ixTv_R1E0xpMsbZmJ_4`vD z^|59E;)zQ@{*WcANve0mE(7FS&cm)=dsMP8d;YE zyqNprpl_CbVZ+v2Pe8FP2%JKtwP5P*?l+DDDpCkU2K^HL$lL?q2!& zLXf9QBI<#XkB_jkL4p{myx+%*Xsnyz%)~?cNS))oahtV5lN2k^4FW+;Jr4U(@h12z6(cV;A!bs$GME)RQ7$UV znoEnn+PV7|(Lpom(SP?CVy1A)uQ?-#o|peDUW78Dt#0@}@vHg>7`<(@7i5mGQ&R0Y z6{3W&b%Ic&hbS4bizb5=)UH|rod3uxx0ASZ!3&T(HvM!xh;_ZVEL2^1tLryD=QrJi z4rm%z#zh=uobG^z5zAG++HGR|CEvqDgy1Br&hE(0buIQZIpM>5fO!NWX?+aGtN-k6 z(X3$6_Z8~LoNdPrYUsC$A@4yRyaigLoPp8ErabS+)S|mW=v#gCl$|LSzlDIF4FRIj zh5?}6?fD2M_G-%ZOP{vS4|%{EuZ>ED!JuUQnR3^7l!ln{>lE!ov~}Y}&JI$|oZ_bH z(_3ycvPr<~h;Owj!kKY=&GJtH2aR2p zd%WJ5*~Md)J$+grLkZlbe~jXyIat{`EK^SxK+=PpuE|^Omc05zd{^!#cm7D3UH}t{ z-(H|38lbM0?js!OM}8}~1y6Nu&ZLK!ddBzun^9pv->$zZv=d$jQSV@>e4h`PCK}=+ zY%j~W{$c@W9LoUqnSM4i#j6A*BG=icC`O;(aCGZK{lPp)b6K5gEC0oBF|Mj*{oMUm zaqaF}DdH;SfIgQ=MK_TWJH0N=zT&AooKetvQ2vZ}y0ZjOpNFShX0IND4IpL`0~C$apH2qvhc=TVb?@=}_WW z@54dkiZuIMdVkkBNX+CPr4!AQg~V7mo*I=a3ZIhq4@AjvwEs15&?^M@vXDWk8$>>t=;tf0l-py9llo~IGWJbe{%^JSDwB2QOeV+J79 zYFTqo(^B&kCe1`N=X{dw8Co4JUCX|oQl>y7K9-Z4XX(8>J`4g%?&AjglX(T_uPfTy znW~ZT5VP+UU#zgK(hF6@7_{Y#gwGaf+(Ev~THF0(+l8T#`R=6L$E?|5FxzShmh09j z9w)_noEf_HZq**Buonz2>B#7@XCjqMM4DN7M>pGFpd$obDYAUp^>R{%l@yn}Xk|f;s`s087by_p8qZO3 zivs`|&X;9>=DJ`^p$=lyPN%!PBiE&vdo`PbYznG=yamj_O`%e-&3={@+AY%`u1k2* z^fmb7zKDy6D|21(XPA(VfZN1O(T9MH&LUW>)btt1_$UQr=K&)V+*bM-BH_IOCAm=` z1VfvKLmM@=lyA9(buYxj_!vz##4+!sBZWfdN;nKGLH{Yh)oOUS68GSE4Jkrp>h}J_ z^6TS-z|&E2Dx+&JcBQe3m3bvlBKz;r=@U*fn8)MjgbzSxt9cwrCsSe&dKfh6FdJf> z0vxI|*y6s~X|GJU!@Be{?^ieOolfOr#44Iwq5WipBnf?C!;PQ$%)tj0d85 zRG<9sog(Q%oV=e-Xkec{y~c2sT+z)(bSiT17W$CI_ym6Lv}{s!cFoz}A>LX{Uf*z* zp0u@nf72HeVNI~)%-|X7Cpd(oTnC3I@RRN*KhJ>cu*;TvgJ5Q&uc64v#$)+=>*bWEyiThsWF58JomOi; zz7hhziu`l{1+-&9>eO{V$yrB%4d~mZS4fnWXC!V!FfMFJ6kCJVE^p={_7`5J>EH~=$*qp@7yCB z-E&nSQ?KO8*d2jK?nZo}aB(P6>n)MzzPQH3eXqSz`WDnvRvs-YkN{WvJ`yR_^ZD^L z5h6h5Pw{Fd+q+0x)DzIlubxq+?B#4g>+d zpUDuICQd?!yHLCd$ilUX$v)+CmATP$Y(orhf;a?(T0UTm$BUl4b3>Epi9Tn-ABw8x2pQ{#LxbppK{ zCSy18&}MV3xFxyGKvbTwwWq;&YhWjfqq0CI@6?lYRgws=dl!U3wJJV!+jt*q)dDG9 z=Z0xPx#Eo%$GZ>tRXPrX?9j zcS;l>5)SAgA|P176}i zDEV)*s$A{^Q9r6j<`CN9>2i(nM>u@BBVL-sPc$*IDAC9{sNkNyTxeaBb-J_7I5I|v zHK?RzUP-f??Fau38Pu5tZZ$j9n3Dle8NQld54*baV7pz4X>NUZU?>itfyQL*paHT8BS$LvUk6uDuh=T18-`FqdC^lJgQ3&itDNTHr z#ueh+{2at;7xuIcv{YVwZ;vV$_*KWGq!7Cgyy2Sig)m;e08aF|OW?=GmvRl;K7pnk zQ@9EqM5;-%snK%Sw0samp=rV@z{yd0u&xjAd7h827d_TBVt9oC`9^#b_zqj*kw^97 z&%94EroDFrqP%_=5iNLG;VA`g%R05z^+?YR4R zQPJ0iIzA6507!hq`>sh_Q&W1k@fx!a@lKN8%(bnu8`E*{mNJ6I*i`lWoE#$Wj~D}# zgqA=8%N@jX-<59y(3{m&x+(joEP`B=eSUJE6Gf+JUp+PLfX>58Irj*+0=;z^6F59i zr_VEfqLKu7s|#C*j4kxI3MjpPDvSe#&|zoI8Ynf9Q?g|ODWk;7u)Qy$c|e2itVnZ3 ztA$H8m6#-ZcI&!qJ{@;%JdLtSz|8m*KfXx{3q52~qLy7*>dyqJO_RV|L&x)t1xdOG z)L$QC^3+$Zf}?sllvKNiLN>W$tr(8PzOmGq!oBPo#vv1u}5@ybjovg^<71l9G z8j6M+CK-UIEwEereWK=NdhE_JohtA9WTijg5*#0)NZE(-I;E6vw^x2Nu9PXuqQUE! z`XP>&XduQ~Gb-l`jE}g~YEquT*!_Ejp;r6emxUMP2y>#i*ue141GznF)%7W+hqus7 z^wJN-acRHGRz8=@N)dp9HR3*{^K1aX^3Iir9*|-7 z)p%EvhIjeGivtHatfG=WTeNA^^C2Wsm}xZQiu28I-~VM*US4iJoV%M!VV!FqWY(WS zJn#vf*3rc?E~sHL7d+~9VWhsH%18^=QTziy8p~lXv5Hu{{ebul@+V$ z82MpegMoaR6`LYaI})Y4_=};_pj8Wy;s=Z&?%}g9B$}olqyv<;%+1HAN)9*tt|_+v zthJv(c=L1}-QstM0}Wt*fUrWciCb9wl$o)|9Uu5xfJ`JYP!p$Z-k^(%nA*=yqgLZ% zkTX)c#jqI)(Ud%z&AguSb{@S~Ti-A}CReC*^uOU80OyNKC)b|r#qQQ%h3s5HOMu!O z;(5GRUTn~k;58*~Wf`2g4Ou&-efhy;QBP0Jl(?P72OfWg8Q51c(0NvX_S!wjqqb8# za(k_L%?zSWIz{68TFDiU2xGkvzN5vckLY|vBau3;l|+rr$+8AvfVga);B|n#Wa@#I zb00u{KqL224U;6ZUB}Zkp!?nO{K?!ez6Kt=j`=X6TR^6u7E;eo>!Sk9p^;QP@ z*B33J=}ZMxeX;_lJ3~H+dgI%IN;8s}%qU#Pse>GROfd~SOlbAz>~J39RmS=C7YXqy zt%nQ%pTSX%fXmQ2#x%sp!g(vB9tcSB))Mu=BCLHFqJORaf%rkFBTA!kcU$wBNQYm_ z(imH*wUdSO&arGZKeDA|QB16OOijzYRDCVIlB=YcLnv42c-e--rumfsO~AX5)Xy5U z)5#OJnGPRqn;(M0!i6z|BQ=_&2v}STTl4YfjbCZbqBfgXY)qp$l59^lhuCeY z$lVt2I8}HzTzHu@Sc7mt$*4G-zf=|<0a`a0^q1CEnxpxspgrmX4c(^PpR%DLwi|^# z)I(_EEP7`yaRjlJ1(glPm!s%V$s#4<-P!t!BZ^G-?rsfGph6#$5!4S9&9hEro4&DP z9BaLS^^Es(lml1rgKzAgs86|&=fdsWON|Sb=VSEpIt8a0dIpoLWVd1VJtj3{iW_8C z&U9dV_NSF8YtygH+t~a=AiQo-ovqigGzK!Pt?7wpZ)F!sF5BqnY?{a}5eh8lb}Iy* zm!B85vTMT0m+NP$H0$K z8arJrMJevtudRZl(TtWos1dM^Bj~WVZywKzP2(XQprv(4Ju&w>oFhF3eAdkqS!PlV zLqdVguaT>(rRNEj-@4+qQ0c*-Y>jqqFz6p!DKl?DqFj_p9qsEq8UgWTJO*G9>4VoY zJfmNSwC!b7Wax&6e^LUw-jf75(vfbQUF3LmG?_Qj_}GX%@l1#cvntFnC$6f#}jjiNe(TE5G57KN{36!9}cSN7Gr{%4CqwMmXq{e zd_n#5nQ$%d-N9JvB-D>MgD@EqC5(=3K@f}9vVhT7CzU;IXD)PkDdl?ah327$GoZ^? z2^~*tJ1zEnVBq>fWC(+}EUQ)Qx$P}S3lh0xCqsPNE}gwLwm;1M=`6n&iKb@Hm2QIk zoN-Wt%1YF8u=mhmvTVpvnKJt>)}rB8=uU0C*L457&=G}X<0Xcy^t9c`cK#B3)TI- z@<@}uT|Q9DYPDQVPbT}r_GN^`F0HL3!&iKW3M-OKYVs*^8bLIm*th;<36YP~gV{3p zq}z$=R+NK$9Ze(t0uNeH9_WVbCq5;Jp-C+KB4(pjSlH)}lAG_f7LM@e(Dpa}T$ z0nQ-HPQSM<#s$mt1M~W^VtSI(R9o}3a1&kQgKy}fA87uR)#{+y_)9mrA*86Po}LXl zvqxnBP_H^z$qhV@E%h($kB%>|93>hjSNoma9baWX57%*Pqum2jY{o^q*Pb%3Uo?mafZ6 z=3Pd(Aj%~JZ=?bwinQt2D59A@FOK6J{g?=^*#30~$#0e^6=*3w0!ThFqnIle{~h?> zTtGN=JLD+HsH>qbBPxby;#f{RjX)+Q#f(B&-`^4 z{3MAmGTs0{o)&yevlYG?AQIt#StUZ{;uAv7+ud;TBgjxg!%S6`(=SB!iaZ&D9%s>+ zA1I+hRYEW(q8(uDD%HcG$-jey@>e0jgcnGKce>VM>LtIK=(D%#-a6WM9;YYbJkdnT zr3hC5<`=PJaKLRhQ%QG`vkilGucJ_7E--DnZL89yMGm$g?PQSAz-<$(?VmQKT@_Ya zQ6EMPznsoYf-FUgreF@J0|;#yf#dT>9gp6ps>9xoNlg`fq#Zv$3!B4TUoSev|31kx zjxOwh&OSqz(ixp}o;Ld4LiHM#?cBQ~zQ?*nN022b!&MO4yvCzWEf0m9uB_zfN98|WU8TZhh)XBJD$~?5#zlO*(nA0t z1NvfQc;_E<5e+fIz)B2x)V|V-z$%0hGNmya5z=c@-=^mW$-pwDnJ}AltE*j-Fzhtt zM`0`j{93n!Pi(d5H?0}EKDVn{r$?){JGIhDS55X^;?%OLcO2T16Wpv?tNOB6v8U-> zh9-fl>KGZJlcbzLy@OGJM9IXvMo+cQU%H%TxCVH06#yDj+Tt(iZ}dKoGEW|M;z@uF z4DH#L4zbprz{WvHCrU;BmVi^9&{pf0P5#YHw&qF=00sQSda$kI{bXPiv9vGT^=aKw zU;rIV-Xf$9j1IeQl%wYJZ%7!Yj7h##1`k@egCEd+#%)`hv}}k_&#R7Pk*7ekUzaax z-TonZz20IOB&#x-8p~z${sO!u9;ekoRi#L`mFK-rNxPH<<9S_L!+$#QRgoCF>DHyx z+hY}H$RrxG37&h%f6K?lyBWT#;9UTJ@$O8$@rhIOAlj7&#)!*{d5T4A zCCq|gc6kg_5iad>q<7=FO5Z#QKa$15Iew^$Y=(v>8AKXb15Vq=q&iobuN${s@u@tHEV-*A;wJ z^2==ns$n%0K*2MC=HbPzgEVaG`*jkAg`hmfLqBem;IVX73^*+;Bsn)Mz4T|m=C88f zxDznaOCwHa5#Z+t&LN0Nhiw)L{#eRJmm@M0y7Aq*10OXlmTiGg<`#-JYnCNT8GBzN z<%oCGTS2Xqwj>l6DqjNxC(EEa$8iy7MG_!I+%zn%H(JuiiEt5y7?^gb`4Rm7KQ;ug z6={);%PQfF{m7_7u!5J><~XD8pg^r{L9CMlz;7Hg)B{yzWDp7HgELXon8^%0x3Eyo zRXG{*sNQ|w=@4u@?QJf8$u(a+UinZH^YeyE`4arnrH9^6cvQat;ml+WIN*L>` zWENzblJ99W^e+n;)^qQg8+hd_*m!=rzSi4vW(MP|_M=dzm*73yyTba3v~0~a*_Aul z{}`M($!qP=8b5O+iuYCJ2J@x;(p7c8`xL2pbbKa3}-cS{8&b37t&B z_;?{n*O8q61gYW9IKh^d(hu`})sAv?ebpG4SE=RCAYMIbL)Z9Rz2J0 zeFk;v$e*?B>z5m^U9Y!UuRBhz-#a4TJGdcNa{>xuT7&$b3MhhNP)+_mPOxk8bQR}m zS_@u=$d+u_XDyJ?aheKfaIw3MEMH)BJ&TA*X4Y`0wqk% z_VZ8kN1;Qo5X8{*58vD9l2quhw7d=^7(lB8^uFkG@zU#nL`UwIz6>rZtz98^9T0Q? zN(zL)zS75~m%Cb#t0HqMDk|16MOwB6bF=d~2KOIfW^U|Jsj4?6d(CUq9>!>`lvW0fTx%uSbRar zyMuZ^HlXqWtF6oA?r>rsV8%Y{X51D$e|1*5%;1{bIBOoCIGX-xbR@U10`TBD2GI;` zCs5yDLgg#+1)knFZ z4J!YrDYqy(6ngAtI0ecu8iEYcd=`*)AX>5XK6&_-&ofFKt5@T_tNGsA&PhwXu5Q-` zBjsdD&}{4nxNR!W9?ZEWo8g&HKhlFyF9|7L^}9UUs*q}Vu<_mLfKYs7rs=UII>ARs zxM%x%NLF%VHnmblg@ZaEq}y8ynaeBy5l0vuZe0UvY_2rhK2SiqHIT;+U5f&>C$8W& zd^Qq9*^AanTg9KJyLle%6pNg_WC8bF@=9*7Ft3uihYd2r(qKS+(nJ&)f9?xH3lz0D zNjnuAe6_Gj`y5Ba(M+Hdr-*0%bp=E-+JCh2LN&pU%H0{)WQL-TJ|VuWqKX?&#$i7e zT1`Mynu~qy#o5&I<5%U#n z`8rKh*}7};+%b?pE)D}mT8$`dOtAsC^I(qoODq7M4-qtKsB5O#mKkYI%FWw#c=--i zF-I#A>vKb1=j9b1wezt`htk;=;-5io9O#UKuw`dTnNhRoG9P&nj6)442txfsD?y9v z3Bcfh_h1MWM3vggXJlm1HLSb7qu>I`Naze@co@ZiKpAW)(^tdIJBE@gOIbpv9bE4K zHUB8^KunbpbL?N<^+kvly!3)32zCH22n{*8fU-^#GwoF3;2mMcJAe`FtNyMw4ex^K zh{S^~{>}jOzw$M~fOyED28|$H>@ZQWKE?(zDG$GhIkLy4_tM9yJTEO7umYD8DS+rD zA%_|4;^_3}=PfN9)W!Kb{|W>*NBP?MZ*(eB2RR!({T})0<`k%m{TB-$Sd0T;OK7!< zDvR4cFZ}0bH0KmOJ!H7A{51T#yAwK@4>=o39Ihhz040zypDq747cL89^8e;X{s6(2 z^fY*k;wDO7Jt#^H15t2eu{BQ;&>fsT`ELAUjW8ezB>I;Bju_`B3liKV9Ck~&x{f@9 z8cd8N_)HC5S$;Hw@}I$7{Pkyq7?A7o;fy%OgM-5i9kfeu?B~80)p#Y2u;_J`012Zs5&Z1!Nag!@GAsvH!k}-Ud@B zG^5U4V*T%95RwG+R#fB1Ng?{GW~XKp2t_~!Wh`f3`+cmr_-J`%%(4Hz8i9WW%#b)< z1?kSR{H*dL3_x2{wj#(i{P^JirXL&8z{M|K_K`)twYHR~wa>kjsPkdL0dy}%&~u%oBxb%5m$Kvr$z3)ynG6A=MPT}=sSg*02~JNCaazIznQIQX`pGG zMYo|YucRO95+4DH{hlNTZFp&M2I~ED0J!6tztUF~)g}@{YGEeE%PIcZX~r<0*zX?wn$d1y?}!wWnMFtHz-oJfeVi0c>?X zpaFA+Y?3)hT+BC1T6x0Ocv8ZYT2kHq5)Vj>-Wl@F!){~hh=F1sZ*BQ~)t|!C{w47K(IZI)`1l{O^qfNc zuzBJX^Bx+fCMM)Lqja%KYtBo0`~ty3dwT#ib^(~I7$UQNC@b2;1%&|Fk>SD)dBpTn-CR7u*fCZ1iyeSa`6ft1%H{6-z^?X^~_}@GQg~6 z{xtG;9bF6yu}lJpJ*5!(@Nao}d4jjI=n-2h%%XW)wRAgZTe2ALW31pvM=&@_tscNH zL;G7{+tsOuL*8=!;?ZFu#XS1UU{$$~)F&w|$@x{nHFF)kV{ou{ftbqz)bx%wBJ}b{ z{u?Lljm}Yj81jFl0@i6QhByJe30PVou8wkuyr!#HNrJv@G0NQmr%M(P?5eybjt>94 zy+QwgI(>`cs+Y=bdB1;W!~9xw&L zW9~`dIA{aY(Xy5WXqBT_t?Nz*k4s7k{)1~t>FBwElftBv_{(uo&DnoN42mHc)Swq1JM9npH_jmbhzqza=lBPzDZBE)*#pna*npRTtEUrj*syRhH~Bp4?n}-VHxS7SVeV2snm2Q{foS$vhRsihxkyzu2_7nF2EyIF(<$CP zcN%5qL+{4m+PS+uQO8!!*329c7lR_JNWvpIN}K5iAB` zI1ZGg2hj_{9J5>PE~aj@;$8IwN674b z=_2XUk|=SX0m5Q9wGFTau1X3QF@JD1qn6JUddz^1tox@HGy?bOx~+9rBDdC?AJK^ll4_B~|DAq#FVrD5cQHg&(r@QCyauv# z78ROO$K%apkau2?)+Yv}q9Tp;7#!`@_=F(D==l0wHu9u`Czwb7+F^NNv3NUa)cXV3Y^TG7LOKB8}E!`g{0 zI&2`7N}>*@gl&eeAdUYqVnwSKkq}$j1c9h8*Rs*e52C9|~O# zgsTEcX_)Z=;arIN;zxmm-jFBeHgE^7vQH}GL|AjuFS(dRjM2-!C0lbS6x|rr7aC(6 zh4a=uyQ;c$`G_}hpaW{dI4Rnc8A^A0(!G0@yMeOl`h07YkMaFC9*7Pj@?3RSV|YPz z{77RgonpoiC+Y*RW1MyL4%yOJix<@zF9rZlgTj(Ri1imU9)&wZiaz5dsRRYqd}Di z1^+X3$UOHFiH-Wpp@v%2^t{YfWUS{C{+P1yoes`ZtV>ASj`PC^5=Qr*tz|NJ*!Zbb}HS z(jtly(jhQ{bhk99q?B}nB3(*1-#(P_zu&rR-Nh@zoPBma&$E9K2DAMmw)gl5$I>UV zyn6vU4V~e<0#Pt8KB7XF*PYBG$oOtSZqg%lUWzBJk@IaSckE2f-IQ= zXETD%dz#gker@4?U3%;1DD&JoW$ClqXD~X>r_-Dno^K0X&DRk1K-hIJ;lITMT{UeZ zl$M)2Y>1^_D0$lh3*xR+-_gf98nC0q9e4{B?BjV=yOe z3ukNGiZk|fY&6&2-`}^9fixUY85pZ8>Tb3jTFIc;HPqg&b;F+uY^0!)vEE@PQ_siv z$D%rV&QUrF=DKYaveF|%)uy?Q({FJfxAP2!1V~=fF;X~>*^>9%4`rTCk7sDpdr^rL zzZ+qNkmShI%~ciOMkZj{CW8T8?3x<->peu>nT|J!!_5*4WBGzUd_s*1|9HqE>w=6% zfVwjCJt%s-Kq*{q9<+U{w8z&1U&E>=GtPx6XN)6o)CkpgK=D;;YTpk}xY%*OA^Bu( zoLV^CR!4ed00pYsPOs17f|3PBE_lDlzT=Bfn|F_at|Kp&yqHL0$u$ighv(Is=Oil3lk^AFe^WX2U&}16(R1MY(F54`4o0X2izukwZzzJT+ zDFVu=GY0MwPS+5PJdw!nHnN*W$b$=S3{`V4tXdH^9thIxSFnWDrqtb~3T;J-=#^c! z`$0mu7u){EscYsg`u#)V;_10XNQXjogTf-QnSTiEw4uXLb3Z;_&+pQrm7y*fXy>QQ3|?pJ2UrBDQi( za?eio^m4Q_N8ucfx*iGFbFx66msPyyo zpldvyp+N;vd=CU&YIT^Q$HXjme(vKLYbZ-Q9&e8{LY;P{>!3nnXrk0;O=<`SB^GSE%Q_rb_}ylj1hicE*|QXbDFLTTiNyUpIig!{J< zlGyJb6NBnTt4i`Em+|L{v_DgPk+(4}L+3TZV|`yn(mB7l`|Mu?$0il`*lU53s0tBt zMNOERJR&q5ETzX4>@o8yS%{v7I=LA0nAzhd%ZkH5P#)Sfyg1J|^>?x9I<+iV?M{VK z&R*98yJPX|%Op{^!A^Gtcj|Y+<{k-vl!eEJ4z;cMur}T_KiScu0?5{lnn zb9k`eGehc2xswrK<&kH4a76h+rLs5Se)o^JE;QH{PDuAk^U4zUk(}ts3WlD3T@x@O7R`7o2#h#>&sONCqe$hX$=D#3nVp@J_{wQ<9TZCM7`?)XPRRU{PF`H@pCgM8m{9jj%huso?G%cADOG`@^m(B|z5rBxw zh+cCVz`b~Z_UUxjKIu(R`ctgMI(KZ!bo3^&Eil0H>=t}l=MQ?}$2BCu>GB61N+$*l zw1d+0C0HoaAte6q{yyeHg9mu9;DZVqykWxLSM_yO9ZRv^986(kDdx1t<8Uqd;Zm+y}HU%5q<>V&NGxTZKy=8LheUW#r(^7SJA@76gIJz(1`3 z7aBBdb$F@0u*IND_vd@{qUgSTi zP1cg6EE4PGPR^dySv~H^lXE79__D~uo2}fdSs9>nY{KaGL|gH>z#Gby#Y0vAN6$T+ z5OmMcEPk&~L?8_tDCIHJ+J$fEB|7EwI)Xon;mP2~ScPhC5?kBP?+FgOTc8PHzEA2+bw0QUAsUg6J1G|3_Zh|GBcyW0b; z+UR|d_rXK?9C`ni22k`x+xugEqs%bw7Okj?js$?%?cJ5uoA~Khve@;QG~BQJ(;3I2 z4N!wYd}S(yI)qjD6I3ybaUpWSlUHz1H@`}oGOoYG86K|%H{7hphu zNqvo*;dGorsZjO2iubK%=wV9K)sW%B$$O<3qgMcQBiibL80Ly=hQ@6&GchoL0!Xqf zLiFvU==p#2A*e#ou(^JJ_Eu9K!ASfHTsMhg)Oo5AgY-!Uj>43$z5T%EfcS z3jPh*PRAI!)nfx-;JJHT4;be}aS?&Hz+2&x;X)5dB#z**ifxIWOC}cCnk%uHs@vFG zkdKRAXOwdn{&&&4gEhin^9)-tv5GPsAldIuU|EuCV--O19^?pI=;MhOBL>-fCtH67 z_qhI)*jWK)LOl}9kcn89d`z7EQE#VUqo4h&J2h!g$Q~dyD^sLUr^E^Wcka^YCRBZmnh%+m-bs|DV_Bq#I+ju(>>=@nwax-vc z(baFC0_x*T!q9q08evRE;_%ZWCghE2LJbw@P3%JjxZ7CYe$xQPU2zsAwP-slad-vf zMWd~wBOed(VB&^))btFGyo9OR7l3#}#^4ST^N-~Smi!AGHbJn}z5!vt#hNgi{9Hpz z!_bwrcUBYEP}Of>GEwIe-;3=SNZF{XQ=W@(U_#A$2anh!>L|DS`+JKy4t{v>scikL z7>C8?&rd;)GZVp>$EHY#AlUiS6XAHKdO(ViA8v7mzXrd-2ACr{EJgaU_tn8Th6a(M zM4ZA#tzdZiKckpIMPe#Op@wo2vkQB&75YnJ@LOqqgsYCWq^oX^OIIMlZ zjLZZC6Ol2t-_LQcw%;;u6S6OcWL+WfR*$L+*N(zyC9um`W3ei;D9+UcfJtD4iZ=+X zGczi)sw^t|lfup`8@Q(FY<5}h0PKam8L=i~bw7Rzw@2lEm3B9`Vckhp<@bgW3JEx{ zXI-iQSd5D}(-lfJ^fWU5YM-iI%wz0&xZ&>sWY|sM*Ryep=IO8Y_2f_b-irrIaU^oi z%|cSzX%iX%C^5yoo|euY*4R_$R<+HbCESKmDQA;Bdht>X_e+0A8Srz{do2fi^mXXC516+g_i6ek}%z}Xa3!s5oIIS7UIYZx@q%s~!4O56hpJeA?GIj1M9dZ?=^{kvI6loQVAvYaF)49;anSv$reW}q+D`xn;n5Wg4V^~HX=$F3X;#UVipA2o z(&t1Uqo#OZ}8QZ%Nt5WNKY;4EF2d>N5F2b;N=&eJABS0E8qc%@9hVkLn z>}6H3FuHLZ9(e$A4_l?&kBRHAm~@Q*qQfD5rFr?Bt|Qkkw|JqI?`yt=U0YMF`HrL) zgDZW#r3A1-0;+#Zs&3gnj}7rdBmesnrt}tq*sRrIAmZRalW45TA+R}(_{He8OjFPM z7h;>h9#7yg7NZKZgDt*_6-+2U=+7Lt%nwyoPc5_%349;ZCcGmB#IiTOFi$P-SqB$3 zTQ){awnmx(I!Ec_5@Lor5=%Kv||6E2elXho9 zohPc*ElEaZGTADlyoupg2ARjz!UR$!?8heL+3lrWzkcM(3N#&nWx5U+0s}xt`XRu8 zxjkT{F6xR+7hqMq@rbFHAtkvKJFif)-phm`Je3^YrdUrcG8Sf$c|$)<=I?b1g%KfM zXf8-pW_3edT~XvaG784aA9XsxL3CKaLk+;oqc*8_09xS;E^m9R%c5iS_A=x8tXcLU zRts|E5!(M8d?FN8vrTpN~d_G%Tp+7&e24 ze(@A!BZ8`CDvf{>0MHzH4`_@X5YY2*uNcQ29Hb~)GPK*{DNs_@YFr=Ed*b}#n@_MP zx6=9IcP`Y03!aks58kNXtvzdA83{xLnER3VU60UX zOI+X6KDu3#Q?W7d<@trHrg*}e$m_)mvw%)g4C&24ocNFE+=V0|_wj_`TQhU?tQGoh z!avb?{H1yN`+BtI0=OMyy(-pc(;MSWB?YiGyxZPYcLN)ED@^iLqn+_6v%c-QOtV4r zicrYn4-$}9dPJ{LZ;*3*)A74#-fMHrXk#TsT4lGsR zZwZalfO_MMczu@v{3WD=V^JgynJNNyMw_BmqXOHP(c<>-0W5oM$3!mFr5{9j%G$V; z!h&kG9BqVs=ijQBZ)A+aek8E_)M76 zF`or|d}=0J{i@>3AnVn!8n1a^-66x*9YU`#?+%2=0g;$CatWsTZo|n1+TT+iqGFs| z`5=!ZnlI9E!o!f|-i6gO=9J|JuIwUM&!{>6Fd{rTYW=ZfF+Erabhwqn*~BLQ<9b7S z?hLfa`BIN4Buq{+L%Io|q7|aUYfQo$dwIpPy;S=&{%w({cvy=g|Z>gykWjU9U zG0&A?pHHH6@V25s`>UO=bM!q5F2EO`pC>i1+FgDn5RZr$gh;+vA)#pC^f?J*58K{A z11`ogz~yM35_MG*Mw7@3B?FRY-v9u~5gWtf9XKr5%`n5kmNQ;Yi1y0LK;x{1bo9D? z-8gw;S6OkFB`;#NSdx{i<;CnhXVDnoPkpono_c#Cjn2h7=pOEd#|2Tz9}ebb8Fru3rG{hj14736f6!hP{ZoF%%S zcHi!h^xL#m>42!pJH}?Q#2y$)dB1vZj+x)K>YDu%NCK%M${+l+w^@1B$PdgqLVJcZ z`uyx$COfD|yRk%>=mSB-5DZiN2Vyg=>j5h3KLp1wiv)&(OF$}CSxXDfsj$cu$H zhF0dsZsF!y6c4xV1DBirCdO>@s;w5QjG`j$%%c9yLCY`O_vzPGzKKy30&?^qP|{2Q zy3m~P;sMS{qo)UZ8~b?+#Z!enR?Y=`Wbn*Yt#nAzqV6@tu&eiZYDn$6OIp*8>(1nz9vMO23sBRnxgL-J*vSKYXMvo#%{{vyGB;o=7 z+`<0RK~VC~a_u|InEHSYlD88cwAhC}|+$|-gVCd*aGr3}t< z5V%D-PF50H^RF~>4B02uuJH`%e5*WbaL6HkA_u@Pk5?wW`In5It}O8E=j~a+f8>Qa z0c86;2)!Ha`v8FWs=&c6P98-ZpUrat;^q(=f#Zv{-vHtyzFXdB-v%iQBFr zg#xs`+a{9~Kp_Z45oY*vcy4qlYamk_5Tm3vBuMPmaEdet;se6Eo=Sx)-Rgk=^0I6y z2zH+4gZqLD?W-?@zAPu|bf}wU#ynpAgXk;Kh-cq3s&nRnb=~)4jokC2BIAz?S~q0`Ul6_4b_DD;(7?O@-U5NhcraT-$HhI%McxEync5~5kJG%sG#a8@XE_0 zRtNM)3m_iHZPM`{v=`0;&E10S(tUfNykV5d0ob=cZopfD1orEU;wEr)8-M)#6kr`7 zIP@qvX7`Fkm5tC{*#KD$<8R&zczm#D9EQ!tgLHfVg#chKF2sr+9}oAUKPzD#d4!im zu5Fa%Hsy8Nrb&W=l-)TFS`f^qU_D)%2!HwReOB1^f_y4z|N3rq2yUWCl#C;}^tYlB zhdsZHmbZUWUDwr&N=RiPagd&62>1&G&hPP22=`9KP2uX2+qT#AB#7auxGfYa7`c}; zlf4=S&dog!++0-Ri;8+Wi~>u}?0*O5bL-(x|INH*58#f-E7xE<)=U;uM+VUK`|NP?mii}8Y{w0HPf&Oqn z^h5Q7{Xb}pz`Nh9SSSy2Y=21`t8Wyy*ZV`X<>O=YjN5U*?@r|lHzRXOLGOq&W;8In zNT)4c>E~VV8<+Rp+ux{?>BqAd22Le9of-#0&Y(b!M4-aQ&JGS&CjDJk1Lu=I0fZ`L zhv%_R7?^xCsMozwZ1~j=c1Ms)G~>Fivb+LNM5MM0ue{#w0%!#^SpEeC1*%1nl9DXB z@8=SlT7lr;WKnaWBlC*+h=xeZ%GF0=4@dwvTYK*QKo8HTYjCsN-jDl57g$}#0AuQv zm8~w{?$1vP{Zp~Uw|sEz0?^M#$%}BZWQJ}`kZ2o+a?SkmkYp**U*3c?f`=@v^x|CB zZwUFaX)JDhF~Ze_qSt64=OV@{t1Sz^Bcb1bN|5oJUc>?wMPQ)P+rRnpl9c1tWjY70 z5ASNu;+f|_Nc4!LuUm=vL}gAnz&?#&K7UFST`<3n|&GWRd2lcD;L`L z^_-i?Kq@lVn;pko*d?D7sSKznMZm124yYh~m>E`p%ey=^<22;z8h(i4Q2;1aQ}`A$_Jr-iA}P;VLxf!lBlIh5^+c}&5xl_ylTN9C(oVgN zj}vwj3uZLRMMX5yQTo8uDb}|(7^Wn#A3K*&m01{M=wq@#ndeQceh*NglVhIb{VJBp zf#mahwcI{YxP2GD3i(~V9SP<#4g{`xNtz-Cmv1u z&w?G4OaOvRzo91358SU{^`Qu}q69a!ONH-%Ghq82SQHo0TZx(|z<4gY0N9fDBPL=G ztcLB(GexpY_V&Aa&z|oa0v?qVgwkqpwjD3QQBVeH;^~%cqEmGbn|Dgj2bg6&grasF z>qNz$PoO=-EpiK}m#-HDo)Z6F8Wdb?A4QC52=DMmm;$Y5bT*jlWdu5B12RV=jeCyU+zo?w# z=Nu_*h`OO{5md(kOzr0ZA+iuqV*1Hdtfe@bwSdL+q5c<;UbFxBt9}r4(xSf)iPPJM z4sLJmkepjeG6%x)hK(C0jo5eV#657%6e%S&#P&CN-jBYsWCYYsxeX?j zoN%J?E|29+QfqxIoQ{80x+nGO!j45mbB}`%>qxy_k0wuKoQWPF(H7Q{Xb+Lg3t2b- z-`A1x!X}1v21Y$o|5`{w@-O}1lPn_bK4O<8W3`54Su1n3)Sz6OOOxsaQH`XK-E0?@ zzwfncvNt^(-hKu$L_0w-`sI{mxF@v$O%eC}Y8Xxgh32&5uS+bspD%LTPUqmp*sRZM zYgQmq2%GD!u<5v)(1Zv?=)H^7;=@fQpe7JM{1}ix!hx-F-z?dEz)goBsI38aU7AVeDB;GPekckfRgbcNw`QF-!#fX>VPYAQ8K{wZt8kX`Yx)B-KX&8xtp;q~Bn zjHx*X|Ho^^=41>f9s{Aq?Gkva+qb^3Vg2K-y2N zdrrgKG)=@P?aT9)#?TR2^4_9bp=nYD7?CZ=hELgi^gq{Sn{frYVDp%U7D@yA!S2c+ zsnJ^#tMXq~W&6*sYFq&ZBkLRKS$T6=RU?F5j$<`G^Qq!84{Xfy4ta*HWlQ})r)RpT zFq?BLk)C^ICV3(3L4E(DdP*xd)ra2yDN6@zij;lRX$MLPdU(RCfjF1xQNc`aA40B6 z1uvfrnE-q6w*s@k;K7X6_`x8yz8|GqS#)Tq6`Q2!2Vfa7ytea3jIz*mZ#$Jf9MsZK zE`ao;J?ka72soK#z}_gPM$362^A-!dhIZjuae%PXdq#o9qCqJ;ZFB#A;NtpDm&N-F z1C{xjkH~Hfe44^(lb{SzvjWC)CHp-+J!y0&sE4#$?sC8D&bM#t09K&_o9WML2f(lD z_mp3ZaHFKZTuNh_qLtIe9|ikWmim?KY61YV+r#M)=x`$-dl2z;|0WKrd9+1QiKM_n zLB2)Vf<2_bq9JPp%%BTmg`5X~0p^tj+K4 zy>SdsJ>H3BD`2n5K*RzF9Po5V?bcIHbg3Y_Is~RH8rvhPW|2%AD$}MX@&_Ho_9jv^ zXkg1!S`?qU4PY4rISw8GV%|!*LmKco2zS~v6G_!_7GH3VHTuR1#(k|^wwe|Tn;vP? z@Xn`Hr&AP@(j2JPcx3_^$FSYy=%!-nZncNru|>A7E z_w|@gv7;%}mAle>?>A(`gxYNOdVWcX+l5$}XwO<%OVxJ<`+GBg>=tU1j8!loyk}!J zdVdaOF^=Prg+B%XPLEHU4OyIRBmD zbR82%Pg#AB77XK!4R@=qTM;zN){IG}vJl&pXX6AOGl6s21J^n3o%KBFhT976a!@4p z<`BNqdzp(-^5CF|rES@fOX8g`AoMHU2>10rVaL>Cr2Jos*aQs(5867L1WH)V8AE!; z&YYu2wZW(#A+I2~QOU(4Evl1q5})o5egt?oBnj4QKo7gi#cf{`$$KXeV0+TK7*(FR z*6Ze8FSvPW;hZ%zDZw81n0OjU`0_mos634wi2!TrFlgYXVat0&=#k<7Rp}1%Y4HLY zZX#-=(QyIove!;N9?aBK#KWb5Sf5lBmNG*--}PUnaRfJZ#h&fFwG{ z1{mq5=LWv9*bx}?GJ2{#>iW|Ngz__1%eC`}7B?gS%xsY)fr1biu>y?C7yjxaXjR?TM%<+8%E$nUkpx#WRC$wEx-(`J^cfL6|M7!e9GraL>g^b0`u;v7z03n^%8zdv>S(;v8- zAS}9w?vV_pQ2NG3lLAQyokGt;d(8DpfOQ@H^m{N4d7>Wy3G96nH)DDQno8vqO5-=x z;j}$qvc*pamvS2dWGIZ80$bRm1qreQb#ngwvjVVsObcK15GVXo-G)L0$WP;>FF!&T(@!6fUO61l zhp>=SeAY?7AAdfD3{1OFo6PAyiA57M$RnWB$%nz9(m{~Eps&OOY!fHT%_EBha^C2T z3*k7LcCy{D^Ax8O0HF=OdP_nM_i&l)VjL0%|K6aFDZ|~+rZ6DcR(<@Vf0VP~aDxYzvt{@YLipEHXp z0h)pm)X1`bzv;BeA&H=S^U9h2;42(~`TzY30NgA0Qmwsw?Kk2{iH@y=PuV-cu;K8- zM2yJ#lOY0K-vGewjAyXb!0(XMIPFjVZSkpx3qTYjl({q}$n;*S z)D`$;n?&sC=dn1d7goKLUqbL<-Io0p;fuHgJLjkKrA^t-r+v|}{yu8olPNM4Z}=66 z^D8_SX}fwQ$YWMwZ}@$M>!r`8GB3uVw@HN?|4mP%%LQbz4_CGJTcqI`5>NS~4!Qk@ z3jB8n+uLjs5we+aE8C9QBC7P?O-d_((aEsux#`mxBl{GRt{J`yD2RiWk&l^?RVVAo z4Sg@M$kKX3+bigJKxALSz!yatVH+yx9&oHhB9v)DvD*N2*IOG|`uBzpshg!MBGH-l zLhVCw;~pOEDYBt3mWb|l{Fk|45B_W*MSeR@*hQY>@w~L9{{(N-H865aNER^pLFHs? zDC0YxcGCfW$E~B`N0rHnIvwaS`jg5bX=1Cn*C4fB>GRPIkOO zLo$gIdS@8Af-H}po(d~9NsLwr9dO$|fp^D{v@gN7V^Ay1MC~`D53R&QGlPu>iE{DD+Dk*kw;Hv2oGZD-`z%zS%h$DNkr=NIA z;OdtklzW3770KgFe?>}c#nKW}y@<>vnqW|N_lKGUY$h9|({ECUYH+z98@>SM$h6Sq zt@F2P(!lLZLJ(O%{FpGaSH zJ@j005wCmX2e)1zWV7R@B)0aSNv3*TI;jOTQD8O{doR+9;io$fNxJsjw3ML7e$d!? zPSU^e+|gvCvq9hE3Uv*ex?0^~jlHEQIw5{ISNF)F~J7f zsbqAONb3DShA_`Mz&1M@`VbXYyY=7RkTQ_B4~GCZ+iF@3ZXDjt11#?$rG~?0g4{Uw zVRR!Zzlt5n^T9SheaERGlE9b|iFTGdd^xEDV&~ zHC3nNtwC3M6xtxqVQdPaj`&T()YXmzNQ93&g-_f#o6qrnhK6poL>@J9_x9oRIJc8< zRaGHL>PAJgX6m!#_!(b(RPf;obR$r42ZHJ!u4HlQ9aCb8-S-&;o}BZ)drBN`X9zT# zv^Ps#?!W#*Nw_!uixa!;w5$R)Oue)uvFpfB1)4mHX-MzY2O_;hA3EBcG8x|w+Ww1g z_E^SG`Kbk>RFzFE^)ea!^zL|uV#4N*7UsmUyWxf=aB-fRkhF_FqQ`sKBy5{BlW=#a zr)>p6U)5YD1Klb}VEjvHk^`qYdFU%+q2ZtMI*j*f{Mg_h?kQwMU*J6;%o2SUC%VTI zvk=D!I5)=5AyXU;MyPV(Guun5^qVD_2a}d)uA=WS$%?u1E-J9E>B%6Hi~AaynKgC-(0M z`7kWOPv^`!1-X)6LjCDgb@a7|;ZXnTJPH^c+tEMrt}sGOam zyVGCIg4%W*uO9w85d<*2&T=W{Xi5O}g=x}%gR~7MEdA2 zj^17r;FpANS#B8;d}bImyVdq*ucH29#2yVnFU0F|S}_%&8vh3*@K215>ICn`FMaR$ zaxX;P{eL42L6+D7GML0yf2V<=fb#HXTfp*W&;kKit@g(bJa>-Moa%qQJwnzJJiBSZ zx1AE28$gor|7*<$5TIa69m*0MzTeSH3d2JFNg(K+Lk@DU4V&UG9NMDz4xNkopJ~?b z9OFA^!*y2=(nH)G(iIl+_k4mHc9fH(FhMznUBxu>AG2iQI#T4H_s6G81*00YJUPfa z@$aurEb5N`9fc3R(%TsFWB|ke6k{6FPH9K?09G9KC}O2Q{~9%j!FvPDm_qQ~X_dQw zBq*pTjLV0-QJ_Ht&?~l>^$jOqZwlp{^BoF6F7(gu0)rHPNL4x6jD7#ZH)GiiumqKY zb8&`;A04H&Lm}AdKUzy zk1@j*d=|X?alyDu7cp&Yf^iX@iOaPHJ~jB^(YX2YkBDKH4NY$7mdgW^qWxOIq6XW6aXrYoyuJF|itE=GB-Mxh;-=esG0J=McJe16PHSKc`L5~`G zc4cc}54tiWS6=Ay`Iu_&u672Ho`dj+(ZViHb$a>$1ZNBPz5LmiY6sUnN$i@K2 zV^D6uMBhGLJ<#+33K`YMtkeGKB${wYO`0v8DVsQkA=G`U)=Pq!nYm~w@S1%$5M=ho zNLgO!%}~p4{+^uI;Cdrx9e#1?b4LPQKGC|MFkQcSgBT(WJS^VHfD};P6cgR|XQgKV zEQu>o0}E330X*%YP=y!`13qYJh6JOz9PO7VMhwCaO|}#hmztaYyQM`4AjA&UV*o5- z9e~f&eK}myUd=}4q7=pr3AU-j%I!#3i%}-9NLMQh^FQ*To=;1++WTefa@s( zAq8n^i(S=t^QVyR_cJ)4Cw(jp1;^f?Fyg{UuHxO>V=^lI4n(NAFChu0S>$EAljKt5vV7f4c(1EdiTqMJCBIk}LfOLNyS=?&W!iU;g1-2G{9d*FA|U865WaJX zZuB|fi&?29!saHT)mf>*u0Pfq!WV|Ee}j?HS0(HQ9ESbW*g3(EJMRv$+U@8&l4cpX z&*|L@JMRn74z8B(QeB#j_LNX(+!Ikb<`45@E zu`+t!4X7y!>VO_Dbgu8;{8illinY?1(rq`_n{qt4vWcgyv-Z^%i)e+8c}Wk$)$GgK z+X+vuj!ypyvP@sleOViB9l6{*P~^tkF=!tuQ6Q^rE9^)c42yHc-oZ>(aqKr-s5;n^ z6^NWYYmsvo95*N2J_NoA`rh>`GwAHR051llypPJLz=Q_`zmO^0NCizqC=U^wQK}l~ z=OzMpOEu8!ef+@9>%zcm9Y{%Xw9;kp2PSEnO=nASA87gDvzJf$yzqp~52E%11K!bBD#M;_V|))m`C zcbVX=ib3JtOmf_SWH9aEc)&p?K;hmm8}}EOZ={XQVXfM{dFOj0-q`f;!(TByiJkEthH<7D3TZTpTi)DjV`)k=f!J8JTteK?!#ftYmNckqQC%qrYs&z|FZcTL- zZKvBM73eMzaTp{|ZY`u(lq6HUSel7wO&^a8@}J>P(Qw|MF;E(z)-)5D`7rP`van~X z%f9qYmdobK_`pxEs5G&gsCW#C_I_}tKC&ssh@*)5gN+BB=@5a|zN#7&$;|-}SCm|i z%?yw4 ziR~l#3JJtm!nru?4A@C?%*A~`hg;F5m#w1EW8aoEnfs8G$u^+*gTYZu~fsMLQ1{*l)5d{ax9a3vYXZ;uC*`*kwg znp=2A^&y5pQ=#p`bp9M|=mh}P)_Qyw7(%6I7R@pgZJVYKc#~)ZW?U^G4>9sX7Gf(( z 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 HY}Erng;Mj0 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 literal 0 HcmV?d00001 diff --git a/internal/inspect/AGENTS.md b/internal/inspect/AGENTS.md index e6b48ea..b9ce259 100644 --- a/internal/inspect/AGENTS.md +++ b/internal/inspect/AGENTS.md @@ -5,7 +5,7 @@ descriptive dual of `internal/checks`. **Architecture and design rationale** - the two layers, the measurement primitives, evidence-not-recommendations, the determinism dividing line - live -in the [How inspectors work](../../docs/content/deep-dives/inspectors.md) +in the [How inspectors work](../../docs/content/deep-dives/domain-model/inspectors.md) deep-dive (also summarized in `go doc ./internal/inspect`), which is the source of truth. This file keeps only the local code conventions. diff --git a/internal/inspect/doc.go b/internal/inspect/doc.go index c4294df..cbbf51c 100644 --- a/internal/inspect/doc.go +++ b/internal/inspect/doc.go @@ -7,5 +7,6 @@ // // The full architecture and design rationale (the two layers, the primitives, // evidence-not-recommendations, and the determinism dividing line) live in the -// "How inspectors work" deep-dive at docs/content/deep-dives/inspectors.md. +// "How inspectors work" deep-dive at +// docs/content/deep-dives/domain-model/inspectors.md. package inspect diff --git a/product/specs/domain-model-cleanup-plan.md b/product/specs/domain-model-cleanup-plan.md index 1557185..8143133 100644 --- a/product/specs/domain-model-cleanup-plan.md +++ b/product/specs/domain-model-cleanup-plan.md @@ -106,7 +106,7 @@ the operations thesis moves to where it is demonstrated. concept" to name the deprecation explicitly or drop it; the storage vocabulary stands on its own. 3. **File:** `docs/content/deep-dives/domain-model/collections.md`, - `docs/content/deep-dives/inspectors.md` — apply item/document where the form + `docs/content/deep-dives/domain-model/inspectors.md` — apply item/document where the form is the subject; keep "raw-source layer" (consistency check only). ### Phase 4 — Retitle pages, relocate command-organization @@ -115,7 +115,7 @@ the operations thesis moves to where it is demonstrated. 1. **File:** `docs/content/deep-dives/domain-model/collections.md` → title "Collections"; `docs/content/deep-dives/domain-model/checks.md` → "Checks"; - `docs/content/deep-dives/inspectors.md` → "Inspectors". Title-only; + `docs/content/deep-dives/domain-model/inspectors.md` → "Inspectors". Title-only; filenames and `relref` links are unchanged. 2. **File:** `cmd/organization.md` (new) — move the body of `command-organization.md` here as plain markdown: strip the Hugo `+++` @@ -150,7 +150,7 @@ reference is unchanged. | `docs/content/deep-dives/domain-model/storage.md` | Drops the "data interface" framing. | | `docs/content/deep-dives/domain-model/collections.md` | Retitled "Collections"; item/document aligned. | | `docs/content/deep-dives/domain-model/checks.md` | Retitled "Checks". | -| `docs/content/deep-dives/inspectors.md` | Retitled "Inspectors"; item/document aligned. | +| `docs/content/deep-dives/domain-model/inspectors.md` | Retitled "Inspectors"; item/document aligned. | | `docs/content/deep-dives/_index.md` | Drops the command-organization clause. | | `cmd/organization.md` (new) | CLI command-grammar rationale, moved from the deep-dive. | | `docs/content/deep-dives/command-organization.md` | Deleted. | From 7c0c63130d229559afb969148840f471532297b9 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 11:27:52 -0600 Subject: [PATCH 05/19] Refresh domain model page structure and diagram sizing Rework the deep-dive narrative around the core concepts and replace the diagram asset, then constrain the diagram width so it no longer spans the full content column. Co-authored-by: Cursor --- .../content/deep-dives/domain-model/_index.md | 45 +++++++----------- .../images/domain-model-core-concepts.png | Bin 156672 -> 169969 bytes 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/docs/content/deep-dives/domain-model/_index.md b/docs/content/deep-dives/domain-model/_index.md index 94eea7a..be5addb 100644 --- a/docs/content/deep-dives/domain-model/_index.md +++ b/docs/content/deep-dives/domain-model/_index.md @@ -6,21 +6,21 @@ bookCollapseSection = true # Domain model -Katalyst reasons in a small vocabulary that is general enough to describe a -Postgres table, a directory of markdown files, a MongoDB collection, and a -hosted API response the same way. That shared vocabulary is what lets checks, -inspectors, selectors, and future backends fit the same model instead of -becoming one-off adapters. +This page introduces core concepts in the Katalyst domain model and how they relate to each other. -This page introduces the concepts and how they fit. Each term's canonical -definition lives in the [glossary]({{< relref "../../reference/glossary.md" >}}). +Domain model diagram showing project containing storage, collection, item, and attribute, with checks and inspectors operating on the data model. -## The concepts - -- A **project** is the whole workspace katalyst operates over: a configured +A **project** is the whole workspace Katalyst operates over: a configured root that binds one or more storage backends into named collections. Its - configuration is the **config**; in katalyst today, that config is the + configuration is the **config**; in Katalyst today, that config is the `.katalyst/` directory. An empty selector addresses the whole project. + +**Data** + - **Storage** is a backend that holds data: a filesystem, a SQLite database, a Postgres instance, an S3 bucket, or another store. Katalyst's implementation is the [storage layer]({{< relref "storage.md" >}}), where a storage instance @@ -35,30 +35,17 @@ definition lives in the [glossary]({{< relref "../../reference/glossary.md" >}}) frontmatter key, a response field, its filename, its path, or another backend-derived property. A key in a structured object specifically is a **field**. -- An **operation** is something a backend lets you do with data: read, list, + +**Operations** + +An **operation** is something a backend lets you do with data: read, list, aggregate, write, and eventually query. Which operations a backend supports, and what structural commitments those operations require, is the subject of [progressive operations]({{< relref "../progressive-operations.md" >}}). + - A **check** asserts a condition on an item, an attribute, or a whole collection and reports a violation when the condition fails. See [Checks]({{< relref "checks.md" >}}). - An **inspector** is the descriptive dual of a check: it measures a distribution and returns evidence, never a verdict. See [Inspectors]({{< relref "inspectors.md" >}}). - -## How the concepts fit - -The hierarchy is intentionally small: - -![Domain model diagram showing project containing storage, collection, item, and attribute, with checks and inspectors operating on the data model.](../../images/domain-model-core-concepts.png) - -Storage locates data, collections group it, items are the units commands act -on, and attributes are the named things checks and inspectors can read. -Operations describe what the backend can do with those units. Checks and -inspectors sit on top: checks enforce a rule; inspectors measure the same -surface without enforcing anything. - -That separation is why katalyst can start with markdown files but leave room -for richer stores. The check engine does not need to know whether an item came -from a file or a row if the storage layer can present the item, its attributes, -and the operations available on them. diff --git a/docs/static/images/domain-model-core-concepts.png b/docs/static/images/domain-model-core-concepts.png index 68a57ece1132d5768594059205c1a6f12be1112a..7c34b9331e93a03df12f6167b3ab4330d5379cee 100644 GIT binary patch literal 169969 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

E?JIjSMtw2) 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 z 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 z zY!+{^Qh+)c0OoZMf&a`mbA_?%)Ks7RryPkfGE8?-hyH6Z**yiB-@hR|U<6S!gq3e7 zg@pmhV6Yxf5kljqrFGHlt;7ZN@9!)`zkNfLMMEtGfqA5tR#ILET2 zk}!vNp+F({PM3D!lqbc@>fpL~v_ZhPS@67#UGx?>`>^OdT5hE6Z@-0?3p9LN;I+0| z@M2D3oXXv?5KnsS=NM{{Jy#?H4?yT(J|^ruNFA<0raw`k960lQE?Xw7R}VK>;H97A ze&5jLsqGlaAM`rFBZ)+Ze`-6D@;H}J&?(zLGGda1tOWOZ|4>%rnq z#gkFHxmE93M#PgJ1U_Z%6BfmOHZ^&T!Fr1~USi`iRP*ZpL@1!Ob#DwR>&S7Jvaqyi z?@nV9LOz5WONB5qh_z9isrIy~cbv#>csIV$YAc<*FuYmHeEQexQhR{352MdXMN1wK zCoB3{!X+si_oc>F#NhqdL)rVi`)Ro<@G<~;sU}JJb!qf)>}s(cxMFcQOWcD!@0&DU)E;$Rk=A9j zD{N+$q~!p@%Mmc;*wLgQ$HrU4xVnPd4OB&2hS8;{RzM(`GaM-h<0MfXc+#Nbytmf- zsh_l1X%etGnjNG>Um_6iR?Lcm3~d4HLP&4RJQ6}pL8iNlIdw$1s&x45PPW0(d_S-Y z^4rZRTI%{uzc6bcrUAlRszuJ_);6TX~1=T_Ho zMh4rmr+2LwhzpOx8HiM!0YzlE$nY1vc7RG(a|&cfteZRO@IZZAPsRC4zP*?2&gP(3 z%a83BV3z^F^pK(6I-!lB1;b=69-o0O4_Q;!8;_cooav&af!=}aeha9Y9hlud^#3i# zAbbW1^l2G%;-qRBdFjkpI_&eucQu~y`3f3rI{9bgBU?gc96V*k zWyMdx{{(iZH<|?@5W|XKoSMgcoYC`h+|(%6E}KMK-~+YC9rI;~Irm3UBz((%cg+3% z%rKHf)AkLH;*4s#Rl)Kkhz#1_0TyFzW)`;c#)pqI+}QUg(k^1$Cp6~&_H2CEIpJ|P zW77Owc2yCAjs$}jSXO9~yoOvfGO4Rp?+IsOD~wSYXICbmGpZ~O!foD+e)Gb!3AklD zrJn2fvj$T>b8lZEvP)U?tzzpu7;Co7rya8ih(MCJW~K*gD%vFs*t_sY>@NPcZNo2> z%{`It%RMatDAH0r)$a2*AD%7aT9ltB3L7idejxQifZwW&;iwm%jq8dehZ|==y_Zgu zn?#(~C4Z5THlqEl=>$AYIO`^|go+zWF&i20l-$}3ayyUBb9DHChP!K6_nHB^Dw8dN zfvrs0+;oQN)k2kQg@38NWOll}_oPBI-`dv>MX3YtS=%lW1Iicilm~g~y|NLiC#{ zS+|X{(FvwDmh;>4BHG&?Z{}BkUGX#LfR54qbsiiTVZYrnIVPj;&=vx5X@2h`@GAMd zO2;oU7#{}(NXic^xNJNk?p1-9!}{`TGr4+KD)>#p&Gzxx-CG+8?n+~cp2o;K=&YHy zz0-S?Cn$*kA zO@&obIz1f&^t;88$nKy@u~Fx2=VH|l?5#^G8`q}ILX}i50MR5W`5>icb(sui0j$i@7yL>fa6o$&2!pw%JTpF;`V-rMB5fIcs(+xD%m#dhXQ9fx;dQmy~SX>~yE7 z`~mRW2hN&>y_?Z1e8F!fGmA3COS86v^m4`5y0f@?l^(3UtMskNngxHCTCv|OEAMC% z1XDB3u8ivRFU1PUbU(OLS(k+7;mO=&l$_{RY@5~~xv*^6=`tgvS~9x}xtjxy^`{Cw z`d&wPkg~RmpGNXf!hXR(Q;bvq)fL2t?X>jaR9$XJxEuY<*@&#}vW>i+DmOn(mliH= zVB%0R`PFsQX+>H^*|(*ZL{nczXic$C3IBsUg8IWGgpFR($7Y;pI8VyoHR56wB(&N7 zX+6MA*z6JjJrlM!$#qvYVN2c3P9)L>Ioi$qGrl!;`m~ZyGMux2P#UjARhj*g$=0ec z|M|@acsE$pO z#Y4lNcez0$neG+}sun3NWCkpKjwFS3v!Fs%C2ILOd8U=js}8XWX`)E&yTm)S*_Aow zjU=&KWNXyMl{WnoDw>bHLuUtO#r6!esd{tG^+V<~B%8Xz$zGYHJEdt$4eQRPu(l*e zl$I8~^-X;sMLs;Io1IyGlRjH>zM@C)?bi?L1`lGO&(GXjQ>=<8t?iQ2p3RRaO;eGu z(k$z9)|@qa@}r_>sz}v}lt`gCf`3-hzqU(BsGBv(@`hcPO72E!#C}>K?#iNr2g2c^ zOR?N~O4#f?Hjk_P}`J!??y(_yBuT zMHiIf4^jP+7xOFLKInZCaK#|IoV`_ecUsT+>HH=8Da|K?kQo863iO;AN{Y55=C%!} zlccnh&gPV$EOL6%^+v3(p3)^`R!o#qggzpKfvpV8ie+IM8PQ5HO6O*O;q3^vu_XK9 zvM0qLgAwh&I|Dc&t#q%>THN)&{Lrab@ve8q8BLouk24FOgYV~oOl5>v)AnmlT@5BB z*#uZHrU#EA-%76~ znzmkgbJIm!y@|EIyKq~fs)hDO(lclIs#S@Ia4oQY)R} z9MHIqSniZ@^eOofR3Sg*yL(gEc}*rQ7ZB=%uj+HGtCu_;TzC>e@!-R1$BdFTDVIEE z48NU(LC1qO$qUoKsQg|y=g0+tb=9kOZ52t~%1*`MQ;7qdS&#IyjG_2o|J54`4G!E!& z6V&4waR|o2SOh-XvrUP{V{H`=nnMjO3I8hvt}6@PB>M)eTOMiod+w95&Wkh3wamps zkBf4w799PS0w`W?x+TYi^{d4uNbl+V(8l9$;9lEsO#ASCF1xICq3~Q?rFxt&e{w=t^K`v5zjFULuA3fR*F%}6^^*HCsVf8iXZ5GQYWJ=f#`f}7>(pf1BJTQt zV5G?YPBH;-MhDI%le4`oF>~uB+?u7f;zXFe5=%t8_hO98ArkKbV7EM8`fmD^Tl2e& zWX*H^srPVnzg5z?O6v{8pmCfOjb@~$UbJ~$>IDkHzWx1;!TGGRCGO0oN3=HPi|cIw zPu!NuF~c`K7Au!f@Ff!9sZnkRZ>NO!H}wumizfw1_OwI;E}mz&qWyzW{z~LTnEQtA)))SgHchAN=x#D(rjn6lW z^Gi2NnUqHbu##vf8nzU8bylt7nbG3PkG3zH;3h4s8qEWjLX-L5t}PUk$lL(om=sO>w;q?y_$EHJCp zOZZ5pL&2mcE5dc~yB5iu>Zc0Jo;@bTlB5@H_#35xh^Z(-)XjN}*-p8PxFo4YJ{~xF z$dI^5-`F}I_g5w1OEkN*Vtzw+jLuV9g49yoAfRA*x+~JVSh6uvt|wne8+$oD25!^tK;ih`#`rR!YQNE_i{{?+U5i-P zZQzL5tGO)fX$?3##>U^<6fonSF2D4nj63*Mqpn2kBKQucVbgoz4U%Zm{bpwpMEM%C7%z+?Y-3_J$v6g67D3R1{3S!kIN%PE54w zk_z7_U<2Z^gfcXn|UtG>j$ z*)HfZ%nj7`Feiz0lgbxt$TD(c#k)pJ%%*Re;hCkC8ODS^%tf(}y?L2s_9+>xa zPp*9%c;Lgty(RU@S%saXpv6MrtJ2+!>rZVK?Q&h@ z@jP$|?qPDf?*4M)W3B3vufq8v)E2<mwjve9M=~jbBbHX)qxu5h-CB5l^{(pwqwB5XqRjsHVH`me6i^8TiB(ZT zx}?EC=?-Z`q(flnW&w*31f)k{K)Sm@0jZ&zL8Lo}8epDtqwcz&@9+6%U+gYSocqN4 zT<k4>80cK9lLw znP%W&bMQkYeQ0SqV=&fo4%D;UdYb8iTN--B%wOYYZnr&+sBs*CM_Qce5 znVpKUB_phvw%m=Az|knwnP*-buUmZjBlw}s}%t`!w@JJvaFP)>!ZLUY6h(z+fgWl z4+y16N0}MsT+?f|sxQk%0_%?K1SC~q4Dqs~#a@O}W_D>O_HHG8pDiesHOiFv*SQb4jby-)zVqra z9&_dKnBYD=MU39ymdbIthAaWx_6k=IR3q7iuxN62Z~4D&Wo0Y-es5$(u2uoZr=D2x zzHN7YxN(KpdK=9uO3C&4#*OTo#393A#ToksPF$r)O2+pUfsuoMX9RA{7|;fZq2suc zB10{H(jgm>MM#C(02p$c(S$1<P2Lju{=g?^`ljwMxw=1bjw0K@AW6H2&vkR! z>;>8bcg$C^kQ&Dqujt(<=)4*qSnyauGHsm`&g?wTNPV5m`=B>zImY|2mqcjqdsY37 zK_<&B2-n^jwYGHQH5g#l0T6!Sn}#Xog-4uc90t#!wwkAKOu2Y^YsZ)212 zaF>M?<{IFqRrnmGB4E_T0S_~ct7+D|!J1WI*(qRfKx=*s-cRn-oh@(XvkPlup=hdE zZbAMxcM2Y7@OrY*-n=ZmLX>J8c>V&a?J@Hm2H=D(NYGRJbx!2bUr@79;w^p=OqN+n zH6tsXQ~RH`uJ3Eg&)M0<)r1!cstHLf21LlKdRjRM`eOUTTF<^O^uc}gW`#vCtXX_^!b{(+c4!3^WCjpAEP_^n8ETZ zg(k14_Ifc+j`ab>Y_|abN54!pf-Av8(rwFf^0o6-ccKK}VGf>qu0_n~xNk=jcu;H3c`4W|g}Sp@R&m=U|vq9f;McioyxMC;> zucY(}MrgQKi@tc;RIXp`W^(NjX$`K%D2F-%COAR}Zz6X|GvBF<1`_FG#FONs#mwC9 z&v%%*j44aUHc?JZ>y!M){exp-x<>DFQnkj2Gm$=o@zefYRu=^SB9*X{TJm=4riF$HhMB%J_x+X1WV){;1FcROFZ_#?sR3 zn0*cf1%lIi?HRc!Y@HuTUk5&AC6>9>Qo~ZxyL>JaF>`z#E|=cJPyzrW5r`Id-IaEPcV^@VC&xGFAPaq$9?0Nf#cgh@h znVvHa9AoLp)Jm5l?~GSCT|k+b-cnSkwv|0~l?p#S&NMboC1?NPCC}|`S9+^2_ zJLf#^>AbBbbsQ`(Vb`1(O=R^sfwd)Ha67Dac-S<-1Zc5yh!619p^kdxa)Ip1HV#{h z_}uN403ZCuv^2uDTZQ3`dPL{h*VG?U%C$RgTRQO~ZQKD>&A;>N_DZB?)9{jQmH7>+ z5Z>%MZO86F_q(14j_!-!Zp*J7xgB8wDP$|=fuCHKUUG`Nh|O48o^FneWIeccuRzc~ zkAnC(WK2OLc6i?;t zqgK`+9r6`W_6M;e_#p{8NSYlRg3_d=F#dkkJ80n+5CmxCHQT;@gS0U`@U2I2k0N8@ zTomfsi#T&ktOQ+|ps< zXTKA$8XQ&;xj&#Y_&jCiwwvJG*l1{@&9%L_x8Ve0qhry39S!K%2Egr2#P+8zS7HWq z91`qJ>RWkGBFF#XEfF_ z%f>S6m~hl))LJg{%O?N2;&P?!O-{TkvHDO8-Cmo|D0dAX5@@KTcZy+`Y0kjN8C0I|E^zsPy8{gy(H0o6>|hO_>h%WV z5)|k_$qS5|ffilJ0n*4Gf|*svJg0Y+iQJs9D;vR-iPfBSPK=O zd_auG%(|vq;wQ9nwV1AfEL$>4SN-Re>-ZoRss-X)-j;2q;)eZmf`gmU2}NuE%BgC? z%pukZp65lyw_Mbh;h%#f+==ls;AJzRNx735ok_ONHa*WR&voUn6_ zxk*2W5q=I(+4n%tKCGeIJE0)9@L*S~`f)F3<+JH=eaP?3-9XEwfFcHt&55(nvo*4_ zU$QRwCQS9_u$AI*zbJ`@??Z9=xp;>h%tG(&o(hvE)t7;Un}nFgRJ_xEHtR6-av#y% zK~8v^ZWPd^kwf;9cW+yqY&h?0@oxOl!bgnbZ=*96Yxl-*o29AaIm5BU!StG=v9m?l zQoh^KD*<%x2DB*&^fh!}AoFMl9yj=By+unSCEmSGK1D?Ps8@={mRz*Gh4n6Sm!2Si zHMht<%o?M=)<#5!qM|j3W)Ie+DV}~>P%(#gw;nd3(TF7&T$m=rISsvNt{S(%41t@Q z360I&x`V8e4EOWXQ96g;LWDNYRsz3KU|yJxCV-ks4=BIja+K)oD3@)l*fHK5>xj^ZZyjMluUD zCxo+S2BS|o0rYa{+wG)J zjh`a?f;4qqBlTSS)l>1}EazjkocCLve`BN(YkT)}^jSo3W8=IiG4VIBu}S(qs4tAa zqwn+okdx7z61{E*;G#(n@;;UI#l-I9>?TtCfZMG%8)Y)N%P+p54y4ELa^xSgyDz-e zUU)}~09i156F@_K`t@&sB7QjWG~vhx>}n}(p$4gS(Tm3Dqi#zxMp@kPk?O<5TGdVG z?j(l0>y;BnolX;;q4Vi)J-}r&pc!;SUKpPvj*aPVO%z_OY6}tB{G4aPdnLJHf3~e! z=+PYih}n%5`&%(k{;|{GxHH%{C!ThzTT}$jAusk+ex=lD@4O-=Vrsy~+=p4KTC&kG zM@BZx62%h`LSUfiR;c#~FeJM~PEkAo%r>l+FDpJjGaY_za9~R%qPvy3ovzlBt*UWN(yOcsrZp0N7L6{UP3bTMmn)T-4WO z1zuE&<6K!wQRo&HCXmGH|J?_Wv&li6Htna+86YPSntX^N*!CYzlM;f&X2p?oS3jp9 zGz8D&who8ptCvWSk@wu$8TIydH_^==7j}Cad_}NFDx|7Ar}Fp=m2SCvACvpuyGMEw zQ@=~7hzVSs*umcAXmspe33ISFhR+>f`&Qc@u*-hL>_s)6*o-AL8SmU&JmA`D5XSPx zilbuwy6jCA1LHH;7V~J#r3Hn<o-ENr0nK^FnZ8H&qZa)>&*7BGGs_+ea&0W(Y zguY`gqSxE0#t?cSB0nt5v;#bpJ5Bycx$Re0v<-Q%ioccj^=cQ!g-)B^BfKbTYuA@OzKC z=G5nSZ}-a!@St#SXU-cU*-gCB7MW6O#Ht8~!VUpN_`95F(B}XgW+L9h991jg-wLl2 z?yAJ2b9Q>aPA&jPc`W_1=?u)?bB3zcESXEK9qv+BW zXbf=^D3j~MG$K@+jOpOks4b4^ zU8Lp1xpenzOY{D4KglVJ=27F&P(DnuPrTnf`|9nUHpqTr!~HRCZ=6whzn)Q?^F8|u z;mGp0wF^DSH!I+dwSzKEDuyl$HdnYBviW;Gl~w9iKL*j~V~^ZvJr5C0O9H69?hgqD z0~j^wfrI6p<>B6O(#VGqvsoqO2kN4zt=m(k&pv+7X>vV0cRO~~AC|BJQ+Gkb+nnHo z#@p-yna1QbUa<~ocqE8y4s9BR4~{P*{7FlaLxe_1M7KGq9w^&M8(VCfNucD6d#+Wt z?DZRjr5=f}weXLyK2E+@p6(gunB|pVJeOh;s&4&B8s5*(q^hLM`sx_7MkQZQN3c+I z{c(K(C}rxit$JSb65J#trL!s>cdC^4z|yMPv12cKQQt4J)oTP^4)JiktviR2a<}By zQVsx<#&+@1sd8YMDlW3d?d6F{6MQ&Y;V`l{*I&9guOxkBL6JZ==v;S-umbzZJ=td* z*kPr!7|GncOleJ%_}J7@|AUFx88N7|JJz39J`zTuG-Z5%+>ovl12JO@giUk zqe;xMhPs{;~e};mDq?p#+nNnAw~ zh;82SGGrQBa%-hp?&qO;V7WL_5p~e5e^imbq@9@dLkhCz0PeB|@ct&GBUxvGS3fF~ zR2DK0<)rVJua+h1{48gaV=IoATpdykn^KNjPH~dy-b6<0j}Ullmp#Zn+ha_O`5>`^ z(P{=As925j3wqDSL0M?F7{hp&Zx)g`N6#Dot;PK9)g*#ic`zL!2_3pVyzh&at%(WY z5o&#b5X#7{UP85rk^oF+PF)cbiR#uvUkB4?JEFMs`7u$>ifbY$fr*+1+S$`XB;Md# zSX%1z<;2r4wz}HA{lnScSBA>)@L%HH*K;n3rUwlMzSm0?4cNTp|uW=NStQaa2+!-xP3dN#zF}kEFkW%`Q5UuP}Gsq+kEYOu@!VJBCu4Wze<% zP07;Bs;0@NDQ}HWSos)u`F1IVHc;|2Mehjbul*?h_<*jN-hHo~2=A=~#D1ok`$xkA--YfVd{@>Ts zBT(VG!@8}Ni;QN5lV$3ewtR(3IwvR;*rreS-+&6lb^I%TN-P-3K8U#5qxGX!s;w5| zqet>jnAt6CU8#~;W6>%9rqBNV7C&y*>7KklHL(YP3xbJz8NtOFH6yY$mI(Pobm_y6 z2>Xf#kuvtQz{0{PKZ7}{F~R@LlBaI3?R|uiXZ~=1TWp?3 zoe_7A>(A`9R!s)lXh6ysj5l5efNM5zSxk3Ws7OCuaxx2sK?z&%@GelNI8k&_=aZUH^d`*6$Skrn=Mofn9amw?rf$$WLb{4(` z*;*NegN6d|`jwW;-5jB;Y!l(Q&bIVm+$e?kS%$Dj61DUTsDSTac>0-6Ocy>sKQ((o z@9vs~J-X(a!Ui~^R|ki|4G}PdoQT`1@Flaz{6W~zuNaE=7A!qfJqOqIr45{znJ0d} z@3)WPs(hZ$+g{|ng@gf2n!evrCIp48@V9UOkSO`eTx4>KUno;sL${6a;P%p>0@!Kb ziRma*gaQKFm+)^XORw>wj12*t%m{2gb4vcMj(nsE#AH)qMN3TNS;`;=Tx&rqU5~IH znolRC+BiOWJ4>O2MrB6=@yV_0Co<55hP`^$sF?%tG6280duQBMd}*{am+{hqgBOBT zJGZ*I1+w|@b-HARG3lwbEUBOu`iuus;K-{~RBB*>?PR|m1>yk=zd#0GS^&begU;C* zom@&}F0PB9Kyg3ISf#dk=oxm%O_1w|hC07s&ZPh~*R5ASlqDru{WLeqqT4^=!yF;& zXSH+?y2etyA@`4~%V!PWkoZ#5RKrNwgiBFpRk)23>01_CKE8lVSP|j)mm+z!nnt*N z8GQN+28w?u zZ2P%WfFNTb%`@@`_|nw`bNoq;}zkYn~ia#YJW842BEU_9ylN+3>y$ZnQfVg0`Mr+fY# zrVTQ~U*_0FkQR`ChHb6$oMGhdk&)xcFZJJ28rf$FLp~yyTZ(KxHyiQsr+Lu7&&Rif z+^n+3(z3Z&Z;rN)M>31V&vvPeAHyVhv}C1WSd7s_K+FU=3~FsMjRK%EM<#d!5M z7Jx$j-mQE?$Xx(MSa@?&7tHJo6(8xJBIw_r_A8|GL}xs;*bGqnI+ihT;r+nRk3#;J zk}414rMB9?iccn;Q)hlj4k^H&Wi-T1cuUArbjC9Od`-hZ$y5o|P=?N|j$g6D|Bgx| za6_5`K0d5syWuhajurG1k`e*@YhJ#RuwE(q(Ehjium3B-2SqEUR(9wLYx%VO_fvz{ zl{h5$aMIC&W{nIO@${PuzvG=`I3z;ALg3HzPT~=8IeiHq!d}erl~y8rQ8UkrS% z{`NS40~L5i2)6y#N!4;&;=kVodgLd+uk;Qah%B2W6m*V24n(Z^{Z~-+&(|%w=aUM4 zlGs1DO|PVCr&K(py>m9nFTwt|3ba)Ufec+@jXO7e^{ix;2q$@I1YY#Nv*gzd^*#Bj zKj$kGF>pC;z^xQyKpN$BB^F-*dPHWh9{hR{Um~)XOSN4&cy57E z4pz})AE~pvj|@HJH1&XsOJ~|YNqi@h7&xk&$hluuOCXOj7l$UuZv9NplDJCL$GfpN z$$hN=h`5_8RR)Zo+Wj$hKj#_vbI>q)$P*~9{%du8zUj+qd@v^hR^kCUw+8fIeOt*5 z`~LXTB7X^0Tt$VGZnhr$Yvc;&CH7xuNUs#aAOH2yR(0xg3BusKnP|qB{r1Az|IxA2 zoa;JKG)rs|1fHiEcy{B6b>(U8yhQ;I%kQZlL_CjzAMK+jPn##7y4e&;KOv>pYaMfz z^Zfr~2k`0d>(f%r%>RPmsMrpO-h`Z8pdA_r#Ex8Z#0TFb)Pp_wO|~{aM(dS2f2kih zvY8Sh?&sKLw3&gNrGxB;Es{Wt35E&@sR(Ua_= zU4&$+cr#|sHJ|5-_VmQX*DJZzi@>*o!#wAYG|z0TAJg_m?n?DWje)vly|88?*4x~XeE_AiPuB3XwUFBt>4WwU7& zYQ2uMM+sJbZ)*Q++lXL-kqoT6R4DsmzMnPR^Wc|U(0B9F=RS2Um76br#cfL z*iI6BI>Zh9TXG+|E=JG%LKPi9`_TQhy+D;jQ=dgreL?q{Zw7_o4^R{w!(N;-ln!Bt zB7gkHwEP#=MySKO4WnS%G6&(A>Ipr+qy1W?B)oH=&VV_i)A0EWg3}8VwYRL)k&;<< z$It%vY>{9nfyv#8_VIfn*%Pg+jik7_`!%}e@cI)~N+MWz;1iuI^Rikh!I2{jgKLEE zK^CqE{x&uM>tMNUmYJUZsyU^nkl|%ypkWZ0Yz$q0#T-AIqru;GH4C!uKRrVj;P1Y3Kc&L6Cv@GqV)$^t|oWWHJ2*sLB`QB?K3sHX4h)0a-V+>xs?+j#f)@c6Qj8NUAGss0Ui z>w82%Nk&HHYZmr=wmoJCN*RMB>j&ElljIa-F9(Pf$y+|x_z4nuOv?~Ok(;5})BNh* z?m$D*Q7BfBq-iUZ=KA+(nOr&SF?MbF#~b#7W1s+snyA45D_UG!ROvqyT4aSQ3F?d& z8WtINYy?zq|9Gi2##I7|;&!Ynf!6XN+ zA0Pg&>&N?Gi8zA%*5`re@xeV>Lqd`~+pI_C$_$0i3u)G%+5Wgqmcfj_`Ymk`Mu&SF zJAe=Lyd4KDUteUt&^4+ar7V7>@7|Ll?bP$?Hh{>p&Aid}#FeWRmTY@SF2emC^do*R|80ZwL)BBO{XWeqjW^w zF%|#?$s3l%F=7tE3Q9f_?EtB1{%R#9_q#rWPSn>_hCeH;<jbhf zK;Kpzx9QNid6#_A)BME;LWlpK+3`i4;iAG@=&}uNRoa*-Kc$5wGh`oNgqfzrd#Iq* zB~YT+EbHq2BsOZRmpku3Un*_svqa{bB9sE)dFnYScQ*r*Qq+^(V(c z*Tkh4J??Aeo;C7$2Q54(SSGV->U1Um=yzM(b5s-#!7>*NIsh#)0rf-@k5rPOe;zm& zmEoUeJ8Cb%y@9A)`TS+yyJsJ08Uj5+B_LB*#`uYUZC_ch589Xfq=sNTTgBUN1NIMj zb>;&PyAB{_H!XTahkuHlAn4P~N+hX<4`#7gtzI^#cxPm_YBnXs9~cA60M^m4Np!~( z{hfe?IyKH_-6?q|nTj8EowRv>)DI_jLIzo%pRQFQz$3PwYgL!RH-k*6OJ=QxNQH9& z;?wM)Epw|fbN$@9k3z+d&5WDgo_j+?aLZ4o&~%3ME&=>CI_>oJ-ZWfzsWj-{Z6;bq zUtZu^E!yfN;Mg6krR%d38=nOXI&-Es)0A3T*71Ou#I)^KID`g|$=Y14F$(;xzVqh{sDP$&xi2Sf?+jS{jKIonz zq<7&I>8mVm@E5tN$2!PN@Z3IOAed)6Q;O7R;nXRH?1IG%$pI0L9)>$?6LRbOtmI!d zFQtp05#5pzx~Qj<)O{d?>*dTvL!K{GyZOnw%iXwoQfEPcYK7Lm#+;Q9f4oPM# zR39kKXXZMHTu0dg7{=B+?%_AT85sISL$x`FSC{di>(b5FR2&C50kWD##mt}9c z7gc2WUgL>LWS$(Ijlw(2Ss{(;R2W~ZY!12p9Yv}7zcBQ-#P6n59a!|;^hDKwmbX-z zpC9tDE^!lc?Bme!(4-=%B5-j={zSFEJOtHX9~@OmBysw@_MMtt97URppN`J$>uPXB6G$!2#?V{7if4{b045vq zlAkXe>6oDS*;I$}@Y!^sg~hAFn%*{zuW$9M+C6qpP#yiO$caXY9q}e7&DYEPAYaG-jRmmg z#tXIIRE$KHEu-3x#>zZ1-`*o3 z13`2rDDpq6=VX+@5^BDBtM!Ev1SdXa2qPh?T0h)+C@*y?%K;^f0_BMD{h$kNqq9?? z_ToG2W@Px6z;zACj%(vP(;f2eo@Obl?;^&I!fYC?LNF9p?Cpb*k(4>bXjH z{Z+5Jiz_Ajyn=B{Cd?NDI|wRBZRgB7s-bWGu(Z|s%gc*K6daQ=erhuM+zE;|RZIY) zw;a!l%AE@8kgF}yW-_p|DW8efjO2v$)DX>U1mWu*=&)Q{f3Uh&GJ0$yezdKsrMY`= zi-`D8Zrf${?bQ<(jHT?-I|uX4X0)}^d&$Rsr?Xq3xW;kOw`a~#+$CDX$9n9_`8JzG zJ!t|h1mcK=dG|HGY-+VG3|JyXthr?kbgp}oe#UJz;^1g5#5TRn_uL(B9>-k(Trc63 zvgDPr#+}td1nTQw-oit{!dDFJk{XSFn+lK-o|-+m0{{L8Bj81Chx|9 z`?ehu%sKSc+T1f5Qk2h+!ns=adDENSWo6{(q zN_ch1$O&XH4XbPFn?qD9C!iTBPpR{7EsSGz3D={%W&nJ8cD@YdrwS2S5X_9Q=7Hv8 zrRfM&(+RI^ZwMUlSss0Kr zE7K>2NR8^!mGYkJqV5)RXd}?8O#}Ohl@-zY{5xd*HSfcX zN4*>6bMeMBS+$9x`(G~S1oIP#m@}$|4eCofJaOpYv%($i6a#WY|8dm}0Y+NuM^jV@bVW7aIaO`ZJgjc=-#6+8}lgakV}nCf?_0@m7D=P0uXa(E#s^! zq??AuJPuJYuweG2)qRMeD$kE@A-K~ViaJ6+*4uIw&&x!iH=60^bUScJuV*u+`~N)> zGt_*{e?nJXS`6J~FE4?O2?2+7b4*RRViRr&3vXo=vc7R%|9we)cY>$bEHa*TlXd? zMp{=ZwmS2ew4P9SuorDw&W9N{Y_&4^IDZqM0qgCOF-9tV&tZyD)^QD*7#z6-?zYQbPP!Le5>XgJu)+5!Kms~?ibwcia)60qYz5m zo-;9KjM)H6Q^0?vyuc4h{z*iq$tr(rw#AJiGri|%owcl2?naZws}KSX^GUsgs3s^o z@xgG%9=7sLwRwM!AVYQLQ){qK^J2ZOmZq=RMt?XB1 z5#Akh7&9h`v}M7p3=XQlICh13aI5&pQkPvNPEf*{;SX(=uuC0lKqh%J)!i>cJ0O$&uFY zr=etDJ{A({OIk$tZl&_6o>u11e3_|>_Ece|&pHzzpV3Z>`@gmhh zQrmS#9ikVM>N$<`Fc zB>KvyHykA(CwiRDbz2#``-Wq9bgjw~l3s(dl?c1PU8vaTk<$+B4Ge?mU;I7pux1vw zen11s0G0v!J#WdjtR4`=#ttw`(cOTX9K~7ujY*DP1Upv9Z#C4lt$ds?YX|NMfKfMg zwMJ9!RPx9BL4aGAU`BK^m`0#eD&(3G;c{)QyU0g3Roa!v#l>0k!K@TS`>Wdt&j7XA zvEB)!o&*ZhXB`{>;9;{yz#`7N6b>Ixoiv^%Nq)1snSH)@id9`us5DjMbVg11Y6qfv zrvT#WjOV&P3e8VT+7GIpCA@6lJtaSiDpjp!@WdTC^Ly-Ftv5=pUR{FvnQ4h$BkVQP zmns3HW*Ja@tko0=zJ@5nf7&Gjl;tABf5Or8sesr3t25@}H;L7xPWqH0Lm(q)O%TyH z0k)&(!)xv;u3_Z(PpmdT5_~XJ-t-(bFq3+X?Ypmd7L{U5(lLSE}lDK0du~_AG zW`jH_3~wi>aXXLqmkUz`882O^O$epMmWgsXWo4M$taeyTD4if_6WP+Ok&R}zF=&4d zcDz!mV~j1;d%^9lMk_#NWKYUn0qU6)1*E@e&z!m??=`W45?=EVp8xJY-dYa$@+b{$b4KXqcIBE} zv79wZ5W5UY5RJ?qboAK2F)O12Q_E1u=8J3BK+YbAWYmArnyyrs<1gPc+>UC!P8uHAg0J zUYYVAIRCQM$<}oRq*uAM5Fy|@xe_p!g!+uN_GO6D_`)<_I30e0HLIb?YZnCZ>}XD>^A?hxMhkvK?8ji1-F?FT__yD2NS% za3Z7LR^+n+BM-@$+lP2EVJNis?$K^e%NFmG=#Hy-vI*bD7V}@;kV2ca-6@o7dc`-O zdt>UZ8>jK?+xd^4`V22IK@&K1KSspcihVFIJy-EzJrvI!*pQ{0^XQ`2&VuQaVwE85 zT5T<@=QfuOTo)q02E5A##2?qh%Ag9^a>0 zf`~P^vC8A_h*L1th5be%|H0WAj$!S2{sfn3Jv`aL5za-{RhjOmt`r-Bmc~r0Dzc2S zFVtXH+sZlz4d%R>!{{!|yXt4;)NWnUXHlZSk2&;-gi-4E@FbjssdC|>HKL9{P2-ib zfdcxJYm^z)FpZJSP=u$}Uo9zEJ=aKezwleTZUPZ>iY_gG1!-UJULP%;L){-dFZ6-e zTqVr9Nb#2HiXS43Wm+4ax@p$an#+2KXUzSmE6Wu1@RK^vX5sUW&b!CAP}SYoyb7nK z*+mO6_RHfbPqlW`6C>3#GO(GRVMW|aZ5$4{huR*m82v23I5B!qT|FbctN3lp8c^ZH z(F>4&mPo?#dz1Dt({4VDRe+LthL>YL-VBdKPO;o!J)kW86 zlsY10<~}hGmVKJ@M~qT|SXG&Ho87G4&+^~AoMTy#s`IO%vJT35ES@a8?6i$4J{p;4 z9W=S)giUj*j}Mk?kOKf=ST36iDTeA{sR`i1c8f?3V0JZvDCPg2`B(6NRyJzopt51X z;co0(B|E?^xo=l zsK&9B9|$!WbhZIuR#S6L*FNSJf3%+0Ln%B~upa$5%40iX`B*jcS(mz#gGL_-?89Uw z6GRC~ihwwV^{(S!f`GHWOV(~o0O6CENDXa4^>7lHiTG=0{Wf2IJCx}1=NqAUvg|cOC$~3E zQS7n%GNstR0C3Bk24CvlNs$4UdzgoB{HPY79>wdvm_hFZ!`00{fz}=4v3(5 zjug`XpJ(BPSL>XN{}~dZH}G*YJlW8t%8jOXll#l*_AdvacPpiIMA;I38#L;V@J!T|^!W9K5niz1WbSSl5ky=xN zPO_D%Huej8NcL_!xt|D@ZwQs)uSxOi79bHsbW>=15o&K;e7XPNNTQCrZQG{*raNZQ zIdE?F#jU>mT6DMvf%iqnR9=GxXFSvdQ<$Gk_Q>k!XBgPr+h$~1{~-Z}d6x&7eC!vrrkj>;^j z;BY@S%iKZ*ExLpWNQ~sZT;uM-E?n5Jp%WC!vR&2p)hqh;OJs>NdU*Y;jNYUAtO`N6 z&>Z>oU|a~P9}={6uQ_1{Ktp!qBb9u;xR z?BA0PMfM8&K(&|+NTPE;4xm~Ftn8v_eXp;pfVW=>8JWCSRVc0xqPGEdDfiJi=(uft z7eH+6O~#0DP%tfw6lcyHAn{s&^h!1Dur3aEMq8acrJ@{8IqmO?WQk*biQJ_kXzuph zrj^#_BTp^g()A8F2;PZc&6UvSefj?JEqnDs!-wxQSZ8t!Q+?FzI%NsF{icxD*NBN* zi-0U)ykkqmga_c;)s~>mB#TCbv(WEFpDuP_K3iqZ_yH!E!)ckk`x)34;?By#IsE)V zvhE1qpzh^s{3EtS-A(BQElQP+3*jtn`JO=2*r+njF@7WZ5D}A;S+yhMn@#;-f;e@` z>|hB13qZPRbP&(PTnm~h!(8_RhajH2@oMG7iSNpHgyia03NV)5d{e!%n3=l2pv8>&hRFVBSrU3NERIRXNR!d&zl?>6jm2JlgHmri)aJ=8QZ50DQd z&pNwFWW_Ym)stmg>($-JiG$?jdm9(l;+4r7kOyuKo_nWwRwDhpj(Bp8#>ySW#U`F_ zwGbs&ow`%|qRZgpu8~QW-)1@a=Z(0EBycyj$1Zn}2rqw7-UiEmPqHb(It`>S-V0?@ z%d_{ta3D~G$xS;A#0cv*LX`MTg;s}*R|-*LZFke^#`1uZLx%vmg^84eAN}mIDw%q7 z;+#PXPFbHdUqj1?z=Q?~TqDt9AO||o9!IxuoGGy@?Ya`_=o!fhUy2fz$bif><3%^; zlXnKblO~HDK&#vqofviZM$m1?>!=5aL{Dut-GDstbi(>O#RjD z6d5Ol*zmdi+wIGwnYpXB4!9}+X#qicZFxjD;yqE3n>1E;;aw1Y$qf?mG02?MExJEm z&_T{O=Hd;hAwkn5>)fhM8J6{F0S$)Mi2(6T+$5=ym~i2m7YL0YAP zD@K71S;e{9G5;a9|BBzHE;iVoLh4xh$$ljeSv2gKeqwbyYvp11Gy|IUH84i$wif9P+kG(4#vRT9T2H1$mqqZie7fjfh%`k-*hCV>#e zl~MaQ;=`_U36>R_ntHBC>)LTAO1+OJPip%Nl-@tS>6bMMih3cNB+EizgIjKSxPG*o zYS<546`zHQ?tFlpHJyM(Qf!Ex@Wi(*l_}8EWz<#9>8Rcvi^#m2ybR2>^B}eMyKM2F#*XhLqArTx_(Z?WEE8hid`ic zZY7Ba1}&^f3H(Eb{&`Hp%;qxeb???2e1cf;4SukGF9zb0jL*tFd`-dbjOwd|S9O~l zbi}m=Mn!wr;C(KcJ}p4CYYT>dcLyt$Szgx;HFmX;@VaB{@NIhUv9fmt1>jb5%#TBb z8Hc<$TFEaGHzF^CD~+)ue9Vz8AFR=FLRubfS=6e%Pza zl}<~~?+2cjPiQafcY*Yem9w##Y|%PhRsbk2%`P3jb(gp8skU>%SQ7n~_X1CfrB&G^ zo{q^(q?JEru+Zp!P?^v8Ln?i6@2L-`6WeO?FlFx~8Ol3_Pvd&;*6-3UYV&^csN@-BOJ z*xZI=j-(rp>*h06JSNX8t7sQd%v}+n{n2_e*Gf!~56IM(#ONjR_71+*{Eb68brItx zxfT1=uhCi}>Z>uXiM3pXP#|4E>V#OR6~bR-;HeFEXJ5ivZsF=aC2tSDJb+D_2HsdN?m z?|qtKIpsUrOF+zT*Ya<69=LrFowXzSbqC3Sc!roU%jd5pD$i}N4CZzh1AUrFX7)gH zq`Uroi8_kuA^dt0g1;c4;5EMXq95N9UOECh8vhd|pg0cZTu~ke{1wY?)xZ8=c!#Br zC4Ss#RB!lsT5N2)SHI*gohWes0#Z*7Q`gQ0wexLJT2Eiar>PGWnjUChSMd~QE7|)& zKwtgYNgfGE`6K#XGZc`jD@fgh@&XIN?N25La$`WCXI&+IKac(MVBhiE$wnTH(T7-d z9fE7cngH{h)R@<^&WK>OEx$36?HlONhqDD9BZeV#_N>bAnSr}sYaRw#H1r) zjTC?0zfNvq(8ZO^_caCRi{zJv_});efjy%4luNFs_4@KIRb5+X(ly=CXLDbL_w2_= zj&iyws+?sR!mE9nydSvix)_A_r&ZN-9jSpXH5E_G$)6z)A*gFN8Bij>Eh;x0>2S@` zWGEvuXJo$JW2?h-)TUG~**<&w2~bVyy4qPgcYTpsyVyoW4$zF^#sO`;l+%I+-i z@58)rfSDYIewf>*5zm#Frv(akpod?gr`WxL^CuO%n{4l>5NBIc&WxAlb~Q5g1w*a( z5%%FI*JexOJYQ@#h5E_8enj2p%^&nO=)f(4Sl2t@vqHfHOs}#f04a2(e9j=Ruv4r# z@I0*rq*sIrhDi?^f@=*t@7~gTuZwt3Q7vrzT{`X+1b#R1SQ*HmUI7mQb~xGif&8Z< z+)CJeC`F@Pi;+B=ZkpolU2MF=or*=-Q;FZJh}ri%m$ZDdEOV+mZ7TLDAYrd<8b3PubcS$SxViBE$YR<-~#T%L8ZBC6P^KC&d$t_`;s4# z4z_MpygnAc^Y~+prR}t&s6d#f` z7wNM0(a{SJD2QT;qy{7n>h&G2IZPZG8Fp?}^)Y)>tvFO;1`2N{dbE=7^<@;OAsci& zZE$W~k~`ZxIL>`GAmcMS-SP0JG0*R!UqToE1L5zzzUv-f9JBqM43s~-lrO#NYnKb! zD*E}fBLOGFGDtFF)VRrlb=t;3i1D;!tg z120bbQ|a$TgH^i%ToI^7xSG%B19KoQj4PJbdE^a8^)lfIwZ>`J#0fM`+IiB6eLb8V zfHc5D)u9r1OsFgIBTC1%80zh2AF3$bKU&l#A_1O&cXb1vdttlkP?=NES=l7Ek+N_R zzBrWwnoE-ID@axL0L-{@qI?BMf?le#t^0O<^GavsD)4uyL<1DkA(i1>Co_PE3gR8J z`idRi@iFbCIS&T-OW;_w5g=9_bs zRGzFhkjHdP5K>T_6iP#XiPp_w{lH6K<&ygVT5iGPks!PdI%W=P?+ah~FizF?`P5+(-OTu|=FhX{u zz$GJ?e~ff<;bP$JM8|OEg{@S3QG4Yi9X(bpljzj}-cCP}L9W0o~;1?kmNm<}=ZL)Qg&f zJudzV;HF<(x}9q#?)LX2IDRG%K1-blwfC@Buof>y{veh}nL zs$|v4y^>x-@wf+ly%qokY{h*lC9N!(L(nCQXnuRXyHSK=TnT=ZHL?&}exMZjG+d-F zXl|dDvbQcbb!jp7)&ED>cgIuxzW*aKE0vK-G*q?-W#o7_$cXGsLbl2%+tC&&o5IP= z-h_;n%FfJIR#wX1e%I@8jzfLEzkfV%UgveM>%Ok*zV7RJJ^v$4w$lf4>!C!SSobQ4 zmBl!EJFOe`zq^)AwAkYtFSl71rf|b)Y*1^txpVRF3REhcwZ~1 zsS(E-sn(2C?Tm}5d0rmvtD~|H@ODduf94!}fO`e94z($3HzmXaUF8uDyLOtwv!t(& zlgLv8?vIM+XT{t|FWcVY$viCXk801)$IC7YE=!3zqwS~sDC;u@1P|N+G@b3C#1Z~GI`3{oZ|rd>rd_R z?V1{x+1XJcc|T}Mwpme>t?}!PL*Jd*mNH@%t{X4AH0n)dtA`FaY8DBu0EbPzy>3ak zzx8&}x&2hGmnP`=D_YV+ zVLv%~vIk-prta(XsVqCArK2aiexI@%~=#pNlD>ek>tlygAt(<=?n-^J*%UX_JAzsAJ0P& zC?qyMg8xAPejp;r07_)~inj6??B3Jjfnz1XF2u%V*S4Yzk|jZT>(L2(HXS!@_n)`i zsOXCoq^4M$7`_RZ$9({+FyGS9WOq^ff4mVF@-;<(KlK+Hu#FwJA-;gkd?t7ol7nV& zAMPsd!4xF^juSA(zY%TDXt2C_fRN8EncUQQxb^=;zd#=g0ghvS>n6{}(Chki;btlY z9HB-nNy7KlPLt>m<3_L+z6OU0!T6oOn)Z%W?ePo4=2x*SA>Sl71-OaOAyjm!hX zi!#;0TTlNWy&XMRD!6(6QCM#b+Bz-(HqO}L>>e!rCkQbNL5wtn?5`EhzJ%EY=(pzw zQ`WB}Zc@p?rOma|_f}`i?kQ0)AxRKIoxGJC38-x_tN2yGO~oGuke9KA3W5@1Ui6p^ zm+{#73kXC#2b`n%eVV@^eXZv_F0FTr)>IaTWtAX{5Jx~==YPQDahMpi2_jTm8CE?q z>^zlU^wzF^6$Wjd?>_=9|Qw zMtou~@-H+4MJ*&vMY;Oho8mMOTta9P|M9F#%}G5W#~9<@r6r3u-JQMhgET z+$$fJpz^Dqva02GGHqhQWW`~B*5nrWEswxW`MIZd5Kyu@h>FCG0xM$34+I3Zh7PiZ z#md(`j+Y${Wsl4M+GmMI_hGa4UJxKe93#VSCkY^&E|epZ$Xv5f*B_n8tlrk&+)bj& zUK&FnAFI8@Z31|M1Ck}nQ>lZWz5j{X$~_0`D%-FgDEolI=$E*i2q9C3_iR?1z}W|> zk511Y&nYG521!wsO->72XsO^=8n+e%7%h&=&;VPfV43&YTrsnk=KQno=`V499PGftE9l#nW)v*naf2R!@<}i6x>{#e=3H z-hPvsF6*Y~Em@h(y*(~Le1T2^R{2k1y!C~7C7CbGbl*nAuhRmF@tHL^E5?s(a);Wu z&k9t;tGeX{405RTTHCAZg?W#VI?i&N7829#{!rIQX>{==_iopLaa}K779WNHJnRKsS-8RQ#H|~)KJR_T~2S%yJ2sj+F?;Yjy^G|ijQ3> z*BYx;tP3_!4N3lX+JbD~mmRmaA0dm}LWaIr!L)VTR;uGq7rPGEt(=N#<)$;@Q1#Lp zDmlG$CPt!Ua^O~zKKWke+{rO=ACV}$@qcAWd;ypGWy}KuskBkFcn}|`0rj^{t%S3& zl&PjKJxHh;pPBnO3Rz)Tl@pX23Qw~rs9h11dR(xfvqU7JB>N8nsT=qa&4p)EFR&(^ z{g!{6zj*5n5>O7-FR!`lavq;l9{-mDhAEz@=*)*_GsO**`o>MWRCCO(2X{*-uLB-v5 z=G?JDEF6q$S`O4kZRFUzK#49-*?GK>SQ6uFk)qWQ>q4fd6UJd0%bOQKSF2PflcIEV zN;CDM{;xpWx+V5cbip+e69|kQs7$NqYa?yuCyMe%e`vYCyGwZ^eDB0MIvMoK9!fsI zs+xk|)My}?x{a*-1jTM|?5jAMyY<=cys-MJo?kFX-FNfSTX)93*Ea9FqJHj0Yf%0y z(O)|7s!MxnKs)*9CnH+ZVj^x_kJr>YhXyPRS=XCsW)bzXm`u`1HtW+zU0>={U(|OA zwy0wq?+Yt$lr zuATY<76_pDl7wncuiVnSrc`jSZLP{x<+jx_L2=S`RiPOU$ z0aVRV{YVSj>%M=|MI#|IfQqZY`~`O2j$6OLR!kwO#Ft0F31c}T6=4hK{(sK#PlS4x z`CavS*k<4&81&=jZOz`S+vb4(pk;QtK>{=-I(Ikb+GfWfQ3+G-siErV8+wvpez31q zJz8qFZVrARE3^I9v(w0QSh1s4iM?5!>IuRhsC;U^Gq`Vq2HXoXZhr1RV(6pdAc;2%{>?b;xCSDJMF*sBn$HSXC=S<- zy!IaHslSgA#>W)L12v3=&u+z;$o0{%F=DV7oV9jZkwb|#b-e_%kF6YmlQsu!Su`#d zfa@;aH-R#`q#0q97wmDLKw%161Df?#)_$YCg}(dI^?v1!zeZKbhieF4fq6#?(Bmt@ z-rs>U){%mb3jbQ%_g2ql@YhcbL{5fl8gc7~Hs5)C!EqX}=+jq?2>5STdk~P1y7)kf zHYw(X9YI|LD=}!{@9BzHBduTc0Cxl&vGD6_5jTK!nqEHDV>cRWF zxMv8Qz%Xt_ZPC;gs|MuAjRzK^9#CAr{Lda+BE>d>%D)mIlaL``mdIWoBHWTHKJZ*( zexn>6x{M?MKdS_T!KueU4wxsUvHb{>BGM%K32k>6?zs(`LIVjSl=oiP1c?VoS0(QL zV|9e4p-3n5zfz%}?Cehb=euyn=1VYcY>gZ2Q#a@h^#1wy9t9B5KX1}DH_WaL`BPvwqUy}VbbU2~qHDzxC%*p)}5?nc>qVF$1?!=di+Y*UA_ z^N6~nbMsC$3%m!Xh62Ka;e~b?bA=8$WDGi=8Gdzk6wLfI6L;eA3v?>zR?H(~$e!ze z-bKg7@oCV)1z3&BMYGTG)AyEZqc@_?P`N~(a6LzHlI=>dRIo)BY?>rupv7gP#)f+S zEeBabw$?>w=3Aq!RRyzelZ`U{wG(=gl4d8_+*5hQ531bQExR4{3%j z*6k4tK=>LR2H6<3SGG0X8jRVkkPW3wRpZ+i%LOS0w(gnOR{y^y_cNWe(Se&-6G2OH z97Ug;s#Kd`3-xG86re(THjtc_>N!uT0uO6M2B1Z2tP2J&AS7BNPeiTrjz!*nw+zWS z-+&j7)^2!SQBe-fM^^f7w=qN``ky19s%gOC7EA)Lpe_B%+4qo~ HY}Erng;Mj0 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 From c46a869644515c6ed2109a2bff99a4dd9bf1f4f3 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 12:48:23 -0600 Subject: [PATCH 06/19] Reframe domain model around bases and operation layers Clarify the deep-dive around base capabilities, raw versus collection-configured content, and operation scope while updating the supporting diagram and reusable docs image styling. Co-authored-by: Cursor --- docs/assets/_custom.scss | 8 +++ .../content/deep-dives/domain-model/_index.md | 61 ++++++++---------- .../images/domain-model-core-concepts.png | Bin 169969 -> 163973 bytes 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/docs/assets/_custom.scss b/docs/assets/_custom.scss index e060910..56f56d0 100644 --- a/docs/assets/_custom.scss +++ b/docs/assets/_custom.scss @@ -23,6 +23,14 @@ margin-inline-start: 1.25rem; } +.markdown.book-article img.diagram--domain-model { + display: block; + margin: 1rem auto; + width: auto; + max-width: 600px; + height: auto; +} + // Global status note rendered under the TOC. .book-toc :is(.book-toc-note, .book-toc-warning) { margin-top: 0.9rem; diff --git a/docs/content/deep-dives/domain-model/_index.md b/docs/content/deep-dives/domain-model/_index.md index be5addb..c0b814c 100644 --- a/docs/content/deep-dives/domain-model/_index.md +++ b/docs/content/deep-dives/domain-model/_index.md @@ -8,44 +8,37 @@ bookCollapseSection = true This page introduces core concepts in the Katalyst domain model and how they relate to each other. -Domain model diagram showing project containing storage, collection, item, and attribute, with checks and inspectors operating on the data model. +## Bases + +The most central concept in Katalyst is a **Base**: a storage system that holds **Content** (aka data) and supports a specific set of **Operations**. Katalyst is compatible with a several different types of backend: filesystems, key-value stores, relational databases, etc. -A **project** is the whole workspace Katalyst operates over: a configured - root that binds one or more storage backends into named collections. Its - configuration is the **config**; in Katalyst today, that config is the - `.katalyst/` directory. An empty selector addresses the whole project. - -**Data** - -- **Storage** is a backend that holds data: a filesystem, a SQLite database, a - Postgres instance, an S3 bucket, or another store. Katalyst's implementation - is the [storage layer]({{< relref "storage.md" >}}), where a storage instance - maps backend-native references into the domain model. -- A **collection** is a group of items that share structure: a directory of - similar files, a relational table, a Mongo collection, or a family of API - resources. Collections are the unit that owns checks and that users address - by name. See [Collections]({{< relref "collections.md" >}}). -- An **item** is one unit of data in a collection: a markdown file, a table row, - a Mongo document, or one API resource. -- An **attribute** is a named characteristic of an item: a column, a - frontmatter key, a response field, its filename, its path, or another - backend-derived property. A key in a structured object specifically is a - **field**. - -**Operations** - -An **operation** is something a backend lets you do with data: read, list, +An **operation** is something a base lets you do with data: read, list, aggregate, write, and eventually query. Which operations a backend supports, and what structural commitments those operations require, is the subject of [progressive operations]({{< relref "../progressive-operations.md" >}}). -- A **check** asserts a condition on an item, an attribute, or a whole - collection and reports a violation when the condition fails. See +In addition to natively-supported operations for various backends, Katalyst provides two very useful kinds of operation. + +- A **check** makes an assertion about content and reports a violation if the condition fails. See [Checks]({{< relref "checks.md" >}}). -- An **inspector** is the descriptive dual of a check: it measures a - distribution and returns evidence, never a verdict. See +- An **inspector** is the descriptive dual of a check: it gathers and reports of the state of content. See [Inspectors]({{< relref "inspectors.md" >}}). + +Domain model diagram showing project containing storage, collection, item, and attribute, with checks and inspectors operating on the data model. + +## Raw vs collection-configured Bases + +When configuring a Base, the most important division is between **raw content** and **collectionized content**. A base configured only for raw content supports only a limited set of operations: checks, inspections and a small set of fixes. Most operations that require writes are not permitted, because the system wouldn't have the context necessary to guarantee that the new content is correct. + +When a base is configured with **Collections**, it can guarantee correctness and consistency for more operations. Check and inspect operations can be more specific and context-aware. Far more write operations are available, since the system now has more context to enable correctness and consistency. + +Within a given Base, Collection configs don't replace raw configs. Instead, they stack on top. Similarly, operations that require a Collection stack on top of those available when the base was only configured for raw access to content. + +## Projects + +A **project** is the whole workspace Katalyst operates over: a configured root that includes one or more stores, plus some additional metadata. + diff --git a/docs/static/images/domain-model-core-concepts.png b/docs/static/images/domain-model-core-concepts.png index 7c34b9331e93a03df12f6167b3ab4330d5379cee..b40eea27e9f0b213b494b3b61bcbd3f3dcd66a22 100644 GIT binary patch literal 163973 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

E?JIjSMtw2) z`q-HV$5+P1(hyai*@47w-}%mCNM;|Vua?=Ea_w(yk*!b5cao|u|NoP4@I`2wHr!NS zc?}mOc@J@c5Pm9#!|#2B4f71Cql~)5?7c$RLYjrB)<847;#zH>cRhM`)3V@WL2FZJA%JI!H>cKQUlgsQeBz z&jWO*A>&KF&F79n5XjD&?b6a;tc`FTC_Q=0I2os5|9Li{L$m3{VRhE%jCkJRw^83e zj3%=B>dKPGudGH|$5VIxuw_^1J~H>TA^Sx_FlZ;0jX61#AkM|$V) zdx3*)x~|`GUfSo~b#;StL8Hy-({NUcH?5R0pocc!SHdRs-K1C^i!J{Z9HHad3sWw8 zRVa83lMsY9xgaw0hx*3v!i~BIvWyE+*JtBi-3Zpwo;i8tl>_<>!)FEargDpj6a%NW z(#d8A74eBWb(?}s2flIcvb*r?fC_a&P_yiT{lwXhM-D}08XAewWECX)E#B}fZ(x58 z#4~E?{MW04pth*Z^v*_48QwxmFN{B9g{&}Moio$(TmQ$~!CIDac@CxBMq=EH4+;5O z2$zsD(MqoV<%9(G9TQHP=)q>UTaNXLh`t9{R#t5pL(V;Esox;)l;!q*#FSP!G(byW z>?g1`RFrovN2WkEbpiU%4`Y*k;WKH}hK+%<4>TXkL!Ag*7NXYtdgG@wVm@swVcR%e zM6aSV;R9-)JPj;&0?`V~V^eB#40O#z!%S0jG8JsF5~f9oIUA6hf; zMH@b&pO3bkzbv2KAM~@l?eH6QR@+4}s|01+FWw)9l0L7NwIcSi4ZUf3Y_0e(8;Q;a z&EHWzvyFe&^og{2O9mI8@)xaYs{&8@p%?c{qPly** zk{TtRVlxNK2*a5Gr+TulYHFlypegMRtJAmVPQOHZzkyJdiBP0V2@{_}g^bKzbYZ94 z&5P&~jTkX%u3Mof2Ze-l`a06?8ZO_ohU-h%z64B@1(m!WbKVtQZ=@4*WumKvvJewK zH!5ou^Ku{!SzF3Vo|#48llYeM;;OMA5xX%tKjKw|6Ft4;-gSCO zj3mr{FD}J_W6}-7oTCOT ze|c-R*uH(91w?F&}z;0{g)wTtUB(Sbv^dLy&os^n1lByTE1 z5Vepn>gVm#U{efyR6ZvZ}v$#~n=>}L~wDajMVEuS*K-4NOZXeXx3yGBCg z`Z>-i2FF~}9lx14w4cFdRfdZ-=U@9?Sn`lH)M^(+Q|ItUMTgZ?8<+gVqG-8-qMj!M=hSQ}-o@i?8*WcbORSJls z&;$iP4?vAlk|%Do@!lfxU^L7@>z&5M2C@LO^dGVY8i5?+xru>`uH{Cm8eK-{*f!^` zhbQOkBYqtEoZB_YT_`m-lEd7~L4BC%;Vmo&x_Hm^@vkStA1vJ5bkySK{xco`Xnp_d zoi+Ud(aAtVu}XmX`k%aLlX!RYB*6iA?vzQCTVSwX%O8tB0drvmxn2(D&JHYH{rrwQ zb_{IQf{#W>Tkj&r`~H~F;RnD55WuH@yGct;&qNQ)Xf}P)N;~uIL9wsn$2e|_91*ILc&5c9Ju?#+N&jjmHtNj+0FOh3K#1^K`+;W8sY=mEwOx_17XnA5 zG-~`zR_xu963J2&Dx2R!hVbkrfQb^fCMzyFN;9CddKD(K(^1lWev8=8?;k#Gy!5`+ z=`3sSIg<%Z`Mo}-y6*EYC!beJW+OpwaqF+XOi0d3;%m1*RxkJISud zWlr9M=X&&II8Es!wK)Cqg52bZyi*XHlyW+K0^MPrg!G3j+L^OFiLswXZ}mUfcSFsFlr|!Ad zWX2r&XPVxrLuTX5lr3Lc`Qe5bLplkTy2bUl%1P+@vKlA?7u6RG6Ymm|JBwXBNBopdCmo*@FIesh%7Zs0quGmmnF^x?GHW z>oxhugf)dfoA8pe;Ll2R2?g^r^|U78^b{AGGxYbd1fp~T?lqpA$=?2>EM{h`w*>^4 zBNIYwK^#fMs?L&^yL8dN0;rFyL9nm9*^vCDzqY(oiNMYRwPI-|zMB7fGeI_N=5X(J zdOfwwqDbqb7L&VKuUz6yetNE$vElU9A63mjk@r|?HV6nQ$=wahY+5pt9Q$kP`SUv! z#HVt`{JM{7->SFC+bd33W?HDGC0UJ=6iREMMu<0tTM;p#`OYu%BR*wAiiJVBlWpQ< z4f`k(=nGPHF#TWqYhSvja`5L(n^-rcnq}^tLuhP*7Ef95shfW~6Mpq~=$`OczRTNp zc~+fn&#FwHM3E5+$1o*SW}QPJM&WrfJywjOni&z)_C*~7}SYVE^J&+jRyS%bvU=faNLJY9!&FXO(&V_ZTNRLUEjGn2-9`hf= zX!i1zYE?$plqTlfv1bh6k(~ehQS3tN_>RK-Vb6-fNi`E?Y4+JX4W4&*l-fv~b>4J8(qYi5ndi&(a5iMDZ2Z zKENKpqT~4mX$cy+s_wAcwqbR9BVP8X_M!e@5KpaZnK3!-Sa#X-#;#I_rno5bT&F|+&zYGD3MAlcJDB5&jx1GN2jLNQK#-45v=?4s+ zdi>we*EEaQojlzFx~WAUQuqyXzVU-gQ)uDi*AL5h1j0&TJO=S~qqcuE^-ES^55E7Y zKE2#F{pz2ITHJFBort#`FJ$izf%2t%n8xMgS#Qd%f@r4?|BtS(4vTVI-v$(64=Rd; zfW%f&qy?nY0BH~yx}>|C0Ra(F0i_$1?gr@)LArD3?jAb6^!f=ruXeu3i}5NuqZOR9E8=Gx7O_W>>|899N&)MSjlJ?%uSDKFVVvz9Qas zUx9ZM7!8=6pNEcvff>faX_}!~zJBHJ^9{xu-z}$EW!=pQU1X=iY2WuEViC)r<`73+ zJ#UWxt*b0yk~aJq!LwBJ%GCWr*@}c`6;7zULm<@#NnP>OvgmYG59zK08W53uCdiPJ zaV)CCBzji>7JE?L;lz>qa5-PxpP>cLs4{9l<{ChKl2 z!{i3?1GaDY< ztDnDc*$y|g@w>f5Y!W6`le|#vR}*mRO2gj~BCC z(A}n$Ckdd1&=UutR_^lZ04gz{Y)?jd#S0@FYmV?KosUud8FY5I_`1)5u!ND zZrIJQ5F~nY@V>_1{`3O=`DUtodWfLp&RFrNOLw2DwFKmyu`=$7yP@5|;m226wbEZ! zY`fH#S(`?S+6H;TgB|}qGMVyaE8wfx1r9059(C6RDuP7QLz^}A1)BVV3-Ubsz|X1M zIOMJ*5re7$;&8i2`(U@&IICm`*uO}grqovK40ji;4mSdyt?tKPHM2DpEXIG0(AF_F z)K=X}z8Zh{v(P;QIoy-LyfXdXy73hUnQNIIBoCYl0^~>WtDjMd2_}5G%-wTGvb?o` zi)OTD>}02S&rsQEu_tw>H&i2OW`?`-O*$A?44o8?6xo50^F(>5mAW?9))IW4n?=QS zf94pLO{ugp2BHb)Ot!lH`Gs_~awLg~-rX<+E_d>IwM78%ICBgF%l9;h>YRqpwO?hf zfG7ZenmnKb@?Q9FqN_m@28ciA+@D=vDNYrhLd|!wU_X{f>s(CKk8vG>9=}UNGa9b8 zaEI2NmHu|**hT||zOoWQU%Oq;Vfrgv{_gD0B-UCx0xEl140BPzb?_KNNpQM6CKQv^eU#n%fw77lh2KYkOkF>Wq}y74ib7 zP_r^rU&hLp7Qbk&g9LKjlzz*SX(Kw_%hx$N7)s|S%WGJByZe%*G@R!rgiU7T;kk(+ z%A!gHMP4{=neU6oBh8^3BlUf3_{NTk`61mLUJaugbUB_K?uZxxUcb)?I>}{)+bL!5k`$R69OGQ4{R$gAapjfG?@oB5BvY_C}&8y2_8Ze4X2D`AnW(357 zr0o0v68u}zROsJBjPP>>M6R~`rv5IKYPP(2kIk zr_K2kNcnNAi?ES1k;5ZkxvDLZ1~gLC#)(~BJqluNiHo#XLJ9@xtoEN=jah& z6C)*gQLK@NlRRas2c*DrEg$P^PdIry2<=|FM{G))_4(6?^;$(AFn^@ZX8T9&bV4{O za&&@VC*IO~p+I{)ju|r_KcTt!>p6$2;~f=c_6d zT|bbYKbL@^;$xKh@%$VWy(pglwAjwahp6sM751|2uIA;;;;~#}e||0YcNFHyv6inc z5p(r0R2{*}Hj*Ocdd*?v`;T*sM@ns_?eZ^O=g4WIE%nedtO8GYGh7~yR*fo&NH&@9 ztZTRePcVDMgBb7a(z~AQ>vxxx9*NXT`YXTF_v)vor$=4z=if+h+wB|w_t8p_tR$*W ziuYK2=oY~jwhh;(M8#6MI$$@I456wP3GF_{^;(ZZYToy%bKlX zXrYO^Uz>|cB=e*U^pI;xZxOM@XWBeA42ECnv0|8K9Owbon=l&Axt4xVbszb&$db-Q z@%KvlPeYgY@td^6B+0^1js4i;wch?Ckmak9Yd?x;k8wW1tg;gKzb_YOvJaeEyXy#T z630K(#~a^azUGXX)kGK!O(IM~ClKogP-T&{53e zkVWHMNG9Pj!0Bq^4D?wv7#1X~`nf9w;Gi^7Qu+ool{EiI|2+sX@W9}EfpI8Lo$*MffzNY?(+IilICdbQ!1WaFrX}Mq*#OVGR%Z6PoZoqKiqSPXFbN#i^g4$9JE- zccuO%v;Tvh&s%=n%fRXUsWGDUfdZ1eY)vnk%S;#CMNz(`;~1pub{UsQ?IOVW_+mF^ zs&EKuIJ$l*@5^K+pkb24_ns1u%KbI9ScJ@SqM5q>!H@vsxj)$g5X5~KeGacPQ7K<< zCThn66KDCOVfS+BQWnbpaul;;UInYUdfS0k%?Z|x>vvkSVQ<@>vR0zqIs;b);y9r3 zX9Gfq@W+mj*1*{Q#ni=j7btk1<~Q4wH9}GZoRywbaDu1T6XM(7SHr*v<6SW&#BiE6 z)sp_Xr69ZmLO3<2LGR6hF>#m$1y691^~ft|n9{2hZ6oqv%`7=TNLKDnfGjJIn_}Z5 zKnCj|_;1TnNXRii?r91P>N0Hk7d4kZTlQ5VoT-lC&zkzh$UoU}EB_op1DA~8513wb zKQ~1a#yhefMFx;n;9D?kgjMN=DAgA@r2&jdOQz7@>E-yy?yxa1+|}<1L4!XQ#DIQ2 zt_Jh7rZsp|y*E~wf8)_-pLp{hX@KZGp_T5siRzUC(3r_)5OU?!#*`_r=Sta(Vh0)C z+@Mb~9eRX22xGdjGVX#pB{@P`Ee(4pN~jK`yc9B+5N zL-fGI@vpBCaIsV&^ggBX1%?z%&rnuCED|!6R^qm93m-~}As4$|)T|sX{^MH%NzheoK}jsd(7V7Vr3AsXo+JA@zCG#r$T7P81W7g2eI<@;U+l7PDaXK5T^ zzVMx?C@_V?gz@t)Lm>9q&wVEvYJ(*)TIQ}s{rOCf@ef|>m6XhC>-@Q%qPIe(KnW|eU-Eicz!ecJKEU2 z^lBW@-|yPJ9?C8Ie9}6z*z(=R=I4ijKG9#iJ6lK!E6KU=U3}|a`acs#8pF>ebbkoZR=?SM=bqIEdjL2GKVTWxZ!1_zasX0PF+)s+RcK^zw%>Sl^ZYz@{EBrmWn;vHseS z(EfxN@Fw`^6bUr#mJ5^`f(#mWg@Ye9!_k_tl09<0wP|T-^MQeG4RD;5YnmhnJJxK_|vx#tE zPcSjVs2RmBZG(F-?;6&n0@O)vmhFDOU7uw-y=iE)ebHM6679D{jFRv8QdZ|eIkf!+ z0<2SA@IWu zS*4qzq;^AwMLHsrGCrWFea&(9X$>gB(q1~Rw!wUc)cpP6-@w7Izew<+&A#b~fGXDtAn>zwJe|wI&6VidfhvGp}mq+;ZGfZ&8B3#%$x{&j3*DD8<&wwvu!S zOY%8Vj7ztw<-z&=5kHOf$H{yn^MdpHPS-%kj4AkvsmHhVF50HcrwAl44T2%0;as$H zmYV%Y;SPi=KI%@|7oPGhu_%Bp{hc*r1K<91U`h$@%P0D+)G{$)#-N^ie6!hgG*Eed z=_eNOb}Mh1(6tW)dT1z?7^t|auKjNty?YI9cAKPvs@i6v8&x^NQCQ9d2%|E5@>1dU9Z^W**ZlPYaF+H zDLqMeVLzd-{l%9p!zKuTWR=;n3%95dnY9Ckt|ZwWpJA0k4S99WqjKukZ|UNnZGvDx zQ%VzmeP$Hsu8iIBSJy_OEZ~oOk%H{AP9q*@X)K}afI;A1p3WNt5-q+aNkq;f9|WWM zQkbZ%2Gpdxxcd_((&H(J_en(IpPb};IZ!IIGoHRN4^78-owm1Uyj)HRQo82&hHK-3 zSHnG&Isx;+tv#|yUSZ$WYI#xM1;Z6;ad%GZS;eu@3e(I7eFc`G?@%gQenB!bfRYp} z_R8gtFO%fa3*+yFl{5}|W;HAlXgt^KCgTL{7Cu{Q!F~O*t9F!qhX_>S!9n4i3lbHL z>{Bplqawd_R`VteyOyn#nft@6RlpQ_xes|~2t?r!Y0ScwqZMJ2Pij&qIcBhkk-&;J zo6YUS#d%_X&h%hg*rYE*X$JssDm)g6I~!Yy)&ZbuIu8o(LJjjs7H7ZM)&Vhw`=&6x z{fl-I5917v8BHFDr2gLm%xf425BXHx3oRxdp6&@$EYZj)ZyhJcB9yo4F}t3j`mi>dwcPoToo5uuW~;HQ9-pGdYO&AFL-e zzj29s^iETT(8H61cSf=~^0Xfd7F20d<X_r47W zQCwI*()5h>xTeLMm~X08a&S3f`uKP+(BC>FyUUJ1G#cfNuK=#m#-$q5CYYV!%F1smEm|@w zQv#@zm3*#SMsW-yt-mn2i{yc%_Ur5%8G)PDvS<%clY+0e)$?NShNVd($Z_uH9-9zhmR;;8r|p^>!uq(990BT1u7G@_CLn z(j%6keXI8)W%O@@(z_8fZ;88l8(}rI<-uMAbu{9)gnqkr{VXkQfzzQaP27uz0~2Cf zvx8wc!rsZ8{>T2D^|O^6?GTO+`pM=MfQXrvxgFCQA4@u7s2W|tq}^8kB*>@)c>unkNM#m~tu>KI{;~BuV#M6sC0zYAb@61829-SAtMv<0J2bT zYP(`|I%o zfL%MUJrckc6ogc&&yIX3WoIkkjyZ-G7Zs*D3GF^n_CjnNU|RkGwbG4b_^g>Q!r@vT z&1Vt@(Qj6e2#Uk)?jCL0DO39WsVxuVdAWXK&~t*|JB#Q(1Lu>HIlL9s$!buXzmd}H zT9HlTxmUq1R+BM%{hM;0PGg|_E2EchK&^uwEe35=XwmsAV$a(7Es+M01 zoXCn7!|bvGp^&bk#jtPovq8Z{Ug&R`tUEtFfg%SE$Lr7!*Va6*fq;P!+;Q>Plh+l% znmLI;MhoF~5#w5A>{qcP!=mWfB$tY211NVPJ-f6C_-y~GAB0N8|rYar_+BgpXg%fX&`?pp?zGl6#to0=-m38YcE5w#gKc z7;iv@@&THw@>Nq|RrrgnnLQJpQGypO9OS)je}o=K?9Z!5A_ z#+XW5l^PAFS-5V#hQnevp)WKDC|!kQE**j=>d{u4(xku!dS!c!Y{d_0u8=!cdosCF zd9X+u$uyzIZP`&xdBrL9iT@mqa^2EBjwI)#I9cf+l)~=wVm13*06X7pI=8zX;d4>! ze7DE7k);X!n1yWOsJ=b+a@+^2aaT#KL_oh4BLL#(Ovd8`;n5VBd40;-62^Wt8H*eb zbksoYmfBkQyCs4B>TKRCjIWlh7G-kV<=r|!#Bq>bfbYXmmQeB+Bmycx7jJu{Ai|R>?Un? z^Q*>@=toM6q|%|2!?9E4;w-i0lw1Dm{yqT8=1fAXr@wY*U{H{9X+YcWJ|<1UO;Oq) z{P!X%8`rjj2a^wc&2c52nOqmUVR#@*p*#6YG=>QG+P1kY<-L|>TOP!Kp^PT;s$q@P z^{0-z(e@tsL#H%~*5E0luuP3Tv{z#6C7UN#LshY4*z9JP6YtO01jt`Tkvrp_u98-O z(v*Holl1xH>f8F|b4t0DbW?Zv+W+;GVjf9-~2%w$+?hZ0-6-?2$C-35yM$ipm?;>=Jqvh}2l?54K0!EB9{lzP{Sm$YbOcfWfT1 z5wF=Y`Soo)4Xpa{U1FcXcD~3DfgHz2`R&(yG*9Q_yN_=jd*}qa67Ym`p(@L5HQc69 zouu*(Qa|a{7b(qNgY*scvAv z^e$aI*{zVBlkAOn57%25y8yyVQsLY*{m}xGZuCo8{7z>LXo~n>PS;ncpSmNH#qT4O zB%u@*f`OB( zxKdRrzJeOe&j@tE&U|; zxet3lO(jG-LODuWYY$5^tZeMgz`{%irLA|xejoBg%^ai}gh#VK zf9XqX{XxzC_!8gReEgwGB%7&=^IX?C8@~K3JIH1mlPXT2FJatm3039OOB{A$+F@Tc z%JV#j%fMDKloC$%yz4j6Cvc42@xx>QMW3@CssUmbgyasHLse~ZE4Fr!y=Dsimy-B5 zpSCeTTtje&#>a0upoxXUo(Bho>8i2#u;ed+pA&a(^22uBHf{V3N`FIwcoG8lsD+~c*XU01J94nl^8 zIBsdVcdnhR>-q)18FSh4T_95zzA?(^^f=yJ+Bf<@8Z{rmC1O_M5!U!T(xN$&PqFvo zBP`?2oA-Be=#ZV9`UlIT{1QR}=~@LeuS_#=Q^uuPun^Qo0qCKOTRdqN zg}w0nkB?qWUy3rYRqAmRnuK`v-$bHmEa1KJGFs_i29K2FUNP}TE$MrDUo8AU^e)dh zyKGdCmmA53blJ*@@Y-DmMq0(U{5giPCO_4Z+`(@FE&sD%WyT|0tx+d1jCSGF=RX6ou8dk4f|~L{i=$>N;i=mAKWeosP00A8X@UGC=~F!ITpG z*|SN{99W$ma$AW#wC`mg2H`xitl03uJB)u!Lid8daP+i&Oro$aS=v(U-YH0r0d2;j zqYRKDMfT!e@^58&>AD2uMPSwDVE3~){CAzVE7j~gF~_mM#Y`FN1;2NN+`Su zRF4s8pCNjaXy1Ze-+I0{I+-oW1&7)xq$9kX_i&lcc_vt)C!;p0SIVh8YILg*gs;j| zE7XIG=9EW6gzCG^1I|fZGo(JJ~=*A$yTpu zTW6;Fi3OMd?L#sD@q$z;ym35=x&B>AM*)e%LQ~P6bE{Qv#cri@{HHy{TjoHY_51G{ zyJ6l03W_yzoO5)e?SKU_zr|uN*3@LugGr>LCp;JWj!a)a$}wrBWG+TVUGE`n3G-I1 zKzCO&o$N>ImX2ElU@}v--a}ESoCD}+_x4Cer8M4K3k!aP8GP-G8Y~Y?kzSLsz7fjj zf1t|NP{O_)1uR4hIQoC7rz1Ske&FYEKL3>Ou9iI@&xKnU7E1bZr|5o>;@`imkLwgP z4o>Mxb9DMhK%m2wTPO4UV~&2&S#Af!`UAYXqx!oN(MEu=6BDm@6KW^&h+^FMEb(wQ zsc$(c1V}O$soW9&_Dv*;=7lY|+ak#slcPZ7jJ!7t%*>nRzu_pHx&T@ZL302n?8*rk zuPukDfJk0_k@SpB-ugB$V+=7_#RXVjkfD4ee`CIEoVZ|~zFwQCN^5XtBh+0$f!%K> zcU$%A?3~`|Ef+k@v)!zap~3bPfJMy0KF`2zryYZb_%+Pz$>TJ-O0V<_k4_zwl&>(U zUr9hIHuLTdj8w(01is_H#@rE4iV!f~z{8n)e#A-e38Wz?yNIJXWCr4?yp%ibg>?W<0aP;wKvkyb10%_~Os1 z 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 gKn%UGj~{bto1T9*& Date: Thu, 25 Jun 2026 12:55:01 -0600 Subject: [PATCH 07/19] Refine storage docs around raw and collectionized bases Clarify that collectionized configuration builds on raw access and update the storage-layer narrative and section structure to match that progression. Co-authored-by: Cursor --- .../deep-dives/domain-model/storage.md | 68 +++++++++---------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/docs/content/deep-dives/domain-model/storage.md b/docs/content/deep-dives/domain-model/storage.md index 48b92f0..f661864 100644 --- a/docs/content/deep-dives/domain-model/storage.md +++ b/docs/content/deep-dives/domain-model/storage.md @@ -1,26 +1,24 @@ +++ -title = "Storage layer" +title = "Bases" weight = 40 +++ -# Storage layer +# Bases -> **Status: partly shipped.** The seam and the config model exist -> (`internal/storage`, storage instances under `.katalyst/storage/`); the -> richer mapping (multi-coordinate templates, inferred mode, non-filesystem -> backends) is still ahead. This page describes the whole arc, and notes what -> is built versus planned. +The **storage layer** is how Katalyst reaches a backend store and maps that +store into the domain model. -## What the storage layer is +Every base must have include configuration for **raw** access. Raw access gives Katalyst a stable way to +locate content in the store. For a filesystem, that can be a root directory. +For SQL, that can be connection information for a specific instance. -The **storage layer** is the two-way mapping between a backend store and the -Katalyst domain model. It answers: *what collections and items does this store -contain, and where does each one live?*, in both directions. It is Katalyst's -realization of the general **storage** concept from -[domain model]({{< relref "_index.md" >}}): the filesystem is one -backend; SQLite, directories of CSVs, S3 buckets, and hosted APIs are others. -The first real stress test will be **SQLite**, because it is the first backend -that forces the scope question below. +A **collectionized** base keeps that raw access and adds collection +definitions. Those definitions map backend-native references into named +collections and item identities that Katalyst commands can address directly. +This is where two-way mapping applies. + +Katalyst's storage model covers filesystem backends today and is designed to +extend to backends such as SQLite, Postgres, S3, and hosted APIs. ## Three concepts @@ -30,8 +28,8 @@ and *how does its content map to the model*, so it was split: | Concept | Meaning | |---|---| -| **StorageType** | A known backend kind capable of holding collections and items: `filesystem` today; `sqlite`, `postgresql`, `mongodb` later. | -| **StorageInstance** | A specific, connectable instance of a StorageType, plus the information needed to reach it (for `filesystem`, a root directory). | +| **BaseType** | A known backend kind capable of holding collections and items: `filesystem` today; `sqlite`, `postgresql`, `mongodb` later. | +| **BaseInstance** | A specific, connectable instance of a StorageType, plus the information needed to reach it (for `filesystem`, a root directory). | | **CollectionDefinition** | The two-way mapping from a StorageInstance's contents to collections and items. `FilesystemCollectionDefinition` is the first; one definition may yield **more than one** collection. | In config, a StorageInstance declares the collections it maps, the instance @@ -45,9 +43,9 @@ checks and inspectors consume. The markdown filesystem reader uses `internal/codec/markdownbodytext` for frontmatter/body parsing; codecs are shared content adapters, not storage backends. -## The heart: a two-way mapping +## Collectionized bases use a two-way mapping -Storage mapping has two directions: +When a base is collectionized, mapping has two directions: - **Forward (discovery):** `path → match pattern → captured groups` become the unit's *coordinates*. @@ -77,14 +75,12 @@ Implication: **Item and Collection are roles, not file counts.** A backend that packs many items into one physical unit (rows in a table) and one that spreads a single item across a whole unit (a markdown file) are both valid. -## Two modes: Configured vs Inferred +## Base capability stack -- **Configured:** collections and their patterns are declared explicitly (the - instance's `collections:` block). This is the `check` path: known structure, - enforced. *Shipped.* -- **Inferred:** collection names and structure are *discovered* by applying - the pattern to whatever is in the store. This is the `infer` / `profile` - path: structure read out of the data. *Planned.* +- **Raw base:** Katalyst can connect to the store and reference backend-native + content. +- **Collectionized base:** a raw base plus collection definitions that map + backend-native references into domain collections and items. ## Unmatched references are first-class @@ -120,8 +116,9 @@ the definition's pattern are two views of the same thing. - **The contract is two-way, not one-way.** Discovery and reconstruction are both core storage operations. -- **Configured and inferred modes are the same axis.** `check` uses declared - structure; `infer` / `profile` discovers structure from the data. +- **Raw and collectionized are one progression.** A base starts with + backend-native references, then gains collection definitions that make + collection-aware operations possible. - **Surface unmatched references.** Silent skips hide drift between the backend's real contents and the configured model. - **Coordinates and selectors are one concept.** The fields captured from a @@ -136,14 +133,13 @@ the definition's pattern are two views of the same thing. Collection names and item coordinates answer different questions and should stay distinct. -## What is built, and the seam left open +## Seam and extension points -- **Built:** the `internal/storage` seam (`StorageType`, `StorageInstance`, - `CollectionDefinition`, `Reference`), the - `FilesystemCollectionDefinition` (collection = directory, item = each `*.md` - file, id = stem, item scope), and the config model where an - instance declares its collections. -- **Open seam:** anything that turns a path into an item identity (or back) +- **Core seam:** `internal/storage` defines `StorageType`, + `StorageInstance`, `CollectionDefinition`, and `Reference`. The filesystem + implementation maps a directory to a collection and each `*.md` file to an + item with a stem id. +- **Extension point:** anything that turns a path into an item identity (or back) passes through `CollectionDefinition`, so a second backend (SQLite) can be added later without touching the check engine, the CRUD verbs, or selector parsing. Multi-coordinate templates, inferred mode, and non-filesystem types From edc5022c847c0675741d7d9158c7d6291f987880 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 13:03:25 -0600 Subject: [PATCH 08/19] Add per-page TOC stale warning injection Introduce a toc-before partial that renders a right-panel warning from page frontmatter so stale or accuracy notes can be shown on a document-by-document basis. Co-authored-by: Cursor --- docs/layouts/partials/docs/inject/toc-before.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/layouts/partials/docs/inject/toc-before.html diff --git a/docs/layouts/partials/docs/inject/toc-before.html b/docs/layouts/partials/docs/inject/toc-before.html new file mode 100644 index 0000000..a4bb15b --- /dev/null +++ b/docs/layouts/partials/docs/inject/toc-before.html @@ -0,0 +1,10 @@ +{{- $stale := .Params.stale -}} +{{- $staleMessage := .Params.stale_message -}} +{{- if or $stale $staleMessage -}} +

+{{- end -}} From 2b14bae1ced26dc7587a933b573c3b94fa1c262a Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 13:28:02 -0600 Subject: [PATCH 09/19] refactor storage concepts to bases (#117) Co-authored-by: Abe Gong --- AGENTS.md | 8 +- README.md | 2 +- cmd/check.go | 2 +- cmd/check_test.go | 16 +- cmd/collection.go | 2 +- cmd/fix_test.go | 4 +- cmd/helpers_test.go | 14 +- cmd/init.go | 32 +-- cmd/init_test.go | 6 +- cmd/inspect_test.go | 2 +- cmd/item_test.go | 2 +- cmd/testdata/snapshots/help/check.txt | 2 +- docs/content/contributing/how-we-document.md | 4 +- docs/content/contributing/how-we-plan.md | 2 +- docs/content/deep-dives/_index.md | 4 +- .../content/deep-dives/domain-model/checks.md | 2 +- .../deep-dives/domain-model/collections.md | 32 +-- .../deep-dives/domain-model/inspectors.md | 2 +- .../deep-dives/domain-model/storage.md | 45 ++-- docs/content/deep-dives/vision.md | 4 +- docs/content/getting-started.md | 4 +- docs/content/how-to/add-a-schema.md | 4 +- docs/content/how-to/configure-rules.md | 10 +- .../profile-an-existing-wiki-by-hand.md | 4 +- .../profile-an-existing-wiki-with-an-agent.md | 8 +- docs/content/reference/configuration.md | 50 ++-- docs/content/reference/glossary.md | 18 +- docs/content/welcome.md | 2 +- .../examples/check-collection-rules.full.md | 2 +- .../check-schema-missing-field.full.md | 2 +- .../examples/check-title-h1-mismatch.full.md | 2 +- .../examples/check-type-error.full.md | 2 +- .../examples/check-valid-item.full.md | 2 +- .../generated/examples/ci-check-fails.full.md | 2 +- docs/generated/examples/ci-fix-check.full.md | 2 +- .../fix-normalize-frontmatter.full.md | 2 +- .../examples/fix-text-forbids.full.md | 2 +- .../inspect-collection-fields.full.md | 2 +- internal/examples/AGENTS.md | 4 +- internal/examples/examples.go | 46 ++-- .../testdata/check-collection-rules.md | 2 +- .../testdata/check-schema-missing-field.md | 2 +- .../testdata/check-title-h1-mismatch.md | 2 +- .../examples/testdata/check-type-error.md | 2 +- .../examples/testdata/check-valid-item.md | 2 +- internal/examples/testdata/ci-check-fails.md | 2 +- internal/examples/testdata/ci-fix-check.md | 2 +- .../testdata/fix-normalize-frontmatter.md | 2 +- .../examples/testdata/fix-text-forbids.md | 2 +- .../testdata/inspect-collection-fields.md | 2 +- internal/inspect/collection_test.go | 2 +- internal/inspect/filecontentshape.go | 2 +- internal/inspect/inspect.go | 4 +- internal/inspect/inspectors_source.go | 4 +- internal/inspect/source.go | 6 +- internal/project/AGENTS.md | 11 +- internal/project/loader.go | 199 +++++++++------ internal/project/loader_test.go | 227 +++++++++++------- internal/project/project.go | 24 +- internal/project/project_test.go | 2 +- internal/project/projecttest/projecttest.go | 6 +- internal/storage/AGENTS.md | 8 +- internal/storage/collection/AGENTS.md | 2 +- internal/storage/collection/collection.go | 4 +- .../collection/filesystem/collection.go | 10 +- .../collection/filesystem/collection_test.go | 6 +- internal/storage/collection/parse.go | 18 +- internal/storage/doc.go | 6 +- internal/storage/storage.go | 28 +-- 69 files changed, 537 insertions(+), 409 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 6f4acea..896f5d9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -26,8 +26,8 @@ Tests should always pass on `main`. Run `make test` before sending a PR. ``` cmd/ cobra commands (root, init, check, fix, inspect, collection, item, schema, rules) -internal/project project domain layer: the .katalyst/ loader (loader.go: schemas + storage instances, which embed their collections), the whole workspace, selectors, item enumeration -internal/storage backend-kind registry: StorageType, Known, Granularity, Reference +internal/project project domain layer: the .katalyst/ loader (loader.go: schemas + bases, which embed their collections), the whole workspace, selectors, item enumeration +internal/storage backend-kind registry: BaseType, Known, Scope, Reference internal/storage/collection the read stack: CollectionDefinition + the thin Item internal/storage/collection/listing item list filter/grep/sort/skip/limit pipeline internal/storage/collection/predicate metadata predicate grammar (item list --filter, collection variants) @@ -64,8 +64,8 @@ reconstruction), implemented per backend under `storage/collection/` (filesystem today). Don't inline filesystem assumptions (globbing, stem-as-id, path joins) elsewhere, a second backend (SQLite) attaches by implementing that interface. The `internal/project` loader (`loader.go`) owns the `.katalyst/` -*vocabulary*: it reads the workspace, resolves schemas, and assembles storage -instances. Each object type owns the parse of its own config — the storage +*vocabulary*: it reads the workspace, resolves schemas, and assembles bases. +Each object type owns the parse of its own config — the storage registry validates a declared `type` (`storage.Known`), and a collection parses its own block, including variant predicates, in `storage/collection` (which imports the sibling `predicate` grammar intra-subtree). The loader depends on diff --git a/README.md b/README.md index 45fcf67..fd4259b 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ As your content evolves, Katalyst gives you tools to navigate change. - *Add or change checks* - *Change the structure of your content* -- *Change your storage layer* +- *Change your base* ## Design principles diff --git a/cmd/check.go b/cmd/check.go index c5276c1..3826199 100644 --- a/cmd/check.go +++ b/cmd/check.go @@ -25,7 +25,7 @@ func newCheckCmd() *cobra.Command { Use: "check [selector ...]", Short: "Run configured checks against the selected items", Long: `check parses each selected item's frontmatter (YAML, TOML, or JSON) -and runs the checks configured for its collection under .katalyst/storage/. +and runs the checks configured for its collection under .katalyst/bases/. Selectors (see docs/content/deep-dives/domain-model/_index.md): diff --git a/cmd/check_test.go b/cmd/check_test.go index 59d23f0..f0d14ff 100644 --- a/cmd/check_test.go +++ b/cmd/check_test.go @@ -14,9 +14,9 @@ func setupNotesRepo(t *testing.T, notesCollection string) string { t.Helper() dir := t.TempDir() writeProject(t, dir, map[string]string{ - "config.yaml": schemaFormatJSON, - "schemas/book.json": bookSchemaFixture, - "storage/local.yaml": storageLocal(map[string]string{"notes": notesCollection}), + "config.yaml": schemaFormatJSON, + "schemas/book.json": bookSchemaFixture, + "bases/local.yaml": baseLocal(map[string]string{"notes": notesCollection}), }) chdir(t, dir) return dir @@ -167,7 +167,7 @@ func setupVariantRepo(t *testing.T, pagesBody string) string { "schemas/page.yaml": "type: object\nrequired: [title]\nproperties:\n title: {type: string}\n", "schemas/section.yaml": "type: object\n", "schemas/content.yaml": "type: object\nrequired: [weight]\nproperties:\n weight: {type: integer}\n", - "storage/local.yaml": storageLocal(map[string]string{"pages": pagesBody}), + "bases/local.yaml": baseLocal(map[string]string{"pages": pagesBody}), }) chdir(t, dir) return dir @@ -335,7 +335,7 @@ func TestCheck_inlineSchemaKeyTakesPrecedence(t *testing.T) { "config.yaml": schemaFormatJSON, "schemas/book.json": bookSchemaFixture, "schemas/strict-book.json": strictBookSchemaFixture, - "storage/local.yaml": storageLocal(map[string]string{"notes": "path: notes\nschema: book\n"}), + "bases/local.yaml": baseLocal(map[string]string{"notes": "path: notes\nschema: book\n"}), }) chdir(t, dir) @@ -356,7 +356,7 @@ func TestCheck_inlineSchemaKeyTakesPrecedence(t *testing.T) { func TestCheck_markdownAndFilesystemChecks(t *testing.T) { dir := t.TempDir() writeProject(t, dir, map[string]string{ - "storage/local.yaml": storageLocal(map[string]string{"notes": "path: notes\nchecks:\n - kind: markdown_title_matches_h1\n field: title\n"}), + "bases/local.yaml": baseLocal(map[string]string{"notes": "path: notes\nchecks:\n - kind: markdown_title_matches_h1\n field: title\n"}), }) chdir(t, dir) mustWrite(t, filepath.Join(dir, "notes/dune.md"), "---\ntitle: Dune\n---\n# Children of Dune\n") @@ -376,7 +376,7 @@ func TestCheck_markdownAndFilesystemChecks(t *testing.T) { func TestCheck_collectionScoped_rescanFullCollectionForSingleItemSelector(t *testing.T) { dir := t.TempDir() writeProject(t, dir, map[string]string{ - "storage/local.yaml": storageLocal(map[string]string{"notes": "path: notes\nchecks:\n - kind: filesystem_unique_field\n field: slug\n"}), + "bases/local.yaml": baseLocal(map[string]string{"notes": "path: notes\nchecks:\n - kind: filesystem_unique_field\n field: slug\n"}), }) chdir(t, dir) mustWrite(t, filepath.Join(dir, "notes/a.md"), "---\nslug: dune\n---\n# A\n") @@ -395,7 +395,7 @@ func TestCheck_collectionScoped_rescanFullCollectionForSingleItemSelector(t *tes func TestCheck_writingTells_warnButPass(t *testing.T) { dir := t.TempDir() writeProject(t, dir, map[string]string{ - "storage/local.yaml": storageLocal(map[string]string{"notes": "path: notes\nchecks:\n - kind: markdown_writing_tells\n"}), + "bases/local.yaml": baseLocal(map[string]string{"notes": "path: notes\nchecks:\n - kind: markdown_writing_tells\n"}), }) chdir(t, dir) mustWrite(t, filepath.Join(dir, "notes/x.md"), diff --git a/cmd/collection.go b/cmd/collection.go index bcc2720..7a981e7 100644 --- a/cmd/collection.go +++ b/cmd/collection.go @@ -10,7 +10,7 @@ import ( func newCollectionCmd() *cobra.Command { c := &cobra.Command{ Use: "collection", - Short: "Inspect collections declared by storage instances under .katalyst/storage/", + Short: "Inspect collections declared by bases under .katalyst/bases/", } c.AddCommand(newCollectionListCmd(), newCollectionGetCmd()) return c diff --git a/cmd/fix_test.go b/cmd/fix_test.go index b60c795..23725f6 100644 --- a/cmd/fix_test.go +++ b/cmd/fix_test.go @@ -17,7 +17,7 @@ func setupFixRepo(t *testing.T) string { t.Helper() dir := t.TempDir() writeProject(t, dir, map[string]string{ - "storage/local.yaml": storageLocal(map[string]string{"notes": fixNotesConfig}), + "bases/local.yaml": baseLocal(map[string]string{"notes": fixNotesConfig}), }) chdir(t, dir) return dir @@ -27,7 +27,7 @@ func setupFixRepoWith(t *testing.T, notesConfig string) string { t.Helper() dir := t.TempDir() writeProject(t, dir, map[string]string{ - "storage/local.yaml": storageLocal(map[string]string{"notes": notesConfig}), + "bases/local.yaml": baseLocal(map[string]string{"notes": notesConfig}), }) chdir(t, dir) return dir diff --git a/cmd/helpers_test.go b/cmd/helpers_test.go index 54f7871..a73071c 100644 --- a/cmd/helpers_test.go +++ b/cmd/helpers_test.go @@ -61,20 +61,20 @@ func chdir(t *testing.T, dir string) { const schemaFormatJSON = "schemas:\n format: json\n" // writeProject scaffolds a .katalyst/ tree. Keys are paths relative to the -// .katalyst/ directory (e.g. "schemas/book.json", "storage/local.yaml", +// .katalyst/ directory (e.g. "schemas/book.json", "bases/local.yaml", // "config.yaml"); values are file contents. func writeProject(t *testing.T, dir string, files map[string]string) { t.Helper() projecttest.WriteProject(t, dir, files) } -// storageLocal builds a .katalyst/storage/local.yaml body: a filesystem -// instance rooted at the project, declaring the given collections. Each value +// baseLocal builds a .katalyst/bases/local.yaml body: a filesystem base rooted +// at the project, declaring the given collections. Each value // is the collection's YAML body, re-indented under its name. Collections now -// live inside their storage instance, so tests scaffold them this way instead +// live inside their base, so tests scaffold them this way instead // of one file per collection. -func storageLocal(collections map[string]string) string { - return projecttest.LocalStorage(collections) +func baseLocal(collections map[string]string) string { + return projecttest.LocalBase(collections) } // writeConfigDir writes the two-schema book-and-person project (book and @@ -87,7 +87,7 @@ func writeConfigDir(t *testing.T) string { "config.yaml": schemaFormatJSON, "schemas/book.json": bookSchemaFixture, "schemas/person.json": personSchemaFixture, - "storage/local.yaml": storageLocal(map[string]string{ + "bases/local.yaml": baseLocal(map[string]string{ "books": "path: notes/books\nschema: book\n", "people": "path: notes/people\nschema: person\n", }), diff --git a/cmd/init.go b/cmd/init.go index 9c0c9e9..630c27f 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -15,24 +15,24 @@ import ( // the available knobs. const scaffoldConfig = `# katalyst project configuration. # -# Schemas live in .katalyst/schemas/.yaml. Storage instances live in -# .katalyst/storage/.yaml, and each instance declares the collections it -# maps. The settings below are optional and shown at their defaults; uncomment -# to change them. +# Schemas live in .katalyst/schemas/.yaml. Bases live in +# .katalyst/bases/.yaml, and each base declares the collections it maps. +# The settings below are optional and shown at their defaults; uncomment to +# change them. # # schemas: # discovery: convention # convention | explicit # format: yaml # yaml | json | both -# storage: +# bases: # discovery: convention # format: yaml ` -// scaffoldLocalStorage is the default storage instance written by init: the -// local filesystem rooted at the project. There is no implicit instance, -// this file is what makes the default explicit. Collections are declared -// inline here (or split into .katalyst/storage/local/.yaml). -const scaffoldLocalStorage = `# The default storage instance: the local filesystem, rooted at the project. +// scaffoldLocalBase is the default base written by init: the local filesystem +// rooted at the project. There is no implicit base, this file is what makes the +// default explicit. Collections are declared inline here (or split into +// .katalyst/bases/local/.yaml). +const scaffoldLocalBase = `# The default base: the local filesystem, rooted at the project. # Declare collections under "collections:", e.g. # # collections: @@ -68,7 +68,7 @@ func newInitCmd() *cobra.Command { return usageErr(fmt.Sprintf("%s already exists; refusing to overwrite", katalystDir)) } - for _, sub := range []string{"schemas", "storage"} { + for _, sub := range []string{"schemas", "bases"} { rel := filepath.Join(project.Dir, sub) if err := os.MkdirAll(filepath.Join(target, rel), 0o755); err != nil { return err @@ -76,13 +76,13 @@ func newInitCmd() *cobra.Command { fmt.Fprintf(cmd.OutOrStdout(), "created %s/\n", rel) } - // Write the default storage instance explicitly; katalyst never - // synthesizes one at runtime. - storageRel := filepath.Join(project.Dir, "storage", "local.yaml") - if err := os.WriteFile(filepath.Join(target, storageRel), []byte(scaffoldLocalStorage), 0o644); err != nil { + // Write the default base explicitly; katalyst never synthesizes one + // at runtime. + baseRel := filepath.Join(project.Dir, "bases", "local.yaml") + if err := os.WriteFile(filepath.Join(target, baseRel), []byte(scaffoldLocalBase), 0o644); err != nil { return err } - fmt.Fprintf(cmd.OutOrStdout(), "created %s\n", storageRel) + fmt.Fprintf(cmd.OutOrStdout(), "created %s\n", baseRel) cfgRel := filepath.Join(project.Dir, "config.yaml") if err := os.WriteFile(filepath.Join(target, cfgRel), []byte(scaffoldConfig), 0o644); err != nil { diff --git a/cmd/init_test.go b/cmd/init_test.go index e8cd127..b5c445d 100644 --- a/cmd/init_test.go +++ b/cmd/init_test.go @@ -16,8 +16,8 @@ func TestInit_preparesKatalystDir(t *testing.T) { for _, want := range []string{ ".katalyst", ".katalyst/schemas", - ".katalyst/storage", - ".katalyst/storage/local.yaml", + ".katalyst/bases", + ".katalyst/bases/local.yaml", ".katalyst/config.yaml", } { if _, err := os.Stat(filepath.Join(dir, want)); err != nil { @@ -39,7 +39,7 @@ func TestInit_writesNoExampleContent(t *testing.T) { "schemas", "notes", ".katalyst/schemas/book.yaml", - ".katalyst/storage/local/notes.yaml", + ".katalyst/bases/local/notes.yaml", } { if _, err := os.Stat(filepath.Join(dir, unwanted)); err == nil { t.Errorf("did not expect %s to exist", unwanted) diff --git a/cmd/inspect_test.go b/cmd/inspect_test.go index 772262e..094f91a 100644 --- a/cmd/inspect_test.go +++ b/cmd/inspect_test.go @@ -35,7 +35,7 @@ func TestInspect_rawPathRunsSourceLayer(t *testing.T) { func TestInspect_collectionLayerWhenConfigured(t *testing.T) { dir := t.TempDir() - writeFile(t, dir, ".katalyst/storage/local.yaml", `type: filesystem + writeFile(t, dir, ".katalyst/bases/local.yaml", `type: filesystem root: . collections: notes: diff --git a/cmd/item_test.go b/cmd/item_test.go index 4af2d7f..daac179 100644 --- a/cmd/item_test.go +++ b/cmd/item_test.go @@ -17,7 +17,7 @@ func setupItemRepo(t *testing.T) string { "config.yaml": schemaFormatJSON, "schemas/book.json": bookSchemaFixture, "schemas/strict-book.json": strictBookSchemaFixture, - "storage/local.yaml": storageLocal(map[string]string{"notes": objectNotesConfig}), + "bases/local.yaml": baseLocal(map[string]string{"notes": objectNotesConfig}), }) chdir(t, dir) return dir diff --git a/cmd/testdata/snapshots/help/check.txt b/cmd/testdata/snapshots/help/check.txt index db59ae9..c106dd9 100644 --- a/cmd/testdata/snapshots/help/check.txt +++ b/cmd/testdata/snapshots/help/check.txt @@ -1,5 +1,5 @@ check parses each selected item's frontmatter (YAML, TOML, or JSON) -and runs the checks configured for its collection under .katalyst/storage/. +and runs the checks configured for its collection under .katalyst/bases/. Selectors (see docs/content/deep-dives/domain-model/_index.md): diff --git a/docs/content/contributing/how-we-document.md b/docs/content/contributing/how-we-document.md index cecbe9d..45d3190 100644 --- a/docs/content/contributing/how-we-document.md +++ b/docs/content/contributing/how-we-document.md @@ -34,8 +34,8 @@ The durable home for everything a user needs, organized by - **`reference/`:** information-oriented lookup: configuration, the generated check-type reference, the glossary, the command surface. - **`deep-dives/`:** understanding-oriented "why" (the Diátaxis *explanation* - quadrant): the vision and scope, the domain model, the storage layer, - progressive operations, and **design rationale at the behavioral altitude** - + quadrant): the vision and scope, the domain model, bases, progressive + operations, and **design rationale at the behavioral altitude** - any *why* a user can observe, whatever subsystem it touches. A short **Why Katalyst?** orientation page sits at the top level. The narrower *why* that only matters once you are reading a package's code lives with that code (see diff --git a/docs/content/contributing/how-we-plan.md b/docs/content/contributing/how-we-plan.md index 1bf0e03..5f219a9 100644 --- a/docs/content/contributing/how-we-plan.md +++ b/docs/content/contributing/how-we-plan.md @@ -76,7 +76,7 @@ document]({{< relref "how-we-document.md" >}}) for what belongs where: - **`docs/reference/glossary.md`:** new vocabulary. - **`README.md`:** pointer/overview updates. -Evergreen deep-dive docs (the storage layer, progressive operations) and the +Evergreen deep-dive docs (bases, progressive operations) and the per-package `AGENTS.md` files are *not* specs and don't get retired: they're updated in place. diff --git a/docs/content/deep-dives/_index.md b/docs/content/deep-dives/_index.md index 1367ae0..9c137b1 100644 --- a/docs/content/deep-dives/_index.md +++ b/docs/content/deep-dives/_index.md @@ -11,8 +11,8 @@ Understanding-oriented discussion of the *why* behind Katalyst: the [domain model]({{< relref "domain-model/_index.md" >}}) the tool is built on, and the deeper design discussions that no single page or package owns: how [checks work]({{< relref "domain-model/checks.md" >}}) and the libraries that -run them, how the [storage layer]({{< relref "domain-model/storage.md" >}}) -maps stores onto the model, and how operations grow richer as a backend's +run them, how [bases]({{< relref "domain-model/storage.md" >}}) map stores onto +the model, and how operations grow richer as a backend's capabilities increase. For the short version, start with [Welcome]({{< relref "../welcome.md" >}}). diff --git a/docs/content/deep-dives/domain-model/checks.md b/docs/content/deep-dives/domain-model/checks.md index 5e167d9..9c9b08c 100644 --- a/docs/content/deep-dives/domain-model/checks.md +++ b/docs/content/deep-dives/domain-model/checks.md @@ -175,7 +175,7 @@ real out-of-process library exists. lifecycle, the schema resolver, and the validation result. - The [glossary]({{< relref "../../reference/glossary.md" >}}) for the canonical terms (check type, check instance, CheckLibrary, schema, violation). -- The [storage layer]({{< relref "storage.md" >}}) for the collection and item +- The [Bases]({{< relref "storage.md" >}}) for the collection and item identities checks run against, and the inspector that is a check's descriptive dual. - `go doc ./internal/checks` for the code-level engine contract. diff --git a/docs/content/deep-dives/domain-model/collections.md b/docs/content/deep-dives/domain-model/collections.md index 0c8b4cf..eedaa16 100644 --- a/docs/content/deep-dives/domain-model/collections.md +++ b/docs/content/deep-dives/domain-model/collections.md @@ -6,10 +6,10 @@ weight = 42 # Collections The `internal/project` loader (`loader.go`) is the orchestration hub: it loads a -project's `.katalyst/` directory, resolves named schemas, and assembles storage -instances and their collections (each object type parses its own config — the -storage registry validates a declared `type`, and a collection parses its own -block in `storage/collection`). It decides which schema applies to a given item, +project's `.katalyst/` directory, resolves named schemas, and assembles bases +and their collections (each object type parses its own config — the storage +registry validates a declared `type`, and a collection parses its own block in +`storage/collection`). It decides which schema applies to a given item, and the `check` lifecycle is driven from here. This page is the model and the *why*; for the key-by-key surface see the [configuration reference]({{< relref "../../reference/configuration.md" >}}). @@ -21,22 +21,22 @@ from the working directory to the nearest ancestor that contains one. That ancestor becomes the repo root for all path resolution. The directory holds an optional `config.yaml`, one schema file per definition -under `schemas/`, and one storage-instance file per definition under `storage/`. -A directory (rather than one big file) keeps each schema and instance in its own +under `schemas/`, and one base file per definition under `bases/`. A directory +(rather than one big file) keeps each schema and base in its own reviewable file and lets the name fall out of the filename by convention. A nearest-ancestor lookup mirrors `.git`, `.editorconfig`, and `go.mod`: familiar and predictable. Discovery resolves symlinks on both the root and the input path, because on macOS `$TMPDIR` lives behind `/var` to `/private/var` and relative-path resolution would otherwise produce garbage. -`config.yaml` is YAML; schema and storage files default to YAML/JSON and the +`config.yaml` is YAML; schema and base files default to YAML/JSON and the accepted format is set per kind there. Default discovery is **convention** (one file per definition); a kind can be switched to **explicit** to list its definitions inline in `config.yaml` instead. -Collections are declared *inside* a [storage instance]({{< relref "storage.md" >}}), +Collections are declared *inside* a [base]({{< relref "storage.md" >}}), which owns the backend-to-collection mapping. This page covers the collection -model and schema resolution; the storage layer covers how an instance maps a +model and schema resolution; the base layer covers how a base maps a backend onto those collections. ## The model @@ -44,10 +44,10 @@ backend onto those collections. - **Collection** - a named group of items backed by a directory; the unit you select on the command line and the unit that owns a set of checks. `path` defaults to the collection name; `pattern` defaults to `*.md`. Collection - names are unique project-wide, since a selector carries no instance qualifier. + names are unique project-wide, since a selector carries no base qualifier. ```yaml - # inside .katalyst/storage/local.yaml + # inside .katalyst/bases/local.yaml collections: books: path: notes/books # directory, relative to the repo root @@ -86,7 +86,7 @@ The collection model is intentionally broader than "a directory of markdown files." A collection is the named group Katalyst can list, select, inspect, and check, even when the backing storage has a different native vocabulary. -| System | Storage | Collection | Item | Attribute | +| System | Base | Collection | Item | Attribute | |----------------------|---------------|-----------------|------------|------------------| | Postgres | The database | A table | A row | A column | | MongoDB | The database | A collection | A document | A field | @@ -137,7 +137,7 @@ The discriminator is metadata, not a glob, on purpose: metadata is the one property every item yields on every backend (frontmatter for a file, columns for a future row), so routing stays portable and the engine never depends on the storage type. Selecting by *path* is a storage-type-scoped condition, deferred. -(The storage layer covers [how variants route checks rather than +(The base layer covers [how variants route checks rather than membership]({{< relref "storage.md" >}}).) ## Why a file inside a collection must match @@ -146,7 +146,7 @@ A file that sits inside a collection's directory but does not match its `pattern` is reported as an **error**, not silently skipped. Silent skips hide config drift: a typo'd pattern or a misfiled document would simply disappear from validation. Opt-outs (`--allow-unmatched` and a config knob) are deferred -until real usage shows the need. The storage layer frames the same decision as +until real usage shows the need. The base layer frames the same decision as [unmatched references being first-class]({{< relref "storage.md" >}}). ## Why named collections replaced the old `rules:` list @@ -207,8 +207,8 @@ The data flow per item, end to end: - The [configuration reference]({{< relref "../../reference/configuration.md" >}}) for the precise `.katalyst/` surface. -- The [storage layer]({{< relref "storage.md" >}}) for how a backend maps onto - collections, and the instance model. +- The [base layer]({{< relref "storage.md" >}}) for how a backend maps onto + collections, and the base model. - The [domain model]({{< relref "_index.md" >}}) for the cross-subsystem entity map and invariants. - `go doc ./internal/project` for the code-level contract. diff --git a/docs/content/deep-dives/domain-model/inspectors.md b/docs/content/deep-dives/domain-model/inspectors.md index 617bead..a9664c6 100644 --- a/docs/content/deep-dives/domain-model/inspectors.md +++ b/docs/content/deep-dives/domain-model/inspectors.md @@ -31,7 +31,7 @@ Inspectors come in two layers, distinguished by *how they reference the data*: The two are **distinct interfaces, not one type at two scopes**, precisely because they reference the data through different machinery. This mirrors the -seam in the [storage layer]({{< relref "storage.md" >}}). +seam in the [Bases]({{< relref "storage.md" >}}). ## Built from primitives diff --git a/docs/content/deep-dives/domain-model/storage.md b/docs/content/deep-dives/domain-model/storage.md index f661864..975c2e5 100644 --- a/docs/content/deep-dives/domain-model/storage.md +++ b/docs/content/deep-dives/domain-model/storage.md @@ -5,12 +5,13 @@ weight = 40 # Bases -The **storage layer** is how Katalyst reaches a backend store and maps that -store into the domain model. +The **base layer** is how Katalyst reaches a backend store and maps that store +into the domain model. -Every base must have include configuration for **raw** access. Raw access gives Katalyst a stable way to -locate content in the store. For a filesystem, that can be a root directory. -For SQL, that can be connection information for a specific instance. +Every base includes configuration for **raw** access. Raw access gives Katalyst +a stable way to locate content in the store. For a filesystem, that can be a +root directory. For SQL, that can be connection information for a specific +instance. A **collectionized** base keeps that raw access and adds collection definitions. Those definitions map backend-native references into named @@ -29,16 +30,16 @@ and *how does its content map to the model*, so it was split: | Concept | Meaning | |---|---| | **BaseType** | A known backend kind capable of holding collections and items: `filesystem` today; `sqlite`, `postgresql`, `mongodb` later. | -| **BaseInstance** | A specific, connectable instance of a StorageType, plus the information needed to reach it (for `filesystem`, a root directory). | -| **CollectionDefinition** | The two-way mapping from a StorageInstance's contents to collections and items. `FilesystemCollectionDefinition` is the first; one definition may yield **more than one** collection. | +| **BaseInstance** | A specific, connectable instance of a BaseType, plus the information needed to reach it (for `filesystem`, a root directory). | +| **CollectionDefinition** | The two-way mapping from a BaseInstance's contents to collections and items. `FilesystemCollectionDefinition` is the first; one definition may yield **more than one** collection. | -In config, a StorageInstance declares the collections it maps, the instance -file *is* where the CollectionDefinition lives (see +In config, a BaseInstance declares the collections it maps, the base file *is* +where the CollectionDefinition lives (see [Configuration]({{< relref "../../reference/configuration.md" >}})). In code, the seam is `internal/storage/collection.CollectionDefinition`; `internal/project` consumes it rather than implementing the filesystem mapping inline. -Storage readers use codecs to decode a matched unit's content into the shape +Base readers use codecs to decode a matched unit's content into the shape checks and inspectors consume. The markdown filesystem reader uses `internal/codec/markdownbodytext` for frontmatter/body parsing; codecs are shared content adapters, not storage backends. @@ -59,7 +60,7 @@ path-reconstruction problem. Today it is the degenerate, stem-only case ## The scope principle **"What does one matched store unit become?" has no global answer, it is a -property each StorageType declares for its backend.** +property each BaseType declares for its backend.** - **Markdown filesystem:** one file = one **Item**; a directory of files = a **Collection**. @@ -98,12 +99,11 @@ that matched nothing. A collection may run different checks on different items via [variants]({{< relref "../../reference/configuration.md" >}}#variants), but that is a *check-engine* concern, not a storage one. A variant's discriminator is a -predicate over an item's **attributes**: portable across every StorageType, -since each yields a structured attribute object (frontmatter fields for a file, -configured column captures for a row). It never touches the seam: membership, -`Unmatched`, and `Reference` stay governed by the definition's `pattern`. -Discriminating by *path* would be a storage-type-scoped condition; it is -deferred precisely to keep the seam closed for now. +predicate over an item's **metadata**: portable across every BaseType, since +each yields a metadata map (frontmatter for a file, columns for a row). It never +touches the seam: membership, `Unmatched`, and `Reference` stay governed by the +definition's `pattern`. Discriminating by *path* would be a storage-type-scoped +condition; it is deferred precisely to keep the seam closed for now. ## Coordinates are the selector @@ -135,8 +135,9 @@ the definition's pattern are two views of the same thing. ## Seam and extension points -- **Core seam:** `internal/storage` defines `StorageType`, - `StorageInstance`, `CollectionDefinition`, and `Reference`. The filesystem +- **Core seam:** `internal/storage` defines `BaseType`, `Scope`, and + `Reference`; `internal/project` assembles `BaseInstance` values, and + `internal/storage/collection` defines `CollectionDefinition`. The filesystem implementation maps a directory to a collection and each `*.md` file to an item with a stem id. - **Extension point:** anything that turns a path into an item identity (or back) @@ -149,11 +150,11 @@ the definition's pattern are two views of the same thing. | Term | Meaning | |---|---| -| **StorageType** | A known backend kind (filesystem, sqlite, ...). | -| **StorageInstance** | A configured instance of a StorageType plus how to reach it. | +| **BaseType** | A known backend kind (filesystem, sqlite, ...). | +| **BaseInstance** | A configured instance of a BaseType plus how to reach it. | | **CollectionDefinition** | The backend↔domain two-way mapping; yields one or more collections. | | **Data reference** | A backend-native locator (file path, S3 key, table name). | | **Coordinates** | The captured fields that identify a unit within its collection. | -| **Scope** | The domain level, item or collection, at which a StorageType attaches a store's units to the model. | +| **Scope** | The domain level, item or collection, at which a BaseType attaches a store's units to the model. | [addressing]: {{< relref "_index.md" >}} diff --git a/docs/content/deep-dives/vision.md b/docs/content/deep-dives/vision.md index 415cf4d..20f8bd7 100644 --- a/docs/content/deep-dives/vision.md +++ b/docs/content/deep-dives/vision.md @@ -7,8 +7,8 @@ weight = 10 Traditional data management often forces teams into binary choices: structured or unstructured, rigid or chaotic. Katalyst is an experimental -framework aimed at enabling fast, low-risk evolution through progressive -typing in the storage layer. +framework aimed at enabling fast, low-risk evolution through progressive typing +across bases and operations. ## Database management is risky and rigid diff --git a/docs/content/getting-started.md b/docs/content/getting-started.md index 49ffcfe..da618b2 100644 --- a/docs/content/getting-started.md +++ b/docs/content/getting-started.md @@ -59,11 +59,11 @@ katalyst check - `.katalyst/config.yaml`, commented project settings - `.katalyst/schemas/`, one schema per file (empty to start) -- `.katalyst/storage/local.yaml`, the default storage instance (the local +- `.katalyst/bases/local.yaml`, the default base (the local filesystem), where you declare collections It writes no example content. Add a schema under `.katalyst/schemas/` and -declare a collection inside `.katalyst/storage/local.yaml`, then run +declare a collection inside `.katalyst/bases/local.yaml`, then run `katalyst check`. Next: diff --git a/docs/content/how-to/add-a-schema.md b/docs/content/how-to/add-a-schema.md index 0b6c7e0..20258bb 100644 --- a/docs/content/how-to/add-a-schema.md +++ b/docs/content/how-to/add-a-schema.md @@ -39,7 +39,7 @@ The shortest way is the `schema:` shorthand, which adds a single `object` check: ```yaml -# .katalyst/storage/local.yaml +# .katalyst/bases/local.yaml type: filesystem root: . collections: @@ -52,7 +52,7 @@ Equivalently, add an explicit object check to `checks`, useful when you mix it with markdown or filesystem checks: ```yaml -# .katalyst/storage/local.yaml — under collections: books: +# .katalyst/bases/local.yaml — under collections: books: path: notes/books checks: - kind: object diff --git a/docs/content/how-to/configure-rules.md b/docs/content/how-to/configure-rules.md index 7c52d42..004195a 100644 --- a/docs/content/how-to/configure-rules.md +++ b/docs/content/how-to/configure-rules.md @@ -10,13 +10,13 @@ them. This guide adds a collection and attaches checks to it. ## 1. Point a collection at the directory -Collections are declared inside a storage instance. In a fresh project that is -`.katalyst/storage/local.yaml` (the default filesystem instance). Add the +Collections are declared inside a base. In a fresh project that is +`.katalyst/bases/local.yaml` (the default filesystem base). Add the collection under `collections:`, keyed by its name; `path` is the directory -relative to the instance root: +relative to the base root: ```yaml -# .katalyst/storage/local.yaml +# .katalyst/bases/local.yaml type: filesystem root: . collections: @@ -34,7 +34,7 @@ the [check types reference]({{< relref "../reference/check-types/_index.md" >}}) for every check type: ```yaml -# .katalyst/storage/local.yaml +# .katalyst/bases/local.yaml type: filesystem root: . collections: diff --git a/docs/content/how-to/profile-an-existing-wiki-by-hand.md b/docs/content/how-to/profile-an-existing-wiki-by-hand.md index 033a7b8..40044d7 100644 --- a/docs/content/how-to/profile-an-existing-wiki-by-hand.md +++ b/docs/content/how-to/profile-an-existing-wiki-by-hand.md @@ -44,7 +44,7 @@ Point a collection at the directory so the field-level layer can run. Minimal config: ```yaml -# .katalyst/storage/local.yaml +# .katalyst/bases/local.yaml type: filesystem root: . collections: @@ -105,7 +105,7 @@ properties: ``` ```yaml -# .katalyst/storage/local.yaml (extend the collection from step 2) +# .katalyst/bases/local.yaml (extend the collection from step 2) type: filesystem root: . collections: diff --git a/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md b/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md index 65be479..a1322f7 100644 --- a/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md +++ b/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md @@ -35,10 +35,10 @@ recommendation; it must choose its own thresholds and justify them. A capable agent then: -1. **Chooses collection boundaries** from the raw-source evidence. `file_tree` - shows the directory and naming map; `file_content_shape` shows whether an - explicit slice shares frontmatter and body conventions. The agent names the - collection and drafts `.katalyst/storage/*` pointing it at the chosen path. +1. **Clusters** the `document_shape` classes into candidate collections. + `inspect` groups files with *matching* fingerprints; the agent decides when + two near-but-distinct classes are really one collection, and names them. It + drafts `.katalyst/bases/*` pointing each collection at its directory. 2. **Profiles the fields** by inspecting each new collection, `katalyst inspect --json` runs the collection layer, whose `object_fields` record is the per-field data dictionary (presence, types, values). diff --git a/docs/content/reference/configuration.md b/docs/content/reference/configuration.md index f368d2d..ee7b4bf 100644 --- a/docs/content/reference/configuration.md +++ b/docs/content/reference/configuration.md @@ -21,20 +21,24 @@ collection]({{< relref "../how-to/configure-rules.md" >}}). config.yaml # optional: listing defaults and discovery settings schemas/ # one JSON Schema file per named schema book.json - storage/ # one file per storage instance - local.yaml # an instance + the collections it declares + bases/ # one file per base + local.yaml # a base + the collections it declares local/ # optional: one file per collection (escape hatch) books.yaml ``` -By default, schemas and storage instances are discovered by **convention**: +By default, schemas and bases are discovered by **convention**: every file under `schemas/` is a schema whose name is its filename stem -(`book.json` → `book`), and every file under `storage/` is a -[storage instance](#storage-instances) named for its filename stem -(`local.yaml` → `local`). `config.yaml` is optional; it carries `listing:` +(`book.json` → `book`), and every file under `bases/` is a +[base](#bases) named for its filename stem (`local.yaml` → `local`). +`config.yaml` is optional; it carries `listing:` defaults and can switch a kind to **explicit** discovery, listing definitions inline instead of as files. +Legacy projects that still use `storage:` in `config.yaml` or +`.katalyst/storage/` continue to load. Do not mix legacy and new forms in the +same project; move legacy base files to `.katalyst/bases/` when you edit them. + ## Schemas Each file under `.katalyst/schemas/` is a JSON Schema. Its **name**, the @@ -45,22 +49,22 @@ collection's `schema:` shorthand. The path can move; the name should not. Schemas are stored flat; the check library that compiles a schema is determined by the referencing check type's `kind` (the `object` check uses JSON Schema). -## Storage instances +## Bases -A **storage instance** is one configured backend store, plus the collections it -maps onto the domain model. Each file under -`.katalyst/storage/` is one instance, named for its filename stem. There is no -implicit instance; `katalyst init` writes a default `local` one. +A **base** is one configured backend store, plus the collections it maps onto +the domain model. Each file under +`.katalyst/bases/` is one base, named for its filename stem. There is no +implicit base; `katalyst init` writes a default `local` one. | Key | Required | Default | Meaning | |---|---|---|---| | `type` | no | `filesystem` | Backend kind: `filesystem` or `sqlite`. | -| `root` | no | `.` | Filesystem instance root directory, relative to the repo root. Collection paths resolve against it. | -| `path` | for `sqlite` | - | SQLite database path, relative to the repo root. Alias for `root` on SQLite instances. | +| `root` | no | `.` | Base root directory, relative to the repo root. Collection paths resolve against it. | +| `path` | for `sqlite` | - | SQLite database path, relative to the repo root. Alias for `root` on SQLite bases. | | `collections` | no | - | Map of collection name → definition (see below). | ```yaml -# .katalyst/storage/local.yaml +# .katalyst/bases/local.yaml type: filesystem root: . collections: @@ -72,7 +76,7 @@ collections: ``` Collection names are unique across the whole project (selectors are -`/`, with no instance qualifier). +`/`, with no base qualifier). SQLite instances use one table per collection. Each row is one item: @@ -102,11 +106,11 @@ collections: ## Collections A **collection** is a directory of items plus the checks every item must pass. -Collections are declared inside their storage instance, under `collections:`. +Collections are declared inside their base, under `collections:`. | Key | Required | Default | Meaning | |---|---|---|---| -| `path` | no | the collection name | Directory, relative to the instance `root`. | +| `path` | no | the collection name | Directory, relative to the base `root`. | | `pattern` | no | `*.md` | Filename glob selecting items in the directory. | | `table` | for `sqlite` | - | SQLite table backing the collection. | | `id` | for `sqlite` | - | SQLite column that provides item identity. | @@ -141,13 +145,13 @@ inside the `author` attribute object. ### Per-collection files -An instance whose `collections:` block grows unwieldy may split collections into -one file each under `.katalyst/storage//.yaml`, named for +A base whose `collections:` block grows unwieldy may split collections into +one file each under `.katalyst/bases//.yaml`, named for its filename stem. Inline and per-file collections coexist; a name declared both inline and in a file is an error. ```yaml -# .katalyst/storage/local/books.yaml +# .katalyst/bases/local/books.yaml path: notes/books schema: book ``` @@ -264,7 +268,7 @@ listing: ``` ```yaml -# under a storage instance's collections: — override for one collection +# under a base's collections: override for one collection books: path: notes/books schema: book @@ -293,8 +297,8 @@ variant), even when `--schema` is used. ## See also - [Check types reference]({{< relref "check-types/_index.md" >}}), every check type. -- [Storage layer]({{< relref "../deep-dives/domain-model/storage.md" >}}), the storage - instance / collection-definition model and its lineage. +- [Bases]({{< relref "../deep-dives/domain-model/storage.md" >}}), the base / + collection-definition model and its lineage. - [Collections]({{< relref "../deep-dives/domain-model/collections.md" >}}), the config/collection model and rationale: schema resolution, variants, unmatched-as-error. diff --git a/docs/content/reference/glossary.md b/docs/content/reference/glossary.md index 70a2be9..c41ed80 100644 --- a/docs/content/reference/glossary.md +++ b/docs/content/reference/glossary.md @@ -15,6 +15,9 @@ how each term maps onto today's code is documented in the per-package |---|---| | **Aggregate** | The descriptive operation an inspector realizes: measuring a distribution across a collection's items rather than fetching or asserting. See **Inspector**. | | **Attribute** | A named characteristic of an item: a frontmatter key, but also its filename, path, or extension. The general term; a key in the structured object specifically is a **Field**. | +| **Base** | One configured backend store plus the operations Katalyst can perform on its content. A raw base gives Katalyst backend-native access; a collectionized base adds collection definitions. | +| **BaseInstance** | A configured instance of a BaseType plus how to reach it (for `filesystem`, a root directory). Declared under `.katalyst/bases/`; it embeds the collections it maps. | +| **BaseType** | A known backend kind capable of holding content Katalyst can operate on (`filesystem` today; `sqlite`, `postgresql`, `mongodb` later). | | **Body** | Everything after the closing frontmatter fence. Preserved verbatim except by `fix`. | | **Check** | Shorthand for a check instance when context is unambiguous. | | **Check instance** | One configured check attached to a collection: a check type plus its arguments (one YAML object under `checks:`). It runs against each item (object, markdown, or filesystem family). | @@ -23,8 +26,8 @@ how each term maps onto today's code is documented in the per-package | **Collection** | A named entry in `collections:`: a directory, a filename `pattern`, and the checks its items must pass. | | **Collection layer** | Inspectors that profile a configured collection's items, addressed by domain identity (collection + item id) and probing through the same substrate the checks use. | | **Collection-scoped check** | A check type that runs once per collection over all its items (e.g. `filesystem_unique_filename`), rather than per item. It re-scans the full collection even under a single-item selector. | -| **CollectionDefinition** | The two-way mapping from a StorageInstance's contents to collections and items. Yields one or more collections; the filesystem is the only backend today. See [storage layer]({{< relref "../deep-dives/domain-model/storage.md" >}}). | -| **Config** | A **Project**'s configuration: the schemas, storage instances, and collection definitions that declare what the project contains and how its items are checked. Katalyst's config is the `.katalyst/` directory; it is loaded by the `project` package's loader (`internal/project/loader.go`). Each object type owns the parse of its own config — the storage registry validates a declared `type`, and a collection parses its own block in `storage/collection`. | +| **CollectionDefinition** | The two-way mapping from a BaseInstance's contents to collections and items. Yields one or more collections; the filesystem is the only backend today. See [Bases]({{< relref "../deep-dives/domain-model/storage.md" >}}). | +| **Config** | A **Project**'s configuration: the schemas, bases, and collection definitions that declare what the project contains and how its items are checked. Katalyst's config is the `.katalyst/` directory; it is loaded by the `project` package's loader (`internal/project/loader.go`). Each object type owns the parse of its own config: the storage registry validates a declared `type`, and a collection parses its own block in `storage/collection`. | | **Discriminator** | The `when` predicate that selects a variant: a list of `item list --filter` expressions over an item's metadata, ANDed together. | | **Document** | The markdown file-form of an **Item**: a parsed markdown file (frontmatter metadata + body + a line map). Use it where parsing or the on-disk file is the subject; elsewhere prefer **Item**. | | **Evidence** | The structured result of one inspector: counts and distributions with the unit count `n` as denominator. Never a recommendation or verdict. | @@ -34,18 +37,17 @@ how each term maps onto today's code is documented in the per-package | **Item** | The unit of data in a collection, addressed by a selector and operated on by `check`, `fix`, and the `item` subcommands. In the filesystem backend an item is one file matching the collection's pattern, its id the filename stem; its markdown file-form is a **Document**. | | **Measurement primitive** | A reusable building block the inspectors are built from: `object_fields` (a data dictionary over object maps), `markdown_body` (body structure), and file-metadata. | | **Metadata** | The parsed, in-memory structure of the frontmatter (a `map[string]any`). | -| **Operation** | Something a storage backend lets you do with its data: read, list, query, aggregate, write. Each has a scope (item, collection, across collections) and structural requirements the backend must satisfy. See [progressive operations]({{< relref "../deep-dives/progressive-operations.md" >}}). | -| **Project** | The whole katalyst workspace: a repo root with a `.katalyst/` **Config** that declares the storage instances, collections, and checks katalyst operates over. The top-level scope an empty selector addresses, and what `katalyst init` creates. Collections (and the query operations scoped to them) live within a project; the `project` package (`internal/project`) is its code home — it holds the `.katalyst/` loader, and the `collection` layer lives under `storage/`. | -| **Raw-source layer** | Inspectors that profile a backend store directly, before any collection configuration, addressed by backend-native reference (a path today). The onboarding case: "what's in this store?" | +| **Operation** | Something a base lets you do with its data: read, list, query, aggregate, write. Each has a scope (item, collection, across collections) and structural requirements the backend must satisfy. See [progressive operations]({{< relref "../deep-dives/progressive-operations.md" >}}). | +| **Profile class** | A group of near-identical profiles the summarizer collapses together, so output is proportional to the number of distinct profiles, not directories. | +| **Project** | The whole katalyst workspace: a repo root with a `.katalyst/` **Config** that declares the bases, collections, and checks katalyst operates over. The top-level scope an empty selector addresses, and what `katalyst init` creates. Collections live within a project; the `project` package (`internal/project`) is its code home, holding the `.katalyst/` loader while the collection layer lives under `storage/`. | +| **Raw base layer** | Inspectors that profile a base directly, before any collection configuration, addressed by base-native reference (a path today). The onboarding case: "what's in this base?" | | **Repo root** | The directory containing the `.katalyst/` config directory; the base for all path resolution. | | **Resolver** | The runtime object that decides which object schema applies to an item and caches compiled schemas per `(library, path)`. | | **Schema** | The definition of a collection's shape, expressed in a CheckLibrary's format (JSON Schema today; a Vale style config later). Named in `schemas:`; located by path. The katalyst concept, not the JSON Schema document specifically. | | **Schema directive** | The inline `schema:` key inside a document's frontmatter, opting it into a named schema. | | **Selector** | How a command names what to operate on: nothing (whole project), ``, or `/`. | -| **Scope** | The level an operation or backend mapping applies to: item, collection, project, or across collections. In the storage layer, scope answers whether one matched backend unit becomes an item or a collection. | +| **Scope** | The level an operation or backend mapping applies to: item, collection, project, or across collections. In the base layer, scope answers whether one matched backend unit becomes an item or a collection. | | **Span** | The slice of body text a text rule is evaluated against, chosen by its `target`: the whole `body`, each `line`, the `first-line`, or `matched-lines` (lines matching a `select` regex). | -| **StorageInstance** | A configured instance of a StorageType plus how to reach it (for `filesystem`, a root directory). Declared under `.katalyst/storage/`; it embeds the collections it maps. | -| **StorageType** | A known backend kind capable of holding collections and items (`filesystem` today; `sqlite`, `postgresql`, `mongodb` later). | | **Target** | The slice of a path a filesystem name/path check type tests: `filename`, `filename-ext`, `parent-dir`, or `path-segments` (every directory segment plus the basename). For a text rule, the slice of body it tests, see Span. | | **Text rule** | A `text_*` check (`text_requires`, `text_forbids`, `text_denylist`) that tests the body as raw text, a regex or a literal denylist, independent of markdown structure. Applies to plain-text items too. | | **Validation result** | The product of running an item's checks: either `path: OK`, or a flat list of violations. | diff --git a/docs/content/welcome.md b/docs/content/welcome.md index afa2a11..d680df2 100644 --- a/docs/content/welcome.md +++ b/docs/content/welcome.md @@ -65,7 +65,7 @@ Common updates include: - *Rules*: add or change checks. - *Content shape*: change the structure of your content. -- *Storage*: change your storage layer. +- *Bases*: change where content lives. ## Design principles diff --git a/docs/generated/examples/check-collection-rules.full.md b/docs/generated/examples/check-collection-rules.full.md index a870187..e29f331 100644 --- a/docs/generated/examples/check-collection-rules.full.md +++ b/docs/generated/examples/check-collection-rules.full.md @@ -20,7 +20,7 @@ title: Bad title # A different heading ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/check-schema-missing-field.full.md b/docs/generated/examples/check-schema-missing-field.full.md index c1dac4d..f2af4eb 100644 --- a/docs/generated/examples/check-schema-missing-field.full.md +++ b/docs/generated/examples/check-schema-missing-field.full.md @@ -21,7 +21,7 @@ title: Foundation # Foundation ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/check-title-h1-mismatch.full.md b/docs/generated/examples/check-title-h1-mismatch.full.md index a56a047..be7825d 100644 --- a/docs/generated/examples/check-title-h1-mismatch.full.md +++ b/docs/generated/examples/check-title-h1-mismatch.full.md @@ -11,7 +11,7 @@ title: Dune # Children of Dune ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/check-type-error.full.md b/docs/generated/examples/check-type-error.full.md index 0c509f3..24bc60c 100644 --- a/docs/generated/examples/check-type-error.full.md +++ b/docs/generated/examples/check-type-error.full.md @@ -12,7 +12,7 @@ year: "not a number" # Dune ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/check-valid-item.full.md b/docs/generated/examples/check-valid-item.full.md index f0aeabd..8d0a02a 100644 --- a/docs/generated/examples/check-valid-item.full.md +++ b/docs/generated/examples/check-valid-item.full.md @@ -12,7 +12,7 @@ year: 1965 # Dune ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/ci-check-fails.full.md b/docs/generated/examples/ci-check-fails.full.md index 125ef66..ff612a4 100644 --- a/docs/generated/examples/ci-check-fails.full.md +++ b/docs/generated/examples/ci-check-fails.full.md @@ -20,7 +20,7 @@ title: Draft No heading here. ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/ci-fix-check.full.md b/docs/generated/examples/ci-fix-check.full.md index 8bd68d9..ed2744c 100644 --- a/docs/generated/examples/ci-fix-check.full.md +++ b/docs/generated/examples/ci-fix-check.full.md @@ -21,7 +21,7 @@ author: Ada # Messy ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/fix-normalize-frontmatter.full.md b/docs/generated/examples/fix-normalize-frontmatter.full.md index 6229539..885766d 100644 --- a/docs/generated/examples/fix-normalize-frontmatter.full.md +++ b/docs/generated/examples/fix-normalize-frontmatter.full.md @@ -13,7 +13,7 @@ apple: 2 verbatim ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/fix-text-forbids.full.md b/docs/generated/examples/fix-text-forbids.full.md index 62a0f68..43c8633 100644 --- a/docs/generated/examples/fix-text-forbids.full.md +++ b/docs/generated/examples/fix-text-forbids.full.md @@ -12,7 +12,7 @@ t: 1 keep this. ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/docs/generated/examples/inspect-collection-fields.full.md b/docs/generated/examples/inspect-collection-fields.full.md index 6202bb2..0bbf531 100644 --- a/docs/generated/examples/inspect-collection-fields.full.md +++ b/docs/generated/examples/inspect-collection-fields.full.md @@ -65,7 +65,7 @@ status: read # Dune Messiah ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/AGENTS.md b/internal/examples/AGENTS.md index 8a5c68d..e217e1f 100644 --- a/internal/examples/AGENTS.md +++ b/internal/examples/AGENTS.md @@ -27,8 +27,8 @@ for where this fits the wider testing strategy. ## Corpus house style -- Data files first, then the storage config, then a schema file if one is kept. -- Name the storage config `.katalyst/storage/my_directory.yaml`. +- Data files first, then the base config, then a schema file if one is kept. +- Name the base config `.katalyst/bases/my_directory.yaml`. - Prefer inline `checks:` over a schema file; keep a schema only when the example is specifically about schema binding. diff --git a/internal/examples/examples.go b/internal/examples/examples.go index 9f9752a..2e44579 100644 --- a/internal/examples/examples.go +++ b/internal/examples/examples.go @@ -52,8 +52,8 @@ properties: year: { type: integer } ` -// notesStorage declares a single `notes` collection bound to the book schema. -const notesStorage = `type: filesystem +// notesBase declares a single `notes` collection bound to the book schema. +const notesBase = `type: filesystem root: . collections: notes: @@ -61,10 +61,10 @@ collections: schema: book ` -// notesFieldTypeStorage declares the `notes` collection with an inline +// notesFieldTypeBase declares the `notes` collection with an inline // object_field_type check instead of a schema, so the type-error example needs // no separate schema file and matches the field-type reference page it sits on. -const notesFieldTypeStorage = `type: filesystem +const notesFieldTypeBase = `type: filesystem root: . collections: notes: @@ -85,8 +85,8 @@ properties: status: { enum: [read, reading, to-read] } ` -// wikiStorage binds a `books` collection over the wiki/ tree. -const wikiStorage = `type: filesystem +// wikiBase binds a `books` collection over the wiki/ tree. +const wikiBase = `type: filesystem root: . collections: books: @@ -94,9 +94,9 @@ collections: schema: book ` -// postsRulesStorage is the `posts` collection from the configure-rules how-to: +// postsRulesBase is the `posts` collection from the configure-rules how-to: // the three structural/markdown/filesystem checks that guide attaches. -const postsRulesStorage = `type: filesystem +const postsRulesBase = `type: filesystem root: . collections: posts: @@ -122,9 +122,9 @@ properties: year: { type: integer, minimum: 0 } ` -// booksAtNotesStorage binds the `book` schema to a `books` collection at +// booksAtNotesBase binds the `book` schema to a `books` collection at // notes/books, matching the add-a-schema how-to. -const booksAtNotesStorage = `type: filesystem +const booksAtNotesBase = `type: filesystem root: . collections: books: @@ -132,10 +132,10 @@ collections: schema: book ` -// ciStorage is the small project the validate-in-ci how-to gates: a `notes` +// ciBase is the small project the validate-in-ci how-to gates: a `notes` // collection that only requires an H1, so the failing item fails on structure // alone and the canonical-frontmatter gate is easy to read. -const ciStorage = `type: filesystem +const ciBase = `type: filesystem root: . collections: notes: @@ -156,12 +156,12 @@ var wikiCorpus = []File{ } // withWikiProject appends the .katalyst project files to the wiki corpus so the -// data files lead and the storage config (then the schema) trail in the +// data files lead and the base config (then the schema) trail in the // rendered input. func withWikiProject() []File { out := append([]File{}, wikiCorpus...) return append(out, - File{Path: ".katalyst/storage/my_directory.yaml", Content: wikiStorage}, + File{Path: ".katalyst/bases/my_directory.yaml", Content: wikiBase}, File{Path: ".katalyst/schemas/book.yaml", Content: wikiBookSchema}, ) } @@ -177,7 +177,7 @@ func All() []Example { Weight: 10, Files: []File{ {Path: "notes/dune.md", Content: "---\ntitle: Dune\nyear: 1965\n---\n# Dune\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: notesStorage}, + {Path: ".katalyst/bases/my_directory.yaml", Content: notesBase}, {Path: ".katalyst/schemas/book.yaml", Content: bookSchema}, }, Args: []string{"check", "notes/dune"}, @@ -190,7 +190,7 @@ func All() []Example { Weight: 20, Files: []File{ {Path: "notes/dune.md", Content: "---\ntitle: Dune\nyear: \"not a number\"\n---\n# Dune\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: notesFieldTypeStorage}, + {Path: ".katalyst/bases/my_directory.yaml", Content: notesFieldTypeBase}, }, Args: []string{"check", "notes/dune"}, }, @@ -202,7 +202,7 @@ func All() []Example { Weight: 30, Files: []File{ {Path: "notes/dune.md", Content: "---\ntitle: Dune\n---\n# Children of Dune\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: "type: filesystem\nroot: .\ncollections:\n notes:\n path: notes\n checks:\n - kind: markdown_title_matches_h1\n field: title\n"}, + {Path: ".katalyst/bases/my_directory.yaml", Content: "type: filesystem\nroot: .\ncollections:\n notes:\n path: notes\n checks:\n - kind: markdown_title_matches_h1\n field: title\n"}, }, Args: []string{"check", "notes/dune"}, }, @@ -215,7 +215,7 @@ func All() []Example { ResultFiles: []string{"notes/doc.md"}, Files: []File{ {Path: "notes/doc.md", Content: "---\nzebra: 1\napple: 2\n---\n# Body\nverbatim\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: "type: filesystem\nroot: .\ncollections:\n notes:\n path: notes\n checks:\n - kind: markdown_requires_h1\n"}, + {Path: ".katalyst/bases/my_directory.yaml", Content: "type: filesystem\nroot: .\ncollections:\n notes:\n path: notes\n checks:\n - kind: markdown_requires_h1\n"}, }, Args: []string{"fix", "notes/doc"}, }, @@ -228,7 +228,7 @@ func All() []Example { ResultFiles: []string{"notes/doc.md"}, Files: []File{ {Path: "notes/doc.md", Content: "---\nt: 1\n---\n# Title.\nkeep this.\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: "type: filesystem\nroot: .\ncollections:\n notes:\n path: notes\n checks:\n - kind: text_forbids\n target: first-line\n pattern: '\\.(\\s*)$'\n fix: '$1'\n"}, + {Path: ".katalyst/bases/my_directory.yaml", Content: "type: filesystem\nroot: .\ncollections:\n notes:\n path: notes\n checks:\n - kind: text_forbids\n target: first-line\n pattern: '\\.(\\s*)$'\n fix: '$1'\n"}, }, Args: []string{"fix", "notes/doc"}, }, @@ -259,7 +259,7 @@ func All() []Example { Files: []File{ {Path: "notes/books/dune.md", Content: "---\ntitle: Dune\nyear: 1965\n---\n# Dune\n"}, {Path: "notes/books/foundation.md", Content: "---\ntitle: Foundation\n---\n# Foundation\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: booksAtNotesStorage}, + {Path: ".katalyst/bases/my_directory.yaml", Content: booksAtNotesBase}, {Path: ".katalyst/schemas/book.yaml", Content: bookConstrainedSchema}, }, Args: []string{"check", "books"}, @@ -273,7 +273,7 @@ func All() []Example { Files: []File{ {Path: "content/posts/hello-world.md", Content: "---\ntitle: Hello world\n---\n# Hello world\n"}, {Path: "content/posts/Bad_Title.md", Content: "---\ntitle: Bad title\n---\n# A different heading\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: postsRulesStorage}, + {Path: ".katalyst/bases/my_directory.yaml", Content: postsRulesBase}, }, Args: []string{"check", "posts"}, }, @@ -286,7 +286,7 @@ func All() []Example { Files: []File{ {Path: "notes/intro.md", Content: "---\ntitle: Intro\n---\n# Intro\n"}, {Path: "notes/draft.md", Content: "---\ntitle: Draft\n---\nNo heading here.\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: ciStorage}, + {Path: ".katalyst/bases/my_directory.yaml", Content: ciBase}, }, Args: []string{"check"}, }, @@ -299,7 +299,7 @@ func All() []Example { Files: []File{ {Path: "notes/tidy.md", Content: "---\ntitle: Tidy\n---\n# Tidy\n"}, {Path: "notes/messy.md", Content: "---\ntitle: Messy\nauthor: Ada\n---\n# Messy\n"}, - {Path: ".katalyst/storage/my_directory.yaml", Content: ciStorage}, + {Path: ".katalyst/bases/my_directory.yaml", Content: ciBase}, }, Args: []string{"fix", "--check"}, }, diff --git a/internal/examples/testdata/check-collection-rules.md b/internal/examples/testdata/check-collection-rules.md index 864a7ee..06b8414 100644 --- a/internal/examples/testdata/check-collection-rules.md +++ b/internal/examples/testdata/check-collection-rules.md @@ -20,7 +20,7 @@ title: Bad title # A different heading ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/check-schema-missing-field.md b/internal/examples/testdata/check-schema-missing-field.md index b457784..297d0f9 100644 --- a/internal/examples/testdata/check-schema-missing-field.md +++ b/internal/examples/testdata/check-schema-missing-field.md @@ -21,7 +21,7 @@ title: Foundation # Foundation ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/check-title-h1-mismatch.md b/internal/examples/testdata/check-title-h1-mismatch.md index fbfda9c..328ee6e 100644 --- a/internal/examples/testdata/check-title-h1-mismatch.md +++ b/internal/examples/testdata/check-title-h1-mismatch.md @@ -11,7 +11,7 @@ title: Dune # Children of Dune ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/check-type-error.md b/internal/examples/testdata/check-type-error.md index 60d4f9a..676d952 100644 --- a/internal/examples/testdata/check-type-error.md +++ b/internal/examples/testdata/check-type-error.md @@ -12,7 +12,7 @@ year: "not a number" # Dune ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/check-valid-item.md b/internal/examples/testdata/check-valid-item.md index a53b53f..5f20a45 100644 --- a/internal/examples/testdata/check-valid-item.md +++ b/internal/examples/testdata/check-valid-item.md @@ -12,7 +12,7 @@ year: 1965 # Dune ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/ci-check-fails.md b/internal/examples/testdata/ci-check-fails.md index 016bc08..71d2bec 100644 --- a/internal/examples/testdata/ci-check-fails.md +++ b/internal/examples/testdata/ci-check-fails.md @@ -20,7 +20,7 @@ title: Draft No heading here. ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/ci-fix-check.md b/internal/examples/testdata/ci-fix-check.md index 1d7170f..8c138cf 100644 --- a/internal/examples/testdata/ci-fix-check.md +++ b/internal/examples/testdata/ci-fix-check.md @@ -21,7 +21,7 @@ author: Ada # Messy ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/fix-normalize-frontmatter.md b/internal/examples/testdata/fix-normalize-frontmatter.md index d24a4a3..e67d1b2 100644 --- a/internal/examples/testdata/fix-normalize-frontmatter.md +++ b/internal/examples/testdata/fix-normalize-frontmatter.md @@ -13,7 +13,7 @@ apple: 2 verbatim ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/fix-text-forbids.md b/internal/examples/testdata/fix-text-forbids.md index 8d42880..e600f7e 100644 --- a/internal/examples/testdata/fix-text-forbids.md +++ b/internal/examples/testdata/fix-text-forbids.md @@ -12,7 +12,7 @@ t: 1 keep this. ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/examples/testdata/inspect-collection-fields.md b/internal/examples/testdata/inspect-collection-fields.md index e389552..7c7adb0 100644 --- a/internal/examples/testdata/inspect-collection-fields.md +++ b/internal/examples/testdata/inspect-collection-fields.md @@ -65,7 +65,7 @@ status: read # Dune Messiah ``` -`.katalyst/storage/my_directory.yaml` +`.katalyst/bases/my_directory.yaml` ```yaml type: filesystem diff --git a/internal/inspect/collection_test.go b/internal/inspect/collection_test.go index 77b35fd..2940bcb 100644 --- a/internal/inspect/collection_test.go +++ b/internal/inspect/collection_test.go @@ -12,7 +12,7 @@ import ( func TestCollectionView_objectFieldsAndMarkdownBody(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{ + "bases/local.yaml": projecttest.LocalBase(map[string]string{ "notes": "path: notes\nchecks:\n - kind: markdown_requires_h1\n", }), }) diff --git a/internal/inspect/filecontentshape.go b/internal/inspect/filecontentshape.go index 137eb86..d87b409 100644 --- a/internal/inspect/filecontentshape.go +++ b/internal/inspect/filecontentshape.go @@ -23,7 +23,7 @@ type FileContentShape struct{} func (FileContentShape) Name() string { return "file_content_shape" } -func (FileContentShape) AppliesTo(t storage.StorageType) bool { return t == storage.Filesystem } +func (FileContentShape) AppliesTo(t storage.BaseType) bool { return t == storage.Filesystem } func (FileContentShape) Inspect(v SourceView, p Params) Evidence { data := buildFileContentShape(v, p.Selection) diff --git a/internal/inspect/inspect.go b/internal/inspect/inspect.go index 7511372..2383849 100644 --- a/internal/inspect/inspect.go +++ b/internal/inspect/inspect.go @@ -30,11 +30,11 @@ type CollectionInspector interface { // SourceInspector measures a raw backend store before any collection // configuration, addressed by backend-native reference (a path today) through a // SourceView. AppliesTo gates backend-specific inspectors: one returns false for -// a StorageType it cannot describe, so it is simply absent there. It is the +// a BaseType it cannot describe, so it is simply absent there. It is the // raw-source half of the two-layer model; the collection half is // CollectionInspector. type SourceInspector interface { Name() string - AppliesTo(storage.StorageType) bool + AppliesTo(storage.BaseType) bool Inspect(SourceView, Params) Evidence } diff --git a/internal/inspect/inspectors_source.go b/internal/inspect/inspectors_source.go index f41a082..d35e425 100644 --- a/internal/inspect/inspectors_source.go +++ b/internal/inspect/inspectors_source.go @@ -2,14 +2,14 @@ package inspect import "github.com/abegong/katalyst/internal/storage" -// FileTree is the shallow, cheap raw-source inspector: a deterministic +// FileTree is the shallow, cheap raw base inspector: a deterministic // filesystem map from path metadata. It opens no files. Filesystem-specific. // Subsumes the former filesystem_naming. type FileTree struct{} func (FileTree) Name() string { return "file_tree" } -func (FileTree) AppliesTo(t storage.StorageType) bool { return t == storage.Filesystem } +func (FileTree) AppliesTo(t storage.BaseType) bool { return t == storage.Filesystem } func (FileTree) Inspect(v SourceView, p Params) Evidence { return Evidence{Inspector: "file_tree", Scope: v.root, N: v.N(), Data: buildFileTreeSummary(v)} diff --git a/internal/inspect/source.go b/internal/inspect/source.go index 094b18d..05d44d7 100644 --- a/internal/inspect/source.go +++ b/internal/inspect/source.go @@ -22,11 +22,11 @@ type readCounter struct { count int } -// SourceView is the raw-source layer's addressing surface: a filesystem tree +// SourceView is the raw base layer's addressing surface: a filesystem tree // walked once into per-file metadata, addressed by backend-native reference // (the relative path). Path-level inspectors (file_tree) read only this -// metadata and open no files; content inspectors read selected files explicitly. -// Filesystem-only for now; generalizing the walk into the storage layer is +// metadata and open no files; content inspectors trigger a one-time markdown +// parse. Filesystem-only for now; generalizing the walk across base types is // future work. type SourceView struct { root string diff --git a/internal/project/AGENTS.md b/internal/project/AGENTS.md index 2f52879..859760a 100644 --- a/internal/project/AGENTS.md +++ b/internal/project/AGENTS.md @@ -1,21 +1,20 @@ # internal/project -The project domain layer: finds `.katalyst/`, loads schemas and storage -instances, exposes collections, resolves selectors, and enumerates concrete -items for the CLI. +The project domain layer: finds `.katalyst/`, loads schemas and bases, exposes +collections, resolves selectors, and enumerates concrete items for the CLI. Architecture and rationale live in the [domain model](../../docs/content/deep-dives/domain-model/_index.md), [configuration](../../docs/content/reference/configuration.md), and -[storage](../../docs/content/deep-dives/domain-model/storage.md) docs. This file keeps only +[Bases](../../docs/content/deep-dives/domain-model/storage.md) docs. This file keeps only local code conventions. ## Conventions - The loader owns the `.katalyst/` vocabulary: discovery mode, config format, - schema names, storage instance names, collection uniqueness, and selector + schema names, base names, collection uniqueness, and selector parsing. Do not duplicate that parsing in `cmd/`. -- Storage and collection details stay below the storage boundary. This package +- Base and collection details stay below the storage boundary. This package assembles `storage/collection.Collection` values and calls a `CollectionDefinition`; it should not inline globbing, path joins, or filename-as-id assumptions. diff --git a/internal/project/loader.go b/internal/project/loader.go index 3bd7cbd..db71ef1 100644 --- a/internal/project/loader.go +++ b/internal/project/loader.go @@ -2,16 +2,16 @@ // and answers two questions: // // 1. Which schemas exist (by name → absolute file path)? -// 2. Which storage instances exist, what collections does each declare, and +// 2. Which bases exist, what collections does each declare, and // what checks does each collection run? // // A project is the nearest ancestor directory that contains a .katalyst/ // subdirectory. Schemas are defined one named file per definition under -// .katalyst/schemas/; storage instances one named file per instance under -// .katalyst/storage/ (discovery: convention, the default), or listed -// explicitly in .katalyst/config.yaml (discovery: explicit). A storage -// instance embeds the collections it maps. The file format (yaml, json, or -// both) is set per kind in config.yaml. See +// .katalyst/schemas/; bases are defined one named file per definition under +// .katalyst/bases/ (discovery: convention, the default), or listed explicitly +// in .katalyst/config.yaml (discovery: explicit). A base embeds the collections +// it maps. Legacy projects may still use storage: and .katalyst/storage/. The +// file format (yaml, json, or both) is set per kind in config.yaml. See // docs/content/reference/configuration.md. package project @@ -38,6 +38,7 @@ const configFile = "config.yaml" // Subdirectories of Dir holding one named file per definition. const ( schemasSubdir = "schemas" + basesSubdir = "bases" storageSubdir = "storage" ) @@ -62,28 +63,28 @@ type Config struct { Root string // Schemas is name → absolute path. Schemas map[string]string - // Storage holds the configured storage instances, in name order. Each - // instance declares its own collections. - Storage []StorageInstance - // Collections is the flattened view across all instances, in name order. - // Collection names are unique project-wide (selectors carry no instance + // Bases holds the configured bases, in name order. Each base declares its + // own collections. + Bases []BaseInstance + // Collections is the flattened view across all bases, in name order. + // Collection names are unique project-wide (selectors carry no base // qualifier), so this is the canonical lookup most callers use. Collections []Collection } -// StorageInstance is one configured backend store plus the collections it maps -// onto the domain model. For StorageType filesystem, Root is a directory. -type StorageInstance struct { - // Name is the public handle (filename stem under .katalyst/storage/, or - // the key in the inline `storage.defs` map). +// BaseInstance is one configured backend store plus the collections it maps +// onto the domain model. For BaseType filesystem, Root is a directory. +type BaseInstance struct { + // Name is the public handle (filename stem under .katalyst/bases/, or + // the key in the inline `bases.defs` map). Name string // Type is the backend kind, validated against the storage registry // (storage.Known). Type string - // Root is the absolute, resolved instance root. Relative roots in the + // Root is the absolute, resolved base root. Relative roots in the // source resolve against the repo Root. Root string - // Collections this instance declares, in name order. + // Collections this base declares, in name order. Collections []Collection } @@ -103,7 +104,8 @@ type ( // default YAML format. type rawConfig struct { Schemas rawSchemaKind `yaml:"schemas"` - Storage rawStorageKind `yaml:"storage"` + Bases *rawBaseKind `yaml:"bases"` + Storage *rawBaseKind `yaml:"storage"` Listing *collection.RawListingDefaults `yaml:"listing"` Query *collection.RawListingDefaults `yaml:"query"` } @@ -116,18 +118,18 @@ type rawSchemaKind struct { Defs map[string]string `yaml:"defs"` } -// rawStorageKind configures how storage instances are discovered. Defs is -// consulted only when Discovery is "explicit" (name → instance). -type rawStorageKind struct { - Discovery string `yaml:"discovery"` - Format string `yaml:"format"` - Defs map[string]rawStorageInstance `yaml:"defs"` +// rawBaseKind configures how bases are discovered. Defs is consulted only when +// Discovery is "explicit" (name → base). +type rawBaseKind struct { + Discovery string `yaml:"discovery"` + Format string `yaml:"format"` + Defs map[string]rawBaseInstance `yaml:"defs"` } -// rawStorageInstance mirrors one storage instance: its backend type, its root, -// and the collections it declares (name → definition). The collection mirror -// lives with the Collection type in internal/storage/collection. -type rawStorageInstance struct { +// rawBaseInstance mirrors one base: its backend type, its root, and the +// collections it declares (name → definition). The collection mirror lives with +// the Collection type in internal/storage/collection. +type rawBaseInstance struct { Type string `yaml:"type"` Root string `yaml:"root"` Path string `yaml:"path"` @@ -162,7 +164,7 @@ func Load(start string) (*Config, error) { if raw.Query != nil { return nil, errors.New("config: query is no longer a config block; use listing") } - if err := cfg.loadStorage(raw.Storage, raw.Listing); err != nil { + if err := cfg.loadBases(raw.Bases, raw.Storage, raw.Listing); err != nil { return nil, err } return cfg, nil @@ -216,39 +218,57 @@ func (c *Config) loadSchemas(k rawSchemaKind) error { return nil } -// loadStorage populates c.Storage and the flattened c.Collections (both sorted -// by name) from either the storage directory (convention: one file per -// instance) or an explicit defs map in config.yaml. Collection names are -// validated unique across every instance. -func (c *Config) loadStorage(k rawStorageKind, projectListing *collection.RawListingDefaults) error { +// loadBases populates c.Bases and the flattened c.Collections (both sorted by +// name) from either the bases directory (convention: one file per base) or an +// explicit defs map in config.yaml. Collection names are validated unique +// across every base. The legacy storage block and directory stay readable, but +// cannot be mixed with the new bases form. +func (c *Config) loadBases(bases, legacy *rawBaseKind, projectListing *collection.RawListingDefaults) error { + if bases != nil && legacy != nil { + return errors.New("config: use bases, not both bases and storage") + } + label := "bases" + k := rawBaseKind{} + if bases != nil { + k = *bases + } else if legacy != nil { + k = *legacy + label = "storage" + } + discovery, err := normDiscovery(k.Discovery) if err != nil { - return fmt.Errorf("storage: %w", err) + return fmt.Errorf("%s: %w", label, err) } exts, err := formatExts(k.Format) if err != nil { - return fmt.Errorf("storage: %w", err) + return fmt.Errorf("%s: %w", label, err) + } + + baseSubdir, err := c.baseSubdir(label) + if err != nil { + return err } - defs := map[string]rawStorageInstance{} + defs := map[string]rawBaseInstance{} if discovery == discoveryExplicit { if len(k.Defs) == 0 { - return errors.New(`storage: discovery "explicit" requires a non-empty "defs" map`) + return fmt.Errorf(`%s: discovery "explicit" requires a non-empty "defs" map`, label) } defs = k.Defs } else { - found, err := scanKindDir(filepath.Join(c.Root, Dir, storageSubdir), exts) + found, err := scanKindDir(filepath.Join(c.Root, Dir, baseSubdir), exts) if err != nil { - return fmt.Errorf("storage: %w", err) + return fmt.Errorf("%s: %w", label, err) } for name, path := range found { src, err := os.ReadFile(path) if err != nil { - return fmt.Errorf("storage %q: %w", name, err) + return fmt.Errorf("%s %q: %w", label, name, err) } - var ri rawStorageInstance + var ri rawBaseInstance if err := yaml.Unmarshal(src, &ri); err != nil { - return fmt.Errorf("storage %q: %w", name, err) + return fmt.Errorf("%s %q: %w", label, name, err) } defs[name] = ri } @@ -260,22 +280,22 @@ func (c *Config) loadStorage(k rawStorageKind, projectListing *collection.RawLis } sort.Strings(names) - // instanceOf records which instance first claimed a collection name, so a - // collision across instances is reported with both sides. - instanceOf := map[string]string{} + // baseOf records which base first claimed a collection name, so a collision + // across bases is reported with both sides. + baseOf := map[string]string{} for _, name := range names { - inst, err := c.buildInstance(name, defs[name], exts, projectListing) + inst, err := c.buildInstance(name, defs[name], exts, projectListing, baseSubdir, label) if err != nil { return err } for _, col := range inst.Collections { - if prev, dup := instanceOf[col.Name]; dup { - return fmt.Errorf("collection %q is declared by two storage instances (%q and %q); collection names must be unique across the project", col.Name, prev, name) + if prev, dup := baseOf[col.Name]; dup { + return fmt.Errorf("collection %q is declared by two bases (%q and %q); collection names must be unique across the project", col.Name, prev, name) } - instanceOf[col.Name] = name + baseOf[col.Name] = name c.Collections = append(c.Collections, col) } - c.Storage = append(c.Storage, inst) + c.Bases = append(c.Bases, inst) } sort.Slice(c.Collections, func(i, j int) bool { return c.Collections[i].Name < c.Collections[j].Name @@ -283,20 +303,46 @@ func (c *Config) loadStorage(k rawStorageKind, projectListing *collection.RawLis return nil } -// buildInstance turns one raw storage instance into a validated -// StorageInstance, building each of its collections against the instance root. -// Collections come from the instance's inline `collections:` block and, as an -// escape hatch for instances that outgrow inline, from one file per collection -// under .katalyst/storage//. A name declared in both places is an error. -// The instance name comes from the source (filename stem or map key), never the -// body. -func (c *Config) buildInstance(name string, ri rawStorageInstance, exts []string, projectListing *collection.RawListingDefaults) (StorageInstance, error) { +// baseSubdir chooses the directory that holds base definition files. New config +// uses .katalyst/bases/. Legacy .katalyst/storage/ remains readable, but the +// two directories cannot be mixed. +func (c *Config) baseSubdir(label string) (string, error) { + hasBases, err := dirExists(filepath.Join(c.Root, Dir, basesSubdir)) + if err != nil { + return "", fmt.Errorf("bases: %w", err) + } + hasStorage, err := dirExists(filepath.Join(c.Root, Dir, storageSubdir)) + if err != nil { + return "", fmt.Errorf("storage: %w", err) + } + if hasBases && hasStorage { + return "", errors.New("config: use .katalyst/bases, not both .katalyst/bases and .katalyst/storage") + } + if hasBases { + return basesSubdir, nil + } + if hasStorage { + return storageSubdir, nil + } + if label == "storage" { + return storageSubdir, nil + } + return basesSubdir, nil +} + +// buildInstance turns one raw base into a validated +// BaseInstance, building each of its collections against the base root. +// Collections come from the base's inline `collections:` block and, as an +// escape hatch for bases that outgrow inline, from one file per collection +// under .katalyst/bases//. A name declared in both places is an error. +// The base name comes from the source (filename stem or map key), never the body. +func (c *Config) buildInstance(name string, ri rawBaseInstance, exts []string, projectListing *collection.RawListingDefaults, baseSubdir, label string) (BaseInstance, error) { typ := ri.Type if typ == "" { typ = string(storage.Filesystem) } - if !storage.Known(storage.StorageType(typ)) { - return StorageInstance{}, fmt.Errorf("storage %q: unknown type %q", name, ri.Type) + if !storage.Known(storage.BaseType(typ)) { + return BaseInstance{}, fmt.Errorf("%s %q: unknown type %q", label, name, ri.Type) } rootRel := ri.Root @@ -313,22 +359,22 @@ func (c *Config) buildInstance(name string, ri rawStorageInstance, exts []string for cn, rc := range ri.Collections { raws[cn] = rc } - instDir := filepath.Join(c.Root, Dir, storageSubdir, name) + instDir := filepath.Join(c.Root, Dir, baseSubdir, name) found, err := scanKindDir(instDir, exts) if err != nil { - return StorageInstance{}, fmt.Errorf("storage %q: %w", name, err) + return BaseInstance{}, fmt.Errorf("%s %q: %w", label, name, err) } for cn, path := range found { if _, dup := raws[cn]; dup { - return StorageInstance{}, fmt.Errorf("storage %q: collection %q is declared both inline and in a file", name, cn) + return BaseInstance{}, fmt.Errorf("%s %q: collection %q is declared both inline and in a file", label, name, cn) } src, err := os.ReadFile(path) if err != nil { - return StorageInstance{}, fmt.Errorf("storage %q: collection %q: %w", name, cn, err) + return BaseInstance{}, fmt.Errorf("%s %q: collection %q: %w", label, name, cn, err) } var rc collection.RawCollection if err := yaml.Unmarshal(src, &rc); err != nil { - return StorageInstance{}, fmt.Errorf("storage %q: collection %q: %w", name, cn, err) + return BaseInstance{}, fmt.Errorf("%s %q: collection %q: %w", label, name, cn, err) } raws[cn] = rc } @@ -344,18 +390,29 @@ func (c *Config) buildInstance(name string, ri rawStorageInstance, exts []string col, err := collection.Build(collection.BuildInput{ Name: cn, Raw: raws[cn], - InstRoot: instRoot, - InstName: name, StorageType: typ, + BaseRoot: instRoot, + BaseName: name, ProjectListing: projectListing, SchemaKnown: c.schemaKnown, }) if err != nil { - return StorageInstance{}, err + return BaseInstance{}, err } cols = append(cols, col) } - return StorageInstance{Name: name, Type: typ, Root: instRoot, Collections: cols}, nil + return BaseInstance{Name: name, Type: typ, Root: instRoot, Collections: cols}, nil +} + +func dirExists(dir string) (bool, error) { + info, err := os.Stat(dir) + if errors.Is(err, os.ErrNotExist) { + return false, nil + } + if err != nil { + return false, err + } + return info.IsDir(), nil } // schemaKnown reports whether a schema name is defined. The collection builder diff --git a/internal/project/loader_test.go b/internal/project/loader_test.go index 53fa3a5..1c4f679 100644 --- a/internal/project/loader_test.go +++ b/internal/project/loader_test.go @@ -27,7 +27,7 @@ func TestLoad_convention_discoversSchemasAndCollections(t *testing.T) { projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, "schemas/person.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{ + "bases/local.yaml": projecttest.LocalBase(map[string]string{ "books": "path: notes/books\nschema: book\n", "people": "path: notes/people\npattern: \"*.markdown\"\nschema: person\n", }), @@ -49,12 +49,12 @@ func TestLoad_convention_discoversSchemasAndCollections(t *testing.T) { t.Errorf("SchemaPath(book) = %q, want %q", got, want) } - // One filesystem instance named "local". - if len(cfg.Storage) != 1 || cfg.Storage[0].Name != "local" || cfg.Storage[0].Type != "filesystem" { - t.Fatalf("expected one filesystem instance 'local', got %+v", cfg.Storage) + // One filesystem base named "local". + if len(cfg.Bases) != 1 || cfg.Bases[0].Name != "local" || cfg.Bases[0].Type != "filesystem" { + t.Fatalf("expected one filesystem base 'local', got %+v", cfg.Bases) } - if cfg.Storage[0].Root != wantRoot { - t.Errorf("instance Root = %q, want %q", cfg.Storage[0].Root, wantRoot) + if cfg.Bases[0].Root != wantRoot { + t.Errorf("base Root = %q, want %q", cfg.Bases[0].Root, wantRoot) } // Collections are flattened and sorted by name: books, people. @@ -69,8 +69,8 @@ func TestLoad_convention_discoversSchemasAndCollections(t *testing.T) { if books.Schema != "book" { t.Errorf("books.Schema = %q, want book", books.Schema) } - if books.Storage != "local" { - t.Errorf("books.Storage = %q, want local", books.Storage) + if books.Base != "local" { + t.Errorf("books.Base = %q, want local", books.Base) } if books.Pattern != "*.md" { t.Errorf("books.Pattern = %q, want default *.md", books.Pattern) @@ -94,8 +94,8 @@ func TestLoad_convention_discoversSchemasAndCollections(t *testing.T) { func TestLoad_defaultsPathToCollectionName(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -108,11 +108,11 @@ func TestLoad_defaultsPathToCollectionName(t *testing.T) { } func TestLoad_instanceRoot_resolvesCollectionDirs(t *testing.T) { - // A non-default instance root is the base for its collections' Dir. + // A non-default base root is the base for its collections' Dir. dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/vault.yaml": "type: filesystem\nroot: content\ncollections:\n" + + "bases/vault.yaml": "type: filesystem\nroot: content\ncollections:\n" + " notes:\n path: notes\n schema: book\n", }) cfg, err := project.Load(dir) @@ -121,19 +121,19 @@ func TestLoad_instanceRoot_resolvesCollectionDirs(t *testing.T) { } notes, _ := cfg.Collection("notes") if want := filepath.Join(projecttest.RealPath(t, dir), "content/notes"); notes.Dir != want { - t.Errorf("notes.Dir = %q, want %q (resolved against instance root)", notes.Dir, want) + t.Errorf("notes.Dir = %q, want %q (resolved against base root)", notes.Dir, want) } } func TestLoad_perCollectionFiles_inInstanceDir(t *testing.T) { - // A collection may live in its own file under storage//, the - // escape hatch for instances that outgrow an inline block. + // A collection may live in its own file under bases//, the escape + // hatch for bases that outgrow an inline block. dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": "type: filesystem\nroot: .\ncollections: {}\n", - "storage/local/books.yaml": "path: notes/books\nschema: book\n", - "storage/local/people.yaml": "path: notes/people\nschema: book\n", + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": "type: filesystem\nroot: .\ncollections: {}\n", + "bases/local/books.yaml": "path: notes/books\nschema: book\n", + "bases/local/people.yaml": "path: notes/people\nschema: book\n", }) cfg, err := project.Load(dir) if err != nil { @@ -143,17 +143,17 @@ func TestLoad_perCollectionFiles_inInstanceDir(t *testing.T) { t.Fatalf("CollectionNames = %v, want [books people]", got) } books, _ := cfg.Collection("books") - if books.Storage != "local" { - t.Errorf("books.Storage = %q, want local", books.Storage) + if books.Base != "local" { + t.Errorf("books.Base = %q, want local", books.Base) } } func TestLoad_perCollectionFiles_coexistWithInline(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"books": "path: notes/books\nschema: book\n"}), - "storage/local/notes.yaml": "path: notes\nschema: book\n", + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"books": "path: notes/books\nschema: book\n"}), + "bases/local/notes.yaml": "path: notes\nschema: book\n", }) cfg, err := project.Load(dir) if err != nil { @@ -167,9 +167,9 @@ func TestLoad_perCollectionFiles_coexistWithInline(t *testing.T) { func TestLoad_perCollectionFiles_rejectInlineCollision(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\nschema: book\n"}), - "storage/local/notes.yaml": "path: other\nschema: book\n", + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\nschema: book\n"}), + "bases/local/notes.yaml": "path: other\nschema: book\n", }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "both inline and in a file") { @@ -195,9 +195,9 @@ func TestLoad_ascendsToFindProject(t *testing.T) { } } -func TestLoad_noStorage_isEmptyButValid(t *testing.T) { - // A project with schemas but no storage instances loads with zero - // collections. There is no implicit instance synthesized. +func TestLoad_noBases_isEmptyButValid(t *testing.T) { + // A project with schemas but no bases loads with zero + // collections. There is no implicit base synthesized. dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, @@ -206,8 +206,8 @@ func TestLoad_noStorage_isEmptyButValid(t *testing.T) { if err != nil { t.Fatalf("Load: %v", err) } - if len(cfg.Storage) != 0 { - t.Errorf("expected no storage instances, got %d", len(cfg.Storage)) + if len(cfg.Bases) != 0 { + t.Errorf("expected no bases, got %d", len(cfg.Bases)) } if len(cfg.Collections) != 0 { t.Errorf("expected no collections, got %d", len(cfg.Collections)) @@ -219,8 +219,8 @@ func TestLoad_noConfigFile_usesConventionDefaults(t *testing.T) { // default convention + yaml discovery. dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -239,10 +239,10 @@ func TestLoad_notFound(t *testing.T) { } } -func TestLoad_rejectsUnknownStorageType(t *testing.T) { +func TestLoad_rejectsUnknownBaseType(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/db.yaml": "type: postgres\ncollections:\n notes:\n path: notes\n checks:\n - kind: markdown_requires_h1\n", + "bases/db.yaml": "type: postgres\ncollections:\n notes:\n path: notes\n checks:\n - kind: markdown_requires_h1\n", }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "unknown type") { @@ -253,8 +253,8 @@ func TestLoad_rejectsUnknownStorageType(t *testing.T) { func TestLoad_rejectsDuplicateCollectionAcrossInstances(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/a.yaml": "type: filesystem\ncollections:\n notes:\n path: a\n checks:\n - kind: markdown_requires_h1\n", - "storage/b.yaml": "type: filesystem\ncollections:\n notes:\n path: b\n checks:\n - kind: markdown_requires_h1\n", + "bases/a.yaml": "type: filesystem\ncollections:\n notes:\n path: a\n checks:\n - kind: markdown_requires_h1\n", + "bases/b.yaml": "type: filesystem\ncollections:\n notes:\n path: b\n checks:\n - kind: markdown_requires_h1\n", }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "unique") { @@ -265,8 +265,8 @@ func TestLoad_rejectsDuplicateCollectionAcrossInstances(t *testing.T) { func TestLoad_rejectsUnknownSchemaInCollection(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\nschema: nonexistent\n"}), + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\nschema: nonexistent\n"}), }) _, err := project.Load(dir) if err == nil { @@ -280,7 +280,7 @@ func TestLoad_rejectsUnknownSchemaInCollection(t *testing.T) { func TestLoad_rejectsCollectionWithNoChecks(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\n"}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\n"}), }) _, err := project.Load(dir) if err == nil { @@ -306,7 +306,7 @@ func TestLoad_variantsParsed(t *testing.T) { "schemas/page.yaml": projecttest.MinimalSchema, "schemas/section.yaml": projecttest.MinimalSchema, "schemas/content.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"pages": body}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"pages": body}), }) cfg, err := project.Load(dir) @@ -358,8 +358,8 @@ func TestLoad_whenShorthandDesugars(t *testing.T) { " checks:\n" + " - kind: markdown_requires_h1\n" projecttest.WriteProject(t, dir, map[string]string{ - "schemas/page.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"pages": body}), + "schemas/page.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"pages": body}), }) cfg, err := project.Load(dir) if err != nil { @@ -386,7 +386,7 @@ func TestLoad_variantOnlyCollectionIsValid(t *testing.T) { " checks:\n" + " - kind: markdown_requires_h1\n" projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"pages": body}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"pages": body}), }) if _, err := project.Load(dir); err != nil { t.Fatalf("variant-only collection should load: %v", err) @@ -399,8 +399,8 @@ func TestLoad_rejectsInvalidVariantPredicate(t *testing.T) { "variants:\n" + " - when: \"=nofield\"\n" projecttest.WriteProject(t, dir, map[string]string{ - "schemas/page.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"pages": body}), + "schemas/page.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"pages": body}), }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "variants[0]") { @@ -415,8 +415,8 @@ func TestLoad_rejectsUnknownVariantSchema(t *testing.T) { " - when: \"kind=section\"\n" + " schema: nonexistent\n" projecttest.WriteProject(t, dir, map[string]string{ - "schemas/page.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"pages": body}), + "schemas/page.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"pages": body}), }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "nonexistent") { @@ -435,8 +435,8 @@ func TestLoad_rejectsEmptyWhen(t *testing.T) { " checks:\n" + " - kind: markdown_requires_h1\n" projecttest.WriteProject(t, dir, map[string]string{ - "schemas/page.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"pages": body}), + "schemas/page.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"pages": body}), }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "at least one predicate") { @@ -447,8 +447,8 @@ func TestLoad_rejectsEmptyWhen(t *testing.T) { func TestLoad_useExhaustiveVariantsDefaultsFalse(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\nschema: book\n"}), + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\nschema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -467,7 +467,7 @@ func TestLoad_parsesChecks(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `path: notes + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `path: notes checks: - kind: object schema: book @@ -540,7 +540,7 @@ func TestLoad_rejectsUnknownCheckType(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `path: notes + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `path: notes checks: - kind: not-real `}), @@ -557,7 +557,7 @@ checks: func TestLoad_rejectsUnknownCheckKey(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `path: notes + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `path: notes checks: - kind: markdown_requires_h1 typo: true @@ -576,7 +576,7 @@ func TestLoad_rejectsMalformedCheckPayload(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `path: notes + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `path: notes checks: - kind: object `}), @@ -594,7 +594,7 @@ func TestLoad_rejectsObjectCheckField(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `path: notes + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `path: notes checks: - kind: object schema: book @@ -647,7 +647,7 @@ func TestLoad_rejectsInvalidFilesystemCheckConfig(t *testing.T) { t.Run(name, func(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\nchecks:\n" + tc.checks}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\nchecks:\n" + tc.checks}), }) _, err := project.Load(dir) if err == nil { @@ -663,7 +663,7 @@ func TestLoad_rejectsInvalidFilesystemCheckConfig(t *testing.T) { func TestLoad_parsesTextChecks(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `path: notes + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `path: notes checks: - kind: text_requires pattern: Sources @@ -746,7 +746,7 @@ func TestLoad_rejectsInvalidTextCheckConfig(t *testing.T) { t.Run(name, func(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\nchecks:\n" + tc.checks}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\nchecks:\n" + tc.checks}), }) _, err := project.Load(dir) if err == nil { @@ -769,7 +769,7 @@ func TestLoad_explicitDiscovery_readsDefs(t *testing.T) { discovery: explicit defs: book: ./.katalyst/my-schemas/book.yaml -storage: +bases: discovery: explicit defs: local: @@ -781,8 +781,8 @@ storage: schema: book `, // Stray files in the convention dirs must be ignored. - "schemas/ignored.yaml": projecttest.MinimalSchema, - "storage/ignored-inst.yaml": "type: filesystem\ncollections: {}\n", + "schemas/ignored.yaml": projecttest.MinimalSchema, + "bases/ignored-inst.yaml": "type: filesystem\ncollections: {}\n", }) cfg, err := project.Load(dir) if err != nil { @@ -791,9 +791,9 @@ storage: if _, ok := cfg.Schemas["ignored"]; ok { t.Errorf("explicit discovery must ignore the schemas/ dir scan") } - for _, inst := range cfg.Storage { + for _, inst := range cfg.Bases { if inst.Name != "local" { - t.Errorf("explicit discovery must ignore the storage/ dir scan, saw instance %q", inst.Name) + t.Errorf("explicit discovery must ignore the bases/ dir scan, saw base %q", inst.Name) } } wantRoot := projecttest.RealPath(t, dir) @@ -805,10 +805,75 @@ storage: } } +func TestLoad_legacyStorageBlock_readsDefs(t *testing.T) { + dir := t.TempDir() + projecttest.WriteProject(t, dir, map[string]string{ + "schemas/book.yaml": projecttest.MinimalSchema, + "config.yaml": `storage: + discovery: explicit + defs: + local: + type: filesystem + root: . + collections: + notes: + schema: book +`, + }) + cfg, err := project.Load(dir) + if err != nil { + t.Fatalf("Load: %v", err) + } + if len(cfg.Bases) != 1 || cfg.Bases[0].Name != "local" { + t.Fatalf("expected legacy storage block to load one base, got %+v", cfg.Bases) + } + if _, ok := cfg.Collection("notes"); !ok { + t.Errorf("expected notes collection from legacy storage block") + } +} + +func TestLoad_legacyStorageDir_readsConventionFiles(t *testing.T) { + dir := t.TempDir() + projecttest.WriteProject(t, dir, map[string]string{ + "schemas/book.yaml": projecttest.MinimalSchema, + "storage/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), + }) + cfg, err := project.Load(dir) + if err != nil { + t.Fatalf("Load: %v", err) + } + if len(cfg.Bases) != 1 || cfg.Bases[0].Name != "local" { + t.Fatalf("expected legacy storage dir to load one base, got %+v", cfg.Bases) + } +} + +func TestLoad_rejectsBasesAndStorageBlocks(t *testing.T) { + dir := t.TempDir() + projecttest.WriteProject(t, dir, map[string]string{ + "config.yaml": "bases:\n discovery: convention\nstorage:\n discovery: convention\n", + }) + _, err := project.Load(dir) + if err == nil || !strings.Contains(err.Error(), "both bases and storage") { + t.Fatalf("expected mixed config block error, got: %v", err) + } +} + +func TestLoad_rejectsBasesAndStorageDirs(t *testing.T) { + dir := t.TempDir() + projecttest.WriteProject(t, dir, map[string]string{ + "bases/local.yaml": "type: filesystem\ncollections: {}\n", + "storage/local.yaml": "type: filesystem\ncollections: {}\n", + }) + _, err := project.Load(dir) + if err == nil || !strings.Contains(err.Error(), ".katalyst/bases") || !strings.Contains(err.Error(), ".katalyst/storage") { + t.Fatalf("expected mixed config dir error, got: %v", err) + } +} + func TestLoad_explicitDiscovery_requiresDefs(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "config.yaml": "storage:\n discovery: explicit\n", + "config.yaml": "bases:\n discovery: explicit\n", }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "defs") { @@ -819,9 +884,9 @@ func TestLoad_explicitDiscovery_requiresDefs(t *testing.T) { func TestLoad_formatJSON_scansJSONFiles(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.json": `{"type":"object"}`, - "config.yaml": "schemas:\n format: json\n", - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "schemas/book.json": `{"type":"object"}`, + "config.yaml": "schemas:\n format: json\n", + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -856,7 +921,7 @@ func TestLoad_perKindIndependence(t *testing.T) { defs: book: ./.katalyst/schemas/book.json `, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -884,8 +949,8 @@ func TestLoad_rejectsBadDiscovery(t *testing.T) { func TestLoad_listingDefaults_whenUnset(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -908,7 +973,7 @@ func TestLoad_listing_projectDefaultApplies(t *testing.T) { filterTypeMismatch: error sortMissing: lowest `, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -932,7 +997,7 @@ func TestLoad_listing_collectionOverridesPerKey(t *testing.T) { "config.yaml": `listing: sortMissing: lowest `, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `schema: book + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `schema: book listing: filterTypeMismatch: error `}), @@ -954,7 +1019,7 @@ func TestLoad_listing_rejectsUnknownValue(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `schema: book + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `schema: book listing: filterTypeMismatch: bogus `}), @@ -972,7 +1037,7 @@ func TestLoad_rejectsProjectQueryConfigBlock(t *testing.T) { "config.yaml": `query: sortMissing: lowest `, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) _, err := project.Load(dir) if err == nil || !strings.Contains(err.Error(), "query is no longer a config block; use listing") { @@ -984,7 +1049,7 @@ func TestLoad_rejectsCollectionQueryConfigBlock(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": `schema: book + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": `schema: book query: sortMissing: lowest `}), @@ -998,8 +1063,8 @@ query: func TestCollection_unknownReturnsFalse(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "schemas/book.yaml": projecttest.MinimalSchema, - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "schema: book\n"}), + "schemas/book.yaml": projecttest.MinimalSchema, + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "schema: book\n"}), }) cfg, err := project.Load(dir) if err != nil { @@ -1031,7 +1096,7 @@ func TestSchemaNames_returnsSortedNames(t *testing.T) { func TestLoad_parsesWritingTells(t *testing.T) { dir := t.TempDir() projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{"notes": "path: notes\nchecks:\n - kind: markdown_writing_tells\n"}), + "bases/local.yaml": projecttest.LocalBase(map[string]string{"notes": "path: notes\nchecks:\n - kind: markdown_writing_tells\n"}), }) cfg, err := project.Load(dir) if err != nil { diff --git a/internal/project/project.go b/internal/project/project.go index 73d9296..ecb6a40 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -40,27 +40,27 @@ type ItemContent struct { Doc *markdownbodytext.Document } -func (p *Project) storageInstance(name string) (StorageInstance, bool) { - for _, inst := range p.cfg.Storage { +func (p *Project) baseInstance(name string) (BaseInstance, bool) { + for _, inst := range p.cfg.Bases { if inst.Name == name { return inst, true } } - return StorageInstance{}, false + return BaseInstance{}, false } func (p *Project) def(c Collection) (collection.CollectionDefinition, error) { - inst, ok := p.storageInstance(c.Storage) + inst, ok := p.baseInstance(c.Base) if !ok { - return nil, fmt.Errorf("collection %q: unknown storage instance %q", c.Name, c.Storage) + return nil, fmt.Errorf("collection %q: unknown base %q", c.Name, c.Base) } - switch storage.StorageType(inst.Type) { + switch storage.BaseType(inst.Type) { case storage.Filesystem: return filesystem.New(inst.Root, inst.Collections), nil case storage.SQLite: return sqlitestore.New(inst.Root, inst.Collections), nil default: - return nil, fmt.Errorf("collection %q: unsupported storage type %q", c.Name, inst.Type) + return nil, fmt.Errorf("collection %q: unsupported base type %q", c.Name, inst.Type) } } @@ -162,7 +162,7 @@ func (p *Project) Reference(c Collection, id string) (string, error) { // ReadItem reads and decodes an item through its storage backend. func (p *Project) ReadItem(item Item) (ItemContent, error) { - switch storage.StorageType(item.Collection.StorageType) { + switch storage.BaseType(item.Collection.StorageType) { case storage.SQLite: def, err := p.def(item.Collection) if err != nil { @@ -185,7 +185,7 @@ func (p *Project) ReadItem(item Item) (ItemContent, error) { // ItemExists reports whether id already exists in c. func (p *Project) ItemExists(c Collection, id string) (bool, error) { - switch storage.StorageType(c.StorageType) { + switch storage.BaseType(c.StorageType) { case storage.SQLite: def, err := p.def(c) if err != nil { @@ -204,7 +204,7 @@ func (p *Project) ItemExists(c Collection, id string) (bool, error) { // AddItem creates a new item in c. func (p *Project) AddItem(c Collection, id string, meta map[string]any, body []byte) error { - switch storage.StorageType(c.StorageType) { + switch storage.BaseType(c.StorageType) { case storage.SQLite: def, err := p.def(c) if err != nil { @@ -218,7 +218,7 @@ func (p *Project) AddItem(c Collection, id string, meta map[string]any, body []b // UpdateItem updates an existing item in c. func (p *Project) UpdateItem(c Collection, id string, meta map[string]any, body []byte) error { - switch storage.StorageType(c.StorageType) { + switch storage.BaseType(c.StorageType) { case storage.SQLite: def, err := p.def(c) if err != nil { @@ -232,7 +232,7 @@ func (p *Project) UpdateItem(c Collection, id string, meta map[string]any, body // DeleteItem deletes an existing item. func (p *Project) DeleteItem(item Item) error { - switch storage.StorageType(item.Collection.StorageType) { + switch storage.BaseType(item.Collection.StorageType) { case storage.SQLite: def, err := p.def(item.Collection) if err != nil { diff --git a/internal/project/project_test.go b/internal/project/project_test.go index e1e42d0..f269a30 100644 --- a/internal/project/project_test.go +++ b/internal/project/project_test.go @@ -28,7 +28,7 @@ func setup(t *testing.T) *project.Project { } projecttest.WriteProject(t, dir, map[string]string{ - "storage/local.yaml": projecttest.LocalStorage(map[string]string{ + "bases/local.yaml": projecttest.LocalBase(map[string]string{ "notes": "path: notes\nchecks:\n - kind: markdown_requires_h1\n", "people": "path: people\nchecks:\n - kind: markdown_requires_h1\n", }), diff --git a/internal/project/projecttest/projecttest.go b/internal/project/projecttest/projecttest.go index 1f66950..5e9d004 100644 --- a/internal/project/projecttest/projecttest.go +++ b/internal/project/projecttest/projecttest.go @@ -32,9 +32,9 @@ func WriteProject(t *testing.T, dir string, files map[string]string) { } } -// LocalStorage builds a .katalyst/storage/local.yaml body with a filesystem -// instance rooted at the project and the given collection YAML bodies. -func LocalStorage(collections map[string]string) string { +// LocalBase builds a .katalyst/bases/local.yaml body with a filesystem base +// rooted at the project and the given collection YAML bodies. +func LocalBase(collections map[string]string) string { var b strings.Builder b.WriteString("type: filesystem\nroot: .\ncollections:\n") names := make([]string, 0, len(collections)) diff --git a/internal/storage/AGENTS.md b/internal/storage/AGENTS.md index 5dad06c..03e399a 100644 --- a/internal/storage/AGENTS.md +++ b/internal/storage/AGENTS.md @@ -1,11 +1,11 @@ # internal/storage -The backend boundary. This package names storage backend kinds and keeps the +The backend boundary. This package names base backend kinds and keeps the small registry of implemented backends; `collection/` holds the mapping from a backend store to Katalyst collections and items. Architecture and rationale live in the -[storage deep-dive](../../docs/content/deep-dives/domain-model/storage.md). The collection +[Bases deep-dive](../../docs/content/deep-dives/domain-model/storage.md). The collection read stack has its own local guide in [`collection/AGENTS.md`](collection/AGENTS.md). @@ -13,10 +13,10 @@ read stack has its own local guide in - Add a backend kind here only when its `CollectionDefinition` implementation exists. `Known` is the source of truth the project loader uses to validate - configured storage types. `filesystem` and `sqlite` are implemented. + configured base types. `filesystem` and `sqlite` are implemented. - `Reference` is opaque. Treat it as a backend-native locator, not always a filesystem path; filesystem interpretation belongs in `collection/filesystem`. -- Scope is a property of the storage type, not user configuration. Keep that +- Scope is a property of the base type, not user configuration. Keep that decision in code so collection/item roles stay portable across backends. - Keep this package small and dependency-light. Backend-specific parsing, discovery, IO, and persistence belong under `collection//`. diff --git a/internal/storage/collection/AGENTS.md b/internal/storage/collection/AGENTS.md index e17b843..1a8e80d 100644 --- a/internal/storage/collection/AGENTS.md +++ b/internal/storage/collection/AGENTS.md @@ -12,7 +12,7 @@ decode and encode with; `predicate` is the attribute/object predicate grammar; Architecture and rationale — why a collection owns the read, why items are thin, and how a backend attaches — live in the -[storage layer](../../../docs/content/deep-dives/domain-model/storage.md) and +[Bases](../../../docs/content/deep-dives/domain-model/storage.md) and [collections](../../../docs/content/deep-dives/domain-model/collections.md) deep-dives. ## Conventions diff --git a/internal/storage/collection/collection.go b/internal/storage/collection/collection.go index da5909f..30a43f7 100644 --- a/internal/storage/collection/collection.go +++ b/internal/storage/collection/collection.go @@ -29,8 +29,8 @@ type Item struct { // (Collections, Items, Unmatched); the reverse direction reconstructs a backend // locator from an item identity (Reference). Both directions are mandatory. type CollectionDefinition interface { - // Granularity reports the scope where this backend's units attach to the model. - Granularity() storage.Granularity + // Scope reports the scope where this backend's units attach to the model. + Scope() storage.Scope // Collections returns the collections this definition maps. One definition // may yield more than one collection. diff --git a/internal/storage/collection/filesystem/collection.go b/internal/storage/collection/filesystem/collection.go index 91a27d5..6bffecb 100644 --- a/internal/storage/collection/filesystem/collection.go +++ b/internal/storage/collection/filesystem/collection.go @@ -19,12 +19,12 @@ import ( // Definition maps a directory tree onto collections of markdown files: one file // is one item, its id is the filename stem. It is the CollectionDefinition for -// StorageType filesystem. +// BaseType filesystem. // // The per-collection methods operate on the absolute Dir already resolved on // each collection.Collection, so root is unused today; it is retained because a -// filesystem instance is identified by its root and Phase 2's BuildInstance -// resolves collection directories against it. +// filesystem base is identified by its root and the project loader resolves +// collection directories against it. type Definition struct { root string collections []collection.Collection @@ -35,8 +35,8 @@ func New(root string, collections []collection.Collection) *Definition { return &Definition{root: root, collections: collections} } -// Granularity reports item scope for the markdown filesystem. -func (f *Definition) Granularity() storage.Granularity { return storage.FileIsItem } +// Scope reports item scope for the markdown filesystem. +func (f *Definition) Scope() storage.Scope { return storage.FileIsItem } // Collections returns the collections this definition maps. func (f *Definition) Collections() []collection.Collection { return f.collections } diff --git a/internal/storage/collection/filesystem/collection_test.go b/internal/storage/collection/filesystem/collection_test.go index f50d3fe..858537d 100644 --- a/internal/storage/collection/filesystem/collection_test.go +++ b/internal/storage/collection/filesystem/collection_test.go @@ -89,9 +89,9 @@ func TestFilesystem_Reference_reverseResolution(t *testing.T) { } } -func TestFilesystem_Granularity_fileIsItem(t *testing.T) { - if g := filesystem.New("", nil).Granularity(); g != storage.FileIsItem { - t.Fatalf("Granularity = %v, want FileIsItem", g) +func TestFilesystem_Scope_fileIsItem(t *testing.T) { + if g := filesystem.New("", nil).Scope(); g != storage.FileIsItem { + t.Fatalf("Scope = %v, want FileIsItem", g) } } diff --git a/internal/storage/collection/parse.go b/internal/storage/collection/parse.go index 1f21133..92e1572 100644 --- a/internal/storage/collection/parse.go +++ b/internal/storage/collection/parse.go @@ -41,9 +41,9 @@ type Collection struct { // ListingDefaults holds the resolved `item list` behavior for this // collection (collection config over project config over defaults). ListingDefaults ListingDefaults - // Storage is the name of the storage instance that declares this + // Base is the name of the base that declares this // collection. - Storage string + Base string // Variants are discriminated check groups: an item runs the first // variant (in order) whose Where predicates it all satisfies, in // addition to the base Checks. Empty for a collection without variants. @@ -132,7 +132,7 @@ const ( ) // RawCollection mirrors one collection definition in YAML. The loader -// unmarshals it (inline under a storage instance, or one file per collection) +// unmarshals it (inline under a base, or one file per collection) // and hands it to Build. type RawCollection struct { Path string `yaml:"path"` @@ -269,21 +269,21 @@ func (rc *RawCheck) UnmarshalYAML(value *yaml.Node) error { } // BuildInput carries everything Build needs to validate and resolve one -// collection: its raw definition and name, the owning storage instance's root +// collection: its raw definition and name, the owning base's root // and name, the project-level listing defaults, and a predicate that reports // whether a schema name is defined (schema resolution belongs to the loader). type BuildInput struct { Name string Raw RawCollection - InstRoot string - InstName string StorageType string + BaseRoot string + BaseName string ProjectListing *RawListingDefaults SchemaKnown func(string) bool } // Build turns one raw collection definition into a validated Collection, -// resolving its directory against the owning instance's root. The name comes +// resolving its directory against the owning base's root. The name comes // from the source (map key), never the file body. func Build(in BuildInput) (Collection, error) { storageType := in.StorageType @@ -355,7 +355,7 @@ func Build(in BuildInput) (Collection, error) { return Collection{ Name: in.Name, Path: dirRel, - Dir: resolveDir(in.InstRoot, dirRel), + Dir: resolveDir(in.BaseRoot, dirRel), StorageType: storageType, Table: in.Raw.Table, IDColumn: in.Raw.ID, @@ -366,7 +366,7 @@ func Build(in BuildInput) (Collection, error) { Schema: schemaName, Checks: cks, ListingDefaults: ld, - Storage: in.InstName, + Base: in.BaseName, Variants: variants, UseExhaustiveVariants: in.Raw.UseExhaustiveVariants, }, nil diff --git a/internal/storage/doc.go b/internal/storage/doc.go index c4e17e5..12510dd 100644 --- a/internal/storage/doc.go +++ b/internal/storage/doc.go @@ -3,9 +3,9 @@ // // # Three concepts // -// - StorageType: a known backend kind (filesystem today; sqlite, postgresql, +// - BaseType: a known backend kind (filesystem today; sqlite, postgresql, // mongodb later). The registry here is the extension point. -// - StorageInstance (assembled by the internal/project loader): one configured +// - BaseInstance (assembled by the internal/project loader): one configured // store of a type plus how to reach it, embedding the collections it maps. // - CollectionDefinition: the two-way mapping from a store's contents to // collections and items. FilesystemCollectionDefinition is the first. @@ -23,7 +23,7 @@ // # Scope // // Whether a matched store unit becomes an Item or a Collection is a property of -// the StorageType, not user configuration. A markdown file is an Item; a SQL +// the BaseType, not user configuration. A markdown file is an Item; a SQL // table would be a Collection. Item and Collection are therefore roles, not file // counts. See docs/content/deep-dives/domain-model/storage.md. package storage diff --git a/internal/storage/storage.go b/internal/storage/storage.go index 076f0c1..ac54df5 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -1,39 +1,39 @@ package storage -// StorageType is a known backend kind capable of holding collections and items. -type StorageType string +// BaseType is a known backend kind capable of holding collections and items. +type BaseType string const ( // Filesystem stores each item as one file. - Filesystem StorageType = "filesystem" + Filesystem BaseType = "filesystem" // SQLite stores each collection in one table, with each row as one item. - SQLite StorageType = "sqlite" + SQLite BaseType = "sqlite" ) // registered is the set of backend kinds with an implementation. It is the -// extension point: a new StorageType is added here when its +// extension point: a new BaseType is added here when its // CollectionDefinition lands. -var registered = map[StorageType]bool{ +var registered = map[BaseType]bool{ Filesystem: true, SQLite: true, } -// Known reports whether a StorageType has an implementation. The project loader +// Known reports whether a BaseType has an implementation. The project loader // carries the type as a plain string and leaves this validation to the storage // layer, so the storage registry remains the source of truth for backend kinds. -func Known(t StorageType) bool { return registered[t] } +func Known(t BaseType) bool { return registered[t] } -// Granularity records the scope at which a backend's matched units attach to -// the domain model. It is a property of the StorageType, not user +// Scope records the scope at which a backend's matched units attach to +// the domain model. It is a property of the BaseType, not user // configuration: a markdown filesystem makes each file an Item, while a tabular -// backend would make each table a Collection and each row an Item. -type Granularity int +// backend makes each table a Collection and each row an Item. +type Scope int const ( // FileIsItem: one file is one Item; a directory of files is a Collection. - FileIsItem Granularity = iota + FileIsItem Scope = iota // UnitIsCollection: one store unit (a table/file) is a Collection; its - // rows are Items. Reserved for future tabular backends. + // rows are Items. UnitIsCollection ) From 3b6ac09efa11319e3cadf6fed56610bb39855471 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 13:25:57 -0600 Subject: [PATCH 10/19] Refine domain model docs terminology --- cmd/fix.go | 2 +- cmd/testdata/snapshots/help/fix.txt | 2 +- docs/content/deep-dives/_index.md | 4 +- .../content/deep-dives/domain-model/_index.md | 23 ++- docs/content/deep-dives/domain-model/base.md | 123 ++++++++++++++ .../content/deep-dives/domain-model/checks.md | 2 +- .../deep-dives/domain-model/collections.md | 99 +++++------ .../domain-model/{formatting.md => fix.md} | 71 ++------ .../deep-dives/domain-model/frontmatter.md | 69 ++++++++ .../deep-dives/domain-model/inspectors.md | 14 +- .../deep-dives/domain-model/storage.md | 160 ------------------ .../profile-an-existing-wiki-by-hand.md | 4 +- .../profile-an-existing-wiki-with-an-agent.md | 5 +- docs/content/how-to/validate-in-ci.md | 2 +- docs/content/reference/configuration.md | 6 +- docs/content/reference/glossary.md | 16 +- docs/content/reference/inspectors/_index.md | 6 +- .../reference/inspectors/source/_index.md | 4 +- .../examples/inspect-source-shape.full.md | 3 +- .../images/domain-model-core-concepts.png | Bin 163973 -> 101498 bytes internal/codec/markdownbodytext/encode.go | 2 +- internal/fix/AGENTS.md | 2 +- internal/storage/doc.go | 7 +- product/specs/codec-layer-spec.md | 6 +- product/specs/collection-reorg-plan.md | 3 +- product/specs/collection-reorg-spec.md | 9 +- 26 files changed, 309 insertions(+), 335 deletions(-) create mode 100644 docs/content/deep-dives/domain-model/base.md rename docs/content/deep-dives/domain-model/{formatting.md => fix.md} (55%) create mode 100644 docs/content/deep-dives/domain-model/frontmatter.md delete mode 100644 docs/content/deep-dives/domain-model/storage.md diff --git a/cmd/fix.go b/cmd/fix.go index 518d4bd..f7d9fc4 100644 --- a/cmd/fix.go +++ b/cmd/fix.go @@ -23,7 +23,7 @@ top-level keys sorted alphabetically, yaml.v3 default block style, and exactly one trailing newline. The body is preserved verbatim. fix never invents semantic values: it will not inject placeholders for -missing required keys. See docs/content/deep-dives/domain-model/formatting.md for why. +missing required keys. See docs/content/deep-dives/domain-model/fix.md for why. Selectors follow the same grammar as 'check'. With no selector, every item in the project is considered. diff --git a/cmd/testdata/snapshots/help/fix.txt b/cmd/testdata/snapshots/help/fix.txt index a18c429..163edea 100644 --- a/cmd/testdata/snapshots/help/fix.txt +++ b/cmd/testdata/snapshots/help/fix.txt @@ -3,7 +3,7 @@ top-level keys sorted alphabetically, yaml.v3 default block style, and exactly one trailing newline. The body is preserved verbatim. fix never invents semantic values: it will not inject placeholders for -missing required keys. See docs/content/deep-dives/domain-model/formatting.md for why. +missing required keys. See docs/content/deep-dives/domain-model/fix.md for why. Selectors follow the same grammar as 'check'. With no selector, every item in the project is considered. diff --git a/docs/content/deep-dives/_index.md b/docs/content/deep-dives/_index.md index 9c137b1..cac0fce 100644 --- a/docs/content/deep-dives/_index.md +++ b/docs/content/deep-dives/_index.md @@ -11,8 +11,8 @@ Understanding-oriented discussion of the *why* behind Katalyst: the [domain model]({{< relref "domain-model/_index.md" >}}) the tool is built on, and the deeper design discussions that no single page or package owns: how [checks work]({{< relref "domain-model/checks.md" >}}) and the libraries that -run them, how [bases]({{< relref "domain-model/storage.md" >}}) map stores onto -the model, and how operations grow richer as a backend's +run them, how [bases]({{< relref "domain-model/base.md" >}}) map backend +sources onto the model, and how operations grow richer as a backend's capabilities increase. For the short version, start with [Welcome]({{< relref "../welcome.md" >}}). diff --git a/docs/content/deep-dives/domain-model/_index.md b/docs/content/deep-dives/domain-model/_index.md index c0b814c..f40de4f 100644 --- a/docs/content/deep-dives/domain-model/_index.md +++ b/docs/content/deep-dives/domain-model/_index.md @@ -10,35 +10,34 @@ This page introduces core concepts in the Katalyst domain model and how they rel ## Bases -The most central concept in Katalyst is a **Base**: a storage system that holds **Content** (aka data) and supports a specific set of **Operations**. Katalyst is compatible with a several different types of backend: filesystems, key-value stores, relational databases, etc. +The most central concept in Katalyst is a **base**: a storage system that holds **content** (data) and supports a specific set of **operations**. Katalyst is compatible with several different types of backend: filesystems, key-value stores, relational databases, etc. An **operation** is something a base lets you do with data: read, list, - aggregate, write, and eventually query. Which operations a backend supports, - and what structural commitments those operations require, is the subject of - [progressive operations]({{< relref "../progressive-operations.md" >}}). +aggregate, write, and eventually query. Which operations a base supports, +and what structural commitments those operations require, is the subject of +[progressive operations]({{< relref "../progressive-operations.md" >}}). In addition to natively-supported operations for various backends, Katalyst provides two very useful kinds of operation. - A **check** makes an assertion about content and reports a violation if the condition fails. See [Checks]({{< relref "checks.md" >}}). -- An **inspector** is the descriptive dual of a check: it gathers and reports of the state of content. See +- An **inspector** is the descriptive dual of a check: it gathers and reports the state of content. See [Inspectors]({{< relref "inspectors.md" >}}). Domain model diagram showing project containing storage, collection, item, and attribute, with checks and inspectors operating on the data model. -## Raw vs collection-configured Bases +## Raw vs collection-configured bases -When configuring a Base, the most important division is between **raw content** and **collectionized content**. A base configured only for raw content supports only a limited set of operations: checks, inspections and a small set of fixes. Most operations that require writes are not permitted, because the system wouldn't have the context necessary to guarantee that the new content is correct. +When configuring a base, the most important division is between **raw content** and **collectionized content**. A base configured only for raw content supports only a limited set of operations: checks, inspections and a small set of fixes. Most operations that require writes are not permitted, because the system would not have the context necessary to guarantee that the new content is correct. -When a base is configured with **Collections**, it can guarantee correctness and consistency for more operations. Check and inspect operations can be more specific and context-aware. Far more write operations are available, since the system now has more context to enable correctness and consistency. +When a base is configured with **collections**, it can guarantee correctness and consistency for more operations. Check and inspect operations can be more specific and context-aware. Far more write operations are available, since the system now has more context to enable correctness and consistency. -Within a given Base, Collection configs don't replace raw configs. Instead, they stack on top. Similarly, operations that require a Collection stack on top of those available when the base was only configured for raw access to content. +Within a given base, collection configs do not replace raw configs. Instead, they stack on top. Similarly, operations that require a collection stack on top of those available when the base was only configured for raw access to content. ## Projects -A **project** is the whole workspace Katalyst operates over: a configured root that includes one or more stores, plus some additional metadata. - +A **project** is the whole workspace Katalyst operates over: a configured root that includes one or more bases, plus some additional metadata. diff --git a/docs/content/deep-dives/domain-model/base.md b/docs/content/deep-dives/domain-model/base.md new file mode 100644 index 0000000..f1eea08 --- /dev/null +++ b/docs/content/deep-dives/domain-model/base.md @@ -0,0 +1,123 @@ ++++ +title = "Bases" +weight = 40 ++++ + +# Bases + +A **base** is how Katalyst reaches a backend source and maps that source into the domain model. + +Every base must include configuration for **raw** access. Raw access gives Katalyst a stable way to locate content in the source. For a filesystem, that can be a root directory. For SQL, that can be connection information for a specific instance. + +A **collectionized** base keeps that raw access and adds collection definitions. Those definitions map base-native references into named collections and item identities that Katalyst commands can address directly. This is where two-way mapping applies. + +Katalyst's base model covers filesystem and SQLite backends today and is designed to extend to backends such as Postgres, S3, and hosted APIs. + +## Terms + +The base model uses several named pieces: + +| Term | Meaning | +|---|---| +| **Base type** | A known backend source kind capable of holding collections and items: `filesystem` and `sqlite` today; `postgresql`, `mongodb`, and others later. | +| **Base instance** | A specific, connectable instance of a base type, plus the information needed to reach it. | +| **Collection mapping** | The two-way mapping from a base instance's contents to collections and items. One mapping may yield more than one collection. | +| **Base reference** | A base-native locator: a file path, S3 key, table name, or similar backend address. | +| **Coordinates** | The captured fields that identify a unit within its collection. | +| **Scope** | The domain level, item or collection, at which a base type attaches a base's units to the model. | + +In config, a base instance declares the collections it maps, and the instance file is where the collection mapping lives. In code, the implementation seam is `internal/storage/collection.CollectionDefinition`; `internal/project` consumes it rather than implementing the filesystem mapping inline. + +Base readers use codecs to decode a matched unit's content into the shape checks and inspectors consume. The markdown filesystem reader uses `internal/codec/markdownbodytext` for frontmatter/body parsing; codecs are shared content adapters, not base backends. + +## Collectionized bases use a two-way mapping + +When a base is collectionized, mapping has two directions: + +- **Forward (discovery):** `path -> match pattern -> captured groups` become + the unit's *coordinates*. +- **Reverse (reconstruction):** `coordinates -> fill a template -> path`. + +The reverse direction is **not optional**. Katalyst needs it the moment +`item add notes/dune` has to decide what file to create; that is the same +path-reconstruction problem. Today it is the degenerate, stem-only case +(`Reference(c, id) -> /.md`); it grows with the layout. + +## The scope principle + +**"What does one matched source unit become?" has no global answer; it is a property each base type declares.** + +- **Markdown filesystem:** one file = one **item**; a directory of files = + a **collection**. +- **Tabular (CSV / SQL):** one file/table = one **collection**; its rows = + **items**. + +Both mappings are correct because item and collection are domain roles, not file counts. The definition absorbs that difference: alongside the path-to-coordinates mapping, it declares the **scope** at which a base's units attach to the collection/item hierarchy. + +Implication: **item and collection are roles, not file counts.** A base that packs many items into one physical unit (rows in a table) and one that spreads a single item across a whole unit (a markdown file) are both valid. + +## Base capability stack + +- **Raw base:** Katalyst can connect to the source and reference base-native content. +- **Collectionized base:** a raw base plus collection definitions that map base-native references into domain collections and items. + +## Unmatched references are first-class + +Katalyst treats unmatched references as errors rather than silently dropping them. A file inside a configured collection's scope that matches no pattern is usually a signal of config drift: the pattern is wrong, the file is misplaced, or the project has gained a new shape that has not been modeled yet. + +The same evidence can power a future `doctor` / `explain` command: list the collections, show representative examples, and surface the base references that matched nothing. + +## Variants route checks, not membership + +A collection may run different checks on different items via +[variants]({{< relref "../../reference/configuration.md" >}}#variants), but that is +a *check-engine* concern, not a base one. A variant's discriminator is a +predicate over an item's **metadata**: portable across every base type, since +each yields a metadata map (frontmatter for a file, columns for a row). It never +touches the seam: membership, `Unmatched`, and `Reference` stay governed by the +definition's `pattern`. Discriminating by *path* would be a base-type-scoped +condition; it is deferred precisely to keep the seam closed for now. + +## Coordinates are the selector + +In Katalyst, the flat `stem` identity is the degenerate one-coordinate case: +`notes/dune.md` becomes the item id `dune`. Richer layouts (`notes/2020/dune`) +grow into multiple coordinates parsed from the path. The selector grammar and +the definition's pattern are two views of the same thing. + +## Design lessons + +- **The contract is two-way, not one-way.** Discovery and reconstruction are + both core base operations. +- **Raw and collectionized are one progression.** A base starts with + base-native references, then gains collection definitions that make + collection-aware operations possible. +- **Surface unmatched references.** Silent skips hide drift between the + base's real contents and the configured model. +- **Coordinates and selectors are one concept.** The fields captured from a + base reference should be the same fields users and agents use to address + the item. +- **Prefer an inherently two-way template** (`{name}_{year}.md`) over inverting + an arbitrary regex. A template is bidirectional by construction; a regex is + not. +- **The pattern must own the file extension**, or reconstruction is ambiguous + when several extensions are allowed. +- **Keep collection identity separate from within-collection coordinates.** + Collection names and item coordinates answer different questions and should + stay distinct. + +## Seam and extension points + +- **Core seam:** `internal/storage` defines `BaseType`, `Scope`, and + `Reference`; `internal/project` assembles `BaseInstance` values, and + `internal/storage/collection` defines `CollectionDefinition`. The filesystem + implementation maps a directory to a collection and each `*.md` file to an + item with a stem id; the SQLite implementation maps a table to a collection + and each row to an item. +- **Extension point:** anything that turns a base-native reference into an item + identity (or back) passes through `CollectionDefinition`, so backends can be + added without touching the check engine, the CRUD verbs, or selector parsing. + Multi-coordinate templates, inferred mode, and additional non-filesystem + types slot in there. + +[addressing]: {{< relref "_index.md" >}} diff --git a/docs/content/deep-dives/domain-model/checks.md b/docs/content/deep-dives/domain-model/checks.md index 9c9b08c..347b8a9 100644 --- a/docs/content/deep-dives/domain-model/checks.md +++ b/docs/content/deep-dives/domain-model/checks.md @@ -175,7 +175,7 @@ real out-of-process library exists. lifecycle, the schema resolver, and the validation result. - The [glossary]({{< relref "../../reference/glossary.md" >}}) for the canonical terms (check type, check instance, CheckLibrary, schema, violation). -- The [Bases]({{< relref "storage.md" >}}) for the collection and item +- The [base]({{< relref "base.md" >}}) for the collection and item identities checks run against, and the inspector that is a check's descriptive dual. - `go doc ./internal/checks` for the code-level engine contract. diff --git a/docs/content/deep-dives/domain-model/collections.md b/docs/content/deep-dives/domain-model/collections.md index eedaa16..deccc7e 100644 --- a/docs/content/deep-dives/domain-model/collections.md +++ b/docs/content/deep-dives/domain-model/collections.md @@ -7,10 +7,11 @@ weight = 42 The `internal/project` loader (`loader.go`) is the orchestration hub: it loads a project's `.katalyst/` directory, resolves named schemas, and assembles bases -and their collections (each object type parses its own config — the storage +and their collections. Each object type parses its own config: the base registry validates a declared `type`, and a collection parses its own block in -`storage/collection`). It decides which schema applies to a given item, -and the `check` lifecycle is driven from here. +`storage/collection`. It decides which schema applies to a given item, and the +`check` lifecycle is driven from here. + This page is the model and the *why*; for the key-by-key surface see the [configuration reference]({{< relref "../../reference/configuration.md" >}}). @@ -22,69 +23,45 @@ ancestor becomes the repo root for all path resolution. The directory holds an optional `config.yaml`, one schema file per definition under `schemas/`, and one base file per definition under `bases/`. A directory -(rather than one big file) keeps each schema and base in its own -reviewable file and lets the name fall out of the filename by convention. A -nearest-ancestor lookup mirrors `.git`, `.editorconfig`, and `go.mod`: familiar -and predictable. Discovery resolves symlinks on both the root and the input -path, because on macOS `$TMPDIR` lives behind `/var` to `/private/var` and -relative-path resolution would otherwise produce garbage. +rather than one big file keeps each schema and base in its own reviewable file +and lets the name fall out of the filename by convention. A nearest-ancestor +lookup mirrors `.git`, `.editorconfig`, and `go.mod`: familiar and predictable. +Discovery resolves symlinks on both the root and the input path, because on +macOS `$TMPDIR` lives behind `/var` to `/private/var` and relative-path +resolution would otherwise produce garbage. `config.yaml` is YAML; schema and base files default to YAML/JSON and the -accepted format is set per kind there. Default discovery is **convention** (one -file per definition); a kind can be switched to **explicit** to list its +accepted format is set per kind there. Default discovery is **convention**: one +file per definition. A kind can be switched to **explicit** to list its definitions inline in `config.yaml` instead. -Collections are declared *inside* a [base]({{< relref "storage.md" >}}), -which owns the backend-to-collection mapping. This page covers the collection -model and schema resolution; the base layer covers how a base maps a -backend onto those collections. - -## The model - -- **Collection** - a named group of items backed by a directory; the unit you - select on the command line and the unit that owns a set of checks. `path` - defaults to the collection name; `pattern` defaults to `*.md`. Collection - names are unique project-wide, since a selector carries no base qualifier. - - ```yaml - # inside .katalyst/bases/local.yaml - collections: - books: - path: notes/books # directory, relative to the repo root - pattern: "*.md" # filename glob; default "*.md" - schema: book # shorthand for a single leading object check - checks: # any additional checks - - kind: markdown_title_matches_h1 - ``` - -- **Item** - a single member of a collection: one file matching the - collection's `pattern`. Its **id** is the filename stem (`notes/books/dune.md` - gives `dune`). -- **Selector** - how commands (`check`, `fix`, the `item` subcommands) name what - to operate on, broad to narrow: *(none)* is the whole project, `` - is one collection, `/` is a single item. -- **Schema** - a JSON Schema (draft 2020-12 by default) describing the legal - shape of an item's parsed `Meta`. A schema has two identities: a **path** on - disk and a **name** (its filename stem under `.katalyst/schemas/`). The name - is the stable public handle; paths can change. `--schema ` bypasses the - name layer entirely. -- **Schema directive** (`schema:` in frontmatter) - a per-document opt-in to a - specific schema. It is **metadata about katalyst, not user data**: the - resolver reads it to choose a schema, then strips it from `Meta` before - validating, so a schema with `additionalProperties: false` is not tripped by - katalyst's own key. +Collections are declared *inside* a [base]({{< relref "base.md" >}}), which owns +the base-to-collection mapping. This page covers the collection model and +schema resolution; the base page covers how a base maps a backend source onto +those collections. + +## Terms + +| Term | Meaning | +|---|---| +| **Collection** | A group of items that share structure: a directory of similar files, a relational table, a Mongo collection, or a family of API resources. Collections are the unit that owns checks and that users address by name. | +| **Item** | One unit of data in a collection: a markdown file, a table row, a Mongo document, or one API resource. In the filesystem base, an item is one file matching the collection's `pattern`; its **id** is the filename stem (`notes/books/dune.md` gives `dune`). | +| **Attribute** | A named characteristic of an item: a column, a frontmatter key, a response field, its filename, its path, or another backend-derived property. A key in a structured object specifically is a **field**. | +| **Selector** | How commands (`check`, `fix`, the `item` subcommands) name what to operate on, broad to narrow: *(none)* is the whole project, `` is one collection, `/` is a single item. | +| **Schema** | A JSON Schema (draft 2020-12 by default) describing the legal shape of an item's parsed `Meta`. A schema has two identities: a **path** on disk and a **name** (its filename stem under `.katalyst/schemas/`). The name is the stable public handle; paths can change. `--schema ` bypasses the name layer entirely. | +| **Schema directive** | A per-document `schema:` frontmatter key that opts the document into a specific schema. It is **metadata about katalyst, not user data**: the resolver reads it to choose a schema, then strips it from `Meta` before validating, so a schema with `additionalProperties: false` is not tripped by katalyst's own key. | The `config.Config` loaded from disk is the single source of truth for "what schemas exist and what each collection checks." It is validated at load: every collection's object schema must reference a known schema, and a collection must -configure at least one check (via the `schema:` shorthand or an explicit -`checks:` list). +configure at least one check via the `schema:` shorthand or an explicit +`checks:` list. ## Collections across backends The collection model is intentionally broader than "a directory of markdown files." A collection is the named group Katalyst can list, select, inspect, and -check, even when the backing storage has a different native vocabulary. +check, even when the backing base has a different native vocabulary. | System | Base | Collection | Item | Attribute | |----------------------|---------------|-----------------|------------|------------------| @@ -95,8 +72,8 @@ check, even when the backing storage has a different native vocabulary. | An S3 bucket of JSON | The bucket | A key prefix | An object | A JSON key | An operation defined against this vocabulary, such as checking an attribute or -aggregating over a collection, applies to every backend that can support it. -The backend still decides the mechanics: a filesystem may list files and parse +aggregating over a collection, applies to every base that can support it. The +base still decides the mechanics: a filesystem may list files and parse frontmatter in memory, while a database may push filtering and aggregation into queries. The collection name stays the user's handle either way. @@ -136,9 +113,9 @@ compiles base and variant through one path. The discriminator is metadata, not a glob, on purpose: metadata is the one property every item yields on every backend (frontmatter for a file, columns for a future row), so routing stays portable and the engine never depends on the -storage type. Selecting by *path* is a storage-type-scoped condition, deferred. -(The base layer covers [how variants route checks rather than -membership]({{< relref "storage.md" >}}).) +base type. Selecting by *path* is a base-type-scoped condition, deferred. The +base page covers [how variants route checks rather than +membership]({{< relref "base.md" >}}). ## Why a file inside a collection must match @@ -146,8 +123,8 @@ A file that sits inside a collection's directory but does not match its `pattern` is reported as an **error**, not silently skipped. Silent skips hide config drift: a typo'd pattern or a misfiled document would simply disappear from validation. Opt-outs (`--allow-unmatched` and a config knob) are deferred -until real usage shows the need. The base layer frames the same decision as -[unmatched references being first-class]({{< relref "storage.md" >}}). +until real usage shows the need. The base page frames the same decision as +[unmatched references being first-class]({{< relref "base.md" >}}). ## Why named collections replaced the old `rules:` list @@ -207,7 +184,7 @@ The data flow per item, end to end: - The [configuration reference]({{< relref "../../reference/configuration.md" >}}) for the precise `.katalyst/` surface. -- The [base layer]({{< relref "storage.md" >}}) for how a backend maps onto +- The [base]({{< relref "base.md" >}}) for how a backend source maps onto collections, and the base model. - The [domain model]({{< relref "_index.md" >}}) for the cross-subsystem entity map and invariants. diff --git a/docs/content/deep-dives/domain-model/formatting.md b/docs/content/deep-dives/domain-model/fix.md similarity index 55% rename from docs/content/deep-dives/domain-model/formatting.md rename to docs/content/deep-dives/domain-model/fix.md index 41cdf3a..65ed8a2 100644 --- a/docs/content/deep-dives/domain-model/formatting.md +++ b/docs/content/deep-dives/domain-model/fix.md @@ -1,57 +1,15 @@ +++ -title = "Frontmatter and fix" -weight = 60 +title = "Fix" +weight = 62 +++ -# Frontmatter and fix +# Fix -How Katalyst parses a markdown file's frontmatter, the in-memory document that -produces, and why [`fix`]({{< relref "../../reference/cli.md" >}}) rewrites -that frontmatter the opinionated way it does. The codec (parse and encode) lives -in `internal/codec/markdownbodytext`; the `fix` transform that drives the -canonical form, and the backend write that persists it, live in `internal/fix` -and `internal/storage/collection/filesystem` respectively. - -## The markdown document - -The unit of work is a file on disk with two optional regions: - -- A **frontmatter** block at the very top of the file, in one of three formats - detected by the opening fence: - - | Format | Fence | Example openers | - |--------|-------|-----------------| - | YAML | `---` | Jekyll, Obsidian, Hugo | - | TOML | `+++` | Hugo, Obsidian, Jekyll | - | JSON | `{` ... `}` | Hugo | - - These are the three formats Hugo, Obsidian, and Jekyll emit. Whatever the - source format, the parsed `Meta` is a plain `map[string]any`, so checks and - inspectors never branch on format. `Document.Format` records the detected - syntax so `fix` can re-emit a file in its own format rather than rewriting, - say, TOML as YAML. -- A **body**, everything after the closing fence. - -A document *may* have no frontmatter, in which case `check` reports it as an -error (the file claimed no metadata, so we couldn't check anything). - -When parsed, a markdown document becomes a `markdownbodytext.Document`: - -| Field | Meaning | -|------------------|---------| -| `HasFrontmatter` | Did the file open with a recognized fence? | -| `Format` | Detected syntax: `KindYAML`, `KindTOML`, or `KindJSON` | -| `Meta` | Parsed frontmatter, normalized to `map[string]any` | -| `Body` | Bytes after the closing fence, **never modified** except by `fix` | -| `Lines` | JSON-pointer-path to 1-indexed source line | - -The `Lines` index is what makes error messages locatable. It accounts for the -opening fence offset, so `Lines["/title"] = 2` means the `title` key is on line -2 of the original file. - -**Line tracking is full for YAML only.** For TOML and JSON, `Lines` is empty -today; checks degrade gracefully (they emit the error without a line number). -Richer line tracking for the other formats is a planned follow-up. +Why [`katalyst fix`]({{< relref "../../reference/cli.md" >}}) rewrites +frontmatter the opinionated way it does. The parser and encoder live in +`internal/codec/markdownbodytext`; the transform that drives the canonical +form, and the backend write that persists it, live in `internal/fix` and +`internal/storage/collection/filesystem` respectively. ## Why fix is deliberately opinionated @@ -123,8 +81,13 @@ For each item: 1. **Body bytes are sacred.** No command except `fix` modifies them. Even `fix` only normalizes trailing whitespace and the leading separator; interior body bytes round-trip exactly. -2. **Line numbers are file-relative and 1-indexed.** The opening fence is line - 1, so the first key is typically line 2. (Populated for YAML today; see the - line-tracking note above.) -3. **Format is preserved.** `fix` re-emits each file in its own frontmatter +2. **Format is preserved.** `fix` re-emits each file in its own frontmatter syntax and never converts between YAML, TOML, and JSON. +3. **No semantic values are invented.** `fix` only normalizes existing + frontmatter and configured text fixes; it does not create missing metadata. + +## See also + +- [Frontmatter]({{< relref "frontmatter.md" >}}) for how markdown documents + parse before `fix` rewrites them. +- `go doc ./internal/fix` for the code-level transform contract. diff --git a/docs/content/deep-dives/domain-model/frontmatter.md b/docs/content/deep-dives/domain-model/frontmatter.md new file mode 100644 index 0000000..f808f97 --- /dev/null +++ b/docs/content/deep-dives/domain-model/frontmatter.md @@ -0,0 +1,69 @@ ++++ +title = "Frontmatter" +weight = 60 ++++ + +# Frontmatter + +How Katalyst parses a markdown file's frontmatter and the in-memory document +that produces. The codec lives in `internal/codec/markdownbodytext`; it turns a +markdown file into structured metadata plus body bytes that checks, inspectors, +and [`fix`]({{< relref "fix.md" >}}) can share. + +## The markdown document + +The unit of work is a file on disk with two optional regions: + +- A **frontmatter** block at the very top of the file, in one of three formats + detected by the opening fence: + + | Format | Fence | Example openers | + |--------|-------|-----------------| + | YAML | `---` | Jekyll, Obsidian, Hugo | + | TOML | `+++` | Hugo, Obsidian, Jekyll | + | JSON | `{` ... `}` | Hugo | + + These are the three formats Hugo, Obsidian, and Jekyll emit. Whatever the + source format, the parsed `Meta` is a plain `map[string]any`, so checks and + inspectors never branch on format. `Document.Format` records the detected + syntax so `fix` can re-emit a file in its own format rather than rewriting, + say, TOML as YAML. +- A **body**, everything after the closing fence. + +A document may have no frontmatter. Structured-object checks that need metadata +cannot run against it, but body-text checks can still evaluate the body. + +When parsed, a markdown document becomes a `markdownbodytext.Document`: + +| Field | Meaning | +|------------------|---------| +| `HasFrontmatter` | Did the file open with a recognized fence? | +| `Format` | Detected syntax: `KindYAML`, `KindTOML`, or `KindJSON` | +| `Meta` | Parsed frontmatter, normalized to `map[string]any` | +| `Body` | Bytes after the closing fence | +| `Lines` | JSON-pointer-path to 1-indexed source line | + +The `Lines` index is what makes error messages locatable. It accounts for the +opening fence offset, so `Lines["/title"] = 2` means the `title` key is on line +2 of the original file. + +**Line tracking is full for YAML only.** For TOML and JSON, `Lines` is empty +today; checks degrade gracefully (they emit the error without a line number). +Richer line tracking for the other formats is a planned follow-up. + +## Invariants + +1. **Checks and inspectors read one metadata shape.** YAML, TOML, and JSON all + parse to `map[string]any`. +2. **Line numbers are file-relative and 1-indexed.** The opening fence is line + 1, so the first key is typically line 2. (Populated for YAML today; see the + line-tracking note above.) +3. **Format detection is preserved for writers.** Readers expose normalized + metadata, but retain the original frontmatter syntax so a writer can emit + the same format. + +## See also + +- [Fix]({{< relref "fix.md" >}}) for the canonical rewrite policy that consumes + parsed documents. +- `go doc ./internal/codec/markdownbodytext` for the code-level codec contract. diff --git a/docs/content/deep-dives/domain-model/inspectors.md b/docs/content/deep-dives/domain-model/inspectors.md index a9664c6..7daca7e 100644 --- a/docs/content/deep-dives/domain-model/inspectors.md +++ b/docs/content/deep-dives/domain-model/inspectors.md @@ -18,11 +18,11 @@ model and the rationale behind it. Inspectors come in two layers, distinguished by *how they reference the data*: -- **The raw-source layer** (`SourceInspector` over a `SourceView`) measures a - backend store directly, before any collection configuration, addressed by - backend-native reference (a relative path today). It answers "what is in this - store?" - the onboarding case. `file_tree` and `file_content_shape` live - here. +- **The raw base layer** (`SourceInspector` over a `SourceView`) measures a + base directly, before any collection configuration, addressed by + base-native reference (a relative path today). It answers "what is in this + base?" - the onboarding case. `file_tree`, `file_tree_content`, and + `document_shape` live here. - **The collection layer** (`CollectionInspector` over a `CollectionView`) measures a configured collection's items, addressed by domain identity (collection + item id) and reached through the project's @@ -31,7 +31,7 @@ Inspectors come in two layers, distinguished by *how they reference the data*: The two are **distinct interfaces, not one type at two scopes**, precisely because they reference the data through different machinery. This mirrors the -seam in the [Bases]({{< relref "storage.md" >}}). +seam in the [base]({{< relref "base.md" >}}). ## Built from primitives @@ -48,7 +48,7 @@ inspectors themselves are thin wrappers that point a primitive at an input: shape (types, naming, depth, regions, directory density) over references, opening no files. -The same small primitives are reused where the layer makes sense, but raw-source +The same small primitives are reused where the layer makes sense, but raw base inspectors avoid proposing collections. They report store and content facts; a human or agent decides what collection boundaries those facts imply. diff --git a/docs/content/deep-dives/domain-model/storage.md b/docs/content/deep-dives/domain-model/storage.md deleted file mode 100644 index 975c2e5..0000000 --- a/docs/content/deep-dives/domain-model/storage.md +++ /dev/null @@ -1,160 +0,0 @@ -+++ -title = "Bases" -weight = 40 -+++ - -# Bases - -The **base layer** is how Katalyst reaches a backend store and maps that store -into the domain model. - -Every base includes configuration for **raw** access. Raw access gives Katalyst -a stable way to locate content in the store. For a filesystem, that can be a -root directory. For SQL, that can be connection information for a specific -instance. - -A **collectionized** base keeps that raw access and adds collection -definitions. Those definitions map backend-native references into named -collections and item identities that Katalyst commands can address directly. -This is where two-way mapping applies. - -Katalyst's storage model covers filesystem backends today and is designed to -extend to backends such as SQLite, Postgres, S3, and hosted APIs. - -## Three concepts - -The layer is three named pieces, not one. Earlier drafts called the whole thing -a *connector*; that single word was doing two jobs, *how do I reach the store* -and *how does its content map to the model*, so it was split: - -| Concept | Meaning | -|---|---| -| **BaseType** | A known backend kind capable of holding collections and items: `filesystem` today; `sqlite`, `postgresql`, `mongodb` later. | -| **BaseInstance** | A specific, connectable instance of a BaseType, plus the information needed to reach it (for `filesystem`, a root directory). | -| **CollectionDefinition** | The two-way mapping from a BaseInstance's contents to collections and items. `FilesystemCollectionDefinition` is the first; one definition may yield **more than one** collection. | - -In config, a BaseInstance declares the collections it maps, the base file *is* -where the CollectionDefinition lives (see -[Configuration]({{< relref "../../reference/configuration.md" >}})). In code, the -seam is `internal/storage/collection.CollectionDefinition`; `internal/project` consumes it -rather than implementing the filesystem mapping inline. - -Base readers use codecs to decode a matched unit's content into the shape -checks and inspectors consume. The markdown filesystem reader uses -`internal/codec/markdownbodytext` for frontmatter/body parsing; codecs are -shared content adapters, not storage backends. - -## Collectionized bases use a two-way mapping - -When a base is collectionized, mapping has two directions: - -- **Forward (discovery):** `path → match pattern → captured groups` become - the unit's *coordinates*. -- **Reverse (reconstruction):** `coordinates → fill a template → path`. - -The reverse direction is **not optional**. Katalyst needs it the moment -`item add notes/dune` has to decide *what file to create*, that is the same -path-reconstruction problem. Today it is the degenerate, stem-only case -(`Reference(c, id) → /.md`); it grows with the layout. - -## The scope principle - -**"What does one matched store unit become?" has no global answer, it is a -property each BaseType declares for its backend.** - -- **Markdown filesystem:** one file = one **Item**; a directory of files = - a **Collection**. -- **Tabular (CSV / SQL):** one file/table = one **Collection**; its rows = - **Items**. - -Both mappings are correct because item and collection are domain roles, not -file counts. The definition absorbs that difference: alongside the -path↔coordinates mapping, it declares the **scope** at which a store's units -attach to the collection/item hierarchy. - -Implication: **Item and Collection are roles, not file counts.** A backend that -packs many items into one physical unit (rows in a table) and one that spreads a -single item across a whole unit (a markdown file) are both valid. - -## Base capability stack - -- **Raw base:** Katalyst can connect to the store and reference backend-native - content. -- **Collectionized base:** a raw base plus collection definitions that map - backend-native references into domain collections and items. - -## Unmatched references are first-class - -Katalyst treats unmatched references as errors rather than silently dropping -them. A file inside a configured collection's scope that matches no pattern is -usually a signal of config drift: the pattern is wrong, the file is misplaced, -or the project has gained a new shape that has not been modeled yet. - -The same evidence can power a future `doctor` / `explain` command: list the -collections, show representative examples, and surface the backend references -that matched nothing. - -## Variants route checks, not membership - -A collection may run different checks on different items via -[variants]({{< relref "../../reference/configuration.md" >}}#variants), but that is -a *check-engine* concern, not a storage one. A variant's discriminator is a -predicate over an item's **metadata**: portable across every BaseType, since -each yields a metadata map (frontmatter for a file, columns for a row). It never -touches the seam: membership, `Unmatched`, and `Reference` stay governed by the -definition's `pattern`. Discriminating by *path* would be a storage-type-scoped -condition; it is deferred precisely to keep the seam closed for now. - -## Coordinates are the selector - -In Katalyst, the flat `stem` identity is the degenerate one-coordinate case: -`notes/dune.md` becomes the item id `dune`. Richer layouts (`notes/2020/dune`) -grow into multiple coordinates parsed from the path. The selector grammar and -the definition's pattern are two views of the same thing. - -## Design lessons - -- **The contract is two-way, not one-way.** Discovery and reconstruction are - both core storage operations. -- **Raw and collectionized are one progression.** A base starts with - backend-native references, then gains collection definitions that make - collection-aware operations possible. -- **Surface unmatched references.** Silent skips hide drift between the - backend's real contents and the configured model. -- **Coordinates and selectors are one concept.** The fields captured from a - backend reference should be the same fields users and agents use to address - the item. -- **Prefer an inherently two-way template** (`{name}_{year}.md`) over inverting - an arbitrary regex. A template is bidirectional by construction; a regex is - not. -- **The pattern must own the file extension**, or reconstruction is ambiguous - when several extensions are allowed. -- **Keep collection identity separate from within-collection coordinates.** - Collection names and item coordinates answer different questions and should - stay distinct. - -## Seam and extension points - -- **Core seam:** `internal/storage` defines `BaseType`, `Scope`, and - `Reference`; `internal/project` assembles `BaseInstance` values, and - `internal/storage/collection` defines `CollectionDefinition`. The filesystem - implementation maps a directory to a collection and each `*.md` file to an - item with a stem id. -- **Extension point:** anything that turns a path into an item identity (or back) - passes through `CollectionDefinition`, so a second backend (SQLite) can be - added later without touching the check engine, the CRUD verbs, or selector - parsing. Multi-coordinate templates, inferred mode, and non-filesystem types - slot in there. - -## Terms - -| Term | Meaning | -|---|---| -| **BaseType** | A known backend kind (filesystem, sqlite, ...). | -| **BaseInstance** | A configured instance of a BaseType plus how to reach it. | -| **CollectionDefinition** | The backend↔domain two-way mapping; yields one or more collections. | -| **Data reference** | A backend-native locator (file path, S3 key, table name). | -| **Coordinates** | The captured fields that identify a unit within its collection. | -| **Scope** | The domain level, item or collection, at which a BaseType attaches a store's units to the model. | - -[addressing]: {{< relref "_index.md" >}} diff --git a/docs/content/how-to/profile-an-existing-wiki-by-hand.md b/docs/content/how-to/profile-an-existing-wiki-by-hand.md index 40044d7..03a7c10 100644 --- a/docs/content/how-to/profile-an-existing-wiki-by-hand.md +++ b/docs/content/how-to/profile-an-existing-wiki-by-hand.md @@ -18,10 +18,10 @@ runs in **two layers**: point it at a **directory** to profile a raw store (no project needed), or at a configured **collection** to profile its items. The onboarding loop uses both. -## 1. Survey the directory (raw-source layer) +## 1. Survey the directory (source layer) Point `inspect` at the directory. With no `.katalyst/` project it runs the -raw-source inspectors: +source inspectors: ```bash katalyst inspect ./wiki diff --git a/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md b/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md index a1322f7..1634f77 100644 --- a/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md +++ b/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md @@ -26,8 +26,9 @@ denominator: katalyst inspect ./wiki --json ``` -With no project this runs the **raw-source** layer: `file_tree` maps the store -and `file_content_shape` summarizes selected-file content structure. Feed the +With no project this runs the **raw base** layer. The key record is +`document_shape`, which clusters files into candidate collections by a composite +fingerprint (frontmatter keys, body section skeleton, file naming). Feed the output to the agent. Tell it the contract: every record is *evidence*, not a recommendation; it must choose its own thresholds and justify them. diff --git a/docs/content/how-to/validate-in-ci.md b/docs/content/how-to/validate-in-ci.md index 0753cad..979b749 100644 --- a/docs/content/how-to/validate-in-ci.md +++ b/docs/content/how-to/validate-in-ci.md @@ -58,7 +58,7 @@ It prints one line per non-canonical item and exits 1, writing nothing. Here The `check` step enforces schema and structural checks; the `fix --check` step enforces canonical frontmatter without modifying files. See -[Frontmatter and fix]({{< relref "../deep-dives/domain-model/formatting.md" >}}) for why +[Fix]({{< relref "../deep-dives/domain-model/fix.md" >}}) for why `fix` is opinionated and non-destructive in this mode. ## See also diff --git a/docs/content/reference/configuration.md b/docs/content/reference/configuration.md index ee7b4bf..79e51e2 100644 --- a/docs/content/reference/configuration.md +++ b/docs/content/reference/configuration.md @@ -81,7 +81,7 @@ Collection names are unique across the whole project (selectors are SQLite instances use one table per collection. Each row is one item: ```yaml -# .katalyst/storage/db.yaml +# .katalyst/bases/db.yaml type: sqlite path: content.sqlite collections: @@ -297,8 +297,8 @@ variant), even when `--schema` is used. ## See also - [Check types reference]({{< relref "check-types/_index.md" >}}), every check type. -- [Bases]({{< relref "../deep-dives/domain-model/storage.md" >}}), the base / - collection-definition model and its lineage. +- [Bases]({{< relref "../deep-dives/domain-model/base.md" >}}), the base / + collection-mapping model and its lineage. - [Collections]({{< relref "../deep-dives/domain-model/collections.md" >}}), the config/collection model and rationale: schema resolution, variants, unmatched-as-error. diff --git a/docs/content/reference/glossary.md b/docs/content/reference/glossary.md index c41ed80..2530e68 100644 --- a/docs/content/reference/glossary.md +++ b/docs/content/reference/glossary.md @@ -14,20 +14,20 @@ how each term maps onto today's code is documented in the per-package | Term | Meaning | |---|---| | **Aggregate** | The descriptive operation an inspector realizes: measuring a distribution across a collection's items rather than fetching or asserting. See **Inspector**. | -| **Attribute** | A named characteristic of an item: a frontmatter key, but also its filename, path, or extension. The general term; a key in the structured object specifically is a **Field**. | -| **Base** | One configured backend store plus the operations Katalyst can perform on its content. A raw base gives Katalyst backend-native access; a collectionized base adds collection definitions. | +| **Attribute** | A named characteristic of an item: a column, a frontmatter key, a response field, its filename, its path, or another backend-derived property. A key in a structured object specifically is a **Field**. | +| **Base** | One configured backend source plus the operations Katalyst can perform on its content. A raw base gives Katalyst base-native access; a collectionized base adds collection mappings. See [Bases]({{< relref "../deep-dives/domain-model/base.md" >}}). | | **BaseInstance** | A configured instance of a BaseType plus how to reach it (for `filesystem`, a root directory). Declared under `.katalyst/bases/`; it embeds the collections it maps. | -| **BaseType** | A known backend kind capable of holding content Katalyst can operate on (`filesystem` today; `sqlite`, `postgresql`, `mongodb` later). | +| **BaseType** | A known backend kind capable of holding content Katalyst can operate on (`filesystem` and `sqlite` today; `postgresql`, `mongodb`, and others later). | | **Body** | Everything after the closing frontmatter fence. Preserved verbatim except by `fix`. | | **Check** | Shorthand for a check instance when context is unambiguous. | | **Check instance** | One configured check attached to a collection: a check type plus its arguments (one YAML object under `checks:`). It runs against each item (object, markdown, or filesystem family). | | **Check type** | The reusable definition of a constraint: one entry in katalyst's check registry (`object_required_field`, `markdown_single_h1`, ...), selected by its `kind:` id. `katalyst check-types list` lists them. | | **CheckLibrary** | The provider behind a check type. Native libraries (`filesystem`, `plaintext`, `markdownbodytext`, `structuredobject`) wrap hand-written checks; schema-backed libraries (`json-schema`, Vale next) compile a named schema and run items against it, and report their own availability. A library is provenance, orthogonal to the source-data family (`structuredObject`, `markdownBodyText`, `fileSystem`, `plainText`) the check reads. | -| **Collection** | A named entry in `collections:`: a directory, a filename `pattern`, and the checks its items must pass. | +| **Collection** | A group of items that share structure: a directory of similar files, a relational table, a Mongo collection, or a family of API resources. Collections own checks and are addressed by name. | | **Collection layer** | Inspectors that profile a configured collection's items, addressed by domain identity (collection + item id) and probing through the same substrate the checks use. | | **Collection-scoped check** | A check type that runs once per collection over all its items (e.g. `filesystem_unique_filename`), rather than per item. It re-scans the full collection even under a single-item selector. | -| **CollectionDefinition** | The two-way mapping from a BaseInstance's contents to collections and items. Yields one or more collections; the filesystem is the only backend today. See [Bases]({{< relref "../deep-dives/domain-model/storage.md" >}}). | -| **Config** | A **Project**'s configuration: the schemas, bases, and collection definitions that declare what the project contains and how its items are checked. Katalyst's config is the `.katalyst/` directory; it is loaded by the `project` package's loader (`internal/project/loader.go`). Each object type owns the parse of its own config: the storage registry validates a declared `type`, and a collection parses its own block in `storage/collection`. | +| **Collection mapping** | The two-way mapping from a base instance's contents to collections and items. Yields one or more collections; filesystem and SQLite mappings are implemented today. Implemented by `CollectionDefinition` in code. | +| **Config** | A **Project**'s configuration: the schemas, bases, and collection mappings that declare what the project contains and how its items are checked. Katalyst's config is the `.katalyst/` directory; it is loaded by the `project` package's loader (`internal/project/loader.go`). Each object type owns the parse of its own config: the base registry validates a declared `type`, and a collection parses its own block in `storage/collection`. | | **Discriminator** | The `when` predicate that selects a variant: a list of `item list --filter` expressions over an item's metadata, ANDed together. | | **Document** | The markdown file-form of an **Item**: a parsed markdown file (frontmatter metadata + body + a line map). Use it where parsing or the on-disk file is the subject; elsewhere prefer **Item**. | | **Evidence** | The structured result of one inspector: counts and distributions with the unit count `n` as denominator. Never a recommendation or verdict. | @@ -39,14 +39,14 @@ how each term maps onto today's code is documented in the per-package | **Metadata** | The parsed, in-memory structure of the frontmatter (a `map[string]any`). | | **Operation** | Something a base lets you do with its data: read, list, query, aggregate, write. Each has a scope (item, collection, across collections) and structural requirements the backend must satisfy. See [progressive operations]({{< relref "../deep-dives/progressive-operations.md" >}}). | | **Profile class** | A group of near-identical profiles the summarizer collapses together, so output is proportional to the number of distinct profiles, not directories. | -| **Project** | The whole katalyst workspace: a repo root with a `.katalyst/` **Config** that declares the bases, collections, and checks katalyst operates over. The top-level scope an empty selector addresses, and what `katalyst init` creates. Collections live within a project; the `project` package (`internal/project`) is its code home, holding the `.katalyst/` loader while the collection layer lives under `storage/`. | +| **Project** | The whole katalyst workspace: a repo root with a `.katalyst/` **Config** that declares the bases, collections, and checks katalyst operates over. The top-level scope an empty selector addresses, and what `katalyst init` creates. Collections live within a project; the `project` package (`internal/project`) is its code home, holding the `.katalyst/` loader while the collection implementation lives under `storage/`. | | **Raw base layer** | Inspectors that profile a base directly, before any collection configuration, addressed by base-native reference (a path today). The onboarding case: "what's in this base?" | | **Repo root** | The directory containing the `.katalyst/` config directory; the base for all path resolution. | | **Resolver** | The runtime object that decides which object schema applies to an item and caches compiled schemas per `(library, path)`. | | **Schema** | The definition of a collection's shape, expressed in a CheckLibrary's format (JSON Schema today; a Vale style config later). Named in `schemas:`; located by path. The katalyst concept, not the JSON Schema document specifically. | | **Schema directive** | The inline `schema:` key inside a document's frontmatter, opting it into a named schema. | | **Selector** | How a command names what to operate on: nothing (whole project), ``, or `/`. | -| **Scope** | The level an operation or backend mapping applies to: item, collection, project, or across collections. In the base layer, scope answers whether one matched backend unit becomes an item or a collection. | +| **Scope** | The level an operation or backend mapping applies to: item, collection, project, or across collections. In a base, scope answers whether one matched source unit becomes an item or a collection. | | **Span** | The slice of body text a text rule is evaluated against, chosen by its `target`: the whole `body`, each `line`, the `first-line`, or `matched-lines` (lines matching a `select` regex). | | **Target** | The slice of a path a filesystem name/path check type tests: `filename`, `filename-ext`, `parent-dir`, or `path-segments` (every directory segment plus the basename). For a text rule, the slice of body it tests, see Span. | | **Text rule** | A `text_*` check (`text_requires`, `text_forbids`, `text_denylist`) that tests the body as raw text, a regex or a literal denylist, independent of markdown structure. Applies to plain-text items too. | diff --git a/docs/content/reference/inspectors/_index.md b/docs/content/reference/inspectors/_index.md index ba4b339..41564c9 100644 --- a/docs/content/reference/inspectors/_index.md +++ b/docs/content/reference/inspectors/_index.md @@ -8,11 +8,11 @@ bookCollapseSection = true # Inspectors reference -Inspectors describe the shape of content and return evidence: counts and distributions, never recommendations. They are the descriptive dual of [check types]({{< relref "../check-types/_index.md" >}}) and drive the [`inspect`]({{< relref "../cli.md" >}}) command. They come in two layers: raw-source inspectors profile a store before configuration, collection inspectors profile a configured collection. These pages are generated from the inspector registry, so they always match the shipped binary. +Inspectors describe the shape of content and return evidence: counts and distributions, never recommendations. They are the descriptive dual of [check types]({{< relref "../check-types/_index.md" >}}) and drive the [`inspect`]({{< relref "../cli.md" >}}) command. They come in two layers: source inspectors profile a base before configuration, collection inspectors profile a configured collection. These pages are generated from the inspector registry, so they always match the shipped binary. -## Raw-source inspectors +## Source inspectors -Raw-source inspectors profile a backend store directly, before any collection configuration: what files are present, how they parse, and how they are named. +Source inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. - [File tree]({{< relref "source/file-tree.md" >}}): Map files, directories, extensions, regions, and filename conventions, opening no files. - [File content shape]({{< relref "source/file-content-shape.md" >}}): Profile selected files by text, tabular, and tree content structure. diff --git a/docs/content/reference/inspectors/source/_index.md b/docs/content/reference/inspectors/source/_index.md index 5c9e706..6b22405 100644 --- a/docs/content/reference/inspectors/source/_index.md +++ b/docs/content/reference/inspectors/source/_index.md @@ -1,12 +1,12 @@ +++ -title = "Raw-source inspectors" +title = "Source inspectors" weight = 10 bookCollapseSection = true +++ -Raw-source inspectors profile a backend store directly, before any collection configuration: what files are present, how they parse, and how they are named. +Source inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. Inspectors in this layer: diff --git a/docs/generated/examples/inspect-source-shape.full.md b/docs/generated/examples/inspect-source-shape.full.md index 5d22bde..51085d4 100644 --- a/docs/generated/examples/inspect-source-shape.full.md +++ b/docs/generated/examples/inspect-source-shape.full.md @@ -1,4 +1,4 @@ -Pointed at a bare directory (no project), `inspect` runs the raw-source inspectors. `file_content_shape` opens a selected slice and reports the common text, tabular, or tree structure without proposing collections. +Pointed at a bare directory (no project), `inspect` runs the raw base inspectors. `document_shape` clusters files by a composite fingerprint, so a shared convention shows up as one class and the stragglers as outliers. ### Input @@ -129,4 +129,3 @@ tree: read/parse issues: none ``` - diff --git a/docs/static/images/domain-model-core-concepts.png b/docs/static/images/domain-model-core-concepts.png index b40eea27e9f0b213b494b3b61bcbd3f3dcd66a22..a48196a1861795b8e2d5b3e992999512939fedd0 100644 GIT binary patch literal 101498 zcmd432UJsOyEYtklo3V|5kYB!0tx~GQlzSYC{-z;gHlAP(rbXR(Lw1*Q&c*H-ir<; zA_4+ZLldMosR2UBfA2W&Iq!e|)7Dw%U*DHmF2|jny`OrQ>$>hI=(f7j5$e;_C=}|* zt(yv(DAb`s6zZVy?}y;ZZBDa(`0I@MO-(fv%8MI?@_&j#?Z74f85GL(5(+hU7lo3H zN1+%WB~{&#hA$48sVFI+$jE=MYcrzY%Hc;h^_@|ulkn@4-1~maA54aeR4%vF6shJ8 zoudDp`Pp+0_@zJUmclh{kHLjuPao}`VY#2ns#l{kU!QM0cp^?Yr&Kxkx18R*C4)S} z9sz6iuT}f<2CWSj$JcC1X~w#EE41@mbMo?3=Ict2uOBwh9m+n#%Sl&y=J$kzQTAKh zA{O@}QIhhjzV#-TMF=V0OO@{F*QZ2AosYBg>%Te-?SW5K*u(C0OfD&c<;tpg{c{s` z;wj|vR=?a$vmS9f159PW)n~8J%k}Ihrt4X?AHO_1|H`ko^q^rzvY6X5qFQF-ew3Fm zJNKPn(?b`UscuD&*R!HfUl&RW+phJl9x`C}4vZmw{E8#dde-0EuYHnz40$|?uI*2> zZbNR&X|vKpXh!u{Kc1*iuA^36xV{*CKc@2NAm!gzt-@IJ8T&{p5v*l~OUG;mOCCPv z`*mlmijt0gZPnoSl84>n@oyt|39kDn-xN?+Kk9lH7?^eqU8It1EOE>K*Rwt-cS_HX zmOLg($|R2oDY4tlUH$bWbhep|g)494pxIj6XBppL7pt7|g&feL{ zx+CY>6!+e1JBDn*&UmCyb{5qt*dIO4zI|eXojF=lcbY_Lc3P!ohnU^3r$IuFe?1jokE<3#e>`U6nN!dl#?B76 z@ewe;hT-*o7S|syjq^WSCuY_S6A0N;@N9Wx4Y9tb?r(M)eCa84%bQA+^@vK zjKjyD8f|LIuEgqSk%6z@{p`2OS6C$(GgcuG>-VcgU)Nk*^|N8U<@LKfK3jcz=kGc0 z=!v;-@NBF;y^R5>BtJPfB#W{JQ7D=2eu4I%aqMQL7o&Slr62!|@}9AYOLhjNU^Sj! zEkm(Was1tM21|HA8L~?9^8!SRLP8w=ez9{;k1M~SX3*a+Y--7B%oZf*Q67gn!>Mid z>%QB6KK=WeHp{;}Qz`HtzoPrcZI1sZZo6}%H|)eeTHyJgwqRCg3F(jvRe}pQCmmhF zCt||QbDw1{!yM^E9-~2_?q0F%O1PQP#VW3i8D4fQ|#K1B&z2fu~dCmgk2%g=tJUkGDmrg~i3RSgh{PrDF3q<4ejh zZ4NypvO37>+eo+amOYssL);7toEpo?K%bsO=hkix+BhzX_BGBIn?~$AaHx^7?&q_u zuDH!$Swt~TE;K?`RODP zic=YE-PhE_n`lJtH@5jzab;&`Q)|5K(<(9Y($dmm@ofCw+20>O?26p8kBWtdodybZH5Oa84|P=|GU%r0d(NI{UZ%VJdIe`p{4nTUVhhhiYJ~K0vhQk($9!J7 z*=*PQ?O_Yym-fm^*%uf(>DQje+N2OS@rnm>(Hb%v+C#p0J5St(1+C21T@(MFxlO!7 zh#YylqfKLo2Ye5*BCkfgyk)hT?h+ChFX!hw-?HTBlRQb#XTJ&Vm+I&}2(iRo0o zYc1*KxUi7#4FTfp_tkPAD2v7nrK*04dt!gvUC)ryzrdi^ zYHe#9n!2~n+ z=n0nXev5VdL8sIl$m;e+!|}D{yw6-1#wt{iN`&E9)kjD~?ZM{()`6 zCk4)^KvhoqpqrQFA`~)~9-2?oL=q_`xnva&TYnwpN1D$|widVkmf7z>CYd)J5fAmX zA%t9Uo@zWmD}AhdXf@+#MD3!3U&uuLMjiv34R>;oi{$XV$vd1c11+#Ws5kCpcHF$I ztLl0pnky&r<*oaiQJppZzi`5*cOr|;-QVXmW4_Ro zI4yVZVRtiT3ZGEX24!bY{dT$ZG6O3N^vle-tx~WsXf?{nraL`(QoU4_V}VCZks_lp zi&QAffc>Z}afunn>gR))kitjb|4PG1|NKDWJ7H!i42G7PN+U#e_tKPTd&m*7{!4~g zQ7smOx|WulnrhD)A{5zunN(s0!hA_PF?Ci6pPq}cqJ>?}juhnork9njJ+dJ#Cf5AE zo@hMe(jBI_OllRZKOtDZtGVfEXJ?n>yi{4Z(Tgt`&TvUrVbFi}xTMB0U2|o`d%5Ya zXEf%+u6<#meMTb7Z0WBw@AODzun2a$4Hb9DYL$%Ul?`Thn}0De)S8;ek~n}ueO5>8 z{jiS8qZcg}<1IWX=LcNI-_g(<(#v~(g!yEB^?K1(b6-8Wq-}S5ZA~LpKmBor<>~tC z-E$1oYAHVBK@}^_%;P~kDPL$Fs>^OiGl~29tbKcYW!}NEi=RWUeS3a>ej?Uz??i<3 z?xQlNtn_qlYq9<_CwJYiV@~clAI*(w=h% zW2dy8IjoJ1K2tetM79NPjZeVP(}lQL-bC9jTW#@3@20%GywCRQC*zIu8ll}C62*3Z z1Z5x1AR2D6m3d80#+lE3%UbzxfVNSjLweZWt`wO=8(%X&nE8`)8&1)hl5#=L3d{Z5M;v*QsaJ-beeQw>(T;XhbVzV3G zft|c2_qLc&SxjI;q4Y}6$r==0rl)g+Fme2^TTzmju?_KICJ3S?+2kO{P_Q{8L|800 z$FV9g*p)B)5}RNxC1Fwwdx~r`3-S5Y&GXm}-u@2%eFw}2%_H2seDbDmiBDol>#5{j z9^bWj(njFTY@44Z6&vD-!j~Br|&WurDAzb;aS;QBsoug32Hbhb(#5Y>84{>xkf02HwBe;L0Q{QMB^fhTS;D@FYs}}??& zB!>|X8vRYzEkcw=voGv-^XAYc7k`FM>C*46eWW*&hbBjIr`QGSw#Jn!^U)K{;cZtG z85ys_zT!=xc$lnq-^}_Rbi*t5b7^-=Z`-3ph#P$&n<95V_}5H>TMNW&j!12e%&Rz# zALeP?M_gupa^by|%7gT^1Oq zYl;z-1;e|$2G)M~Ii-I&u|HqyE{|{}f?=_yqkDP&5~HF0hn3Y+XpZzOrmUFeMVuCrXtd`>3Tr{Sz};)8z#RceWCX>H$iI4z+45?z<~1 zwab2T?e$}i-3Vs-#rG#eIe1hJ%cvKsM@j9>YWPdphuGxnF6+4Uv7#qqCf5ooR~j{N#aqA65oBrULYA z){Wmjz$>x&N=$X6vTI1MC>VLSi5ges4ioyp*!FV}cS(fN2rcz1+vc?~jHW(!SiFY{ zJL}1ko`k8l5wg6VLpE3jtdUJ}x)AgWnXUly%>4ZD)ZHH$jz2j9e%Q&ae{C3F@2+Pq z-6NEt4_AVjBwZdX6txO? z;)`tT7#x>n2#uc8q}=YlJ6c-w6ZLD!5?f>PtB)($_kL0dS+yq#3`adVDtUfx?nYB2 zmkMIIf+5_Fg`EQC+w4m`{c739(%tOlA=HJac8fliR%5G$rRpW#D{AHnjVBFlPxTo& ztNp=pIdg1}M38&^AdrD>V z;H&#c-)RRhrKP1X5x!!agV;M8Q_K!7J1jjtJ%uoh}G5I4(*<^m$eKh$ig>k-W6CxtLg9 zyRqdW$r{D2#(QOIZf>q(H<%AnItAgEj8AKCn<+O0p7+{AA{#3VIahtS8rGF)xa3YI z)8$NV2cquLZDr}bt%*Cu*VGmYaValVxr@z1A0(>(%scwHS%$Eyxlq!rzOqesc3dlU zN4qRF{M_-No7#twTtezNC70+~t@Op3)S7+p-=}!s6*$AHtqFE)NZ|Q_{P;KW0brpQ z=KXewkT(dk9eFd8**y>WHFdtZF9seT`ln>5{tDs znr;wt%pobZudWT+Ma?(R%7rpJ)D+IFz{J~qH|1VUm#hxV5U0s}IR7Q!;JuZ6B?@gI^qy+l<%kjR%3R1Y#cqdE+uPk56jF-&BhA`IZglh9OTS&$K4ab0U0BqPq$A=# z4(bIdaC$GpdL+uVKu}=ME?KuRWvJMpr4=QoW;Q=>)Kkry?WL<&q+7II8*}U~l3R2B z%0zFgwFSFte$c6}mlVU>7B8&z-hJECi?u=wS>7xwMC@OQ8_>P)@`dV@pK)s zMAa5^nC{@3J`VjD+oRD2%f?s>qMXh%zqTY9;zru^DF|UV9p~q3Y`GXA9b1c6hpf!Y z|JnhnJP)2Lkbs&)JiV6vG_rOufRQy1SDKsbKEUO>w`Tey57Tq{Rf#gB96_or7j`*0 z)#XT`5-a#o`*O?x?;8bSx|i0zHDFX?7M#Jcwb2d+Cz!SJ%Yl3H3|m_be|Y5k{r04R zdz1LX<~MM$hQ7SL>=nM}qFOw>+wl;WJGd~(mP#&FOqeIym9>nN53R|O*1NePhA|N` zW{pRsPGDH8tiS(78?t1G2@{R2Hif-Lr0g}?7lyM%X>NlLGq#$x85PvjUHgg{km(gp zP|byGD0#^}gug5_M6m9h7h!3*>y~rVw;}_+S0@FGZWq;CX52O^o6CNoP_zzFM+~ds zyr@0c8(3iC4kJa3$LQ#a@3)19*X+#Yus(Nf`u6Qx<3n@Yl(C=5D0y3>Wdav^g#%*3 zK6lUcIUOCBQ6+Xv$#o1wRl`w;ef09*sM4d;`84)Xe*7uDM&Q|S3E{{q_cXGyMtk)$ z);M}Qd^d~1PqoWpd5?RY6K;#qv&kz(x9s)K;L*cc55m&Xl{N~s5IMHUQXTo6^*}{I z0XD1F#UII)&TAcgk!F^CpLdu-0f&wfsJY}FVUR&?-B{%lj9Zu}P9@pm-^a!e3WC#E zR$S_^l*eXgkJtMOn3S9+9MUHM!w~p8;>*^5pI=|DH^L!%^-n6c69GPxd_q23Kixhm zC~1A!Sn8=Xy|Ov%P+yZZul!t{pW}AD?|bZQoA~G#S@n!A#hijJwb_LUo)n)ni&SR2 zk~^@*N}iL5ga|ObY4gr)5B2H!yp1li6E>5|Cng?!zL3$Jm63c>N5_s(@U>L%!X1(} z>^o!mTs{97_4kPfayemRj+}^k&s%u%;)9%Qm5gpy^cM)_WPSxh#j&5`!_yy2kss5T z&3tVeA9iPcJ32@*8+(0C=+W2*y|yK%c~v$`n2qaZ%%Ai zxG3_?MN1OwjtZl+Ch7@cD(81dJ0_~3;M>DG{2YDkBluYzq+3wN^jH7BR{ zn%zPIMirM*e0OFSL^ER3i?FRlJ-X$izJ|MF3&q7T4-mv*cZ^ET);^Km;s~qc4Yw($`SK}YBAlAYqs5FF=Gm@WyKd<{YZf{ZD%G{Y~`w&L{xq`M7(;dxCN2~TY z{M4BI(F+4*g@rI4H5YwJuw?gi^gH2Y2{NH?DSXCzp~V?-7^gUHn}??4xRq zt1HoMaYXB42PO?mz)j*HTn<_C+vw3XCzCeAkipc<(yk^^kjAwyB961~A@|j#^HuvetZ(p=ry0mNY|#dzib4HU`%fU*vd59S3dJ$FUu92 zLoyp1UWBiZvdP-f2WO-#Hs770VMvV0d@CAaZDWIfKKLw)2DYYxN`7&h7`{=%cePuB zFyxG08aoTfW?3kiu$F3tLtlK*I#RD5Uh8_g251r~f$D{>G`s093G_;=8$Anp*4Brb z9zUa*AQ4993wCVv!Brb7C|IP~QP(Z|5UL&fjL9=Dulr6Z{m5mF4OAHMp4)Q3@Yz>R zYVi4l6GpwUm1KsbrQ;}6rY)ttR5PRX>(MUEwgn$?P9v^V(JA*GwtmJQv$;|PXfz%x zg7aClas1L(SEh-R1yG~HcJ;>$zTCkrv~v0jt9#t_+@!I|{)zC`L@#V~oT=}Hz3mRa z<|qy6&PkLFq|za*5O`aDviqn>-XkG_lJ1}kv$V%e7IL1$EVbxe4)f&BnVMVW%0QGK@xMFXd5k4)*+N0p^*>y7bEVK+-PbG)`S= zv1Dj^z$z7EM%w5j>n#JbdHWPX-hDj)-UjBBo$(Le=5XfGlM=bPT!jWZ%n}c7ce=i) z+nsz;{JnWqohB|JP7$v)*JbhD z`tI1><`*0$HkdgkVAfwUE8?r>l?dYStbiL?zUGxS zN@4x?0=9^9OTn;zWk&3L!~vH(F11+Wya2A#Zc(@QwEUIfBuB7$3&kCc2*dXZ00qbG z2_toYB7uAy$eKig`z=yWUnAJOajajhD3Z&v=5HhRZEL5mo{oye<8Jk9Y__gWz`a{q zR2*pTD7i&r&X=F^!vODKs3#7;U&%4u6HZr6sBv2IQ}9_Pjz&yGkkKYRI`*RaoC$#n z>2{d>F!2!y`9|DhuY|453e9^zA;@x~NfR)YAu2iSG&q80P zHk-4wWLtJ)5ig!!xkK%h^?Op?k5glD2gcrCeL)%WL@h+_m*Bwcb zgqz~;Y3x&h{;L6#D&)R|UulUI>YPNj-az0**mXZT6Fe z@Eub*(K@#;LW+19xrt{p!`1HE8}0S&y|*)Z?8=8v)^BfMC%}>M_sJjt4!ydB(62a4 zj{GXJHu9i+su_Wwa~y$#JlCe0YCM+}w6u6%y^3wFnm-!2(QAnPDQO+_;Aoq&g-WZ5 zvqB@Fg(r&dw}&DTo=Gan>l}T{18eJG!0$5$UUR$k-?ON`@LPy6EiC?l=SK(LX)UTV zOQE@trQ{xD!5JB3VWHU;q-n2n+vfLzg&j>kd6-@27YuX=0L0?-Nte3JQ2(PofdAPe zIxkx+fC;j|ioCqpST&!|jQAX%o$l17A=2EBc!Q3@2c6@Qi?PY-5UYFXT0SWV41_r2 z(ou;qe~;Zl+<1DTL-0j@e1KO=>!P%*qz2^9o&a>~;Lz-6x8Evf=!UM{06wVcOcX1sL638q3HfXBQ2ualK zBD?uP(}M(l5mqz!DeH~!P~=ZwAYis(Fds?fqv6kJ7;lW$VczIw_BiMOntgD=(zY~*dP17d4m|mP!r<()vcrp6pseUYz&EN-dUbJ%ACtPE($- z&wa?(TMU5wcu7}l)nv)iRuaH-sSkb6Jb{~LB8An}k(KFb(DxPAlV9#5Qv{d;zk8X$ z*M!`0obs6b*xW4LrPF$?v)-d*-}U)EY$g63l1RMfqo^^i81yxs7PbCHy-^HJYksNZ zD@v>>{R?jJZ>LB{PW(iy_@O_T3Wjjx`cyI}s1G>P-czeQ2e9ue7s4<4v*a;oJvr3V zDB8Ej0cb(B%WfcGV0A?HK=5mpJtI zM7jeCD)9)&T5Gg$Ih3~wQF?X#cw3A%2vJnIg=bY2xH-Fb23dspCxjOm3`sk*X=X%|988O~4kI3g39TGGl zpUkVsC?Fr+aAd*2$3OTiqK$#i>v6MtZ~js}PeAE0^n_)%`d+xVu;n<(b`);@swl(R`0DaKGu5QAZb6iP$~#|c z%%;j=dLGq4#|fO$)2m45(G0`BYPoO2r8WHzqOPhYUE<(Yk3S|KV0%1@TlFI05!~W` z)MftIeCFAR%Unz-)FRw-?FFnm6hl7#x!!&lOJzC>z$&g<&c|}ZqG(`)9i#kvat@SF zxwi0}1s8uELqlf3UJ;aKVNJOUFoq?LuV!F;CfTklu8i1Dn4ofZkXN5o>QOW{hA}`o z{A0$Aqqp%ey`-(k{V(xMGF~o~0fTRpX?nbbv5Iv%-^p@5tG{{K{WiK?BR*Kc7-Iti zbH{xmY?2KmAE*~^4WH>HCs5zl0jL@+`qzlqlA^5NvgRio!_4IKPoPpsmenAA+sVXY zb;BqFMF-e9L*3~m>G?RJ3jDa;E|2}m9AR_@~aQoZ*foc*!#x6 z!v>X<+!4QrA$@bArGq;kblP3N$Swi5o~j!{RCzhim*~y(>tW^?eo&ru`%0DCKZJ7x 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

k!p{EcdUK|^8ev!`eq8Sr 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 Date: Thu, 25 Jun 2026 13:49:20 -0600 Subject: [PATCH 11/19] Refine collections domain model docs --- .../deep-dives/domain-model/collections.md | 63 ------------------- docs/content/reference/configuration.md | 6 ++ 2 files changed, 6 insertions(+), 63 deletions(-) diff --git a/docs/content/deep-dives/domain-model/collections.md b/docs/content/deep-dives/domain-model/collections.md index deccc7e..f2651f0 100644 --- a/docs/content/deep-dives/domain-model/collections.md +++ b/docs/content/deep-dives/domain-model/collections.md @@ -15,26 +15,6 @@ registry validates a declared `type`, and a collection parses its own block in This page is the model and the *why*; for the key-by-key surface see the [configuration reference]({{< relref "../../reference/configuration.md" >}}). -## The `.katalyst/` directory - -Configuration lives in a `.katalyst/` directory, discovered by walking **up** -from the working directory to the nearest ancestor that contains one. That -ancestor becomes the repo root for all path resolution. - -The directory holds an optional `config.yaml`, one schema file per definition -under `schemas/`, and one base file per definition under `bases/`. A directory -rather than one big file keeps each schema and base in its own reviewable file -and lets the name fall out of the filename by convention. A nearest-ancestor -lookup mirrors `.git`, `.editorconfig`, and `go.mod`: familiar and predictable. -Discovery resolves symlinks on both the root and the input path, because on -macOS `$TMPDIR` lives behind `/var` to `/private/var` and relative-path -resolution would otherwise produce garbage. - -`config.yaml` is YAML; schema and base files default to YAML/JSON and the -accepted format is set per kind there. Default discovery is **convention**: one -file per definition. A kind can be switched to **explicit** to list its -definitions inline in `config.yaml` instead. - Collections are declared *inside* a [base]({{< relref "base.md" >}}), which owns the base-to-collection mapping. This page covers the collection model and schema resolution; the base page covers how a base maps a backend source onto @@ -126,49 +106,6 @@ from validation. Opt-outs (`--allow-unmatched` and a config knob) are deferred until real usage shows the need. The base page frames the same decision as [unmatched references being first-class]({{< relref "base.md" >}}). -## Why named collections replaced the old `rules:` list - -Earlier versions used a flat, ordered `rules:` list of `{paths: , schema: -}` pairs, where the *first matching glob wins*. Named collections replaced -it for three reasons: - -- **Identity.** A collection has a name, so commands can address it (`check - books`, `item list books`). An anonymous glob rule cannot be named or - selected. -- **No precedence puzzles.** Glob ordering made the active rule for a file - depend on the order of unrelated entries. A file now belongs to exactly one - collection - the one whose directory contains it - so there is no "first match - wins" to reason about. -- **More than schemas.** A collection carries a whole `checks:` list (markdown - and filesystem checks, not just an object schema), which the old `{paths, - schema}` shape could not express cleanly. - -The `schema: ` shorthand is the one piece of the old model that survived: -sugar for a single leading `object` check. - -## Lifecycle of `check` - -The data flow per item, end to end: - -1. **Load config** (or take the `--schema` flag). Discover the `.katalyst/` - directory from the working directory; failing to find one is a usage error. -2. **Resolve selectors to items.** No selector means every collection; - `` means all its items; `/` means one. Files - inside a collection directory that do not match its `pattern` are unmatched - references (errors). -3. **Read file bytes.** Read errors are reported per item but do not abort the - run; exit-1 status accumulates. -4. **Parse frontmatter.** Malformed YAML/TOML/JSON is a per-item failure; no - frontmatter is itself an error. -5. **Resolve the object schema** via the precedence above, then **strip the - `schema:` directive** so user schemas with `additionalProperties: false` - are not tripped by katalyst's own metadata. -6. **Build the check list** from the resolved object check plus the collection's - markdown and filesystem checks. -7. **Run checks** (see [Checks]({{< relref "checks.md" >}})). -8. **Format output**: `path:line: /pointer: message` per violation; valid items - print `path: OK`. - ## Invariants 1. **Schema names are stable; paths can move.** The `.katalyst/` config is the diff --git a/docs/content/reference/configuration.md b/docs/content/reference/configuration.md index 79e51e2..842b3bd 100644 --- a/docs/content/reference/configuration.md +++ b/docs/content/reference/configuration.md @@ -8,6 +8,9 @@ weight = 10 Katalyst reads a `.katalyst/` directory, found by walking upward from the current working directory to the nearest ancestor that contains one. That ancestor is the repo root; all relative paths resolve against it. +Discovery resolves symlinks on both the root and the input path, because on +macOS `$TMPDIR` lives behind `/var` to `/private/var` and relative-path +resolution would otherwise produce garbage. For *why* the config is shaped this way, see [How collections work]({{< relref "../deep-dives/domain-model/collections.md" >}}). To set one up step by @@ -35,6 +38,9 @@ every file under `schemas/` is a schema whose name is its filename stem defaults and can switch a kind to **explicit** discovery, listing definitions inline instead of as files. +`config.yaml` is YAML; schema and base files default to YAML/JSON, and the +accepted format is set per kind there. + Legacy projects that still use `storage:` in `config.yaml` or `.katalyst/storage/` continue to load. Do not mix legacy and new forms in the same project; move legacy base files to `.katalyst/bases/` when you edit them. From 7e559294670095ecc9da6956e22d6f2b0736ef92 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 13:53:23 -0600 Subject: [PATCH 12/19] Add check terms table --- .../content/deep-dives/domain-model/checks.md | 63 +++++++------------ 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/docs/content/deep-dives/domain-model/checks.md b/docs/content/deep-dives/domain-model/checks.md index 347b8a9..84e18b8 100644 --- a/docs/content/deep-dives/domain-model/checks.md +++ b/docs/content/deep-dives/domain-model/checks.md @@ -15,46 +15,29 @@ reference]({{< relref "../../reference/check-types/_index.md" >}}); for the end-to-end data flow of one `check` invocation see the [domain model]({{< relref "_index.md" >}}). -## The model - -Four distinctions carry the whole engine. Keep them separate and the rest -follows. - -**Check type vs. check instance.** A *check type* is the reusable definition of -a constraint (`object_required_field`, `markdown_single_h1`), selected by its -`kind:` id. A *check instance* is one check type configured on a collection: a -`kind` plus its arguments, one entry under `checks:`. The type is the rule; the -instance is the rule applied here. - -**The registry is the single source of truth.** Each check type lives in its own -file and self-registers a `Descriptor` (its id, family, docs metadata) and a -constructor from an `init()`. `cmd/engine` builds the runnable list by registry -lookup; the docs generator and `katalyst check-types list` read the same -descriptors. A parity test fails if a configured kind has no descriptor, so a -check type cannot ship undocumented. Adding one touches a single file, not a -central switch. - -**Family vs. library.** A check type's *family* is the kind of source data it -reads: `structuredObject` (frontmatter), `markdownBodyText` (the body), -`fileSystem` (names and paths), `plainText` (raw body text). A check type's -*library* is the provider that supplies and runs it (below). The two are -orthogonal, and a single family spans libraries: `structuredObject` holds both -`object` (the JSON Schema library) and `object_required_field` (the native -structured-object library). Family answers *what data*; library answers *who -runs the engine*. - -**Scope.** Most checks run once per item, implementing `Run(Context) -[]Violation`. A few reason across an entire collection (uniqueness, a required -index file) and implement `RunCollection(CollectionContext) []Violation`: they -run once per collection, after the per-item pass, so even a single-item selector -re-scans every sibling (a uniqueness verdict is only correct against the whole -set). Scope is independent of family: `unique_field` is collection-scoped and -`structuredObject`; `unique_filename` is collection-scoped and `fileSystem`. - -A check also carries a **severity**. The default is `error`, which fails the -run; `warning` is advisory and never changes the exit code. Warnings exist for -judgment-call checks (prose tells, style nits) where a human decides per -instance. +## Terms + +| Term | Meaning | +|---|---| +| **Check** | Shorthand for a check instance when context is unambiguous. A check asserts one condition and reports a violation when the condition fails. | +| **Check type** | The reusable definition of a constraint: `object_required_field`, `markdown_single_h1`, and so on. A check type is selected by its `kind:` id and appears in the generated check types reference. | +| **Check instance** | One configured check attached to a collection: a check type plus its arguments, written as one YAML object under `checks:`. The type is the rule; the instance is the rule applied here. | +| **Family** | The kind of source data a check type reads: `structuredObject` (frontmatter), `markdownBodyText` (the body), `fileSystem` (names and paths), or `plainText` (raw body text). | +| **Check library** | The provider that supplies and runs a check type. Native libraries wrap hand-written checks; schema-backed libraries delegate to an external validation engine. | +| **Scope** | The level where a check runs. Most checks are item-scoped; a few are collection-scoped and reason across every item in the collection. | +| **Severity** | The consequence of a violation. `error` fails the run; `warning` is advisory and does not change the exit code. | +| **Violation** | One failed check result, with a message, source location, JSON pointer when applicable, severity, and sometimes a sibling file for collection-scoped findings. | + +Family and library are separate axes. Family answers *what data does this check +read?* Library answers *who runs it?* A single family can span libraries: +`structuredObject` includes both `object` from the JSON Schema library and +`object_required_field` from the native structured-object library. + +The registry is the single source of truth for check types. Each check type +self-registers a `Descriptor` (its id, family, docs metadata) and a constructor. +`cmd/engine` builds the runnable list by registry lookup; the docs generator and +`katalyst check-types list` read the same descriptors. A parity test fails if a +configured kind has no descriptor, so a check type cannot ship undocumented. ## Check libraries From c04f6c9d651dd03b9fee33feaf431e16f693570d Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:00:40 -0600 Subject: [PATCH 13/19] Standardize domain model deep dives --- docs/content/contributing/how-we-document.md | 7 +- docs/content/contributing/templates/_index.md | 1 + .../templates/domain-model-deep-dive.md | 65 +++++++++++++++++++ docs/content/deep-dives/domain-model/base.md | 13 +++- .../content/deep-dives/domain-model/checks.md | 9 +++ .../deep-dives/domain-model/collections.md | 11 ++-- docs/content/deep-dives/domain-model/fix.md | 23 +++++-- .../deep-dives/domain-model/frontmatter.md | 11 +++- .../deep-dives/domain-model/inspectors.md | 47 ++++++++++---- 9 files changed, 158 insertions(+), 29 deletions(-) create mode 100644 docs/content/contributing/templates/domain-model-deep-dive.md diff --git a/docs/content/contributing/how-we-document.md b/docs/content/contributing/how-we-document.md index 45d3190..8b7d4f6 100644 --- a/docs/content/contributing/how-we-document.md +++ b/docs/content/contributing/how-we-document.md @@ -95,13 +95,14 @@ feature. They are tests that double as documentation; see ## Templates -New reference and explanation pages start from a template under -`templates/`. Each carries the Diátaxis "this page IS X, is NOT Y" -guardrail. The templates are marked `draft = true` so the public build +New reference, explanation, and domain-model deep-dive pages start from a +template under `templates/`. Each carries the Diátaxis "this page IS X, is NOT +Y" guardrail. The templates are marked `draft = true` so the public build excludes them; they are in-repo for contributors only. - [Reference template](templates/reference.md) - [Explanation template](templates/explanation.md) +- [Domain model deep-dive template](templates/domain-model-deep-dive.md) Tutorial and how-to templates are derived from the first real page of each type rather than guessed up front. diff --git a/docs/content/contributing/templates/_index.md b/docs/content/contributing/templates/_index.md index 5427dbb..973906a 100644 --- a/docs/content/contributing/templates/_index.md +++ b/docs/content/contributing/templates/_index.md @@ -14,5 +14,6 @@ matching section and fill it in. Each template names what its page **is** and - [Reference page template](reference.md) - [Explanation page template](explanation.md) +- [Domain model deep-dive template](domain-model-deep-dive.md) - [Tutorial page template](tutorial.md) - [How-to page template](how-to.md) diff --git a/docs/content/contributing/templates/domain-model-deep-dive.md b/docs/content/contributing/templates/domain-model-deep-dive.md new file mode 100644 index 0000000..6930066 --- /dev/null +++ b/docs/content/contributing/templates/domain-model-deep-dive.md @@ -0,0 +1,65 @@ ++++ +title = "Domain model deep-dive template" +weight = 25 +draft = true ++++ + + + +# + +One or two short paragraphs that define the concept, name what owns it, and +explain what it connects to. Link to the reference page when the reader needs +precise syntax rather than design rationale. + +## Terms + +| Term | Meaning | +|---|---| +| **** | Definition in user-facing vocabulary. Mention code identifiers only when they clarify the seam. | + +## Model + +Explain how the concept works structurally. Prefer one coherent model section +over several scattered "why" sections. Use diagrams or tables when they make +relationships easier to scan. + +## Lifecycle + +Use this section only when the page describes a command or process. Describe +the ordered flow from input to output, including where errors accumulate and +where state changes happen. + +## Design rationale + +**Decision name.** Explain why the system works this way, including the +trade-off. When this choice replaced an earlier approach, record that history +here rather than in a separate decision log. + +## Invariants + +1. **Invariant name.** The rule that must stay true. +2. **Invariant name.** The rule that must stay true. + +## Extension points + +Use this section only when there is a code seam, planned backend, or future +expansion path worth naming. + +## See also + +- The reference page for precise syntax. +- Related domain-model pages. +- `go doc ./internal/` for the code-level contract. diff --git a/docs/content/deep-dives/domain-model/base.md b/docs/content/deep-dives/domain-model/base.md index f1eea08..92ba87d 100644 --- a/docs/content/deep-dives/domain-model/base.md +++ b/docs/content/deep-dives/domain-model/base.md @@ -85,7 +85,7 @@ In Katalyst, the flat `stem` identity is the degenerate one-coordinate case: grow into multiple coordinates parsed from the path. The selector grammar and the definition's pattern are two views of the same thing. -## Design lessons +## Design rationale - **The contract is two-way, not one-way.** Discovery and reconstruction are both core base operations. @@ -106,7 +106,7 @@ the definition's pattern are two views of the same thing. Collection names and item coordinates answer different questions and should stay distinct. -## Seam and extension points +## Extension points - **Core seam:** `internal/storage` defines `BaseType`, `Scope`, and `Reference`; `internal/project` assembles `BaseInstance` values, and @@ -120,4 +120,11 @@ the definition's pattern are two views of the same thing. Multi-coordinate templates, inferred mode, and additional non-filesystem types slot in there. -[addressing]: {{< relref "_index.md" >}} +## See also + +- [Domain model]({{< relref "_index.md" >}}) for the cross-subsystem entity map. +- [Collections]({{< relref "collections.md" >}}) for the collection and item + hierarchy bases expose. +- [Configuration]({{< relref "../../reference/configuration.md" >}}) for the + precise `.katalyst/bases/` surface. +- `go doc ./internal/storage` for the code-level base contracts. diff --git a/docs/content/deep-dives/domain-model/checks.md b/docs/content/deep-dives/domain-model/checks.md index 84e18b8..bdcbb31 100644 --- a/docs/content/deep-dives/domain-model/checks.md +++ b/docs/content/deep-dives/domain-model/checks.md @@ -150,6 +150,15 @@ into one invocation is the optimization, deferred to [#68](https://github.com/abegong/katalyst/issues/68) rather than built before a real out-of-process library exists. +## Invariants + +1. **The registry is authoritative.** Every runnable check type has a + descriptor, and generated docs read the same registry as the engine. +2. **Family and library stay separate.** Family describes the data a check + reads; library describes the provider that runs it. +3. **Collection-scoped checks see the whole collection.** A selector may narrow + output, but a collection-level verdict still needs the full sibling set. + ## See also - The [check types reference]({{< relref "../../reference/check-types/_index.md" >}}) diff --git a/docs/content/deep-dives/domain-model/collections.md b/docs/content/deep-dives/domain-model/collections.md index f2651f0..3cb3113 100644 --- a/docs/content/deep-dives/domain-model/collections.md +++ b/docs/content/deep-dives/domain-model/collections.md @@ -57,7 +57,9 @@ base still decides the mechanics: a filesystem may list files and parse frontmatter in memory, while a database may push filtering and aggregation into queries. The collection name stays the user's handle either way. -## Why schema resolution has three tiers +## Design rationale + +**Schema resolution has three tiers.** When `check` validates an item against an object schema, it resolves which schema, highest precedence first: @@ -81,7 +83,7 @@ Resolution runs through a per-invocation **resolver** that owns this policy and compiled-schema cache keyed by absolute path, so "check 10,000 files against the same schema" costs one compile. -## Why variants discriminate by metadata, not path +**Variants discriminate by metadata, not path.** A collection's `variants:` run extra checks on a subset of items, chosen by the item's metadata. The discriminator (`when`) reuses the `item list --filter` @@ -94,10 +96,9 @@ The discriminator is metadata, not a glob, on purpose: metadata is the one property every item yields on every backend (frontmatter for a file, columns for a future row), so routing stays portable and the engine never depends on the base type. Selecting by *path* is a base-type-scoped condition, deferred. The -base page covers [how variants route checks rather than -membership]({{< relref "base.md" >}}). +base page covers [how variants route checks rather than membership]({{< relref "base.md" >}}). -## Why a file inside a collection must match +**Files inside a collection must match.** A file that sits inside a collection's directory but does not match its `pattern` is reported as an **error**, not silently skipped. Silent skips hide diff --git a/docs/content/deep-dives/domain-model/fix.md b/docs/content/deep-dives/domain-model/fix.md index 65ed8a2..207d174 100644 --- a/docs/content/deep-dives/domain-model/fix.md +++ b/docs/content/deep-dives/domain-model/fix.md @@ -11,7 +11,18 @@ frontmatter the opinionated way it does. The parser and encoder live in form, and the backend write that persists it, live in `internal/fix` and `internal/storage/collection/filesystem` respectively. -## Why fix is deliberately opinionated +## Terms + +| Term | Meaning | +|---|---| +| **Fix** | A command that rewrites existing content into Katalyst's canonical form when a check can supply a safe transformation. | +| **Canonical form** | The deterministic output format `fix` writes: preserved frontmatter syntax, sorted top-level keys, native encoder style, preserved body bytes, and one trailing newline. | +| **Report-only check** | A check that can report violations but cannot safely rewrite content. | +| **Check mode** | The `--check` form of `fix`: print what would change, write nothing, and exit 1 if any item is non-canonical. | + +## Design rationale + +**Fix is deliberately opinionated.** `katalyst fix` rewrites frontmatter in one canonical form **in the file's own format**: TOML stays TOML, JSON stays JSON, YAML stays YAML. `fix` never @@ -42,11 +53,7 @@ if it hurts in practice. `--check` makes `fix` non-destructive: it writes nothing, prints the items that *would* change, and exits 1. That is the CI form. -## Worked example - -{{< katalyst-example-full "fix-normalize-frontmatter" >}} - -## Why fix never injects missing values +**Fix never injects missing values.** An earlier idea had a mode that would add "sentinel" placeholder values for missing required keys. It was dropped, and the safe-mutation story moved to a @@ -60,6 +67,10 @@ that. A safer design, interactive or constrained to filling a schema's declared `fix` only ever normalizes what is already there; it never creates structure (a frontmatter-less file is returned untouched). +## Worked example + +{{< katalyst-example-full "fix-normalize-frontmatter" >}} + ## Lifecycle of fix For each item: diff --git a/docs/content/deep-dives/domain-model/frontmatter.md b/docs/content/deep-dives/domain-model/frontmatter.md index f808f97..be24c65 100644 --- a/docs/content/deep-dives/domain-model/frontmatter.md +++ b/docs/content/deep-dives/domain-model/frontmatter.md @@ -10,7 +10,16 @@ that produces. The codec lives in `internal/codec/markdownbodytext`; it turns a markdown file into structured metadata plus body bytes that checks, inspectors, and [`fix`]({{< relref "fix.md" >}}) can share. -## The markdown document +## Terms + +| Term | Meaning | +|---|---| +| **Frontmatter** | The structured metadata block at the top of a markdown file, in YAML, TOML, or JSON. | +| **Body** | Everything after the closing frontmatter fence. | +| **Document** | The parsed markdown file-form: detected frontmatter format, normalized metadata, body bytes, and source line lookup. | +| **Metadata** | The parsed in-memory frontmatter shape, normalized to `map[string]any` for checks and inspectors. | + +## Model The unit of work is a file on disk with two optional regions: diff --git a/docs/content/deep-dives/domain-model/inspectors.md b/docs/content/deep-dives/domain-model/inspectors.md index 7daca7e..8297670 100644 --- a/docs/content/deep-dives/domain-model/inspectors.md +++ b/docs/content/deep-dives/domain-model/inspectors.md @@ -14,7 +14,18 @@ command. For the per-inspector catalog see the [inspectors reference]({{< relref "../../reference/inspectors/_index.md" >}}); this page is the model and the rationale behind it. -## Two layers +## Terms + +| Term | Meaning | +|---|---| +| **Inspector** | A read-only operation that profiles content and returns evidence. | +| **Evidence** | The measured counts, distributions, classes, or summaries an inspector reports. Evidence is not a recommendation or verdict. | +| **Raw base layer** | Inspectors that measure a base directly before collection configuration. | +| **Collection layer** | Inspectors that measure configured collection items by domain identity. | +| **Measurement primitive** | A reusable profiler such as `objectFields`, `markdownBody`, or `fileMetadata` that inspectors point at a specific input. | +| **Profile class** | A group of near-identical profiles collapsed together so output scales with distinct shapes rather than total files. | + +## Model Inspectors come in two layers, distinguished by *how they reference the data*: @@ -33,7 +44,7 @@ The two are **distinct interfaces, not one type at two scopes**, precisely because they reference the data through different machinery. This mirrors the seam in the [base]({{< relref "base.md" >}}). -## Built from primitives +**Measurement is built from primitives.** Most measurement lives in three reusable, layer-agnostic primitives, so the inspectors themselves are thin wrappers that point a primitive at an input: @@ -48,11 +59,16 @@ inspectors themselves are thin wrappers that point a primitive at an input: shape (types, naming, depth, regions, directory density) over references, opening no files. -The same small primitives are reused where the layer makes sense, but raw base -inspectors avoid proposing collections. They report store and content facts; a +The same small primitives are reused where the layer makes sense. `objectFields` +runs over a collection's items in the collection layer and over loose-file +frontmatter inside the `document_shape` fingerprint in the raw base layer, so +the two layers share one engine rather than re-deriving it. Raw base inspectors +still avoid proposing collections: they report store and content facts, and a human or agent decides what collection boundaries those facts imply. -## Evidence, not recommendations +## Design rationale + +**Evidence, not recommendations.** An inspector reports that a field appears in 94% of items; it does **not** say "make it required." The threshold that turns 94% into a required field, or a @@ -65,7 +81,7 @@ become something to second-guess rather than trust. Reporting only counts, with the unit count `n` as denominator, keeps the evidence trustable: the reader sees why a conclusion holds and decides. -## The determinism dividing line +**The determinism dividing line.** Deterministic measurement is an inspector's job; threshold-picking and structure-proposing are not. Counting field presence, histogramming types, @@ -74,12 +90,12 @@ all deterministic, all inspectors. Deciding that 94% is "required", that a directory should be a collection, or what to name a schema are all judgment, none of it here. -## Keeping output small +**Keep output small.** -`file_tree` and `file_content_shape` keep Markdown output small with -deterministic caps: small trees get an actual tree; content-shape reports show -the selected file set, dominant structures, and compact text/tabular/tree -facets, with `-v` for expanded evidence. +`file_tree`, `file_tree_content`, and `document_shape` keep Markdown output +small with deterministic caps: small trees get an actual tree; content-shape +reports show the selected file set, dominant structures, and compact +text/tabular/tree facets, with `-v` for expanded evidence. ## Output @@ -94,6 +110,15 @@ intended workflow is a loop - inspect, draft a schema, check, fix the holdouts - but the forming, drafting, and threshold-choosing live with whoever drives the tool, not in the engine. +## Invariants + +1. **Inspectors do not mutate content.** They report evidence and write no + schemas, checks, or files. +2. **Evidence stays separate from recommendations.** Threshold choices and + schema proposals belong to the human or agent driving the workflow. +3. **Layer boundaries stay explicit.** Raw base inspectors use base-native + references; collection-layer inspectors use collection and item identity. + ## See also - The [inspectors reference]({{< relref "../../reference/inspectors/_index.md" >}}) From 67d71ac774a52ff45196ff996e88f414e9d8b062 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:15:09 -0600 Subject: [PATCH 14/19] Add item views reference docs --- docs/content/deep-dives/domain-model/fix.md | 4 +- .../deep-dives/domain-model/frontmatter.md | 78 ----------------- docs/content/reference/_index.md | 18 ++-- docs/content/reference/glossary.md | 1 + docs/content/reference/item-views/_index.md | 26 ++++++ .../reference/item-views/file-metadata.md | 50 +++++++++++ .../item-views/markdown-body-text.md | 87 +++++++++++++++++++ .../reference/item-views/plain-text.md | 49 +++++++++++ .../reference/item-views/structured-object.md | 52 +++++++++++ 9 files changed, 277 insertions(+), 88 deletions(-) delete mode 100644 docs/content/deep-dives/domain-model/frontmatter.md create mode 100644 docs/content/reference/item-views/_index.md create mode 100644 docs/content/reference/item-views/file-metadata.md create mode 100644 docs/content/reference/item-views/markdown-body-text.md create mode 100644 docs/content/reference/item-views/plain-text.md create mode 100644 docs/content/reference/item-views/structured-object.md diff --git a/docs/content/deep-dives/domain-model/fix.md b/docs/content/deep-dives/domain-model/fix.md index 207d174..8fba2fc 100644 --- a/docs/content/deep-dives/domain-model/fix.md +++ b/docs/content/deep-dives/domain-model/fix.md @@ -99,6 +99,6 @@ For each item: ## See also -- [Frontmatter]({{< relref "frontmatter.md" >}}) for how markdown documents - parse before `fix` rewrites them. +- [Markdown body text]({{< relref "../../reference/item-views/markdown-body-text.md" >}}) + for how markdown documents parse before `fix` rewrites them. - `go doc ./internal/fix` for the code-level transform contract. diff --git a/docs/content/deep-dives/domain-model/frontmatter.md b/docs/content/deep-dives/domain-model/frontmatter.md deleted file mode 100644 index be24c65..0000000 --- a/docs/content/deep-dives/domain-model/frontmatter.md +++ /dev/null @@ -1,78 +0,0 @@ -+++ -title = "Frontmatter" -weight = 60 -+++ - -# Frontmatter - -How Katalyst parses a markdown file's frontmatter and the in-memory document -that produces. The codec lives in `internal/codec/markdownbodytext`; it turns a -markdown file into structured metadata plus body bytes that checks, inspectors, -and [`fix`]({{< relref "fix.md" >}}) can share. - -## Terms - -| Term | Meaning | -|---|---| -| **Frontmatter** | The structured metadata block at the top of a markdown file, in YAML, TOML, or JSON. | -| **Body** | Everything after the closing frontmatter fence. | -| **Document** | The parsed markdown file-form: detected frontmatter format, normalized metadata, body bytes, and source line lookup. | -| **Metadata** | The parsed in-memory frontmatter shape, normalized to `map[string]any` for checks and inspectors. | - -## Model - -The unit of work is a file on disk with two optional regions: - -- A **frontmatter** block at the very top of the file, in one of three formats - detected by the opening fence: - - | Format | Fence | Example openers | - |--------|-------|-----------------| - | YAML | `---` | Jekyll, Obsidian, Hugo | - | TOML | `+++` | Hugo, Obsidian, Jekyll | - | JSON | `{` ... `}` | Hugo | - - These are the three formats Hugo, Obsidian, and Jekyll emit. Whatever the - source format, the parsed `Meta` is a plain `map[string]any`, so checks and - inspectors never branch on format. `Document.Format` records the detected - syntax so `fix` can re-emit a file in its own format rather than rewriting, - say, TOML as YAML. -- A **body**, everything after the closing fence. - -A document may have no frontmatter. Structured-object checks that need metadata -cannot run against it, but body-text checks can still evaluate the body. - -When parsed, a markdown document becomes a `markdownbodytext.Document`: - -| Field | Meaning | -|------------------|---------| -| `HasFrontmatter` | Did the file open with a recognized fence? | -| `Format` | Detected syntax: `KindYAML`, `KindTOML`, or `KindJSON` | -| `Meta` | Parsed frontmatter, normalized to `map[string]any` | -| `Body` | Bytes after the closing fence | -| `Lines` | JSON-pointer-path to 1-indexed source line | - -The `Lines` index is what makes error messages locatable. It accounts for the -opening fence offset, so `Lines["/title"] = 2` means the `title` key is on line -2 of the original file. - -**Line tracking is full for YAML only.** For TOML and JSON, `Lines` is empty -today; checks degrade gracefully (they emit the error without a line number). -Richer line tracking for the other formats is a planned follow-up. - -## Invariants - -1. **Checks and inspectors read one metadata shape.** YAML, TOML, and JSON all - parse to `map[string]any`. -2. **Line numbers are file-relative and 1-indexed.** The opening fence is line - 1, so the first key is typically line 2. (Populated for YAML today; see the - line-tracking note above.) -3. **Format detection is preserved for writers.** Readers expose normalized - metadata, but retain the original frontmatter syntax so a writer can emit - the same format. - -## See also - -- [Fix]({{< relref "fix.md" >}}) for the canonical rewrite policy that consumes - parsed documents. -- `go doc ./internal/codec/markdownbodytext` for the code-level codec contract. diff --git a/docs/content/reference/_index.md b/docs/content/reference/_index.md index d660b67..e7fcdb5 100644 --- a/docs/content/reference/_index.md +++ b/docs/content/reference/_index.md @@ -7,11 +7,13 @@ bookCollapseSection = true # Reference Information-oriented descriptions of installation methods, the configuration -surface, check types, and the project vocabulary. Reference pages describe -*what is*, not *how to:* they are looked up, not read front to back. Check-type -pages under -[Check types]({{< relref "check-types/_index.md" >}}) are generated from the -checks registry, so they never drift from the code. Many of these pages carry a -**Worked example**: a small input corpus, a real `katalyst` command, and its -output, generated by running the command and gated by tests, so the output -can't drift from the shipped tool either. +surface, item views, check types, and the project vocabulary. Reference pages +describe *what is*, not *how to:* they are looked up, not read front to back. + +[Item views]({{< relref "item-views/_index.md" >}}) describe the +representations checks and inspectors read from each item. Check-type pages +under [Check types]({{< relref "check-types/_index.md" >}}) are generated from +the checks registry, so they never drift from the code. Many of these pages +carry a **Worked example**: a small input corpus, a real `katalyst` command, +and its output, generated by running the command and gated by tests, so the +output can't drift from the shipped tool either. diff --git a/docs/content/reference/glossary.md b/docs/content/reference/glossary.md index 2530e68..6655ff3 100644 --- a/docs/content/reference/glossary.md +++ b/docs/content/reference/glossary.md @@ -35,6 +35,7 @@ how each term maps onto today's code is documented in the per-package | **Frontmatter** | The on-disk metadata block at the top of a markdown file, in YAML (`---`), TOML (`+++`), or JSON (`{ … }`). | | **Inspector** | A read-only operation that measures content and returns evidence. The descriptive dual of a check: a check asserts a predicate, an inspector reports the distribution. Inspectors come in two layers. | | **Item** | The unit of data in a collection, addressed by a selector and operated on by `check`, `fix`, and the `item` subcommands. In the filesystem backend an item is one file matching the collection's pattern, its id the filename stem; its markdown file-form is a **Document**. | +| **Item view** | A representation Katalyst exposes for checks, inspectors, or `fix` to read from an item: markdown body text, plain text, structured object, or file metadata. See [Item views]({{< relref "item-views/_index.md" >}}). | | **Measurement primitive** | A reusable building block the inspectors are built from: `object_fields` (a data dictionary over object maps), `markdown_body` (body structure), and file-metadata. | | **Metadata** | The parsed, in-memory structure of the frontmatter (a `map[string]any`). | | **Operation** | Something a base lets you do with its data: read, list, query, aggregate, write. Each has a scope (item, collection, across collections) and structural requirements the backend must satisfy. See [progressive operations]({{< relref "../deep-dives/progressive-operations.md" >}}). | diff --git a/docs/content/reference/item-views/_index.md b/docs/content/reference/item-views/_index.md new file mode 100644 index 0000000..26a002f --- /dev/null +++ b/docs/content/reference/item-views/_index.md @@ -0,0 +1,26 @@ ++++ +title = "Item views" +weight = 35 +bookCollapseSection = true ++++ + +# Item views + +Item views are the data surfaces Katalyst exposes for each item. Checks, +inspectors, and `fix` do not all need the same representation: one check may +read structured metadata, another may scan body text, and another may inspect +the item's path. Naming those surfaces keeps the reference precise without +turning every representation into a codec. + +Today, Katalyst exposes four item views: + +| View | Meaning | +|---|---| +| [Markdown body text]({{< relref "markdown-body-text.md" >}}) | A parsed markdown document with optional frontmatter metadata, body bytes, source format, and source-line lookup. | +| [Plain text]({{< relref "plain-text.md" >}}) | Body content read as raw text, independent of markdown structure. | +| [Structured object]({{< relref "structured-object.md" >}}) | Metadata normalized to a `map[string]any`, used by object and schema-backed checks. | +| [File metadata]({{< relref "file-metadata.md" >}}) | Filename, extension, parent directory, path depth, and other attributes derived from the item's reference. | + +Only Markdown body text is backed by a dedicated codec package today. The other +views are projections over parsed item data or derived item references. + diff --git a/docs/content/reference/item-views/file-metadata.md b/docs/content/reference/item-views/file-metadata.md new file mode 100644 index 0000000..0c4e9a0 --- /dev/null +++ b/docs/content/reference/item-views/file-metadata.md @@ -0,0 +1,50 @@ ++++ +title = "File metadata" +weight = 40 ++++ + +# File metadata + +File metadata is the item view derived from an item's filesystem reference. It +does not parse item content; it reads names, extensions, parent directories, +path segments, and path depth from where the item lives. + +## Terms + +| Term | Meaning | +|---|---| +| **File metadata** | Attributes derived from an item's path or filesystem reference. | +| **Filename** | The basename of the item path. | +| **Extension** | The suffix used to classify the file's format, such as `.md` or `.txt`. | +| **Parent directory** | The directory immediately containing the item. | +| **Path depth** | The number of directory levels between the collection root and the item. | + +## Model + +File metadata belongs to the item because the item's reference can carry +meaning: a file's name may need to match a field, an extension may need to be +allowed, or a collection may require one index file per directory. + +This view backs file-system check types. It also feeds source inspectors such +as `file_tree` and `document_shape`, where file names and paths help profile a +base before or after collections are configured. + +Unlike [Markdown body text]({{< relref "markdown-body-text.md" >}}), file +metadata is not a codec. It is derived from the reference the base already uses +to address the item. + +## Invariants + +1. **File metadata is derived from references.** It does not require reading or + parsing the item body. +2. **Path targets are explicit.** Checks choose the path slice they inspect: + filename, filename with extension, parent directory, or path segments. +3. **It is still an item view.** Checks and inspectors can reason about path + attributes alongside structured fields and body text. + +## See also + +- [File system check types]({{< relref "../check-types/file-system/_index.md" >}}) +- [File tree inspector]({{< relref "../inspectors/source/file-tree.md" >}}) +- [Document shape inspector]({{< relref "../inspectors/source/document-shape.md" >}}) + diff --git a/docs/content/reference/item-views/markdown-body-text.md b/docs/content/reference/item-views/markdown-body-text.md new file mode 100644 index 0000000..f753fb9 --- /dev/null +++ b/docs/content/reference/item-views/markdown-body-text.md @@ -0,0 +1,87 @@ ++++ +title = "Markdown body text" +weight = 10 ++++ + +# Markdown body text + +Markdown body text is the item view produced from a markdown-like file with +optional structured frontmatter. The codec lives in +`internal/codec/markdownbodytext`; it turns bytes on disk into structured +metadata plus body bytes that checks, inspectors, and +[`fix`]({{< relref "../../deep-dives/domain-model/fix.md" >}}) can share. + +## Terms + +| Term | Meaning | +|---|---| +| **Markdown body text** | The parsed markdown file-form: optional structured frontmatter, body bytes, source format, and source-line lookup. | +| **Frontmatter** | The structured metadata block at the top of a markdown file, in YAML, TOML, or JSON. | +| **Body** | Everything after the closing frontmatter fence. If there is no frontmatter, the whole file is the body. | +| **Document** | The in-memory representation returned by `markdownbodytext.Parse`. | +| **Metadata** | The parsed frontmatter shape, normalized to `map[string]any`. | +| **Source line map** | A JSON-pointer-path to 1-indexed source line lookup used for locatable violations. | + +## Model + +The unit of work is a file on disk with two possible regions: + +| Region | Meaning | +|---|---| +| Frontmatter | An optional structured block at the very top of the file. | +| Body | Everything after the closing frontmatter fence, or the whole file when no frontmatter is present. | + +Katalyst recognizes the three frontmatter formats emitted by Hugo, Obsidian, +and Jekyll: + +| Format | Fence | Example sources | +|---|---|---| +| YAML | `---` | Jekyll, Obsidian, Hugo | +| TOML | `+++` | Hugo, Obsidian, Jekyll | +| JSON | `{` ... `}` | Hugo | + +Whatever the source format, parsed metadata has the same shape: +`map[string]any`. Checks and inspectors can read fields without branching on +YAML, TOML, or JSON. `Document.Format` records the detected syntax so writers +can re-emit a file in its own format rather than rewriting TOML as YAML. + +When parsed, a markdown document becomes a `markdownbodytext.Document`: + +| Field | Meaning | +|---|---| +| `HasFrontmatter` | Did the file open with a recognized frontmatter fence? | +| `Format` | Detected syntax: `KindYAML`, `KindTOML`, or `KindJSON`. | +| `Meta` | Parsed frontmatter, normalized to `map[string]any`. | +| `Body` | Bytes after the closing fence, or the entire file when there is no frontmatter. | +| `BodyLine` | The 1-indexed source line where the body begins. | +| `Lines` | JSON-pointer-path to 1-indexed source line. | +| `Frontmatter` | Raw frontmatter bytes, used by text search and diagnostics. | + +The `Lines` index is what makes structured-object violations locatable. It +accounts for the opening fence offset, so `Lines["/title"] = 2` means the +`title` key is on line 2 of the original file. + +Line tracking is full for YAML only. For TOML and JSON, `Lines` is empty today; +checks degrade gracefully by emitting the violation without a line number. + +## Invariants + +1. **Readers see one metadata shape.** YAML, TOML, and JSON all parse to + `map[string]any`. +2. **Body bytes remain the body view.** The body is available to markdown and + plain-text checks without requiring callers to understand the frontmatter + syntax. +3. **Format detection is preserved for writers.** Readers expose normalized + metadata but retain the original syntax so `fix` can emit the same format. +4. **Line numbers are file-relative and 1-indexed.** The opening fence is line + 1, so the first metadata key is typically line 2 when line data is available. + +## See also + +- [Markdown body text check types]({{< relref "../check-types/markdown-body-text/_index.md" >}}) +- [Plain text]({{< relref "plain-text.md" >}}), the raw body-text view over + the same body bytes. +- [Fix]({{< relref "../../deep-dives/domain-model/fix.md" >}}), which consumes + parsed documents when it rewrites frontmatter. +- `go doc ./internal/codec/markdownbodytext` for the code-level codec contract. + diff --git a/docs/content/reference/item-views/plain-text.md b/docs/content/reference/item-views/plain-text.md new file mode 100644 index 0000000..82dd9a6 --- /dev/null +++ b/docs/content/reference/item-views/plain-text.md @@ -0,0 +1,49 @@ ++++ +title = "Plain text" +weight = 20 ++++ + +# Plain text + +Plain text is the body content read as raw text. It ignores markdown structure +and treats the selected span as text to match with regular expressions or +literal denylist entries. + +## Terms + +| Term | Meaning | +|---|---| +| **Plain text** | The body view interpreted as raw text. | +| **Body** | The content being searched. For markdown files, this excludes frontmatter. | +| **Span** | The slice of body text a text check evaluates: the whole body, each line, the first line, or matched lines. | +| **Target** | The configured span selector for a text check. | + +## Model + +Plain-text checks run against body text, not structured metadata and not +markdown syntax trees. For markdown items, the body comes from the +[Markdown body text]({{< relref "markdown-body-text.md" >}}) view after +frontmatter has been separated. For plain-text items, the whole item body is the +text view. + +This view backs the `text_requires`, `text_forbids`, and `text_denylist` check +types. Those checks answer content questions such as "must contain this +pattern", "must not contain this pattern", or "must not contain any of these +literal strings." + +## Invariants + +1. **Frontmatter is outside the body.** Text checks over markdown files do not + match metadata unless a check explicitly inspects raw frontmatter elsewhere. +2. **Markdown structure is not parsed.** Headings, links, and code fences are + just text to this view. +3. **The configured span controls matching.** A check may evaluate the whole + body or smaller slices such as individual lines. + +## See also + +- [Plain text check types]({{< relref "../check-types/plain-text/_index.md" >}}) +- [Markdown body text]({{< relref "markdown-body-text.md" >}}) +- [Configuration]({{< relref "../configuration.md#text-rules" >}}) for text + rule configuration. + diff --git a/docs/content/reference/item-views/structured-object.md b/docs/content/reference/item-views/structured-object.md new file mode 100644 index 0000000..a1e13ba --- /dev/null +++ b/docs/content/reference/item-views/structured-object.md @@ -0,0 +1,52 @@ ++++ +title = "Structured object" +weight = 30 ++++ + +# Structured object + +Structured object is the item view that exposes named fields and values. Today, +for filesystem markdown collections, it comes from parsed frontmatter metadata. +The domain-model term is broader on purpose: future bases may provide rows, +documents, or API resources directly as structured objects. + +## Terms + +| Term | Meaning | +|---|---| +| **Structured object** | A map-like representation of an item's structured data. | +| **Field** | A key in the structured object. A field is an attribute; not every attribute is a field. | +| **Metadata** | The parsed markdown frontmatter shape used as the structured object today. | +| **Schema directive** | The inline `schema:` key that opts an item into a named schema before validation. | + +## Model + +In the current filesystem backend, the structured-object view is +`Document.Meta` from [Markdown body text]({{< relref "markdown-body-text.md" >}}). +It is normalized to `map[string]any` no matter whether the source frontmatter +was YAML, TOML, or JSON. + +Structured-object checks validate fields and schema-backed object shape. They +are the right fit when a check needs to ask about named values: required fields, +field type, field length, enum membership, uniqueness, sentence case, or JSON +Schema validation. + +The `schema:` directive is Katalyst metadata. It selects a configured schema for +the item and is removed before the item is validated against that schema. + +## Invariants + +1. **Field checks read normalized metadata.** They do not branch on YAML, TOML, + or JSON syntax. +2. **A field is narrower than an attribute.** Filenames and path segments are + attributes, but they are not structured-object fields. +3. **Schema selection is separate from validation.** The directive chooses the + schema; the object check validates the resulting structured object. + +## See also + +- [Structured object check types]({{< relref "../check-types/structured-object/_index.md" >}}) +- [Markdown body text]({{< relref "markdown-body-text.md" >}}) +- [Configuration]({{< relref "../configuration.md#object-schema-resolution-precedence" >}}) +- [Collections]({{< relref "../../deep-dives/domain-model/collections.md" >}}) + From 6ad2d27da481c0f848418d7b71617fc746999bd8 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:22:10 -0600 Subject: [PATCH 15/19] Rename item views to data surfaces --- docs/content/deep-dives/domain-model/fix.md | 2 +- docs/content/reference/_index.md | 16 +++++++------- .../{item-views => data-surfaces}/_index.md | 21 +++++++++---------- .../file-metadata.md | 5 ++--- .../markdown-body-text.md | 7 +++---- .../plain-text.md | 5 ++--- .../structured-object.md | 5 ++--- docs/content/reference/glossary.md | 2 +- 8 files changed, 29 insertions(+), 34 deletions(-) rename docs/content/reference/{item-views => data-surfaces}/_index.md (64%) rename docs/content/reference/{item-views => data-surfaces}/file-metadata.md (91%) rename docs/content/reference/{item-views => data-surfaces}/markdown-body-text.md (93%) rename docs/content/reference/{item-views => data-surfaces}/plain-text.md (95%) rename docs/content/reference/{item-views => data-surfaces}/structured-object.md (93%) diff --git a/docs/content/deep-dives/domain-model/fix.md b/docs/content/deep-dives/domain-model/fix.md index 8fba2fc..64a99bf 100644 --- a/docs/content/deep-dives/domain-model/fix.md +++ b/docs/content/deep-dives/domain-model/fix.md @@ -99,6 +99,6 @@ For each item: ## See also -- [Markdown body text]({{< relref "../../reference/item-views/markdown-body-text.md" >}}) +- [Markdown body text]({{< relref "../../reference/data-surfaces/markdown-body-text.md" >}}) for how markdown documents parse before `fix` rewrites them. - `go doc ./internal/fix` for the code-level transform contract. diff --git a/docs/content/reference/_index.md b/docs/content/reference/_index.md index e7fcdb5..47ed614 100644 --- a/docs/content/reference/_index.md +++ b/docs/content/reference/_index.md @@ -7,13 +7,13 @@ bookCollapseSection = true # Reference Information-oriented descriptions of installation methods, the configuration -surface, item views, check types, and the project vocabulary. Reference pages +surface, data surfaces, check types, and the project vocabulary. Reference pages describe *what is*, not *how to:* they are looked up, not read front to back. -[Item views]({{< relref "item-views/_index.md" >}}) describe the -representations checks and inspectors read from each item. Check-type pages -under [Check types]({{< relref "check-types/_index.md" >}}) are generated from -the checks registry, so they never drift from the code. Many of these pages -carry a **Worked example**: a small input corpus, a real `katalyst` command, -and its output, generated by running the command and gated by tests, so the -output can't drift from the shipped tool either. +[Data surfaces]({{< relref "data-surfaces/_index.md" >}}) describe the +representations checks and inspectors read from content. Check-type pages under +[Check types]({{< relref "check-types/_index.md" >}}) are generated from the +checks registry, so they never drift from the code. Many of these pages carry a +**Worked example**: a small input corpus, a real `katalyst` command, and its +output, generated by running the command and gated by tests, so the output +can't drift from the shipped tool either. diff --git a/docs/content/reference/item-views/_index.md b/docs/content/reference/data-surfaces/_index.md similarity index 64% rename from docs/content/reference/item-views/_index.md rename to docs/content/reference/data-surfaces/_index.md index 26a002f..6e312ac 100644 --- a/docs/content/reference/item-views/_index.md +++ b/docs/content/reference/data-surfaces/_index.md @@ -1,20 +1,20 @@ +++ -title = "Item views" +title = "Data surfaces" weight = 35 bookCollapseSection = true +++ -# Item views +# Data surfaces -Item views are the data surfaces Katalyst exposes for each item. Checks, -inspectors, and `fix` do not all need the same representation: one check may -read structured metadata, another may scan body text, and another may inspect -the item's path. Naming those surfaces keeps the reference precise without -turning every representation into a codec. +Data surfaces are the representations Katalyst operations read from content. +Checks, inspectors, and `fix` do not all need the same surface: one check may +read structured metadata, another may scan body text, and another may inspect a +path. Naming those surfaces keeps the reference precise without turning every +representation into a codec. -Today, Katalyst exposes four item views: +Today, Katalyst exposes four data surfaces: -| View | Meaning | +| Surface | Meaning | |---|---| | [Markdown body text]({{< relref "markdown-body-text.md" >}}) | A parsed markdown document with optional frontmatter metadata, body bytes, source format, and source-line lookup. | | [Plain text]({{< relref "plain-text.md" >}}) | Body content read as raw text, independent of markdown structure. | @@ -22,5 +22,4 @@ Today, Katalyst exposes four item views: | [File metadata]({{< relref "file-metadata.md" >}}) | Filename, extension, parent directory, path depth, and other attributes derived from the item's reference. | Only Markdown body text is backed by a dedicated codec package today. The other -views are projections over parsed item data or derived item references. - +surfaces are projections over parsed data or derived references. diff --git a/docs/content/reference/item-views/file-metadata.md b/docs/content/reference/data-surfaces/file-metadata.md similarity index 91% rename from docs/content/reference/item-views/file-metadata.md rename to docs/content/reference/data-surfaces/file-metadata.md index 0c4e9a0..8ebbab0 100644 --- a/docs/content/reference/item-views/file-metadata.md +++ b/docs/content/reference/data-surfaces/file-metadata.md @@ -5,7 +5,7 @@ weight = 40 # File metadata -File metadata is the item view derived from an item's filesystem reference. It +File metadata is the data surface derived from an item's filesystem reference. It does not parse item content; it reads names, extensions, parent directories, path segments, and path depth from where the item lives. @@ -39,7 +39,7 @@ to address the item. parsing the item body. 2. **Path targets are explicit.** Checks choose the path slice they inspect: filename, filename with extension, parent directory, or path segments. -3. **It is still an item view.** Checks and inspectors can reason about path +3. **It is still a data surface.** Checks and inspectors can reason about path attributes alongside structured fields and body text. ## See also @@ -47,4 +47,3 @@ to address the item. - [File system check types]({{< relref "../check-types/file-system/_index.md" >}}) - [File tree inspector]({{< relref "../inspectors/source/file-tree.md" >}}) - [Document shape inspector]({{< relref "../inspectors/source/document-shape.md" >}}) - diff --git a/docs/content/reference/item-views/markdown-body-text.md b/docs/content/reference/data-surfaces/markdown-body-text.md similarity index 93% rename from docs/content/reference/item-views/markdown-body-text.md rename to docs/content/reference/data-surfaces/markdown-body-text.md index f753fb9..c1eea75 100644 --- a/docs/content/reference/item-views/markdown-body-text.md +++ b/docs/content/reference/data-surfaces/markdown-body-text.md @@ -5,7 +5,7 @@ weight = 10 # Markdown body text -Markdown body text is the item view produced from a markdown-like file with +Markdown body text is the data surface produced from a markdown-like file with optional structured frontmatter. The codec lives in `internal/codec/markdownbodytext`; it turns bytes on disk into structured metadata plus body bytes that checks, inspectors, and @@ -15,7 +15,7 @@ metadata plus body bytes that checks, inspectors, and | Term | Meaning | |---|---| -| **Markdown body text** | The parsed markdown file-form: optional structured frontmatter, body bytes, source format, and source-line lookup. | +| **Markdown body text** | The parsed markdown file-form exposed as a data surface: optional structured frontmatter, body bytes, source format, and source-line lookup. | | **Frontmatter** | The structured metadata block at the top of a markdown file, in YAML, TOML, or JSON. | | **Body** | Everything after the closing frontmatter fence. If there is no frontmatter, the whole file is the body. | | **Document** | The in-memory representation returned by `markdownbodytext.Parse`. | @@ -79,9 +79,8 @@ checks degrade gracefully by emitting the violation without a line number. ## See also - [Markdown body text check types]({{< relref "../check-types/markdown-body-text/_index.md" >}}) -- [Plain text]({{< relref "plain-text.md" >}}), the raw body-text view over +- [Plain text]({{< relref "plain-text.md" >}}), the raw body-text surface over the same body bytes. - [Fix]({{< relref "../../deep-dives/domain-model/fix.md" >}}), which consumes parsed documents when it rewrites frontmatter. - `go doc ./internal/codec/markdownbodytext` for the code-level codec contract. - diff --git a/docs/content/reference/item-views/plain-text.md b/docs/content/reference/data-surfaces/plain-text.md similarity index 95% rename from docs/content/reference/item-views/plain-text.md rename to docs/content/reference/data-surfaces/plain-text.md index 82dd9a6..7bab502 100644 --- a/docs/content/reference/item-views/plain-text.md +++ b/docs/content/reference/data-surfaces/plain-text.md @@ -13,7 +13,7 @@ literal denylist entries. | Term | Meaning | |---|---| -| **Plain text** | The body view interpreted as raw text. | +| **Plain text** | The body surface interpreted as raw text. | | **Body** | The content being searched. For markdown files, this excludes frontmatter. | | **Span** | The slice of body text a text check evaluates: the whole body, each line, the first line, or matched lines. | | **Target** | The configured span selector for a text check. | @@ -24,7 +24,7 @@ Plain-text checks run against body text, not structured metadata and not markdown syntax trees. For markdown items, the body comes from the [Markdown body text]({{< relref "markdown-body-text.md" >}}) view after frontmatter has been separated. For plain-text items, the whole item body is the -text view. +text surface. This view backs the `text_requires`, `text_forbids`, and `text_denylist` check types. Those checks answer content questions such as "must contain this @@ -46,4 +46,3 @@ literal strings." - [Markdown body text]({{< relref "markdown-body-text.md" >}}) - [Configuration]({{< relref "../configuration.md#text-rules" >}}) for text rule configuration. - diff --git a/docs/content/reference/item-views/structured-object.md b/docs/content/reference/data-surfaces/structured-object.md similarity index 93% rename from docs/content/reference/item-views/structured-object.md rename to docs/content/reference/data-surfaces/structured-object.md index a1e13ba..1fe8b3a 100644 --- a/docs/content/reference/item-views/structured-object.md +++ b/docs/content/reference/data-surfaces/structured-object.md @@ -5,7 +5,7 @@ weight = 30 # Structured object -Structured object is the item view that exposes named fields and values. Today, +Structured object is the data surface that exposes named fields and values. Today, for filesystem markdown collections, it comes from parsed frontmatter metadata. The domain-model term is broader on purpose: future bases may provide rows, documents, or API resources directly as structured objects. @@ -21,7 +21,7 @@ documents, or API resources directly as structured objects. ## Model -In the current filesystem backend, the structured-object view is +In the current filesystem backend, the structured-object surface is `Document.Meta` from [Markdown body text]({{< relref "markdown-body-text.md" >}}). It is normalized to `map[string]any` no matter whether the source frontmatter was YAML, TOML, or JSON. @@ -49,4 +49,3 @@ the item and is removed before the item is validated against that schema. - [Markdown body text]({{< relref "markdown-body-text.md" >}}) - [Configuration]({{< relref "../configuration.md#object-schema-resolution-precedence" >}}) - [Collections]({{< relref "../../deep-dives/domain-model/collections.md" >}}) - diff --git a/docs/content/reference/glossary.md b/docs/content/reference/glossary.md index 6655ff3..86a6059 100644 --- a/docs/content/reference/glossary.md +++ b/docs/content/reference/glossary.md @@ -35,7 +35,7 @@ how each term maps onto today's code is documented in the per-package | **Frontmatter** | The on-disk metadata block at the top of a markdown file, in YAML (`---`), TOML (`+++`), or JSON (`{ … }`). | | **Inspector** | A read-only operation that measures content and returns evidence. The descriptive dual of a check: a check asserts a predicate, an inspector reports the distribution. Inspectors come in two layers. | | **Item** | The unit of data in a collection, addressed by a selector and operated on by `check`, `fix`, and the `item` subcommands. In the filesystem backend an item is one file matching the collection's pattern, its id the filename stem; its markdown file-form is a **Document**. | -| **Item view** | A representation Katalyst exposes for checks, inspectors, or `fix` to read from an item: markdown body text, plain text, structured object, or file metadata. See [Item views]({{< relref "item-views/_index.md" >}}). | +| **Data surface** | A representation Katalyst exposes for checks, inspectors, or `fix` to read from content: markdown body text, plain text, structured object, or file metadata. See [Data surfaces]({{< relref "data-surfaces/_index.md" >}}). | | **Measurement primitive** | A reusable building block the inspectors are built from: `object_fields` (a data dictionary over object maps), `markdown_body` (body structure), and file-metadata. | | **Metadata** | The parsed, in-memory structure of the frontmatter (a `map[string]any`). | | **Operation** | Something a base lets you do with its data: read, list, query, aggregate, write. Each has a scope (item, collection, across collections) and structural requirements the backend must satisfy. See [progressive operations]({{< relref "../deep-dives/progressive-operations.md" >}}). | From dd1878ddf8d90889905171d00473768654eda2ea Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:26:14 -0600 Subject: [PATCH 16/19] Shorten check type family titles --- cmd/check_types_test.go | 8 ++++---- .../check-types/list-family-markdown.txt | 4 ++-- cmd/testdata/snapshots/check-types/list.txt | 16 ++++++++-------- .../check-types/show-markdown_single_h1.txt | 8 ++++---- .../check-types/show-object_field_enum.txt | 8 ++++---- .../check-types/show-object_required_field.txt | 8 ++++---- docs/content/reference/check-types/_index.md | 8 ++++---- .../reference/check-types/file-system/_index.md | 2 +- .../check-types/markdown-body-text/_index.md | 2 +- .../reference/check-types/plain-text/_index.md | 2 +- .../check-types/structured-object/_index.md | 2 +- internal/checks/registry.go | 8 ++++---- 12 files changed, 38 insertions(+), 38 deletions(-) diff --git a/cmd/check_types_test.go b/cmd/check_types_test.go index bacdaaa..a78dc45 100644 --- a/cmd/check_types_test.go +++ b/cmd/check_types_test.go @@ -25,10 +25,10 @@ func TestCheckTypes_listsEveryTypeGroupedByFamily(t *testing.T) { // Family titles appear in Families() order. last := -1 for _, title := range []string{ - "Structured object check types", - "Markdown body text check types", - "File system check types", - "Plain text check types", + "Structured object", + "Markdown body text", + "File system", + "Plain text", } { i := strings.Index(stdout, title) if i < 0 { diff --git a/cmd/testdata/snapshots/check-types/list-family-markdown.txt b/cmd/testdata/snapshots/check-types/list-family-markdown.txt index 5e6a6dd..f676b5c 100644 --- a/cmd/testdata/snapshots/check-types/list-family-markdown.txt +++ b/cmd/testdata/snapshots/check-types/list-family-markdown.txt @@ -1,5 +1,5 @@ -Markdown body text check types (7) ----------------------------------- +Markdown body text (7) +---------------------- - markdown_code_fence_language_required purpose: Require that opening fenced code blocks include a language tag. required: - diff --git a/cmd/testdata/snapshots/check-types/list.txt b/cmd/testdata/snapshots/check-types/list.txt index f9e275a..ea4b343 100644 --- a/cmd/testdata/snapshots/check-types/list.txt +++ b/cmd/testdata/snapshots/check-types/list.txt @@ -1,5 +1,5 @@ -Structured object check types (8) ---------------------------------- +Structured object (8) +--------------------- - object_field_enum purpose: Require that a field is one of a fixed set of values. required: field, values @@ -33,8 +33,8 @@ Structured object check types (8) required: schema optional: - -Markdown body text check types (7) ----------------------------------- +Markdown body text (7) +---------------------- - markdown_code_fence_language_required purpose: Require that opening fenced code blocks include a language tag. required: - @@ -64,8 +64,8 @@ Markdown body text check types (7) required: - optional: - -File system check types (13) ----------------------------- +File system (13) +---------------- - filesystem_extension_in purpose: Allow only specific file extensions. required: values @@ -119,8 +119,8 @@ File system check types (13) required: - optional: - -Plain text check types (4) --------------------------- +Plain text (4) +-------------- - text_denylist purpose: Forbid any of a list of literal substrings in the body text. required: values diff --git a/cmd/testdata/snapshots/check-types/show-markdown_single_h1.txt b/cmd/testdata/snapshots/check-types/show-markdown_single_h1.txt index 86e8f8b..ff74a52 100644 --- a/cmd/testdata/snapshots/check-types/show-markdown_single_h1.txt +++ b/cmd/testdata/snapshots/check-types/show-markdown_single_h1.txt @@ -1,5 +1,5 @@ -Markdown body text check types › Single H1 --------------------------------------------- +Markdown body text › Single H1 +-------------------------------- - kind: markdown_single_h1 - family: markdownBodyText - scope: item @@ -22,8 +22,8 @@ Example checks: - kind: markdown_single_h1 -Other markdown body text check types (6) ----------------------------------------- +Other markdown body text (6) +---------------------------- - markdown_code_fence_language_required - markdown_no_heading_level_jumps - markdown_required_section diff --git a/cmd/testdata/snapshots/check-types/show-object_field_enum.txt b/cmd/testdata/snapshots/check-types/show-object_field_enum.txt index bc4823d..ef4263d 100644 --- a/cmd/testdata/snapshots/check-types/show-object_field_enum.txt +++ b/cmd/testdata/snapshots/check-types/show-object_field_enum.txt @@ -1,5 +1,5 @@ -Structured object check types › Field enum --------------------------------------------- +Structured object › Field enum +-------------------------------- - kind: object_field_enum - family: structuredObject - scope: item @@ -31,8 +31,8 @@ Example field: status values: [draft, published, archived] -Other structured object check types (7) ---------------------------------------- +Other structured object (7) +--------------------------- - object_field_type - object_number_range - object_required_field diff --git a/cmd/testdata/snapshots/check-types/show-object_required_field.txt b/cmd/testdata/snapshots/check-types/show-object_required_field.txt index 7b042da..db0f40c 100644 --- a/cmd/testdata/snapshots/check-types/show-object_required_field.txt +++ b/cmd/testdata/snapshots/check-types/show-object_required_field.txt @@ -1,5 +1,5 @@ -Structured object check types › Required field ------------------------------------------------- +Structured object › Required field +------------------------------------ - kind: object_required_field - family: structuredObject - scope: item @@ -26,8 +26,8 @@ Example - kind: object_required_field field: year -Other structured object check types (7) ---------------------------------------- +Other structured object (7) +--------------------------- - object_field_enum - object_field_type - object_number_range diff --git a/docs/content/reference/check-types/_index.md b/docs/content/reference/check-types/_index.md index a68e361..76c54c2 100644 --- a/docs/content/reference/check-types/_index.md +++ b/docs/content/reference/check-types/_index.md @@ -11,7 +11,7 @@ aliases = ["/reference/rules/"] The check types `katalyst` runs against each item, grouped by family. These pages are generated from the checks registry, so they always match the shipped binary. -## Structured object check types +## Structured object Structured-object check types validate structured frontmatter fields using schema-backed checks. @@ -24,7 +24,7 @@ Structured-object check types validate structured frontmatter fields using schem - [Unique field]({{< relref "structured-object/unique-field.md" >}}): Require that no two items share a value for a frontmatter field. - [Object validation]({{< relref "structured-object/object.md" >}}): Validate frontmatter metadata against a named JSON Schema from schemas:. -## Markdown body text check types +## Markdown body text Markdown body-text check types validate relationships between frontmatter metadata and markdown body content. @@ -36,7 +36,7 @@ Markdown body-text check types validate relationships between frontmatter metada - [Title matches H1]({{< relref "markdown-body-text/title-matches-h1.md" >}}): Require a frontmatter field to match the first H1 heading in the body. - [Writing tells]({{< relref "markdown-body-text/writing-tells.md" >}}): Warn on likely AI-writing tells (em dashes, decorative emoji, overused words, stock phrases) for human review. -## File system check types +## File system File-system check types validate filename and path conventions for items. @@ -54,7 +54,7 @@ File-system check types validate filename and path conventions for items. - [Referenced files exist]({{< relref "file-system/referenced-files-exist.md" >}}): Require path-valued frontmatter fields to resolve to real files. - [Unique filename]({{< relref "file-system/unique-filename.md" >}}): Require that no two items in the collection share a basename. -## Plain text check types +## Plain text Plain-text check types validate body content as raw text, independent of markdown structure. They apply to plain-text items as well as markdown bodies. diff --git a/docs/content/reference/check-types/file-system/_index.md b/docs/content/reference/check-types/file-system/_index.md index 4f84beb..cea037d 100644 --- a/docs/content/reference/check-types/file-system/_index.md +++ b/docs/content/reference/check-types/file-system/_index.md @@ -1,5 +1,5 @@ +++ -title = "File system check types" +title = "File system" weight = 30 bookCollapseSection = true aliases = ["/reference/rules/file-system/"] diff --git a/docs/content/reference/check-types/markdown-body-text/_index.md b/docs/content/reference/check-types/markdown-body-text/_index.md index 4ae2a7f..0dcc011 100644 --- a/docs/content/reference/check-types/markdown-body-text/_index.md +++ b/docs/content/reference/check-types/markdown-body-text/_index.md @@ -1,5 +1,5 @@ +++ -title = "Markdown body text check types" +title = "Markdown body text" weight = 20 bookCollapseSection = true aliases = ["/reference/rules/markdown-body-text/"] diff --git a/docs/content/reference/check-types/plain-text/_index.md b/docs/content/reference/check-types/plain-text/_index.md index c6e774e..46c8525 100644 --- a/docs/content/reference/check-types/plain-text/_index.md +++ b/docs/content/reference/check-types/plain-text/_index.md @@ -1,5 +1,5 @@ +++ -title = "Plain text check types" +title = "Plain text" weight = 40 bookCollapseSection = true aliases = ["/reference/rules/plain-text/"] diff --git a/docs/content/reference/check-types/structured-object/_index.md b/docs/content/reference/check-types/structured-object/_index.md index 9e3c99c..0ff5182 100644 --- a/docs/content/reference/check-types/structured-object/_index.md +++ b/docs/content/reference/check-types/structured-object/_index.md @@ -1,5 +1,5 @@ +++ -title = "Structured object check types" +title = "Structured object" weight = 10 bookCollapseSection = true aliases = ["/reference/rules/structured-object/"] diff --git a/internal/checks/registry.go b/internal/checks/registry.go index 9e0e5bb..09c3201 100644 --- a/internal/checks/registry.go +++ b/internal/checks/registry.go @@ -81,25 +81,25 @@ func Families() []Family { { ID: "structuredObject", Slug: "structured-object", - Title: "Structured object check types", + Title: "Structured object", Intro: "Structured-object check types validate structured frontmatter fields using schema-backed checks.", }, { ID: "markdownBodyText", Slug: "markdown-body-text", - Title: "Markdown body text check types", + Title: "Markdown body text", Intro: "Markdown body-text check types validate relationships between frontmatter metadata and markdown body content.", }, { ID: "fileSystem", Slug: "file-system", - Title: "File system check types", + Title: "File system", Intro: "File-system check types validate filename and path conventions for items.", }, { ID: "plainText", Slug: "plain-text", - Title: "Plain text check types", + Title: "Plain text", Intro: "Plain-text check types validate body content as raw text, independent of markdown structure. They apply to plain-text items as well as markdown bodies.", }, } From 06f8e9fab8cd633578118f9d217dfda83b0b7480 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:30:42 -0600 Subject: [PATCH 17/19] Order data surfaces consistently --- docs/content/reference/data-surfaces/_index.md | 4 ++-- docs/content/reference/data-surfaces/file-metadata.md | 2 +- docs/content/reference/data-surfaces/markdown-body-text.md | 2 +- docs/content/reference/data-surfaces/structured-object.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/content/reference/data-surfaces/_index.md b/docs/content/reference/data-surfaces/_index.md index 6e312ac..3a27888 100644 --- a/docs/content/reference/data-surfaces/_index.md +++ b/docs/content/reference/data-surfaces/_index.md @@ -16,10 +16,10 @@ Today, Katalyst exposes four data surfaces: | Surface | Meaning | |---|---| -| [Markdown body text]({{< relref "markdown-body-text.md" >}}) | A parsed markdown document with optional frontmatter metadata, body bytes, source format, and source-line lookup. | +| [File metadata]({{< relref "file-metadata.md" >}}) | Filename, extension, parent directory, path depth, and other attributes derived from the item's reference. | | [Plain text]({{< relref "plain-text.md" >}}) | Body content read as raw text, independent of markdown structure. | +| [Markdown body text]({{< relref "markdown-body-text.md" >}}) | A parsed markdown document with optional frontmatter metadata, body bytes, source format, and source-line lookup. | | [Structured object]({{< relref "structured-object.md" >}}) | Metadata normalized to a `map[string]any`, used by object and schema-backed checks. | -| [File metadata]({{< relref "file-metadata.md" >}}) | Filename, extension, parent directory, path depth, and other attributes derived from the item's reference. | Only Markdown body text is backed by a dedicated codec package today. The other surfaces are projections over parsed data or derived references. diff --git a/docs/content/reference/data-surfaces/file-metadata.md b/docs/content/reference/data-surfaces/file-metadata.md index 8ebbab0..706896f 100644 --- a/docs/content/reference/data-surfaces/file-metadata.md +++ b/docs/content/reference/data-surfaces/file-metadata.md @@ -1,6 +1,6 @@ +++ title = "File metadata" -weight = 40 +weight = 10 +++ # File metadata diff --git a/docs/content/reference/data-surfaces/markdown-body-text.md b/docs/content/reference/data-surfaces/markdown-body-text.md index c1eea75..c3ad6bb 100644 --- a/docs/content/reference/data-surfaces/markdown-body-text.md +++ b/docs/content/reference/data-surfaces/markdown-body-text.md @@ -1,6 +1,6 @@ +++ title = "Markdown body text" -weight = 10 +weight = 30 +++ # Markdown body text diff --git a/docs/content/reference/data-surfaces/structured-object.md b/docs/content/reference/data-surfaces/structured-object.md index 1fe8b3a..6828db3 100644 --- a/docs/content/reference/data-surfaces/structured-object.md +++ b/docs/content/reference/data-surfaces/structured-object.md @@ -1,6 +1,6 @@ +++ title = "Structured object" -weight = 30 +weight = 40 +++ # Structured object From 2ce26cc23827e1bc10437857f5fda707684e0b81 Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:38:00 -0600 Subject: [PATCH 18/19] Rename source inspectors to raw base inspectors --- cmd/AGENTS.md | 2 +- cmd/gendocs/main.go | 2 +- cmd/inspect.go | 6 ++--- cmd/inspectors.go | 2 +- cmd/inspectors_test.go | 2 +- cmd/testdata/snapshots/help/inspect.txt | 2 +- cmd/testdata/snapshots/help/inspectors.txt | 2 +- cmd/testdata/snapshots/inspectors/list.txt | 4 +-- .../inspectors/show-file_content_shape.txt | 8 +++--- .../deep-dives/domain-model/inspectors.md | 26 +++++++++---------- .../profile-an-existing-wiki-by-hand.md | 6 ++--- .../profile-an-existing-wiki-with-an-agent.md | 16 ++++++------ .../reference/data-surfaces/file-metadata.md | 8 +++--- docs/content/reference/inspectors/_index.md | 6 ++--- .../reference/inspectors/source/_index.md | 4 +-- .../examples/inspect-source-shape.full.md | 2 +- internal/examples/examples.go | 4 +-- .../examples/testdata/inspect-source-shape.md | 3 +-- internal/inspect/doc.go | 2 +- internal/inspect/inspect.go | 6 ++--- internal/inspect/registry.go | 12 ++++----- 21 files changed, 61 insertions(+), 64 deletions(-) diff --git a/cmd/AGENTS.md b/cmd/AGENTS.md index 1df0b6f..83aff26 100644 --- a/cmd/AGENTS.md +++ b/cmd/AGENTS.md @@ -21,7 +21,7 @@ When adding a top-level command, decide which family it joins: selectors (`check`, `fix`). `init` and `inspect` are verbs too, they take flags or a path rather than a selector. `inspect` infers its inspector **layer** from the single argument: a configured collection name runs the - collection layer; anything else is a filesystem path for the raw-source layer + collection layer; anything else is a filesystem path for the raw base layer (with no project, always raw). Layer selection is by argument, deliberately not a flag, to keep the onboarding case (`inspect ./wiki`) flag-free. - **Resource noun:** `katalyst `, a group whose diff --git a/cmd/gendocs/main.go b/cmd/gendocs/main.go index 7171359..f963f36 100644 --- a/cmd/gendocs/main.go +++ b/cmd/gendocs/main.go @@ -232,7 +232,7 @@ func inspectorsIndex(layers []inspect.Layer, byLayer map[string][]inspect.Descri fmt.Fprint(&b, "distributions, never recommendations. They are the descriptive dual of ") fmt.Fprint(&b, "[check types]({{< relref \"../check-types/_index.md\" >}}) and drive the ") fmt.Fprint(&b, "[`inspect`]({{< relref \"../cli.md\" >}}) command. They come in two layers: ") - fmt.Fprint(&b, "raw-source inspectors profile a store before configuration, collection ") + fmt.Fprint(&b, "raw base inspectors profile a base before configuration, collection ") fmt.Fprint(&b, "inspectors profile a configured collection. These pages are generated from the ") fmt.Fprint(&b, "inspector registry, so they always match the shipped binary.\n") for _, layer := range layers { diff --git a/cmd/inspect.go b/cmd/inspect.go index a8eb68a..d65157f 100644 --- a/cmd/inspect.go +++ b/cmd/inspect.go @@ -28,7 +28,7 @@ finds as evidence: counts and distributions, never recommendations. The layer is inferred from the argument. Inside a katalyst project, a configured collection name (e.g. notes) runs the collection inspectors over that collection's items. Otherwise the argument is a filesystem path and the -raw-source inspectors profile the tree (the onboarding case: "what's here?"). +raw base inspectors profile the tree (the onboarding case: "what's here?"). Inspectors describe; they never recommend. inspect writes no schema and mutates nothing. Output is Markdown by default; --json emits the same evidence as JSON.`, @@ -37,7 +37,7 @@ nothing. Output is Markdown by default; --json emits the same evidence as JSON.` params := inspect.Params{} if selectExpr != "" { if len(inspectors) != 1 || inspectors[0] != "file_content_shape" { - return usageErr("--select requires exactly one source inspector: --inspector file_content_shape") + return usageErr("--select requires exactly one raw base inspector: --inspector file_content_shape") } params = params.WithSelection(inspect.ParseSelection(selectExpr)) } @@ -82,7 +82,7 @@ nothing. Output is Markdown by default; --json emits the same evidence as JSON.` // runInspect selects the layer from the argument and runs its inspectors. A // configured collection name runs the collection layer; anything else is a -// filesystem path for the raw-source layer. +// filesystem path for the raw base layer. func runInspect(arg string, names []string, params inspect.Params) ([]inspect.Evidence, error) { if proj, c, ok := resolveCollection(arg); ok { return runCollectionLayer(proj, c, names, params) diff --git a/cmd/inspectors.go b/cmd/inspectors.go index 71bcede..974336d 100644 --- a/cmd/inspectors.go +++ b/cmd/inspectors.go @@ -21,7 +21,7 @@ func newInspectorsCmd() *cobra.Command { Short: "Inspect the inspectors katalyst can run, grouped by layer", Long: `inspectors is a read-only view of katalyst's inspector registry, the same catalog cmd/gendocs renders and that the inspect command runs. List every -inspector grouped by layer (raw-source, collection), or show one inspector's +inspector grouped by layer (raw base, collection), or show one inspector's docs-style readout. It reads no project, so it runs in any directory.`, } c.AddCommand(newInspectorsListCmd(), newInspectorsShowCmd()) diff --git a/cmd/inspectors_test.go b/cmd/inspectors_test.go index 9e6e34c..9ac09c2 100644 --- a/cmd/inspectors_test.go +++ b/cmd/inspectors_test.go @@ -21,7 +21,7 @@ func TestInspectors_listsEveryInspectorGroupedByLayer(t *testing.T) { } last := -1 - for _, title := range []string{"Raw-source inspectors", "Collection inspectors"} { + for _, title := range []string{"Raw base inspectors", "Collection inspectors"} { i := strings.Index(stdout, title) if i < 0 { t.Errorf("expected layer title %q in output", title) diff --git a/cmd/testdata/snapshots/help/inspect.txt b/cmd/testdata/snapshots/help/inspect.txt index 0b5f7b2..d3f2992 100644 --- a/cmd/testdata/snapshots/help/inspect.txt +++ b/cmd/testdata/snapshots/help/inspect.txt @@ -4,7 +4,7 @@ finds as evidence: counts and distributions, never recommendations. The layer is inferred from the argument. Inside a katalyst project, a configured collection name (e.g. notes) runs the collection inspectors over that collection's items. Otherwise the argument is a filesystem path and the -raw-source inspectors profile the tree (the onboarding case: "what's here?"). +raw base inspectors profile the tree (the onboarding case: "what's here?"). Inspectors describe; they never recommend. inspect writes no schema and mutates nothing. Output is Markdown by default; --json emits the same evidence as JSON. diff --git a/cmd/testdata/snapshots/help/inspectors.txt b/cmd/testdata/snapshots/help/inspectors.txt index bac45b7..5aa7c3c 100644 --- a/cmd/testdata/snapshots/help/inspectors.txt +++ b/cmd/testdata/snapshots/help/inspectors.txt @@ -1,6 +1,6 @@ inspectors is a read-only view of katalyst's inspector registry, the same catalog cmd/gendocs renders and that the inspect command runs. List every -inspector grouped by layer (raw-source, collection), or show one inspector's +inspector grouped by layer (raw base, collection), or show one inspector's docs-style readout. It reads no project, so it runs in any directory. Usage: diff --git a/cmd/testdata/snapshots/inspectors/list.txt b/cmd/testdata/snapshots/inspectors/list.txt index e96a3c3..4867a21 100644 --- a/cmd/testdata/snapshots/inspectors/list.txt +++ b/cmd/testdata/snapshots/inspectors/list.txt @@ -1,5 +1,5 @@ -Raw-source inspectors (2) -------------------------- +Raw base inspectors (2) +----------------------- - file_tree Map files, directories, extensions, regions, and filename conventions, opening no files. - file_content_shape diff --git a/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt b/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt index da333b4..864dc00 100644 --- a/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt +++ b/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt @@ -1,4 +1,4 @@ -Raw-source inspectors › File content shape +Raw base inspectors › File content shape -------------------------------------------- - inspector: file_content_shape - layer: source @@ -7,8 +7,8 @@ Raw-source inspectors › File content shape Layer context ------------- -Raw-source inspectors profile a backend store directly, before any collection configuration: what files are present, how they parse, and how they are named. +Raw base inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. -Other raw-source inspectors (1) -------------------------------- +Other raw base inspectors (1) +----------------------------- - file_tree diff --git a/docs/content/deep-dives/domain-model/inspectors.md b/docs/content/deep-dives/domain-model/inspectors.md index 8297670..9db0f6d 100644 --- a/docs/content/deep-dives/domain-model/inspectors.md +++ b/docs/content/deep-dives/domain-model/inspectors.md @@ -22,8 +22,7 @@ model and the rationale behind it. | **Evidence** | The measured counts, distributions, classes, or summaries an inspector reports. Evidence is not a recommendation or verdict. | | **Raw base layer** | Inspectors that measure a base directly before collection configuration. | | **Collection layer** | Inspectors that measure configured collection items by domain identity. | -| **Measurement primitive** | A reusable profiler such as `objectFields`, `markdownBody`, or `fileMetadata` that inspectors point at a specific input. | -| **Profile class** | A group of near-identical profiles collapsed together so output scales with distinct shapes rather than total files. | +| **Measurement primitive** | A reusable profiler such as `objectFields`, `markdownBody`, `fileMetadata`, or content-shape parsing that inspectors point at a specific input. | ## Model @@ -32,8 +31,7 @@ Inspectors come in two layers, distinguished by *how they reference the data*: - **The raw base layer** (`SourceInspector` over a `SourceView`) measures a base directly, before any collection configuration, addressed by base-native reference (a relative path today). It answers "what is in this - base?" - the onboarding case. `file_tree`, `file_tree_content`, and - `document_shape` live here. + base?" - the onboarding case. `file_tree` and `file_content_shape` live here. - **The collection layer** (`CollectionInspector` over a `CollectionView`) measures a configured collection's items, addressed by domain identity (collection + item id) and reached through the project's @@ -59,12 +57,12 @@ inspectors themselves are thin wrappers that point a primitive at an input: shape (types, naming, depth, regions, directory density) over references, opening no files. -The same small primitives are reused where the layer makes sense. `objectFields` -runs over a collection's items in the collection layer and over loose-file -frontmatter inside the `document_shape` fingerprint in the raw base layer, so -the two layers share one engine rather than re-deriving it. Raw base inspectors -still avoid proposing collections: they report store and content facts, and a -human or agent decides what collection boundaries those facts imply. +The same small primitives are reused where the layer makes sense. +`file_content_shape` opens selected raw files and reports their frontmatter keys +and body structure; once those files belong to a collection, `object_fields` +measures item frontmatter by domain identity. Raw base inspectors still avoid +proposing collections: they report store and content facts, and a human or agent +decides what collection boundaries those facts imply. ## Design rationale @@ -92,10 +90,10 @@ none of it here. **Keep output small.** -`file_tree`, `file_tree_content`, and `document_shape` keep Markdown output -small with deterministic caps: small trees get an actual tree; content-shape -reports show the selected file set, dominant structures, and compact -text/tabular/tree facets, with `-v` for expanded evidence. +`file_tree` and `file_content_shape` keep Markdown output small with +deterministic caps: small trees get an actual tree; content-shape reports show +the selected file set, dominant structures, and compact text/tabular/tree +facets, with `-v` for expanded evidence. ## Output diff --git a/docs/content/how-to/profile-an-existing-wiki-by-hand.md b/docs/content/how-to/profile-an-existing-wiki-by-hand.md index 03a7c10..4a8b8a4 100644 --- a/docs/content/how-to/profile-an-existing-wiki-by-hand.md +++ b/docs/content/how-to/profile-an-existing-wiki-by-hand.md @@ -14,14 +14,14 @@ agent]({{< relref "profile-an-existing-wiki-with-an-agent.md" >}}). `inspect` reports **evidence**, counts and distributions, never recommendations. Reading the evidence and deciding the schema is your call. It -runs in **two layers**: point it at a **directory** to profile a raw store +runs in **two layers**: point it at a **directory** to profile a raw base (no project needed), or at a configured **collection** to profile its items. The onboarding loop uses both. -## 1. Survey the directory (source layer) +## 1. Survey the directory (raw base layer) Point `inspect` at the directory. With no `.katalyst/` project it runs the -source inspectors: +raw base inspectors: ```bash katalyst inspect ./wiki diff --git a/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md b/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md index 1634f77..a5ae0c7 100644 --- a/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md +++ b/docs/content/how-to/profile-an-existing-wiki-with-an-agent.md @@ -16,7 +16,7 @@ deciding that a field present in 94% of files should be `required`, or that a directory should be a collection, is the agent's call. Keep that division and the loop stays debuggable. -## 1. Give the agent the raw-store evidence +## 1. Give the agent the raw base evidence Run `inspect` on the directory with `--json` so the agent gets structured records: one per inspector, each carrying the unit count `n` as the @@ -26,9 +26,9 @@ denominator: katalyst inspect ./wiki --json ``` -With no project this runs the **raw base** layer. The key record is -`document_shape`, which clusters files into candidate collections by a composite -fingerprint (frontmatter keys, body section skeleton, file naming). Feed the +With no project this runs the **raw base** layer. The useful records are +`file_tree`, which shows how the directory is laid out, and +`file_content_shape`, which reports shared structure in selected files. Feed the output to the agent. Tell it the contract: every record is *evidence*, not a recommendation; it must choose its own thresholds and justify them. @@ -36,10 +36,10 @@ recommendation; it must choose its own thresholds and justify them. A capable agent then: -1. **Clusters** the `document_shape` classes into candidate collections. - `inspect` groups files with *matching* fingerprints; the agent decides when - two near-but-distinct classes are really one collection, and names them. It - drafts `.katalyst/bases/*` pointing each collection at its directory. +1. **Drafts candidate collections** from the raw base evidence. `inspect` shows + the directory layout and the shared content structure; the agent decides which + files belong together, names the collection, and drafts `.katalyst/bases/*` + pointing each collection at its directory. 2. **Profiles the fields** by inspecting each new collection, `katalyst inspect --json` runs the collection layer, whose `object_fields` record is the per-field data dictionary (presence, types, values). diff --git a/docs/content/reference/data-surfaces/file-metadata.md b/docs/content/reference/data-surfaces/file-metadata.md index 706896f..9be2ab2 100644 --- a/docs/content/reference/data-surfaces/file-metadata.md +++ b/docs/content/reference/data-surfaces/file-metadata.md @@ -25,9 +25,9 @@ File metadata belongs to the item because the item's reference can carry meaning: a file's name may need to match a field, an extension may need to be allowed, or a collection may require one index file per directory. -This view backs file-system check types. It also feeds source inspectors such -as `file_tree` and `document_shape`, where file names and paths help profile a -base before or after collections are configured. +This view backs file-system check types. It also feeds raw base inspectors such +as `file_tree`, where file names and paths help profile a base before +collections are configured. Unlike [Markdown body text]({{< relref "markdown-body-text.md" >}}), file metadata is not a codec. It is derived from the reference the base already uses @@ -46,4 +46,4 @@ to address the item. - [File system check types]({{< relref "../check-types/file-system/_index.md" >}}) - [File tree inspector]({{< relref "../inspectors/source/file-tree.md" >}}) -- [Document shape inspector]({{< relref "../inspectors/source/document-shape.md" >}}) +- [File content shape inspector]({{< relref "../inspectors/source/file-content-shape.md" >}}) diff --git a/docs/content/reference/inspectors/_index.md b/docs/content/reference/inspectors/_index.md index 41564c9..472ae52 100644 --- a/docs/content/reference/inspectors/_index.md +++ b/docs/content/reference/inspectors/_index.md @@ -8,11 +8,11 @@ bookCollapseSection = true # Inspectors reference -Inspectors describe the shape of content and return evidence: counts and distributions, never recommendations. They are the descriptive dual of [check types]({{< relref "../check-types/_index.md" >}}) and drive the [`inspect`]({{< relref "../cli.md" >}}) command. They come in two layers: source inspectors profile a base before configuration, collection inspectors profile a configured collection. These pages are generated from the inspector registry, so they always match the shipped binary. +Inspectors describe the shape of content and return evidence: counts and distributions, never recommendations. They are the descriptive dual of [check types]({{< relref "../check-types/_index.md" >}}) and drive the [`inspect`]({{< relref "../cli.md" >}}) command. They come in two layers: raw base inspectors profile a base before configuration, collection inspectors profile a configured collection. These pages are generated from the inspector registry, so they always match the shipped binary. -## Source inspectors +## Raw base inspectors -Source inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. +Raw base inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. - [File tree]({{< relref "source/file-tree.md" >}}): Map files, directories, extensions, regions, and filename conventions, opening no files. - [File content shape]({{< relref "source/file-content-shape.md" >}}): Profile selected files by text, tabular, and tree content structure. diff --git a/docs/content/reference/inspectors/source/_index.md b/docs/content/reference/inspectors/source/_index.md index 6b22405..7c1c5f6 100644 --- a/docs/content/reference/inspectors/source/_index.md +++ b/docs/content/reference/inspectors/source/_index.md @@ -1,12 +1,12 @@ +++ -title = "Source inspectors" +title = "Raw base inspectors" weight = 10 bookCollapseSection = true +++ -Source inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. +Raw base inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named. Inspectors in this layer: diff --git a/docs/generated/examples/inspect-source-shape.full.md b/docs/generated/examples/inspect-source-shape.full.md index 51085d4..812a82f 100644 --- a/docs/generated/examples/inspect-source-shape.full.md +++ b/docs/generated/examples/inspect-source-shape.full.md @@ -1,4 +1,4 @@ -Pointed at a bare directory (no project), `inspect` runs the raw base inspectors. `document_shape` clusters files by a composite fingerprint, so a shared convention shows up as one class and the stragglers as outliers. +Pointed at a bare directory (no project), `inspect` runs the raw base inspectors. `file_content_shape` opens a selected slice and reports the common text, tabular, or tree structure without proposing collections. ### Input diff --git a/internal/examples/examples.go b/internal/examples/examples.go index 2e44579..78d57c8 100644 --- a/internal/examples/examples.go +++ b/internal/examples/examples.go @@ -235,8 +235,8 @@ func All() []Example { { ID: "inspect-source-shape", Title: "Profile selected raw files by content shape", - Summary: "The raw-source file_content_shape inspector profiles a selected slice of files.", - Doc: "Pointed at a bare directory (no project), `inspect` runs the raw-source inspectors. `file_content_shape` opens a selected slice and reports the common text, tabular, or tree structure without proposing collections.", + Summary: "The raw base file_content_shape inspector profiles a selected slice of files.", + Doc: "Pointed at a bare directory (no project), `inspect` runs the raw base inspectors. `file_content_shape` opens a selected slice and reports the common text, tabular, or tree structure without proposing collections.", Weight: 60, Files: wikiCorpus, Args: []string{"inspect", "./wiki", "--inspector", "file_content_shape", "--select", `ext = ".md"`}, diff --git a/internal/examples/testdata/inspect-source-shape.md b/internal/examples/testdata/inspect-source-shape.md index 2e12e50..c0488db 100644 --- a/internal/examples/testdata/inspect-source-shape.md +++ b/internal/examples/testdata/inspect-source-shape.md @@ -1,4 +1,4 @@ -Pointed at a bare directory (no project), `inspect` runs the raw-source inspectors. `file_content_shape` opens a selected slice and reports the common text, tabular, or tree structure without proposing collections. +Pointed at a bare directory (no project), `inspect` runs the raw base inspectors. `file_content_shape` opens a selected slice and reports the common text, tabular, or tree structure without proposing collections. ## Input @@ -129,4 +129,3 @@ tree: read/parse issues: none ``` - diff --git a/internal/inspect/doc.go b/internal/inspect/doc.go index cbbf51c..6a69e99 100644 --- a/internal/inspect/doc.go +++ b/internal/inspect/doc.go @@ -1,7 +1,7 @@ // Package inspect profiles content and returns evidence, the descriptive dual // of internal/checks: a check asserts a predicate; an inspector reports the // distribution that predicate would be tested against. Inspectors come in two -// layers (raw-source and collection) and are built from a few reusable +// layers (raw base and collection) and are built from a few reusable // measurement primitives. They report counts and distributions only, never // recommendations. // diff --git a/internal/inspect/inspect.go b/internal/inspect/inspect.go index 2383849..55f0f63 100644 --- a/internal/inspect/inspect.go +++ b/internal/inspect/inspect.go @@ -20,18 +20,18 @@ type Evidence struct { // CollectionInspector measures a configured collection, addressed by domain // identity (Collection + Item.ID) through a CollectionView rather than by raw // path. It is the collection-layer half of the two-layer inspector model; the -// raw-source half is SourceInspector. Params carries the collapse tolerance for +// raw base half is SourceInspector. Params carries the collapse tolerance for // summarizing inspectors and is ignored by those that don't summarize. type CollectionInspector interface { Name() string Inspect(CollectionView, Params) Evidence } -// SourceInspector measures a raw backend store before any collection +// SourceInspector measures a raw base before any collection // configuration, addressed by backend-native reference (a path today) through a // SourceView. AppliesTo gates backend-specific inspectors: one returns false for // a BaseType it cannot describe, so it is simply absent there. It is the -// raw-source half of the two-layer model; the collection half is +// raw base half of the two-layer model; the collection half is // CollectionInspector. type SourceInspector interface { Name() string diff --git a/internal/inspect/registry.go b/internal/inspect/registry.go index 1ce50b5..40cac52 100644 --- a/internal/inspect/registry.go +++ b/internal/inspect/registry.go @@ -6,9 +6,9 @@ package inspect // parity per layer. A new inspector cannot ship undocumented, mirroring the // checks registry (internal/checks/registry.go). -// Layer groups inspectors by the data they measure: a raw backend store -// (source) or a configured collection (collection). It is the primary grouping -// for display and docs. Order is significant. +// Layer groups inspectors by the data they measure: a raw base (source) or a +// configured collection (collection). It is the primary grouping for display +// and docs. Order is significant. type Layer struct { ID string Title string @@ -20,8 +20,8 @@ func Layers() []Layer { return []Layer{ { ID: "source", - Title: "Raw-source inspectors", - Intro: "Raw-source inspectors profile a backend store directly, before any collection configuration: what files are present, how they parse, and how they are named.", + Title: "Raw base inspectors", + Intro: "Raw base inspectors profile a base directly, before any collection configuration: what files are present, how they parse, and how they are named.", }, { ID: "collection", @@ -107,7 +107,7 @@ func Descriptors() []Descriptor { } } -// SourceInspectors returns every raw-source inspector instance in display order. +// SourceInspectors returns every raw base inspector instance in display order. func SourceInspectors() []SourceInspector { return []SourceInspector{ FileTree{}, From 42b34583c461b2648de1657f21b4716b8b5db1da Mon Sep 17 00:00:00 2001 From: Abe Gong Date: Thu, 25 Jun 2026 14:57:24 -0600 Subject: [PATCH 19/19] Fix post-rebase inspector snapshots --- .../snapshots/inspectors/show-file_content_shape.txt | 2 +- docs/generated/examples/inspect-source-shape.full.md | 1 + internal/examples/testdata/inspect-source-shape.md | 1 + internal/storage/collection/sqlite/collection.go | 4 ++-- internal/storage/collection/sqlite/collection_test.go | 6 +++--- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt b/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt index 864dc00..8c58c31 100644 --- a/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt +++ b/cmd/testdata/snapshots/inspectors/show-file_content_shape.txt @@ -1,5 +1,5 @@ Raw base inspectors › File content shape --------------------------------------------- +------------------------------------------ - inspector: file_content_shape - layer: source - family: structural diff --git a/docs/generated/examples/inspect-source-shape.full.md b/docs/generated/examples/inspect-source-shape.full.md index 812a82f..f104849 100644 --- a/docs/generated/examples/inspect-source-shape.full.md +++ b/docs/generated/examples/inspect-source-shape.full.md @@ -129,3 +129,4 @@ tree: read/parse issues: none ``` + diff --git a/internal/examples/testdata/inspect-source-shape.md b/internal/examples/testdata/inspect-source-shape.md index c0488db..9222dcf 100644 --- a/internal/examples/testdata/inspect-source-shape.md +++ b/internal/examples/testdata/inspect-source-shape.md @@ -129,3 +129,4 @@ tree: read/parse issues: none ``` + diff --git a/internal/storage/collection/sqlite/collection.go b/internal/storage/collection/sqlite/collection.go index 50f456f..24228db 100644 --- a/internal/storage/collection/sqlite/collection.go +++ b/internal/storage/collection/sqlite/collection.go @@ -32,8 +32,8 @@ func New(path string, collections []collection.Collection) *Definition { return &Definition{path: path, collections: collections} } -// Granularity is UnitIsCollection: one table is a collection and rows are items. -func (d *Definition) Granularity() storage.Granularity { return storage.UnitIsCollection } +// Scope reports collection scope for SQLite tables. +func (d *Definition) Scope() storage.Scope { return storage.UnitIsCollection } // Collections returns the collections this definition maps. func (d *Definition) Collections() []collection.Collection { return d.collections } diff --git a/internal/storage/collection/sqlite/collection_test.go b/internal/storage/collection/sqlite/collection_test.go index 93bfe9c..bf6a269 100644 --- a/internal/storage/collection/sqlite/collection_test.go +++ b/internal/storage/collection/sqlite/collection_test.go @@ -193,9 +193,9 @@ func TestDefinition_Read_validatesConfiguredColumns(t *testing.T) { } } -func TestDefinition_Granularity_unitIsCollection(t *testing.T) { - if g := sqlitestore.New("", nil).Granularity(); g != storage.UnitIsCollection { - t.Fatalf("Granularity = %v, want UnitIsCollection", g) +func TestDefinition_Scope_unitIsCollection(t *testing.T) { + if g := sqlitestore.New("", nil).Scope(); g != storage.UnitIsCollection { + t.Fatalf("Scope = %v, want UnitIsCollection", g) } }