@githolon/dsl 0.97.0 → 0.97.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@githolon/dsl",
3
- "version": "0.97.0",
3
+ "version": "0.97.1",
4
4
  "type": "module",
5
5
  "description": "Nomos 2 domain-authoring DSL: aggregates + directives in TS, executed and encoded to the Rust kernel's wire shapes.",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -54,6 +54,7 @@
54
54
  import { executeDirectiveToIntent } from "./wire_encode.js";
55
55
  import { expandCapabilityExports } from "./capability_exports.js";
56
56
  import { RelationTuple, __setDispatchContext } from "./framework/relations.js";
57
+ import { BIRTH_METER_AGGREGATES } from "./birth_meter.js";
57
58
  import { namespacedAggregateIds, qualifyReadProjectionType, READ_PROJECTION_DELIMITER } from "./read_projection_namespace.js";
58
59
  import { isRelationTypeDecl } from "./relation_schema.js";
59
60
  import { synthesizePreconditionInvariants } from "./precondition.js";
@@ -301,6 +302,17 @@ function buildDomainSlice(mod: DomainModuleExports): DomainSlice {
301
302
  if (!aggs.has(RelationTuple.id) && [...dirs.values()].some((d) => d.aggregateId === RelationTuple.id)) {
302
303
  aggs.set(RelationTuple.id, RelationTuple);
303
304
  }
305
+ // BIRTH-METER AUTO-ENSURE (RelationTuple's sibling — co2 tenant DEFECT P2-001): a law re-exporting a
306
+ // meter directive (`grantBirthAllowance`/`setBirthPolicy`, `.ensures(BirthGrant/BirthPolicy)`) without
307
+ // ALSO exporting the framework aggregate handle would fall into the silent drop below — while the
308
+ // COMPILE side (build_package's declaresBirth auto-inject) counts it in the manifest: a manifest-vs-
309
+ // engine skew that dispatches as "no directive registered". The engine mirrors the compile injection,
310
+ // so the two can never disagree on the meter surface.
311
+ for (const fw of BIRTH_METER_AGGREGATES) {
312
+ if (!aggs.has(fw.id) && [...dirs.values()].some((d) => d.aggregateId === fw.id)) {
313
+ aggs.set(fw.id, fw);
314
+ }
315
+ }
304
316
  for (const [dirId, directive] of dirs) {
305
317
  const agg = aggs.get(directive.aggregateId);
306
318
  if (agg === undefined) {