@uwmd/core 1.7.0 → 1.9.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/dist/agents/bancroft.js +4 -1
- package/dist/agents/bancroft.js.map +1 -1
- package/dist/asset-class.d.ts +98 -0
- package/dist/asset-class.d.ts.map +1 -0
- package/dist/asset-class.js +226 -0
- package/dist/asset-class.js.map +1 -0
- package/dist/browser.d.ts +26 -8
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +25 -5
- package/dist/browser.js.map +1 -1
- package/dist/calc/errors.d.ts +1 -1
- package/dist/calc/errors.d.ts.map +1 -1
- package/dist/calc/errors.js.map +1 -1
- package/dist/calc/evaluator.js +25 -1
- package/dist/calc/evaluator.js.map +1 -1
- package/dist/calc/prng.d.ts +59 -0
- package/dist/calc/prng.d.ts.map +1 -0
- package/dist/calc/prng.js +181 -0
- package/dist/calc/prng.js.map +1 -0
- package/dist/calc/sensitivity.d.ts +76 -0
- package/dist/calc/sensitivity.d.ts.map +1 -0
- package/dist/calc/sensitivity.js +160 -0
- package/dist/calc/sensitivity.js.map +1 -0
- package/dist/calc/stochastic.d.ts +97 -0
- package/dist/calc/stochastic.d.ts.map +1 -0
- package/dist/calc/stochastic.js +265 -0
- package/dist/calc/stochastic.js.map +1 -0
- package/dist/cascade.d.ts.map +1 -1
- package/dist/cascade.js +8 -4
- package/dist/cascade.js.map +1 -1
- package/dist/cli-args.d.ts +37 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +93 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli.js +155 -75
- package/dist/cli.js.map +1 -1
- package/dist/editor.d.ts +18 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +68 -7
- package/dist/editor.js.map +1 -1
- package/dist/format-rules.d.ts +46 -0
- package/dist/format-rules.d.ts.map +1 -0
- package/dist/format-rules.js +134 -0
- package/dist/format-rules.js.map +1 -0
- package/dist/format.d.ts +4 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +34 -4
- package/dist/format.js.map +1 -1
- package/dist/index.d.ts +27 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -5
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +16 -4
- package/dist/init.js.map +1 -1
- package/dist/integrity-canonical.d.ts.map +1 -1
- package/dist/integrity-canonical.js +10 -2
- package/dist/integrity-canonical.js.map +1 -1
- package/dist/integrity.d.ts +92 -4
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +195 -9
- package/dist/integrity.js.map +1 -1
- package/dist/lease-up.d.ts +134 -0
- package/dist/lease-up.d.ts.map +1 -0
- package/dist/lease-up.js +196 -0
- package/dist/lease-up.js.map +1 -0
- package/dist/migrate-source-tags.d.ts +34 -0
- package/dist/migrate-source-tags.d.ts.map +1 -0
- package/dist/migrate-source-tags.js +179 -0
- package/dist/migrate-source-tags.js.map +1 -0
- package/dist/module-runtime.d.ts +57 -0
- package/dist/module-runtime.d.ts.map +1 -0
- package/dist/module-runtime.js +167 -0
- package/dist/module-runtime.js.map +1 -0
- package/dist/module-signing.d.ts +85 -0
- package/dist/module-signing.d.ts.map +1 -0
- package/dist/module-signing.js +136 -0
- package/dist/module-signing.js.map +1 -0
- package/dist/modules.d.ts +42 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +124 -1
- package/dist/modules.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +28 -1
- package/dist/parser.js.map +1 -1
- package/dist/protocol.d.ts +249 -24
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +387 -33
- package/dist/protocol.js.map +1 -1
- package/dist/renderer.d.ts +10 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +72 -8
- package/dist/renderer.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +9 -3
- package/dist/runner.js.map +1 -1
- package/dist/types.d.ts +124 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +44 -0
- package/dist/types.js.map +1 -1
- package/dist/validator.d.ts +26 -2
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +336 -19
- package/dist/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -2
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// Protocol §V.9 — "Canonical block JSON"
|
|
3
3
|
//
|
|
4
4
|
// Implements RFC 8785 (JCS) with one extension: the keys `content_hash` and
|
|
5
|
-
// `signature` inside any nested `_meta` object
|
|
5
|
+
// `signature` inside any nested `_meta` object (spelled `section`/`section_id`)
|
|
6
|
+
// are removed before hashing.
|
|
6
7
|
// This keeps hash computation idempotent across multiple round trips through
|
|
7
8
|
// the cascade.
|
|
8
9
|
//
|
|
@@ -47,9 +48,16 @@ function stripExcludedKeys(input) {
|
|
|
47
48
|
* meta fields. We strip the excluded keys from every meta-shaped sub-object,
|
|
48
49
|
* not only the top-level `_meta`, so that nested provenance (e.g. inside
|
|
49
50
|
* field_overrides) hashes consistently.
|
|
51
|
+
*
|
|
52
|
+
* `section_id` is accepted alongside `section` because it is the spelling every
|
|
53
|
+
* `.uw.md` on disk actually uses (format spec §3, and the `uwmd-block` schema's
|
|
54
|
+
* own example). Requiring `section` alone meant this predicate returned false
|
|
55
|
+
* for every parsed block, so the two exclusions §V.9 mandates silently never
|
|
56
|
+
* applied outside of hand-built test objects — stamping a `content_hash` then
|
|
57
|
+
* changed the hash it was a digest of, and INT-04 fired on untouched files.
|
|
50
58
|
*/
|
|
51
59
|
function looksLikeMeta(obj) {
|
|
52
|
-
return ('section' in obj &&
|
|
60
|
+
return (('section' in obj || 'section_id' in obj) &&
|
|
53
61
|
'version' in obj &&
|
|
54
62
|
'source' in obj);
|
|
55
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity-canonical.js","sourceRoot":"","sources":["../src/integrity-canonical.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yCAAyC;AACzC,EAAE;AACF,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"integrity-canonical.js","sourceRoot":"","sources":["../src/integrity-canonical.ts"],"names":[],"mappings":"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"}
|
package/dist/integrity.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ParsedUWFile, UWBlock } from './types.js';
|
|
1
|
+
import type { ParsedUWFile, UWBlock, UWBlockSignature } from './types.js';
|
|
2
2
|
import type { EditPolicy } from './protocol.js';
|
|
3
3
|
/**
|
|
4
4
|
* SHA-256 of the canonicalized JSON of `value`. Returns the lowercase hex
|
|
@@ -22,7 +22,7 @@ export declare function sha256BytesHex(bytes: Uint8Array): Promise<string>;
|
|
|
22
22
|
* canonicalizer).
|
|
23
23
|
*/
|
|
24
24
|
export declare function computeBlockHash(block: UWBlock): Promise<string>;
|
|
25
|
-
export type IntegrityCode = 'INT-01' | 'INT-02' | 'INT-03' | 'INT-04' | 'POL-01' | 'POL-02';
|
|
25
|
+
export type IntegrityCode = 'INT-01' | 'INT-02' | 'INT-03' | 'INT-04' | 'INT-05' | 'INT-06' | 'INT-07' | 'INT-08' | 'POL-01' | 'POL-02';
|
|
26
26
|
export interface IntegrityIssue {
|
|
27
27
|
code: IntegrityCode;
|
|
28
28
|
severity: 'error' | 'warning';
|
|
@@ -36,6 +36,83 @@ export interface IntegrityResult {
|
|
|
36
36
|
issues: IntegrityIssue[];
|
|
37
37
|
chains_verified: number;
|
|
38
38
|
chains_with_hashes: number;
|
|
39
|
+
/**
|
|
40
|
+
* How many blocks carry `_meta.signature` (RFC 0010). Reported even when no
|
|
41
|
+
* verifier was supplied, so a caller can tell "no signatures" apart from
|
|
42
|
+
* "signatures present but unchecked" — the distinction that makes a
|
|
43
|
+
* `signatures_verified: 0` result readable.
|
|
44
|
+
*/
|
|
45
|
+
signatures_present: number;
|
|
46
|
+
/**
|
|
47
|
+
* How many signatures cryptographically verified. Always 0 without a
|
|
48
|
+
* `signatureVerifier`; never inferred from the signature's mere presence.
|
|
49
|
+
*/
|
|
50
|
+
signatures_verified: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The canonical JSON a block signature covers.
|
|
54
|
+
*
|
|
55
|
+
* Deliberately not the block itself: the signer commits to the block's
|
|
56
|
+
* `content_hash` (which already covers the content), plus the four provenance
|
|
57
|
+
* facts a verifier needs in order to say *who* signed *what*, *when*. Signing
|
|
58
|
+
* the block directly would re-derive the hash for no gain and would drag
|
|
59
|
+
* `parent_hash` into the commitment — see {@link UWBlockSignature}.
|
|
60
|
+
*/
|
|
61
|
+
export interface BlockSigningInput {
|
|
62
|
+
content_hash: string;
|
|
63
|
+
section: string;
|
|
64
|
+
actor: string;
|
|
65
|
+
timestamp: string;
|
|
66
|
+
kid: string;
|
|
67
|
+
signed_at: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Build the exact bytes a signature is computed over: RFC 8785 canonical JSON
|
|
71
|
+
* of {@link BlockSigningInput}. Crypto-free, so it lives in core — signer and
|
|
72
|
+
* verifier MUST agree on this string or nothing else matters.
|
|
73
|
+
*
|
|
74
|
+
* Returns `null` when the block cannot produce a signing input at all (no
|
|
75
|
+
* `content_hash`, or no signature to take `kid`/`signed_at` from).
|
|
76
|
+
*/
|
|
77
|
+
export declare function blockSigningPayload(block: UWBlock): string | null;
|
|
78
|
+
/**
|
|
79
|
+
* Canonicalize an explicit signing input.
|
|
80
|
+
*
|
|
81
|
+
* The signer needs this and {@link blockSigningPayload} cannot serve it: at
|
|
82
|
+
* signing time the block has no `_meta.signature` yet, so there is nowhere to
|
|
83
|
+
* read `kid` and `signed_at` from. Both paths funnel through this one function
|
|
84
|
+
* so the two sides cannot drift.
|
|
85
|
+
*/
|
|
86
|
+
export declare function canonicalBlockSigningInput(input: BlockSigningInput): string;
|
|
87
|
+
/** Why a signature failed to verify. Mirrors RFC 0010's `SigVerifyError`. */
|
|
88
|
+
export type BlockSigFailure = 'unknown_kid' | 'algorithm_mismatch' | 'bad_signature' | 'malformed';
|
|
89
|
+
export type BlockSigVerdict = {
|
|
90
|
+
ok: true;
|
|
91
|
+
} | {
|
|
92
|
+
ok: false;
|
|
93
|
+
reason: BlockSigFailure;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Plugged in by `@uwmd/signing`; absent here so core stays crypto-free (the
|
|
97
|
+
* same seam `ReceiptSignatureVerifier` uses for receipts).
|
|
98
|
+
*/
|
|
99
|
+
export interface BlockSignatureVerifier {
|
|
100
|
+
verify(payload: string, signature: UWBlockSignature): Promise<BlockSigVerdict>;
|
|
101
|
+
}
|
|
102
|
+
export interface VerifyChainOptions {
|
|
103
|
+
/**
|
|
104
|
+
* Supplied by a signing package. Without it, INT-06/INT-07 never fire and a
|
|
105
|
+
* signed block is treated exactly like an unsigned one — verification is
|
|
106
|
+
* opt-in, and silently "passing" an unchecked signature is the failure this
|
|
107
|
+
* design most wants to avoid, which is what `signatures_present` reports.
|
|
108
|
+
*/
|
|
109
|
+
signatureVerifier?: BlockSignatureVerifier;
|
|
110
|
+
/**
|
|
111
|
+
* Algorithms to flag as deprecated (INT-08). Empty at protocol 1.7 — no
|
|
112
|
+
* admitted algorithm is deprecated yet — but the knob exists so a deployment
|
|
113
|
+
* can retire one ahead of the spec.
|
|
114
|
+
*/
|
|
115
|
+
deprecatedAlgorithms?: readonly string[];
|
|
39
116
|
}
|
|
40
117
|
/**
|
|
41
118
|
* For every supersede chain in the parsed file:
|
|
@@ -47,9 +124,20 @@ export interface IntegrityResult {
|
|
|
47
124
|
* `content_hash` (else INT-01 error).
|
|
48
125
|
*
|
|
49
126
|
* A chain with no hashes at all yields no findings and is not counted in
|
|
50
|
-
* `chains_verified
|
|
127
|
+
* `chains_verified` — but its blocks are still swept for signatures, because a
|
|
128
|
+
* signature over a block that has no `content_hash` commits to nothing and is
|
|
129
|
+
* exactly the case INT-05 exists to catch.
|
|
130
|
+
*
|
|
131
|
+
* Signature checks (protocol §V.11) run over every block in the file:
|
|
132
|
+
* - INT-05 error — `signature` present with no `content_hash`.
|
|
133
|
+
* - INT-07 error — the stamped `content_hash` no longer recomputes, so the
|
|
134
|
+
* signature covers content that is no longer there (INT-04 reports the same
|
|
135
|
+
* drift as a warning; on a signed block it is an error).
|
|
136
|
+
* - INT-06 error — `kid` unknown to the supplied store.
|
|
137
|
+
* - INT-07 error — the signature does not verify.
|
|
138
|
+
* - INT-08 warning — the algorithm is in the caller's deprecation list.
|
|
51
139
|
*/
|
|
52
|
-
export declare function verifyChain(parsed: ParsedUWFile): Promise<IntegrityResult>;
|
|
140
|
+
export declare function verifyChain(parsed: ParsedUWFile, options?: VerifyChainOptions): Promise<IntegrityResult>;
|
|
53
141
|
/**
|
|
54
142
|
* Cross-check `_meta.actor` and the operation that produced the block against
|
|
55
143
|
* BUILTIN_EDIT_POLICIES.
|
package/dist/integrity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
package/dist/integrity.js
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
// - SHA-256 implementation is split between Node (`createHash`) and Web
|
|
10
10
|
// Crypto (`crypto.subtle`). The browser entry point binds the latter via
|
|
11
11
|
// subpath export when adopters import from `@uwmd/core/browser`.
|
|
12
|
-
import { canonicalize } from './integrity-canonical.js';
|
|
13
|
-
import {
|
|
12
|
+
import { canonicalize, canonicalizeExact } from './integrity-canonical.js';
|
|
13
|
+
import { UW_SIGNATURE_ALGORITHMS } from './types.js';
|
|
14
|
+
import { BUILTIN_EDIT_POLICIES, parseActorSource } from './protocol.js';
|
|
14
15
|
// ─── Hashing ─────────────────────────────────────────────────────────────────
|
|
15
16
|
/**
|
|
16
17
|
* SHA-256 of the canonicalized JSON of `value`. Returns the lowercase hex
|
|
@@ -63,6 +64,46 @@ export async function computeBlockHash(block) {
|
|
|
63
64
|
// stripped by the canonicalizer.
|
|
64
65
|
return sha256Hex({ ...block.content, _meta: block.meta });
|
|
65
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Build the exact bytes a signature is computed over: RFC 8785 canonical JSON
|
|
69
|
+
* of {@link BlockSigningInput}. Crypto-free, so it lives in core — signer and
|
|
70
|
+
* verifier MUST agree on this string or nothing else matters.
|
|
71
|
+
*
|
|
72
|
+
* Returns `null` when the block cannot produce a signing input at all (no
|
|
73
|
+
* `content_hash`, or no signature to take `kid`/`signed_at` from).
|
|
74
|
+
*/
|
|
75
|
+
export function blockSigningPayload(block) {
|
|
76
|
+
const sig = block.meta.signature;
|
|
77
|
+
const hash = block.meta.content_hash;
|
|
78
|
+
if (!sig || typeof hash !== 'string')
|
|
79
|
+
return null;
|
|
80
|
+
return canonicalBlockSigningInput({
|
|
81
|
+
content_hash: hash,
|
|
82
|
+
section: block.meta.section,
|
|
83
|
+
actor: block.meta.actor,
|
|
84
|
+
timestamp: block.meta.timestamp,
|
|
85
|
+
kid: sig.kid,
|
|
86
|
+
signed_at: sig.signed_at,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Canonicalize an explicit signing input.
|
|
91
|
+
*
|
|
92
|
+
* The signer needs this and {@link blockSigningPayload} cannot serve it: at
|
|
93
|
+
* signing time the block has no `_meta.signature` yet, so there is nowhere to
|
|
94
|
+
* read `kid` and `signed_at` from. Both paths funnel through this one function
|
|
95
|
+
* so the two sides cannot drift.
|
|
96
|
+
*/
|
|
97
|
+
export function canonicalBlockSigningInput(input) {
|
|
98
|
+
return canonicalizeExact({
|
|
99
|
+
content_hash: input.content_hash,
|
|
100
|
+
section: input.section,
|
|
101
|
+
actor: input.actor,
|
|
102
|
+
timestamp: input.timestamp,
|
|
103
|
+
kid: input.kid,
|
|
104
|
+
signed_at: input.signed_at,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
66
107
|
// ─── Chain verification ──────────────────────────────────────────────────────
|
|
67
108
|
/**
|
|
68
109
|
* For every supersede chain in the parsed file:
|
|
@@ -74,9 +115,20 @@ export async function computeBlockHash(block) {
|
|
|
74
115
|
* `content_hash` (else INT-01 error).
|
|
75
116
|
*
|
|
76
117
|
* A chain with no hashes at all yields no findings and is not counted in
|
|
77
|
-
* `chains_verified
|
|
118
|
+
* `chains_verified` — but its blocks are still swept for signatures, because a
|
|
119
|
+
* signature over a block that has no `content_hash` commits to nothing and is
|
|
120
|
+
* exactly the case INT-05 exists to catch.
|
|
121
|
+
*
|
|
122
|
+
* Signature checks (protocol §V.11) run over every block in the file:
|
|
123
|
+
* - INT-05 error — `signature` present with no `content_hash`.
|
|
124
|
+
* - INT-07 error — the stamped `content_hash` no longer recomputes, so the
|
|
125
|
+
* signature covers content that is no longer there (INT-04 reports the same
|
|
126
|
+
* drift as a warning; on a signed block it is an error).
|
|
127
|
+
* - INT-06 error — `kid` unknown to the supplied store.
|
|
128
|
+
* - INT-07 error — the signature does not verify.
|
|
129
|
+
* - INT-08 warning — the algorithm is in the caller's deprecation list.
|
|
78
130
|
*/
|
|
79
|
-
export async function verifyChain(parsed) {
|
|
131
|
+
export async function verifyChain(parsed, options = {}) {
|
|
80
132
|
const issues = [];
|
|
81
133
|
let chainsWithHashes = 0;
|
|
82
134
|
let chainsVerified = 0;
|
|
@@ -140,14 +192,128 @@ export async function verifyChain(parsed) {
|
|
|
140
192
|
if (chainOK)
|
|
141
193
|
chainsVerified++;
|
|
142
194
|
}
|
|
195
|
+
const sig = await verifySignatures(parsed, issues, options);
|
|
143
196
|
const errors = issues.filter((i) => i.severity === 'error').length;
|
|
144
197
|
return {
|
|
145
198
|
ok: errors === 0,
|
|
146
199
|
issues,
|
|
147
200
|
chains_verified: chainsVerified,
|
|
148
201
|
chains_with_hashes: chainsWithHashes,
|
|
202
|
+
signatures_present: sig.present,
|
|
203
|
+
signatures_verified: sig.verified,
|
|
149
204
|
};
|
|
150
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Sweep every block in the file for `_meta.signature` and append INT-05..08.
|
|
208
|
+
*
|
|
209
|
+
* Walks all blocks — heads, superseded priors, and every variant — rather than
|
|
210
|
+
* the per-section chain heads `verifyChain` walks. A signature on a superseded
|
|
211
|
+
* block is the whole point of per-block signing: "the sponsor signed *this*
|
|
212
|
+
* version of the rent roll" must stay checkable after the block is superseded.
|
|
213
|
+
*/
|
|
214
|
+
async function verifySignatures(parsed, issues, options) {
|
|
215
|
+
const deprecated = options.deprecatedAlgorithms ?? [];
|
|
216
|
+
let present = 0;
|
|
217
|
+
let verified = 0;
|
|
218
|
+
for (const [sectionId, block] of everyBlock(parsed)) {
|
|
219
|
+
const signature = block.meta.signature;
|
|
220
|
+
if (!signature)
|
|
221
|
+
continue;
|
|
222
|
+
present++;
|
|
223
|
+
const where = `Block v${block.meta.version} of '${sectionId}'`;
|
|
224
|
+
if (deprecated.includes(signature.alg)) {
|
|
225
|
+
issues.push({
|
|
226
|
+
code: 'INT-08',
|
|
227
|
+
severity: 'warning',
|
|
228
|
+
section: sectionId,
|
|
229
|
+
message: `${where} is signed with deprecated algorithm '${signature.alg}'.`,
|
|
230
|
+
actual: signature.alg,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// INT-05 needs no key material: a signature over an absent content_hash is
|
|
234
|
+
// structurally void, so it is reported whether or not a verifier exists.
|
|
235
|
+
const payload = blockSigningPayload(block);
|
|
236
|
+
if (payload === null) {
|
|
237
|
+
issues.push({
|
|
238
|
+
code: 'INT-05',
|
|
239
|
+
severity: 'error',
|
|
240
|
+
section: sectionId,
|
|
241
|
+
message: `${where} carries a signature but no content_hash, so the signature commits to nothing.`,
|
|
242
|
+
});
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// A signed block whose stamped hash no longer recomputes is INT-07 as well
|
|
246
|
+
// as INT-04, and the escalation from warning to error is the point: on an
|
|
247
|
+
// unsigned block a drifted hash is a bookkeeping slip, but on a signed one
|
|
248
|
+
// it means the content in front of you is not the content anybody signed.
|
|
249
|
+
const recomputed = await computeBlockHash(block);
|
|
250
|
+
if (recomputed !== block.meta.content_hash) {
|
|
251
|
+
issues.push({
|
|
252
|
+
code: 'INT-07',
|
|
253
|
+
severity: 'error',
|
|
254
|
+
section: sectionId,
|
|
255
|
+
message: `${where} was signed over content_hash ${block.meta.content_hash}, but its content now hashes to ${recomputed}.`,
|
|
256
|
+
expected: recomputed,
|
|
257
|
+
actual: block.meta.content_hash,
|
|
258
|
+
});
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (!UW_SIGNATURE_ALGORITHMS.includes(signature.alg)) {
|
|
262
|
+
issues.push({
|
|
263
|
+
code: 'INT-07',
|
|
264
|
+
severity: 'error',
|
|
265
|
+
section: sectionId,
|
|
266
|
+
message: `${where} declares unrecognized signature algorithm '${signature.alg}'.`,
|
|
267
|
+
expected: UW_SIGNATURE_ALGORITHMS.join('|'),
|
|
268
|
+
actual: signature.alg,
|
|
269
|
+
});
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
if (!options.signatureVerifier)
|
|
273
|
+
continue;
|
|
274
|
+
const verdict = await options.signatureVerifier.verify(payload, signature);
|
|
275
|
+
if (verdict.ok) {
|
|
276
|
+
verified++;
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
if (verdict.reason === 'unknown_kid') {
|
|
280
|
+
issues.push({
|
|
281
|
+
code: 'INT-06',
|
|
282
|
+
severity: 'error',
|
|
283
|
+
section: sectionId,
|
|
284
|
+
message: `${where} is signed by key '${signature.kid}', which this verifier's key store does not hold.`,
|
|
285
|
+
actual: signature.kid,
|
|
286
|
+
});
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
issues.push({
|
|
290
|
+
code: 'INT-07',
|
|
291
|
+
severity: 'error',
|
|
292
|
+
section: sectionId,
|
|
293
|
+
message: `${where} signature did not verify (${verdict.reason}).`,
|
|
294
|
+
actual: signature.kid,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return { present, verified };
|
|
298
|
+
}
|
|
299
|
+
/** Every block in the file, superseded priors and variants included. */
|
|
300
|
+
function* everyBlock(parsed) {
|
|
301
|
+
for (const [sectionId, prior] of Object.entries(parsed.superseded)) {
|
|
302
|
+
for (const block of prior)
|
|
303
|
+
yield [sectionId, block];
|
|
304
|
+
}
|
|
305
|
+
for (const [sectionId, entry] of Object.entries(parsed.sections)) {
|
|
306
|
+
if (!entry)
|
|
307
|
+
continue;
|
|
308
|
+
if ('annotation' in entry) {
|
|
309
|
+
yield [sectionId, entry];
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
for (const variant of Object.values(entry)) {
|
|
313
|
+
yield [sectionId, variant];
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
151
317
|
// ─── Provenance verification ─────────────────────────────────────────────────
|
|
152
318
|
/**
|
|
153
319
|
* Cross-check `_meta.actor` and the operation that produced the block against
|
|
@@ -195,6 +361,8 @@ export function verifyProvenance(parsed, policies = BUILTIN_EDIT_POLICIES) {
|
|
|
195
361
|
issues,
|
|
196
362
|
chains_verified: 0,
|
|
197
363
|
chains_with_hashes: 0,
|
|
364
|
+
signatures_present: 0,
|
|
365
|
+
signatures_verified: 0,
|
|
198
366
|
};
|
|
199
367
|
}
|
|
200
368
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
@@ -230,17 +398,35 @@ function globMatch(pattern, value) {
|
|
|
230
398
|
}
|
|
231
399
|
return false;
|
|
232
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Classify from the parsed actor namespace, not string prefixes (RFC 0031).
|
|
403
|
+
* A source outside the actor grammar — a legacy colon form, a bare word, a
|
|
404
|
+
* resolution tag — classifies as `unknown`, never as human by default.
|
|
405
|
+
* `document/*` is likewise `unknown`: a document is evidence, not an
|
|
406
|
+
* authority class.
|
|
407
|
+
*/
|
|
233
408
|
function classifyActor(actor, source) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
409
|
+
const s = parseActorSource(source);
|
|
410
|
+
if (s.kind === 'namespaced') {
|
|
411
|
+
if (s.namespace === 'system' || s.namespace === 'institution')
|
|
412
|
+
return 'system';
|
|
413
|
+
if (s.namespace === 'agent')
|
|
414
|
+
return 'agent';
|
|
415
|
+
}
|
|
416
|
+
const a = parseActorSource(actor);
|
|
417
|
+
if (a.kind === 'namespaced' && a.namespace === 'agent')
|
|
237
418
|
return 'agent';
|
|
238
|
-
|
|
419
|
+
if (s.kind === 'manual')
|
|
420
|
+
return 'human';
|
|
421
|
+
return 'unknown';
|
|
239
422
|
}
|
|
240
423
|
function authorityAllows(authority, actor) {
|
|
241
424
|
switch (authority) {
|
|
425
|
+
// `unknown` passes `either`: refusing it would turn every legacy source in
|
|
426
|
+
// the wild into a POL-01, which is a migration, not a bug fix. It can
|
|
427
|
+
// never satisfy the three restricted classes below.
|
|
242
428
|
case 'either':
|
|
243
|
-
return actor
|
|
429
|
+
return actor !== 'system';
|
|
244
430
|
case 'agent_only':
|
|
245
431
|
return actor === 'agent';
|
|
246
432
|
case 'human_only':
|
package/dist/integrity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { ParsedUWFile } from './types.js';
|
|
2
|
+
/** How the schedule models the trajectory. Closed and non-extensible. */
|
|
3
|
+
export type LeaseUpModelType = 'natural_turnover' | 'absorption_curve';
|
|
4
|
+
/** Period cadence, uniform per schedule (§4.25 period grammar). */
|
|
5
|
+
export type LeaseUpGranularity = 'monthly' | 'quarterly';
|
|
6
|
+
/**
|
|
7
|
+
* One period of the lease-up trajectory. All rates are fractions (0.18 = 18%),
|
|
8
|
+
* all dollar figures period totals. Only `period` is required; a period that
|
|
9
|
+
* omits a cash-flow component makes the stated `net_cash_flow` unverifiable
|
|
10
|
+
* for that row, never wrong.
|
|
11
|
+
*/
|
|
12
|
+
export interface LeaseUpPeriod {
|
|
13
|
+
/** `YYYY-Qn` (quarterly) or `YYYY-MM` (monthly), per `period_granularity`. */
|
|
14
|
+
period: string;
|
|
15
|
+
occupied_sf?: number | null;
|
|
16
|
+
leased_sf?: number | null;
|
|
17
|
+
in_place_rent_psf?: number | null;
|
|
18
|
+
market_rent_psf?: number | null;
|
|
19
|
+
vacancy_rate?: number | null;
|
|
20
|
+
rent_revenue?: number | null;
|
|
21
|
+
concessions?: number | null;
|
|
22
|
+
ti_lc_capex?: number | null;
|
|
23
|
+
net_cash_flow?: number | null;
|
|
24
|
+
}
|
|
25
|
+
/** The assumption set driving the schedule. Deal thesis, never defaulted. */
|
|
26
|
+
export interface LeaseUpAssumptions {
|
|
27
|
+
monthly_turnover_rate?: number | null;
|
|
28
|
+
market_rent_psf_at_stabilization?: number | null;
|
|
29
|
+
vacancy_during_lease_up?: number | null;
|
|
30
|
+
concession_months_per_lease?: number | null;
|
|
31
|
+
tenant_improvement_psf?: number | null;
|
|
32
|
+
leasing_commission_rate?: number | null;
|
|
33
|
+
}
|
|
34
|
+
/** The stated endpoint the trajectory claims to reach. */
|
|
35
|
+
export interface LeaseUpStabilizedSummary {
|
|
36
|
+
occupied_sf?: number | null;
|
|
37
|
+
occupancy_rate?: number | null;
|
|
38
|
+
annualized_egi?: number | null;
|
|
39
|
+
annualized_noi?: number | null;
|
|
40
|
+
}
|
|
41
|
+
/** The `lease_up_schedule` section content (UW_FORMAT_SPEC §4.25). */
|
|
42
|
+
export interface LeaseUpSchedule {
|
|
43
|
+
model_type: LeaseUpModelType;
|
|
44
|
+
period_granularity: LeaseUpGranularity;
|
|
45
|
+
stabilization_target?: string | null;
|
|
46
|
+
assumptions?: LeaseUpAssumptions | null;
|
|
47
|
+
schedule: LeaseUpPeriod[];
|
|
48
|
+
stabilized_summary?: LeaseUpStabilizedSummary | null;
|
|
49
|
+
}
|
|
50
|
+
export type LeaseUpVerdict = 'verified' | 'failed' | 'unverifiable';
|
|
51
|
+
export type LeaseUpIssueCode =
|
|
52
|
+
/** A period's stated net_cash_flow disagrees with its stated components. */
|
|
53
|
+
'LU-NCF-DISAGREES'
|
|
54
|
+
/** A stabilized_summary figure disagrees with the final period. */
|
|
55
|
+
| 'LU-SUMMARY-DISAGREES'
|
|
56
|
+
/** A stated figure reads an input the document does not supply — undecided, never zero. */
|
|
57
|
+
| 'LU-UNEVALUABLE';
|
|
58
|
+
export interface LeaseUpIssue {
|
|
59
|
+
code: LeaseUpIssueCode;
|
|
60
|
+
severity: 'failure' | 'indeterminate';
|
|
61
|
+
message: string;
|
|
62
|
+
/** The period this issue anchors to, when row-level. */
|
|
63
|
+
period?: string;
|
|
64
|
+
expected?: string;
|
|
65
|
+
actual?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface LeaseUpVerification {
|
|
68
|
+
verdict: LeaseUpVerdict;
|
|
69
|
+
issues: LeaseUpIssue[];
|
|
70
|
+
}
|
|
71
|
+
/** The document-level inputs the summary figures divide. */
|
|
72
|
+
export interface LeaseUpContext {
|
|
73
|
+
/**
|
|
74
|
+
* The occupancy denominator in square feet, resolved through the Protocol
|
|
75
|
+
* §XIII size-intensive registry. `null` when the deal's class has no
|
|
76
|
+
* sqft-basis primary size or the document does not state it — which makes
|
|
77
|
+
* `occupancy_rate` `unverifiable`, never a guess.
|
|
78
|
+
*/
|
|
79
|
+
total_sf: number | null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The decimal quantum each figure family is compared at (protocol §VIII.5
|
|
83
|
+
* posture: both sides quantize at the same boundary). Currency to cents; rates
|
|
84
|
+
* to 4 places, like the capital-stack sizing table. Exported so an emitting
|
|
85
|
+
* surface quantizes where this verifier does rather than keeping its own copy.
|
|
86
|
+
*/
|
|
87
|
+
export declare const LEASE_UP_VERIFY_DECIMALS: Readonly<{
|
|
88
|
+
readonly currency: 2;
|
|
89
|
+
readonly rate: 4;
|
|
90
|
+
readonly sf: 2;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* The relative tolerance CC-15 allows between the schedule's final period /
|
|
94
|
+
* stabilized summary and `noi_model`'s stabilized figures (2%). Deliberate,
|
|
95
|
+
* not softness: unlike CC-01 (one number restated in two places, exact), the
|
|
96
|
+
* trajectory endpoint and the stabilized-year projection are two different
|
|
97
|
+
* models of stabilization, and demanding exact agreement would force
|
|
98
|
+
* producers to hand-tune one to echo the other — destroying the
|
|
99
|
+
* independent-model signal the check exists to read (RFC 0008).
|
|
100
|
+
*/
|
|
101
|
+
export declare const LEASE_UP_STABILIZED_TOLERANCE = 0.02;
|
|
102
|
+
/**
|
|
103
|
+
* Recompute every stated aggregate and report a three-state verdict:
|
|
104
|
+
* - a figure disagrees beyond its quantum → `failed`
|
|
105
|
+
* - a figure reads an input the document does not supply → `unverifiable`
|
|
106
|
+
* - otherwise → `verified`
|
|
107
|
+
*
|
|
108
|
+
* The closed recompute vocabulary (§4.25):
|
|
109
|
+
* - per period: `net_cash_flow` = `rent_revenue + concessions + ti_lc_capex`
|
|
110
|
+
* (all stated; a missing component is `unverifiable` for that row)
|
|
111
|
+
* - `stabilized_summary.occupied_sf` against the final period's
|
|
112
|
+
* - `stabilized_summary.occupancy_rate` = final `occupied_sf` ÷ `ctx.total_sf`
|
|
113
|
+
*
|
|
114
|
+
* A `verified` schedule means the stated figures follow deterministically from
|
|
115
|
+
* the stated rows. It does not mean the trajectory is achievable.
|
|
116
|
+
*/
|
|
117
|
+
export declare function verifyLeaseUpSchedule(schedule: LeaseUpSchedule, ctx: LeaseUpContext): LeaseUpVerification;
|
|
118
|
+
/**
|
|
119
|
+
* Pull the occupancy denominator from a parsed document through the Protocol
|
|
120
|
+
* §XIII size-intensive registry — which is what the registry exists for. Only
|
|
121
|
+
* a `sqft`-unit primary size is a valid denominator for `occupied_sf`; a
|
|
122
|
+
* keys/units/beds class resolves to `null`, which makes `occupancy_rate`
|
|
123
|
+
* `unverifiable` rather than dimensionally wrong. A multifamily document that
|
|
124
|
+
* states its secondary `total_nra_sqft` supplies the denominator that way.
|
|
125
|
+
*/
|
|
126
|
+
export declare function leaseUpContext(parsed: ParsedUWFile): LeaseUpContext;
|
|
127
|
+
/**
|
|
128
|
+
* A period's ordinal on its granularity's axis, or `null` when the string is
|
|
129
|
+
* outside the grammar for that granularity. Consecutive periods differ by
|
|
130
|
+
* exactly 1, which is what makes the validator's gap-free check (`LU-02`) a
|
|
131
|
+
* subtraction rather than a calendar library.
|
|
132
|
+
*/
|
|
133
|
+
export declare function leaseUpPeriodOrdinal(period: string, granularity: LeaseUpGranularity): number | null;
|
|
134
|
+
//# sourceMappingURL=lease-up.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease-up.d.ts","sourceRoot":"","sources":["../src/lease-up.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,yEAAyE;AACzE,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEvE,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,WAAW,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,gCAAgC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,cAAc,CAAC;AAEpE,MAAM,MAAM,gBAAgB;AAC1B,4EAA4E;AAC1E,kBAAkB;AACpB,mEAAmE;GACjE,sBAAsB;AACxB,2FAA2F;GACzF,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,SAAS,GAAG,eAAe,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAID;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;;EAI1B,CAAC;AAEZ;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAalD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,cAAc,GAClB,mBAAmB,CAuFrB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAanE;AAOD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,GAC9B,MAAM,GAAG,IAAI,CASf"}
|