Story: Fix codegen template drift

Table of Contents

This page documents a story in Sprint 25. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

Goal

(Describe the user-visible outcome this story delivers.)

Status

Field Value
State BACKLOG
Parent sprint Sprint 25
Now Not yet started.
Waiting on Nothing.
Next Break the story into tasks.
Last touched 2026-08-06

Acceptance

Tasks

Task State Start End Description
Update history field mapper codegen template to use provenance_fields constants BACKLOG     cpp_history_field_mapper.cpp.mustache hardcodes audit-column labels ("Modified By", etc.) as string literals, but currency_history_field_mapper.cpp on main uses the shared ores::history::domain::provenance_fields constants instead – the template needs to be updated to match and every entity's generated mapper regenerated.
Compound-key is_uuid gating drops trailing columns in Qt/service templates BACKLOG     cpp_protocol.hpp.mustache and cpp_service.cpp.mustache gate their delete/history/save is_uuid branch on primary_key.is_uuid alone, which reflects only the first key column. A future compound key whose leading column is UUID would silently drop every subsequent key column from these structs/validations. Not exercised today (subject_area's key is two text columns). Raised in PR #1691 review round 1. Fix: make the is_uuid branches loop primary_key.columns like cpp_domain_type_mapper.cpp.mustache already does.
has_pagination knob is a silent-failure footgun in the Qt client model template BACKLOG     The codegen knob gating real offset/limit pagination in a Client entity Model.cpp defaults to off with no compile-time or runtime signal when unset, letting 61 entities silently truncate lists at 100 rows behind fully-functional-looking pagination controls.
Junction codegen template follow-ups BACKLOG     Four codegen template issues for junction entities: path/namespace mismatch between generated and live code, current_timestamp version-collision in insert triggers, messaging handler generated without matching service, and eventing facets produce incomplete output.

Decisions

Out of scope

Emacs 29.3 (Org mode 9.6.15)