87 lines
4.1 KiB
Markdown
87 lines
4.1 KiB
Markdown
|
|
# Domains — two sides of one relation
|
||
|
|
|
||
|
|
A **domain** is an ontoref extension (ADR-012). Every domain has two sides, and
|
||
|
|
they live in different places:
|
||
|
|
|
||
|
|
| Side | Where | Owns |
|
||
|
|
|---|---|---|
|
||
|
|
| **Authority** | `code/domains/<id>/` (here) | the contract: `domain.ncl`, `commands.nu`, `repo_kinds.txt`, and either a co-located `ontology/` (e.g. `framework/`) or a `schema_cmd` that resolves schemas from an external project (e.g. `rustelo/`) |
|
||
|
|
| **Consumer** | `.domains-ontoref/<id>/` in the consuming project | the project's **bond** to the domain, plus its optional implementation spine |
|
||
|
|
|
||
|
|
The authority declares what the domain *is*; the consumer declares *this project's
|
||
|
|
relation to it*. A bond resolves against the authority (its definitions, states,
|
||
|
|
capabilities), never on the consumer edge (`glossary::bond`).
|
||
|
|
|
||
|
|
## Consumer side — `.domains-ontoref/<domain>/`
|
||
|
|
|
||
|
|
One container directory, one subfolder per bonded domain. Multi-domain membership
|
||
|
|
is just multiple subfolders — it is **not** derived from the manifest's scalar
|
||
|
|
`repo_kind` (carrier-only, decided 2026-07-17; `formalization-vs-adoption`:
|
||
|
|
cardinality is uncapped and orthogonal to whether ontoref manages the project).
|
||
|
|
|
||
|
|
```
|
||
|
|
<project>/
|
||
|
|
.domains-ontoref/
|
||
|
|
rustelo/
|
||
|
|
bonds.ncl # REQUIRED — : BondSet (schema: code/ontology/schemas/bond.ncl)
|
||
|
|
ontology/schemas/*.ncl # OPTIONAL — implementation spine (federated domain schemas)
|
||
|
|
reflection/modes/*.ncl # OPTIONAL — runnable modes for this implementation
|
||
|
|
web/
|
||
|
|
bonds.ncl # a second, dependency-axis bond (a plane)
|
||
|
|
```
|
||
|
|
|
||
|
|
### What every bonded project carries
|
||
|
|
|
||
|
|
- `bonds.ncl` — a `BondSet` (`{ domain, bonds }`), importing the `bond.ncl` schema (the carrier
|
||
|
|
is named `bondS.ncl` precisely so `import "bond.ncl"` resolves the schema and does not
|
||
|
|
self-recurse). Each `Bond` names an `axis`
|
||
|
|
(`Governance` → the project is an ontoref-node in the domain's DAG /
|
||
|
|
`Dependency` → it inhabits an ontoref-plane), a `state`
|
||
|
|
(`None|Linked|Node|Managed`), and — by axis — a `resolution`
|
||
|
|
(`Delegate|Override|Compose`) or a DDD `dep_kind` (+ `mutual`, `plane`).
|
||
|
|
This is the ONLY required file: a project may bond **without** being managed by
|
||
|
|
ontoref (no `.ontoref/` spine needed).
|
||
|
|
|
||
|
|
### What a *managed / implementing* project additionally carries
|
||
|
|
|
||
|
|
The optional implementation spine — relocated here from the deprecated flat
|
||
|
|
`.{domain}.ontoref/` marker. Its shape is domain-specific (inventoried 2026-07-17):
|
||
|
|
|
||
|
|
- an app/impl declaration (`app.ncl`) validated against the domain's `schema_cmd`
|
||
|
|
schema (e.g. `website-htmx-rustelo`);
|
||
|
|
- federated `ontology/schemas/*.ncl` when the domain authors its schema in the
|
||
|
|
consumer (e.g. `DD7pasos/.librosys.ontoref/ontology/schemas/`);
|
||
|
|
- `reflection/modes/*.ncl` discovered by the mode runner (e.g. `jpl/rustelo-website`).
|
||
|
|
|
||
|
|
## Detection
|
||
|
|
|
||
|
|
`domain.nu :: project-domains` recognizes membership four ways:
|
||
|
|
|
||
|
|
| kind | signal |
|
||
|
|
|---|---|
|
||
|
|
| `config_flag` | `domain_<id> = true` in `.ontoref/config.ncl` |
|
||
|
|
| `domain_origin` | `domain_origin` record in `manifest.ncl` |
|
||
|
|
| `impl_dir` | **deprecated** flat marker `.{domain}.ontoref/` |
|
||
|
|
| `bonded_dir` | `.domains-ontoref/<id>/` subfolder (the current layout) |
|
||
|
|
|
||
|
|
`impl_dir` and `bonded_dir` are detected **simultaneously** during the migration
|
||
|
|
window (0047); a project carrying both forms for the same id is de-duplicated
|
||
|
|
(the flat form wins until removed). New projects use `.domains-ontoref/<id>/` only.
|
||
|
|
|
||
|
|
## Migration
|
||
|
|
|
||
|
|
The three precedent projects still on the flat form live in **independent external
|
||
|
|
repos** and are relocated by their maintainers, not by an in-place edit from this
|
||
|
|
constellation (migration 0047 documents the consumer-run step):
|
||
|
|
|
||
|
|
- `DD7pasos/.librosys.ontoref/` → `.domains-ontoref/librosys/`
|
||
|
|
- `website-htmx-rustelo/.rustelo.ontoref/` → `.domains-ontoref/rustelo/`
|
||
|
|
- `jpl/rustelo-website/.rustelo.ontoref/` → `.domains-ontoref/rustelo/`
|
||
|
|
|
||
|
|
## References
|
||
|
|
|
||
|
|
- `code/ontology/schemas/bond.ncl` — the `Bond` / `BondSet` contract
|
||
|
|
- `.ontoref/ontology/glossary.ncl` — `bond`, `ontoref-node`, `ontoref-plane`
|
||
|
|
- `.ontoref/reflection/modules/domain.nu` — `project-domains` detection
|
||
|
|
- ADR-012 (domain extension), ADR-018/045 (level hierarchy, co-tenancy)
|