How do I generate a codegen entity?
For background on the physical-space graph (facets) and metatypes, see ores.codegen.
Question
How do I regenerate all codegen output for an entity?
Answer
Run compass codegen entity generate <name-or-id> from the project root:
./compass.sh codegen entity generate country
The entity resolves by name or org-roam UUID prefix. Omitting --address
generates the entity's full supported set — every facet its model type and
:ores.*.enabled: overrides admit (e.g. ores.cpp.domain,
ores.cpp.repository, ores.cpp.service, ores.sql.schema, ores.cpp.qt,
ores.cpp.protocol, …):
Generating country (domain_entity, refdata) — supported set
Restrict to one facet with --address:
./compass.sh codegen entity generate country --address ores.sql.schema ./compass.sh codegen entity generate country --address ores.cpp.domain ./compass.sh codegen entity generate country --address ores.cpp.qt
One command per layer — the facet addresses you'll reach for most often when regenerating a single layer (e.g. during a commissioning task):
| Layer | Facet address | What it writes |
|---|---|---|
| SQL schema | ores.sql.schema |
table DDL, insert/update triggers, indexes |
| SQL populate | ores.sql.populate |
seed-data DML |
| C++ domain struct | ores.cpp.domain |
domain struct + JSON I/O |
| C++ repository | ores.cpp.repository |
repository class (sqlgen queries) |
| C++ service | ores.cpp.service |
service class wrapping the repository |
| C++ NATS protocol | ores.cpp.protocol |
request/response message structs |
| C++ NATS handler | ores.cpp.nats-handler |
message handler class |
| C++ NATS sub-registrar | ores.cpp.nats-sub-registrar |
per-entity subject registration |
| C++ NATS eventing | ores.cpp.nats-eventing |
domain-changed event struct |
| C++ generator (synthetic) | ores.cpp.generator |
synthetic-data generator function |
| C++ Qt UI | ores.cpp.qt |
Qt list/detail/history windows and models |
| C++ enum | ores.cpp.enum |
enum type + string conversion |
| CMake component wiring | ores.cmake.component |
component CMakeLists.txt entries |
--address accepts only one facet per invocation — there is no accumulating
flag. To touch several layers without regenerating the whole entity, run
the command once per address:
./compass.sh codegen entity generate counterparty_identifier --address ores.cpp.repository ./compass.sh codegen entity generate counterparty_identifier --address ores.cpp.service ./compass.sh codegen entity generate counterparty_identifier --address ores.cpp.protocol ./compass.sh codegen entity generate counterparty_identifier --address ores.cpp.nats-handler ./compass.sh codegen entity generate counterparty_identifier --address ores.cpp.nats-sub-registrar
Preview paths without writing with --dry-run:
./compass.sh codegen entity generate country --dry-run
Preview as a unified diff (generate to temp, compare to disk) with --diff:
./compass.sh codegen entity generate country --diff ./compass.sh codegen entity generate country --address ores.sql.schema --diff
--dry-run and --diff are mutually exclusive.
After generating, review changes with:
./compass.sh codegen entity diff country
Script
compass codegen entity generate (alias gen) is the _cmd_generate
handler in projects/ores.compass/src/compass_codegen_entity.py. It calls
_generate_single from codegen.generate directly (no subprocess to
codegen.sh).
Tested by
Run ./compass.sh codegen entity generate country --dry-run and verify
the entity's full output-path set is printed across every applicable facet.
Run without --dry-run and verify the stale files are updated (entity
show should then show ✅).