@almadar/core 10.95.0 → 10.97.0

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.
@@ -262,8 +262,23 @@ declare function sampleImageUrl(entityName: string, fieldName: string, ctx: Samp
262
262
  * Is `field.default` a value the synthesizer must return verbatim?
263
263
  *
264
264
  * Exported so codegen and tests share the one predicate rather than restating it.
265
+ *
266
+ * `isRuntime` defaults to `false` (the persistent/multi-row behavior) —
267
+ * a `[runtime]` singleton's seeded row must equal its declared-defaults
268
+ * projection outright (gate 1: persistence must agree with the default
269
+ * layer in the `@entity` merge, or the machine boots into the wrong
270
+ * state), so ANY declared default is honored there, unconditionally.
271
+ * For a persistent, multi-row entity a number/boolean default is a
272
+ * NEW-RECORD default, not a claim about every existing row — same
273
+ * reasoning already applied below to a string default on a closed
274
+ * vocabulary (the row cycle wins over it). Honoring it verbatim made
275
+ * every mock-seeded counter/amount field (`hours = 0`, `debit = 0`, a
276
+ * runtime-only concern accidentally applied to every row of a real
277
+ * collection) read as literally, uniformly zero across the whole
278
+ * collection — confirmed 2026-09-17 across `LedgerEntry.debit/credit`,
279
+ * `ExecTimeEntry.hours/costRate`, `ExecCost.amount`.
265
280
  */
266
- declare function isDeclaredDefaultHonored(field: EntityField): boolean;
281
+ declare function isDeclaredDefaultHonored(field: EntityField, isRuntime?: boolean): boolean;
267
282
  /** Rows to synthesize. A `[runtime]` entity is a per-orbital singleton. */
268
283
  declare function sampleRowCount(entity: SampleEntity, requested: number): number;
269
284
  /**
@@ -924,10 +924,11 @@ function declaredValues(field) {
924
924
  const values = "values" in field ? field.values : void 0;
925
925
  return values && values.length > 0 ? values : void 0;
926
926
  }
927
- function isDeclaredDefaultHonored(field) {
927
+ function isDeclaredDefaultHonored(field, isRuntime = false) {
928
928
  const value = field.default;
929
929
  if (value === void 0 || value === null) return false;
930
- if (typeof value === "number" || typeof value === "boolean") return true;
930
+ if (isRuntime) return true;
931
+ if (typeof value === "number" || typeof value === "boolean") return false;
931
932
  if (Array.isArray(value)) return true;
932
933
  if (typeof value === "object") return true;
933
934
  if (typeof value !== "string") return false;
@@ -1008,8 +1009,7 @@ function sampleFieldValue(field, ctx) {
1008
1009
  const honoredDefault = field.default !== void 0 && isFieldValue(field.default) ? field.default : void 0;
1009
1010
  if (field.intrinsic === true) return honoredDefault;
1010
1011
  const isRuntime = ctx.persistence === "runtime";
1011
- if (isRuntime && honoredDefault !== void 0) return honoredDefault;
1012
- if (!isRuntime && isDeclaredDefaultHonored(field) && honoredDefault !== void 0) {
1012
+ if (isDeclaredDefaultHonored(field, isRuntime) && honoredDefault !== void 0) {
1013
1013
  return honoredDefault;
1014
1014
  }
1015
1015
  if (!field.required && field.default === void 0 && field.type !== "relation" && omitsUndefaultedOptionalFields(ctx)) {