@uwmd/core 1.1.2 → 1.5.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.
Files changed (164) hide show
  1. package/README.md +3 -3
  2. package/dist/agents/bancroft.d.ts +22 -1
  3. package/dist/agents/bancroft.d.ts.map +1 -1
  4. package/dist/agents/bancroft.js +86 -60
  5. package/dist/agents/bancroft.js.map +1 -1
  6. package/dist/agents/provider.d.ts +62 -0
  7. package/dist/agents/provider.d.ts.map +1 -0
  8. package/dist/agents/provider.js +28 -0
  9. package/dist/agents/provider.js.map +1 -0
  10. package/dist/agents/providers/anthropic.d.ts +20 -0
  11. package/dist/agents/providers/anthropic.d.ts.map +1 -0
  12. package/dist/agents/providers/anthropic.js +104 -0
  13. package/dist/agents/providers/anthropic.js.map +1 -0
  14. package/dist/agents/providers/replay.d.ts +46 -0
  15. package/dist/agents/providers/replay.d.ts.map +1 -0
  16. package/dist/agents/providers/replay.js +162 -0
  17. package/dist/agents/providers/replay.js.map +1 -0
  18. package/dist/agents/schemas.d.ts +3 -3
  19. package/dist/agents/schemas.d.ts.map +1 -1
  20. package/dist/agents/schemas.js.map +1 -1
  21. package/dist/browser.d.ts +33 -4
  22. package/dist/browser.d.ts.map +1 -1
  23. package/dist/browser.js +26 -3
  24. package/dist/browser.js.map +1 -1
  25. package/dist/calc/builtins.d.ts +10 -0
  26. package/dist/calc/builtins.d.ts.map +1 -1
  27. package/dist/calc/builtins.js +64 -42
  28. package/dist/calc/builtins.js.map +1 -1
  29. package/dist/calc/errors.js +1 -1
  30. package/dist/calc/evaluator.js +6 -2
  31. package/dist/calc/evaluator.js.map +1 -1
  32. package/dist/calc/index.d.ts +7 -0
  33. package/dist/calc/index.d.ts.map +1 -1
  34. package/dist/calc/index.js +13 -1
  35. package/dist/calc/index.js.map +1 -1
  36. package/dist/calc/quantize.d.ts +56 -0
  37. package/dist/calc/quantize.d.ts.map +1 -0
  38. package/dist/calc/quantize.js +116 -0
  39. package/dist/calc/quantize.js.map +1 -0
  40. package/dist/cascade.d.ts +60 -6
  41. package/dist/cascade.d.ts.map +1 -1
  42. package/dist/cascade.js +93 -14
  43. package/dist/cascade.js.map +1 -1
  44. package/dist/cli-packages.d.ts +11 -0
  45. package/dist/cli-packages.d.ts.map +1 -0
  46. package/dist/cli-packages.js +177 -0
  47. package/dist/cli-packages.js.map +1 -0
  48. package/dist/cli.js +691 -37
  49. package/dist/cli.js.map +1 -1
  50. package/dist/composition.d.ts +182 -0
  51. package/dist/composition.d.ts.map +1 -0
  52. package/dist/composition.js +536 -0
  53. package/dist/composition.js.map +1 -0
  54. package/dist/deal-package-context.d.ts +52 -0
  55. package/dist/deal-package-context.d.ts.map +1 -0
  56. package/dist/deal-package-context.js +132 -0
  57. package/dist/deal-package-context.js.map +1 -0
  58. package/dist/deal-package-zip.d.ts +36 -0
  59. package/dist/deal-package-zip.d.ts.map +1 -0
  60. package/dist/deal-package-zip.js +132 -0
  61. package/dist/deal-package-zip.js.map +1 -0
  62. package/dist/deal-package.d.ts +82 -0
  63. package/dist/deal-package.d.ts.map +1 -0
  64. package/dist/deal-package.js +189 -0
  65. package/dist/deal-package.js.map +1 -0
  66. package/dist/defaults.d.ts +48 -0
  67. package/dist/defaults.d.ts.map +1 -1
  68. package/dist/defaults.js +512 -0
  69. package/dist/defaults.js.map +1 -1
  70. package/dist/index.d.ts +39 -4
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +30 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/init.js +1 -1
  75. package/dist/init.js.map +1 -1
  76. package/dist/integrity.d.ts +9 -0
  77. package/dist/integrity.d.ts.map +1 -1
  78. package/dist/integrity.js +12 -2
  79. package/dist/integrity.js.map +1 -1
  80. package/dist/lease-abstract.d.ts +82 -0
  81. package/dist/lease-abstract.d.ts.map +1 -0
  82. package/dist/lease-abstract.js +183 -0
  83. package/dist/lease-abstract.js.map +1 -0
  84. package/dist/lite-bridge.d.ts +67 -0
  85. package/dist/lite-bridge.d.ts.map +1 -0
  86. package/dist/lite-bridge.js +564 -0
  87. package/dist/lite-bridge.js.map +1 -0
  88. package/dist/lite.d.ts +63 -0
  89. package/dist/lite.d.ts.map +1 -0
  90. package/dist/lite.js +398 -0
  91. package/dist/lite.js.map +1 -0
  92. package/dist/market-data.d.ts +134 -0
  93. package/dist/market-data.d.ts.map +1 -0
  94. package/dist/market-data.js +292 -0
  95. package/dist/market-data.js.map +1 -0
  96. package/dist/modules.d.ts.map +1 -1
  97. package/dist/modules.js +278 -13
  98. package/dist/modules.js.map +1 -1
  99. package/dist/packs/excel-emit.d.ts +18 -1
  100. package/dist/packs/excel-emit.d.ts.map +1 -1
  101. package/dist/packs/excel-emit.js +18 -1
  102. package/dist/packs/excel-emit.js.map +1 -1
  103. package/dist/packs/hospitality.d.ts +3 -0
  104. package/dist/packs/hospitality.d.ts.map +1 -0
  105. package/dist/packs/hospitality.js +122 -0
  106. package/dist/packs/hospitality.js.map +1 -0
  107. package/dist/packs/index.d.ts +5 -1
  108. package/dist/packs/index.d.ts.map +1 -1
  109. package/dist/packs/index.js +13 -1
  110. package/dist/packs/index.js.map +1 -1
  111. package/dist/packs/land.d.ts +3 -0
  112. package/dist/packs/land.d.ts.map +1 -0
  113. package/dist/packs/land.js +124 -0
  114. package/dist/packs/land.js.map +1 -0
  115. package/dist/packs/senior-housing.d.ts +3 -0
  116. package/dist/packs/senior-housing.d.ts.map +1 -0
  117. package/dist/packs/senior-housing.js +123 -0
  118. package/dist/packs/senior-housing.js.map +1 -0
  119. package/dist/packs/student-housing.d.ts +3 -0
  120. package/dist/packs/student-housing.d.ts.map +1 -0
  121. package/dist/packs/student-housing.js +124 -0
  122. package/dist/packs/student-housing.js.map +1 -0
  123. package/dist/parser.d.ts +9 -0
  124. package/dist/parser.d.ts.map +1 -1
  125. package/dist/parser.js +40 -6
  126. package/dist/parser.js.map +1 -1
  127. package/dist/protocol.d.ts +125 -9
  128. package/dist/protocol.d.ts.map +1 -1
  129. package/dist/protocol.js +182 -4
  130. package/dist/protocol.js.map +1 -1
  131. package/dist/receipts.d.ts +396 -0
  132. package/dist/receipts.d.ts.map +1 -0
  133. package/dist/receipts.js +913 -0
  134. package/dist/receipts.js.map +1 -0
  135. package/dist/runner.d.ts +13 -0
  136. package/dist/runner.d.ts.map +1 -1
  137. package/dist/runner.js +5 -5
  138. package/dist/runner.js.map +1 -1
  139. package/dist/source-representation.d.ts +40 -0
  140. package/dist/source-representation.d.ts.map +1 -0
  141. package/dist/source-representation.js +114 -0
  142. package/dist/source-representation.js.map +1 -0
  143. package/dist/types.d.ts +63 -1
  144. package/dist/types.d.ts.map +1 -1
  145. package/dist/types.js +34 -0
  146. package/dist/types.js.map +1 -1
  147. package/dist/uwcsv.d.ts.map +1 -1
  148. package/dist/uwcsv.js +10 -78
  149. package/dist/uwcsv.js.map +1 -1
  150. package/dist/uwxml.d.ts.map +1 -1
  151. package/dist/uwxml.js +10 -2
  152. package/dist/uwxml.js.map +1 -1
  153. package/dist/validator.d.ts.map +1 -1
  154. package/dist/validator.js +27 -10
  155. package/dist/validator.js.map +1 -1
  156. package/dist/version.d.ts +3 -0
  157. package/dist/version.d.ts.map +1 -0
  158. package/dist/version.js +8 -0
  159. package/dist/version.js.map +1 -0
  160. package/dist/zip-safety.d.ts +15 -0
  161. package/dist/zip-safety.d.ts.map +1 -0
  162. package/dist/zip-safety.js +109 -0
  163. package/dist/zip-safety.js.map +1 -0
  164. package/package.json +12 -3
package/dist/cascade.d.ts CHANGED
@@ -17,10 +17,54 @@ export interface MarketDataLookup {
17
17
  central: number;
18
18
  high: number;
19
19
  };
20
+ /**
21
+ * Optional identity of the observation set this value came from, surfaced
22
+ * as `ResolvedValue.resolved_from`. Added by RFC 0022 so a market-derived
23
+ * value can say *which* set produced it — the gap that made receipts over
24
+ * market data irreproducible. Optional, so a host returning the original
25
+ * `{ value, range }` shape is unaffected.
26
+ */
27
+ source_id?: string;
20
28
  } | null;
21
29
  /** How long an observation remains usable, for staleness checks downstream. */
22
30
  staleness_seconds: number;
23
31
  }
32
+ /**
33
+ * Assumptions one ancestor asserts for its descendants (RFC 0021 §5).
34
+ *
35
+ * Callers build these by walking the composition DAG; this module does not
36
+ * discover them, because there is deliberately no ambient assumption scope —
37
+ * a document not reachable as an ancestor contributes nothing.
38
+ */
39
+ export interface InheritedAssumptions {
40
+ /** The ancestor asserting these values. */
41
+ document_id: string;
42
+ /** `sha256:<64 lowercase hex>` over the ancestor's canonical form. */
43
+ digest: string;
44
+ /** Hops up the DAG from the resolving document; 1 is the immediate parent. */
45
+ distance: number;
46
+ /** Field-path → value. */
47
+ values: Record<string, unknown>;
48
+ }
49
+ /**
50
+ * Raised when two equidistant ancestors assert the same field. Diamond
51
+ * inheritance resolves explicitly or not at all — silently picking one would
52
+ * make the answer depend on graph traversal order, which is the class of bug
53
+ * this whole RFC is written to avoid.
54
+ */
55
+ export declare class AmbiguousInheritanceError extends Error {
56
+ readonly code: "COMP-AMBIGUOUS-INHERIT";
57
+ readonly field_path: string;
58
+ readonly ancestors: string[];
59
+ constructor(field_path: string, ancestors: string[]);
60
+ }
61
+ /**
62
+ * Select the inherited value for `field_path`: the nearest ancestor wins.
63
+ *
64
+ * Exported because a host often needs the winning ancestor's identity to stamp
65
+ * `_meta.inherited_from`, not merely the value.
66
+ */
67
+ export declare function selectInheritedAssumption(field_path: string, inherited: readonly InheritedAssumptions[]): InheritedAssumptions | null;
24
68
  export interface InvestorProfile {
25
69
  /** Field-path → preferred value map. */
26
70
  values: Record<string, unknown>;
@@ -42,6 +86,12 @@ export interface CascadeContext {
42
86
  /** Optional geography hint passed to the market-data resolver. */
43
87
  geo?: string;
44
88
  profile?: InvestorProfile;
89
+ /**
90
+ * Assumptions from ancestors in the composition DAG (RFC 0021 §5). Supplied
91
+ * by the caller after resolving the graph; absent for a standalone record,
92
+ * which is why no pre-0021 document can resolve at this step.
93
+ */
94
+ inherited?: readonly InheritedAssumptions[];
45
95
  market?: MarketDataLookup;
46
96
  global?: GlobalDefaults;
47
97
  system?: SystemDefaults;
@@ -65,12 +115,16 @@ export interface ResolvedValue {
65
115
  *
66
116
  * Cascade order:
67
117
  * 1. user_override (in-file, source-tag match)
68
- * 2. user_input (in-file, source-tag match)
69
- * 3. investor_profile (ctx.profile)
70
- * 4. market_data (ctx.market)
71
- * 5. asset_class_default (defaults registry)
72
- * 6. global_default (ctx.global)
73
- * 7. system_default (ctx.system)
118
+ * 2. user_input (in-file, source-tag match; also market_data_accepted)
119
+ * 3. inherited_assumption (ctx.inherited — composition DAG only)
120
+ * 4. investor_profile (ctx.profile)
121
+ * 5. market_data (ctx.market)
122
+ * 6. asset_class_default (defaults registry)
123
+ * 7. global_default (ctx.global)
124
+ * 8. system_default (ctx.system)
125
+ *
126
+ * Throws `AmbiguousInheritanceError` when two equidistant ancestors assert the
127
+ * same field — the one case where resolution refuses rather than choosing.
74
128
  *
75
129
  * Returns `undefined` value with step='system_default' as a sentinel only when
76
130
  * every step misses; callers SHOULD treat that as an unresolvable input and
@@ -1 +1 @@
1
- {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAA4B,MAAM,YAAY,CAAC;AAIpF,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,+EAA+E;IAC/E,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B;yDACqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAID,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,kFAAkF;IAClF,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA4ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,GAAG,GAAE,cAAmB,GACvB,aAAa,CA8Ef;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAE5E"}
1
+ {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
package/dist/cascade.js CHANGED
@@ -1,11 +1,52 @@
1
1
  // Fallback cascade resolver — Protocol §V.7
2
2
  //
3
- // Walks the seven cascade steps in order; first hit wins. The producer that
3
+ // Walks the eight cascade steps in order (seven before RFC 0021 §5 added
4
+ // `inherited_assumption` at protocol 1.5.0); first hit wins. The producer that
4
5
  // uses this stamps the resulting `_meta.source` with the cascade step that
5
6
  // produced the value. See FORMAT_SPEC §3.4 (provisional flag) and §2.6
6
7
  // (source tags).
7
8
  import { getAssetClassDefaults } from './defaults.js';
8
9
  import { deepGet } from './parser.js';
10
+ /**
11
+ * Raised when two equidistant ancestors assert the same field. Diamond
12
+ * inheritance resolves explicitly or not at all — silently picking one would
13
+ * make the answer depend on graph traversal order, which is the class of bug
14
+ * this whole RFC is written to avoid.
15
+ */
16
+ export class AmbiguousInheritanceError extends Error {
17
+ code = 'COMP-AMBIGUOUS-INHERIT';
18
+ field_path;
19
+ ancestors;
20
+ constructor(field_path, ancestors) {
21
+ super(`[COMP-AMBIGUOUS-INHERIT] Equidistant ancestors ${ancestors
22
+ .map((a) => `'${a}'`)
23
+ .join(' and ')} both assert '${field_path}'. Resolve which is authoritative rather than letting traversal order decide.`);
24
+ this.name = 'AmbiguousInheritanceError';
25
+ this.field_path = field_path;
26
+ this.ancestors = ancestors;
27
+ }
28
+ }
29
+ /**
30
+ * Select the inherited value for `field_path`: the nearest ancestor wins.
31
+ *
32
+ * Exported because a host often needs the winning ancestor's identity to stamp
33
+ * `_meta.inherited_from`, not merely the value.
34
+ */
35
+ export function selectInheritedAssumption(field_path, inherited) {
36
+ const holders = inherited.filter((a) => Object.hasOwn(a.values, field_path));
37
+ if (holders.length === 0)
38
+ return null;
39
+ let nearest = holders[0];
40
+ for (const candidate of holders.slice(1)) {
41
+ if (candidate.distance < nearest.distance)
42
+ nearest = candidate;
43
+ }
44
+ const tied = holders.filter((a) => a.distance === nearest.distance && a.document_id !== nearest.document_id);
45
+ if (tied.length > 0) {
46
+ throw new AmbiguousInheritanceError(field_path, [nearest, ...tied].map((a) => a.document_id).sort());
47
+ }
48
+ return nearest;
49
+ }
9
50
  // ─── Internal helpers ────────────────────────────────────────────────────────
10
51
  function getBlock(parsed, sectionId) {
11
52
  const entry = parsed.sections[sectionId];
@@ -81,12 +122,16 @@ function findBySource(parsed, field_path, wanted) {
81
122
  *
82
123
  * Cascade order:
83
124
  * 1. user_override (in-file, source-tag match)
84
- * 2. user_input (in-file, source-tag match)
85
- * 3. investor_profile (ctx.profile)
86
- * 4. market_data (ctx.market)
87
- * 5. asset_class_default (defaults registry)
88
- * 6. global_default (ctx.global)
89
- * 7. system_default (ctx.system)
125
+ * 2. user_input (in-file, source-tag match; also market_data_accepted)
126
+ * 3. inherited_assumption (ctx.inherited — composition DAG only)
127
+ * 4. investor_profile (ctx.profile)
128
+ * 5. market_data (ctx.market)
129
+ * 6. asset_class_default (defaults registry)
130
+ * 7. global_default (ctx.global)
131
+ * 8. system_default (ctx.system)
132
+ *
133
+ * Throws `AmbiguousInheritanceError` when two equidistant ancestors assert the
134
+ * same field — the one case where resolution refuses rather than choosing.
90
135
  *
91
136
  * Returns `undefined` value with step='system_default' as a sentinel only when
92
137
  * every step misses; callers SHOULD treat that as an unresolvable input and
@@ -98,12 +143,45 @@ export function resolveValue(field_path, parsed, ctx = {}) {
98
143
  if (override) {
99
144
  return { value: override.value, source: 'user_override', step: 'user_override' };
100
145
  }
101
- // Step 2: user_input (also accept 'manual' as a synonym for typed-in values)
102
- const input = findBySource(parsed, field_path, ['user_input', 'manual']);
146
+ // Step 2: user_input ('manual' is a synonym for typed-in values).
147
+ //
148
+ // `market_data_accepted` resolves here too (RFC 0022 §4). It is an in-file
149
+ // value of record, not a fallback: the analyst accepted one observation of
150
+ // one vintage, and a later live lookup MUST NOT silently replace it. Placing
151
+ // it here rather than at step 4 is what makes promotion stop the field being
152
+ // ranked as an unresolved gap.
153
+ //
154
+ // The returned `source` is the tag found, so `market_data_accepted` survives
155
+ // resolution rather than being flattened into `user_input`. Only the *step*
156
+ // is shared — the cascade is normatively ordered and a producer must not
157
+ // reorder it (protocol §IX), so a promoted value is a distinctly tagged value
158
+ // resolved at an existing step rather than a step of its own. Extending the
159
+ // cascade is a protocol change, which is what RFC 0021 §5 did for
160
+ // `inherited_assumption`; RFC 0022 deliberately did not need one.
161
+ const input = findBySource(parsed, field_path, ['user_input', 'manual', 'market_data_accepted']);
103
162
  if (input) {
104
163
  return { value: input.value, source: input.source, step: 'user_input' };
105
164
  }
106
- // Step 3: investor_profile
165
+ // Step 3: inherited_assumption (RFC 0021 §5).
166
+ //
167
+ // Below `user_input`, so a value entered on the deal always wins —
168
+ // inheritance supplies defaults, never overrides. Above `investor_profile`,
169
+ // because a named ancestor in this deal's own composition DAG is more
170
+ // specific than an institution-wide preference set.
171
+ if (ctx.inherited && ctx.inherited.length > 0) {
172
+ // Throws on equidistant ancestors rather than picking one. Deliberate: a
173
+ // silent pick would make the answer depend on traversal order.
174
+ const ancestor = selectInheritedAssumption(field_path, ctx.inherited);
175
+ if (ancestor) {
176
+ return {
177
+ value: ancestor.values[field_path],
178
+ source: 'inherited_assumption',
179
+ step: 'inherited_assumption',
180
+ resolved_from: ancestor.document_id,
181
+ };
182
+ }
183
+ }
184
+ // Step 4: investor_profile
107
185
  if (ctx.profile && field_path in ctx.profile.values) {
108
186
  return {
109
187
  value: ctx.profile.values[field_path],
@@ -112,7 +190,7 @@ export function resolveValue(field_path, parsed, ctx = {}) {
112
190
  resolved_from: ctx.profile.source_id,
113
191
  };
114
192
  }
115
- // Step 4: market_data
193
+ // Step 5: market_data
116
194
  const asset_class = ctx.asset_class ??
117
195
  parsed.frontmatter.asset_class ??
118
196
  'multifamily';
@@ -124,6 +202,7 @@ export function resolveValue(field_path, parsed, ctx = {}) {
124
202
  source: 'market_data',
125
203
  step: 'market_data',
126
204
  range: hit.range,
205
+ ...(hit.source_id ? { resolved_from: hit.source_id } : {}),
127
206
  };
128
207
  }
129
208
  }
@@ -132,7 +211,7 @@ export function resolveValue(field_path, parsed, ctx = {}) {
132
211
  if (inFileMarket) {
133
212
  return { value: inFileMarket.value, source: 'market_data', step: 'market_data' };
134
213
  }
135
- // Step 5: asset_class_default
214
+ // Step 6: asset_class_default
136
215
  const table = getAssetClassDefaults(asset_class);
137
216
  const range = table?.fields[field_path];
138
217
  if (range) {
@@ -144,7 +223,7 @@ export function resolveValue(field_path, parsed, ctx = {}) {
144
223
  resolved_from: `${table?.asset_class}@${table?.version}`,
145
224
  };
146
225
  }
147
- // Step 6: global_default
226
+ // Step 7: global_default
148
227
  if (ctx.global && field_path in ctx.global.values) {
149
228
  return {
150
229
  value: ctx.global.values[field_path],
@@ -152,7 +231,7 @@ export function resolveValue(field_path, parsed, ctx = {}) {
152
231
  step: 'global_default',
153
232
  };
154
233
  }
155
- // Step 7: system_default
234
+ // Step 8: system_default
156
235
  if (ctx.system && field_path in ctx.system.values) {
157
236
  return {
158
237
  value: ctx.system.values[field_path],
@@ -1 +1 @@
1
- {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ type Flags = Record<string, string | boolean>;
2
+ export declare function cmdLeaseValidate(file: string, flags: Flags): void;
3
+ export declare function cmdLeaseProject(file: string, flags: Flags): void;
4
+ export declare function cmdPackageCreate(manifestPath: string, flags: Flags): Promise<void>;
5
+ export declare function cmdPackageVerify(file: string, flags: Flags): Promise<void>;
6
+ export declare function cmdPackageList(file: string, flags: Flags): void;
7
+ export declare function cmdPackageToContext(file: string, flags: Flags): void;
8
+ export declare function cmdPackageContextValidate(file: string, flags: Flags): void;
9
+ export declare function cmdPackageEdges(file: string): void;
10
+ export {};
11
+ //# sourceMappingURL=cli-packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-packages.d.ts","sourceRoot":"","sources":["../src/cli-packages.ts"],"names":[],"mappings":"AAwBA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAkB9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAcjE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAahE;AAID,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CA2B/D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAwBpE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAc1E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKlD"}
@@ -0,0 +1,177 @@
1
+ // CLI commands for RFC 0018: lease abstracts and deal packages.
2
+ //
3
+ // Split out of cli.ts, which is already long. These are Node-side commands and
4
+ // are reached only through the CLI entry point, never from browser.ts.
5
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
+ import { basename, resolve } from 'node:path';
7
+ import { projectPackageLinksToEntityEdges, validateUWDealPackageManifest, } from './deal-package.js';
8
+ import { projectUWDealPackageContext, validateUWDealPackageContext, } from './deal-package-context.js';
9
+ import { decodeUWDealPackageZip, encodeUWDealPackageZip, verifyUWDealPackage, } from './deal-package-zip.js';
10
+ import { projectLeaseAbstractToRentRoll, validateLeaseAbstract } from './lease-abstract.js';
11
+ function readJSONFile(path) {
12
+ return JSON.parse(readFileSync(resolve(path), 'utf-8'));
13
+ }
14
+ function readBytes(path) {
15
+ return new Uint8Array(readFileSync(resolve(path)));
16
+ }
17
+ function printErrors(errors) {
18
+ for (const e of errors) {
19
+ console.log(` ${e.code}${e.pointer ? ` [${e.pointer}]` : ''} ${e.message}`);
20
+ }
21
+ }
22
+ // ─── Lease abstracts ─────────────────────────────────────────────────────────
23
+ export function cmdLeaseValidate(file, flags) {
24
+ const errors = validateLeaseAbstract(readJSONFile(file));
25
+ if (flags['json']) {
26
+ console.log(JSON.stringify({ ok: errors.length === 0, errors }, null, 2));
27
+ process.exit(errors.length === 0 ? 0 : 1);
28
+ }
29
+ if (errors.length === 0) {
30
+ console.log(`\nOK - ${basename(file)}\n`);
31
+ return;
32
+ }
33
+ console.log(`\nERRORS - ${basename(file)}`);
34
+ printErrors(errors);
35
+ console.log('');
36
+ process.exit(1);
37
+ }
38
+ export function cmdLeaseProject(file, flags) {
39
+ const abstract = readJSONFile(file);
40
+ const errors = validateLeaseAbstract(abstract);
41
+ if (errors.length > 0) {
42
+ console.error('Refusing to project an invalid lease abstract:');
43
+ for (const e of errors)
44
+ console.error(` ${e.code} ${e.message}`);
45
+ process.exit(1);
46
+ }
47
+ // Emits a proposed row plus its loss report. It never writes to a deal — a
48
+ // host applies the row through the Tier-2 editor, where byte preservation and
49
+ // provenance apply.
50
+ const result = projectLeaseAbstractToRentRoll(abstract);
51
+ console.log(JSON.stringify(result, null, flags['compact'] ? 0 : 2));
52
+ }
53
+ // ─── Packages ────────────────────────────────────────────────────────────────
54
+ export async function cmdPackageCreate(manifestPath, flags) {
55
+ const manifest = readJSONFile(manifestPath);
56
+ const errors = validateUWDealPackageManifest(manifest);
57
+ if (errors.length > 0) {
58
+ console.error('Manifest is invalid:');
59
+ printErrors(errors);
60
+ process.exit(1);
61
+ }
62
+ // Member paths resolve relative to the manifest's own directory.
63
+ const root = resolve(manifestPath, '..');
64
+ const payloads = {};
65
+ for (const member of manifest.members) {
66
+ const full = resolve(root, member.path);
67
+ if (!existsSync(full)) {
68
+ console.error(`Missing member payload: ${member.path}`);
69
+ process.exit(1);
70
+ }
71
+ payloads[member.path] = readBytes(full);
72
+ }
73
+ const out = String(flags['output'] ?? 'package.uwpkg.zip');
74
+ try {
75
+ const bytes = await encodeUWDealPackageZip({ manifest, payloads });
76
+ writeFileSync(resolve(out), bytes);
77
+ console.log(`Wrote ${basename(out)} (${manifest.members.length} member(s)).`);
78
+ }
79
+ catch (e) {
80
+ console.error(e instanceof Error ? e.message : String(e));
81
+ process.exit(1);
82
+ }
83
+ }
84
+ export async function cmdPackageVerify(file, flags) {
85
+ const decoded = decodeUWDealPackageZip(readBytes(file));
86
+ const result = await verifyUWDealPackage(decoded);
87
+ if (flags['json']) {
88
+ console.log(JSON.stringify(result, null, 2));
89
+ }
90
+ else {
91
+ console.log(`\n${result.status.toUpperCase()} - ${basename(file)}\n`);
92
+ printErrors(result.errors);
93
+ for (const id of result.unverifiable_members) {
94
+ console.log(` (unverifiable) ${id} — semantic digest could not be checked here`);
95
+ }
96
+ console.log('\nA verified package means its members are unchanged and match the manifest.');
97
+ console.log('It does not mean the inputs are true, complete, or audited.\n');
98
+ }
99
+ // `unverifiable` deliberately does not exit non-zero: an unsupported
100
+ // representation is not evidence of tampering.
101
+ if (result.status === 'failed')
102
+ process.exit(1);
103
+ }
104
+ export function cmdPackageList(file, flags) {
105
+ const decoded = decodeUWDealPackageZip(readBytes(file));
106
+ const rows = decoded.manifest.members.map((m) => ({
107
+ id: m.id,
108
+ role: m.role,
109
+ path: m.path,
110
+ document_profile: m.document_profile ?? null,
111
+ }));
112
+ if (flags['json']) {
113
+ console.log(JSON.stringify({ package_id: decoded.manifest.package_id, members: rows, links: decoded.manifest.links }, null, 2));
114
+ return;
115
+ }
116
+ console.log(`\n${decoded.manifest.package_id} — ${rows.length} member(s)\n`);
117
+ for (const r of rows) {
118
+ console.log(` ${r.id} [${r.role}] ${r.path}${r.document_profile ? ` (${r.document_profile})` : ''}`);
119
+ }
120
+ if (decoded.manifest.links.length > 0) {
121
+ console.log('\n links:');
122
+ for (const l of decoded.manifest.links) {
123
+ console.log(` ${l.from} --${l.type}--> ${l.to}`);
124
+ }
125
+ }
126
+ console.log('');
127
+ }
128
+ export function cmdPackageToContext(file, flags) {
129
+ const decoded = decodeUWDealPackageZip(readBytes(file));
130
+ const decoder = new TextDecoder('utf-8', { fatal: true });
131
+ const contents = {};
132
+ for (const member of decoded.manifest.members) {
133
+ // Source evidence is never inlined, no matter how convenient it would be.
134
+ if (member.role === 'source_evidence')
135
+ continue;
136
+ const bytes = decoded.payloads[member.path];
137
+ if (!bytes)
138
+ continue;
139
+ try {
140
+ contents[member.id] = decoder.decode(bytes);
141
+ }
142
+ catch {
143
+ // Not valid UTF-8: describe it in the manifest rather than mangling it
144
+ // into the view.
145
+ }
146
+ }
147
+ const context = projectUWDealPackageContext(decoded.manifest, { contents });
148
+ const serialized = `${JSON.stringify(context, null, flags['compact'] ? 0 : 2)}\n`;
149
+ if (flags['stdout'] || !flags['output']) {
150
+ process.stdout.write(serialized);
151
+ return;
152
+ }
153
+ writeFileSync(resolve(String(flags['output'])), serialized, 'utf-8');
154
+ console.log(`Wrote ${basename(String(flags['output']))}`);
155
+ }
156
+ export function cmdPackageContextValidate(file, flags) {
157
+ const errors = validateUWDealPackageContext(readJSONFile(file));
158
+ if (flags['json']) {
159
+ console.log(JSON.stringify({ ok: errors.length === 0, errors }, null, 2));
160
+ process.exit(errors.length === 0 ? 0 : 1);
161
+ }
162
+ if (errors.length === 0) {
163
+ console.log(`\nOK - ${basename(file)}\n`);
164
+ return;
165
+ }
166
+ console.log(`\nERRORS - ${basename(file)}`);
167
+ printErrors(errors);
168
+ console.log('');
169
+ process.exit(1);
170
+ }
171
+ export function cmdPackageEdges(file) {
172
+ const decoded = decodeUWDealPackageZip(readBytes(file));
173
+ // One-directional by design: member links project up to entity edges with
174
+ // synthesized provenance, and never the reverse.
175
+ console.log(JSON.stringify(projectPackageLinksToEntityEdges(decoded.manifest), null, 2));
176
+ }
177
+ //# sourceMappingURL=cli-packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-packages.js","sourceRoot":"","sources":["../src/cli-packages.ts"],"names":[],"mappings":"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"}