@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.
Files changed (107) hide show
  1. package/dist/agents/bancroft.js +4 -1
  2. package/dist/agents/bancroft.js.map +1 -1
  3. package/dist/asset-class.d.ts +98 -0
  4. package/dist/asset-class.d.ts.map +1 -0
  5. package/dist/asset-class.js +226 -0
  6. package/dist/asset-class.js.map +1 -0
  7. package/dist/browser.d.ts +26 -8
  8. package/dist/browser.d.ts.map +1 -1
  9. package/dist/browser.js +25 -5
  10. package/dist/browser.js.map +1 -1
  11. package/dist/calc/errors.d.ts +1 -1
  12. package/dist/calc/errors.d.ts.map +1 -1
  13. package/dist/calc/errors.js.map +1 -1
  14. package/dist/calc/evaluator.js +25 -1
  15. package/dist/calc/evaluator.js.map +1 -1
  16. package/dist/calc/prng.d.ts +59 -0
  17. package/dist/calc/prng.d.ts.map +1 -0
  18. package/dist/calc/prng.js +181 -0
  19. package/dist/calc/prng.js.map +1 -0
  20. package/dist/calc/sensitivity.d.ts +76 -0
  21. package/dist/calc/sensitivity.d.ts.map +1 -0
  22. package/dist/calc/sensitivity.js +160 -0
  23. package/dist/calc/sensitivity.js.map +1 -0
  24. package/dist/calc/stochastic.d.ts +97 -0
  25. package/dist/calc/stochastic.d.ts.map +1 -0
  26. package/dist/calc/stochastic.js +265 -0
  27. package/dist/calc/stochastic.js.map +1 -0
  28. package/dist/cascade.d.ts.map +1 -1
  29. package/dist/cascade.js +8 -4
  30. package/dist/cascade.js.map +1 -1
  31. package/dist/cli-args.d.ts +37 -0
  32. package/dist/cli-args.d.ts.map +1 -0
  33. package/dist/cli-args.js +93 -0
  34. package/dist/cli-args.js.map +1 -0
  35. package/dist/cli.js +155 -75
  36. package/dist/cli.js.map +1 -1
  37. package/dist/editor.d.ts +18 -1
  38. package/dist/editor.d.ts.map +1 -1
  39. package/dist/editor.js +68 -7
  40. package/dist/editor.js.map +1 -1
  41. package/dist/format-rules.d.ts +46 -0
  42. package/dist/format-rules.d.ts.map +1 -0
  43. package/dist/format-rules.js +134 -0
  44. package/dist/format-rules.js.map +1 -0
  45. package/dist/format.d.ts +4 -0
  46. package/dist/format.d.ts.map +1 -1
  47. package/dist/format.js +34 -4
  48. package/dist/format.js.map +1 -1
  49. package/dist/index.d.ts +27 -9
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +26 -5
  52. package/dist/index.js.map +1 -1
  53. package/dist/init.d.ts.map +1 -1
  54. package/dist/init.js +16 -4
  55. package/dist/init.js.map +1 -1
  56. package/dist/integrity-canonical.d.ts.map +1 -1
  57. package/dist/integrity-canonical.js +10 -2
  58. package/dist/integrity-canonical.js.map +1 -1
  59. package/dist/integrity.d.ts +92 -4
  60. package/dist/integrity.d.ts.map +1 -1
  61. package/dist/integrity.js +195 -9
  62. package/dist/integrity.js.map +1 -1
  63. package/dist/lease-up.d.ts +134 -0
  64. package/dist/lease-up.d.ts.map +1 -0
  65. package/dist/lease-up.js +196 -0
  66. package/dist/lease-up.js.map +1 -0
  67. package/dist/migrate-source-tags.d.ts +34 -0
  68. package/dist/migrate-source-tags.d.ts.map +1 -0
  69. package/dist/migrate-source-tags.js +179 -0
  70. package/dist/migrate-source-tags.js.map +1 -0
  71. package/dist/module-runtime.d.ts +57 -0
  72. package/dist/module-runtime.d.ts.map +1 -0
  73. package/dist/module-runtime.js +167 -0
  74. package/dist/module-runtime.js.map +1 -0
  75. package/dist/module-signing.d.ts +85 -0
  76. package/dist/module-signing.d.ts.map +1 -0
  77. package/dist/module-signing.js +136 -0
  78. package/dist/module-signing.js.map +1 -0
  79. package/dist/modules.d.ts +42 -0
  80. package/dist/modules.d.ts.map +1 -1
  81. package/dist/modules.js +124 -1
  82. package/dist/modules.js.map +1 -1
  83. package/dist/parser.d.ts.map +1 -1
  84. package/dist/parser.js +28 -1
  85. package/dist/parser.js.map +1 -1
  86. package/dist/protocol.d.ts +249 -24
  87. package/dist/protocol.d.ts.map +1 -1
  88. package/dist/protocol.js +387 -33
  89. package/dist/protocol.js.map +1 -1
  90. package/dist/renderer.d.ts +10 -0
  91. package/dist/renderer.d.ts.map +1 -1
  92. package/dist/renderer.js +72 -8
  93. package/dist/renderer.js.map +1 -1
  94. package/dist/runner.d.ts.map +1 -1
  95. package/dist/runner.js +9 -3
  96. package/dist/runner.js.map +1 -1
  97. package/dist/types.d.ts +124 -5
  98. package/dist/types.d.ts.map +1 -1
  99. package/dist/types.js +44 -0
  100. package/dist/types.js.map +1 -1
  101. package/dist/validator.d.ts +26 -2
  102. package/dist/validator.d.ts.map +1 -1
  103. package/dist/validator.js +336 -19
  104. package/dist/validator.js.map +1 -1
  105. package/dist/version.d.ts +1 -1
  106. package/dist/version.js +1 -1
  107. 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 are removed before hashing.
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":"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"}
1
+ {"version":3,"file":"integrity-canonical.js","sourceRoot":"","sources":["../src/integrity-canonical.ts"],"names":[],"mappings":"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"}
@@ -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.
@@ -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;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKhD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBvE;AAWD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtE;AAID,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CA2EhF;AAID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,QAAQ,GAAE,SAAS,UAAU,EAA0B,GACtD,eAAe,CA0CjB"}
1
+ {"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKhD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBvE;AAWD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtE;AAID,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAYjE;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAS3E;AAED,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,WAAW,CAAC;AAEhB,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAEpF;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAID;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,eAAe,CAAC,CA+E1B;AA8HD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,QAAQ,GAAE,SAAS,UAAU,EAA0B,GACtD,eAAe,CA4CjB"}
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 { BUILTIN_EDIT_POLICIES } from './protocol.js';
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
- if (source.startsWith('system/') || source.startsWith('institution/'))
235
- return 'system';
236
- if (source.startsWith('agent/') || actor.startsWith('agent/'))
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
- return 'human';
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 === 'agent' || actor === 'human';
429
+ return actor !== 'system';
244
430
  case 'agent_only':
245
431
  return actor === 'agent';
246
432
  case 'human_only':
@@ -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":"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"}