How do I generate a codegen entity?

Table of Contents

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 ✅).

See also

Emacs 29.3 (Org mode 9.6.15)