@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.
- package/README.md +3 -3
- package/dist/agents/bancroft.d.ts +22 -1
- package/dist/agents/bancroft.d.ts.map +1 -1
- package/dist/agents/bancroft.js +86 -60
- package/dist/agents/bancroft.js.map +1 -1
- package/dist/agents/provider.d.ts +62 -0
- package/dist/agents/provider.d.ts.map +1 -0
- package/dist/agents/provider.js +28 -0
- package/dist/agents/provider.js.map +1 -0
- package/dist/agents/providers/anthropic.d.ts +20 -0
- package/dist/agents/providers/anthropic.d.ts.map +1 -0
- package/dist/agents/providers/anthropic.js +104 -0
- package/dist/agents/providers/anthropic.js.map +1 -0
- package/dist/agents/providers/replay.d.ts +46 -0
- package/dist/agents/providers/replay.d.ts.map +1 -0
- package/dist/agents/providers/replay.js +162 -0
- package/dist/agents/providers/replay.js.map +1 -0
- package/dist/agents/schemas.d.ts +3 -3
- package/dist/agents/schemas.d.ts.map +1 -1
- package/dist/agents/schemas.js.map +1 -1
- package/dist/browser.d.ts +33 -4
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +26 -3
- package/dist/browser.js.map +1 -1
- package/dist/calc/builtins.d.ts +10 -0
- package/dist/calc/builtins.d.ts.map +1 -1
- package/dist/calc/builtins.js +64 -42
- package/dist/calc/builtins.js.map +1 -1
- package/dist/calc/errors.js +1 -1
- package/dist/calc/evaluator.js +6 -2
- package/dist/calc/evaluator.js.map +1 -1
- package/dist/calc/index.d.ts +7 -0
- package/dist/calc/index.d.ts.map +1 -1
- package/dist/calc/index.js +13 -1
- package/dist/calc/index.js.map +1 -1
- package/dist/calc/quantize.d.ts +56 -0
- package/dist/calc/quantize.d.ts.map +1 -0
- package/dist/calc/quantize.js +116 -0
- package/dist/calc/quantize.js.map +1 -0
- package/dist/cascade.d.ts +60 -6
- package/dist/cascade.d.ts.map +1 -1
- package/dist/cascade.js +93 -14
- package/dist/cascade.js.map +1 -1
- package/dist/cli-packages.d.ts +11 -0
- package/dist/cli-packages.d.ts.map +1 -0
- package/dist/cli-packages.js +177 -0
- package/dist/cli-packages.js.map +1 -0
- package/dist/cli.js +691 -37
- package/dist/cli.js.map +1 -1
- package/dist/composition.d.ts +182 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +536 -0
- package/dist/composition.js.map +1 -0
- package/dist/deal-package-context.d.ts +52 -0
- package/dist/deal-package-context.d.ts.map +1 -0
- package/dist/deal-package-context.js +132 -0
- package/dist/deal-package-context.js.map +1 -0
- package/dist/deal-package-zip.d.ts +36 -0
- package/dist/deal-package-zip.d.ts.map +1 -0
- package/dist/deal-package-zip.js +132 -0
- package/dist/deal-package-zip.js.map +1 -0
- package/dist/deal-package.d.ts +82 -0
- package/dist/deal-package.d.ts.map +1 -0
- package/dist/deal-package.js +189 -0
- package/dist/deal-package.js.map +1 -0
- package/dist/defaults.d.ts +48 -0
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +512 -0
- package/dist/defaults.js.map +1 -1
- package/dist/index.d.ts +39 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/integrity.d.ts +9 -0
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +12 -2
- package/dist/integrity.js.map +1 -1
- package/dist/lease-abstract.d.ts +82 -0
- package/dist/lease-abstract.d.ts.map +1 -0
- package/dist/lease-abstract.js +183 -0
- package/dist/lease-abstract.js.map +1 -0
- package/dist/lite-bridge.d.ts +67 -0
- package/dist/lite-bridge.d.ts.map +1 -0
- package/dist/lite-bridge.js +564 -0
- package/dist/lite-bridge.js.map +1 -0
- package/dist/lite.d.ts +63 -0
- package/dist/lite.d.ts.map +1 -0
- package/dist/lite.js +398 -0
- package/dist/lite.js.map +1 -0
- package/dist/market-data.d.ts +134 -0
- package/dist/market-data.d.ts.map +1 -0
- package/dist/market-data.js +292 -0
- package/dist/market-data.js.map +1 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +278 -13
- package/dist/modules.js.map +1 -1
- package/dist/packs/excel-emit.d.ts +18 -1
- package/dist/packs/excel-emit.d.ts.map +1 -1
- package/dist/packs/excel-emit.js +18 -1
- package/dist/packs/excel-emit.js.map +1 -1
- package/dist/packs/hospitality.d.ts +3 -0
- package/dist/packs/hospitality.d.ts.map +1 -0
- package/dist/packs/hospitality.js +122 -0
- package/dist/packs/hospitality.js.map +1 -0
- package/dist/packs/index.d.ts +5 -1
- package/dist/packs/index.d.ts.map +1 -1
- package/dist/packs/index.js +13 -1
- package/dist/packs/index.js.map +1 -1
- package/dist/packs/land.d.ts +3 -0
- package/dist/packs/land.d.ts.map +1 -0
- package/dist/packs/land.js +124 -0
- package/dist/packs/land.js.map +1 -0
- package/dist/packs/senior-housing.d.ts +3 -0
- package/dist/packs/senior-housing.d.ts.map +1 -0
- package/dist/packs/senior-housing.js +123 -0
- package/dist/packs/senior-housing.js.map +1 -0
- package/dist/packs/student-housing.d.ts +3 -0
- package/dist/packs/student-housing.d.ts.map +1 -0
- package/dist/packs/student-housing.js +124 -0
- package/dist/packs/student-housing.js.map +1 -0
- package/dist/parser.d.ts +9 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +40 -6
- package/dist/parser.js.map +1 -1
- package/dist/protocol.d.ts +125 -9
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +182 -4
- package/dist/protocol.js.map +1 -1
- package/dist/receipts.d.ts +396 -0
- package/dist/receipts.d.ts.map +1 -0
- package/dist/receipts.js +913 -0
- package/dist/receipts.js.map +1 -0
- package/dist/runner.d.ts +13 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +5 -5
- package/dist/runner.js.map +1 -1
- package/dist/source-representation.d.ts +40 -0
- package/dist/source-representation.d.ts.map +1 -0
- package/dist/source-representation.js +114 -0
- package/dist/source-representation.js.map +1 -0
- package/dist/types.d.ts +63 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +34 -0
- package/dist/types.js.map +1 -1
- package/dist/uwcsv.d.ts.map +1 -1
- package/dist/uwcsv.js +10 -78
- package/dist/uwcsv.js.map +1 -1
- package/dist/uwxml.d.ts.map +1 -1
- package/dist/uwxml.js +10 -2
- package/dist/uwxml.js.map +1 -1
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +27 -10
- package/dist/validator.js.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/zip-safety.d.ts +15 -0
- package/dist/zip-safety.d.ts.map +1 -0
- package/dist/zip-safety.js +109 -0
- package/dist/zip-safety.js.map +1 -0
- 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.
|
|
70
|
-
* 4.
|
|
71
|
-
* 5.
|
|
72
|
-
* 6.
|
|
73
|
-
* 7.
|
|
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
|
package/dist/cascade.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"AAQA,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;QACD,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACvD;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,+EAA+E;IAC/E,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAG,wBAAwB,CAAU;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;gBAEjB,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;CAUpD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,oBAAoB,GAAG,IAAI,CAmB7B;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;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC5C,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;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,GAAG,GAAE,cAAmB,GACvB,aAAa,CAiHf;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAE5E"}
|
package/dist/cascade.js
CHANGED
|
@@ -1,11 +1,52 @@
|
|
|
1
1
|
// Fallback cascade resolver — Protocol §V.7
|
|
2
2
|
//
|
|
3
|
-
// Walks the
|
|
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.
|
|
86
|
-
* 4.
|
|
87
|
-
* 5.
|
|
88
|
-
* 6.
|
|
89
|
-
* 7.
|
|
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 (
|
|
102
|
-
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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],
|
package/dist/cascade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascade.js","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,
|
|
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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"}
|