@uwmd/core 1.8.0 → 1.10.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 (65) hide show
  1. package/dist/browser.d.ts +11 -3
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +6 -2
  4. package/dist/browser.js.map +1 -1
  5. package/dist/cli.js +121 -8
  6. package/dist/cli.js.map +1 -1
  7. package/dist/editor.d.ts +18 -1
  8. package/dist/editor.d.ts.map +1 -1
  9. package/dist/editor.js +55 -1
  10. package/dist/editor.js.map +1 -1
  11. package/dist/format-rules.d.ts +46 -0
  12. package/dist/format-rules.d.ts.map +1 -0
  13. package/dist/format-rules.js +134 -0
  14. package/dist/format-rules.js.map +1 -0
  15. package/dist/format.d.ts +4 -0
  16. package/dist/format.d.ts.map +1 -1
  17. package/dist/format.js +34 -4
  18. package/dist/format.js.map +1 -1
  19. package/dist/index.d.ts +12 -4
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +7 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/integrity-canonical.d.ts +20 -0
  24. package/dist/integrity-canonical.d.ts.map +1 -1
  25. package/dist/integrity-canonical.js +66 -0
  26. package/dist/integrity-canonical.js.map +1 -1
  27. package/dist/integrity.d.ts +10 -1
  28. package/dist/integrity.d.ts.map +1 -1
  29. package/dist/integrity.js +22 -6
  30. package/dist/integrity.js.map +1 -1
  31. package/dist/lease-up.d.ts +134 -0
  32. package/dist/lease-up.d.ts.map +1 -0
  33. package/dist/lease-up.js +196 -0
  34. package/dist/lease-up.js.map +1 -0
  35. package/dist/meta-shape.d.ts +96 -0
  36. package/dist/meta-shape.d.ts.map +1 -0
  37. package/dist/meta-shape.js +211 -0
  38. package/dist/meta-shape.js.map +1 -0
  39. package/dist/migrate-to-v2.d.ts +42 -0
  40. package/dist/migrate-to-v2.d.ts.map +1 -0
  41. package/dist/migrate-to-v2.js +0 -0
  42. package/dist/migrate-to-v2.js.map +1 -0
  43. package/dist/parser.d.ts.map +1 -1
  44. package/dist/parser.js +14 -1
  45. package/dist/parser.js.map +1 -1
  46. package/dist/protocol.d.ts +152 -4
  47. package/dist/protocol.d.ts.map +1 -1
  48. package/dist/protocol.js +330 -2
  49. package/dist/protocol.js.map +1 -1
  50. package/dist/renderer.d.ts +10 -0
  51. package/dist/renderer.d.ts.map +1 -1
  52. package/dist/renderer.js +72 -8
  53. package/dist/renderer.js.map +1 -1
  54. package/dist/types.d.ts +13 -0
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/types.js.map +1 -1
  57. package/dist/validator.d.ts +3 -48
  58. package/dist/validator.d.ts.map +1 -1
  59. package/dist/validator.js +194 -64
  60. package/dist/validator.js.map +1 -1
  61. package/dist/version.d.ts +1 -1
  62. package/dist/version.d.ts.map +1 -1
  63. package/dist/version.js +1 -1
  64. package/dist/version.js.map +1 -1
  65. package/package.json +2 -2
@@ -1,3 +1,4 @@
1
+ import type { MetaShape } from './meta-shape.js';
1
2
  import type { ParsedUWFile, UWBlock, UWBlockSignature } from './types.js';
2
3
  import type { EditPolicy } from './protocol.js';
3
4
  /**
@@ -20,8 +21,16 @@ export declare function sha256BytesHex(bytes: Uint8Array): Promise<string>;
20
21
  * Compute the content_hash for a block. Strips the block's own
21
22
  * `_meta.content_hash` and `_meta.signature` before hashing (handled by the
22
23
  * canonicalizer).
24
+ *
25
+ * Canonicalization is versioned by the file's `uw_version` (RFC 0009):
26
+ * `shape: 'v1'` (the default) is the frozen 1.x rule; `shape: 'v2'` is the
27
+ * normalize-then-hash rule for `uw_version: "2.0"` files — the block content
28
+ * is reshaped to the canonical nested form first, so both accepted parser
29
+ * shapes yield the identical digest.
23
30
  */
24
- export declare function computeBlockHash(block: UWBlock): Promise<string>;
31
+ export declare function computeBlockHash(block: UWBlock, options?: {
32
+ shape?: MetaShape;
33
+ }): Promise<string>;
25
34
  export type IntegrityCode = 'INT-01' | 'INT-02' | 'INT-03' | 'INT-04' | 'INT-05' | 'INT-06' | 'INT-07' | 'INT-08' | 'POL-01' | 'POL-02';
26
35
  export interface IntegrityIssue {
27
36
  code: IntegrityCode;
@@ -1 +1 @@
1
- {"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
package/dist/integrity.js CHANGED
@@ -9,7 +9,8 @@
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, canonicalizeExact } from './integrity-canonical.js';
12
+ import { canonicalize, canonicalizeExact, canonicalizeV2 } from './integrity-canonical.js';
13
+ import { canonicalV2BlockContent, isV2File } from './meta-shape.js';
13
14
  import { UW_SIGNATURE_ALGORITHMS } from './types.js';
14
15
  import { BUILTIN_EDIT_POLICIES, parseActorSource } from './protocol.js';
15
16
  // ─── Hashing ─────────────────────────────────────────────────────────────────
@@ -57,11 +58,21 @@ function bytesToHex(bytes) {
57
58
  * Compute the content_hash for a block. Strips the block's own
58
59
  * `_meta.content_hash` and `_meta.signature` before hashing (handled by the
59
60
  * canonicalizer).
61
+ *
62
+ * Canonicalization is versioned by the file's `uw_version` (RFC 0009):
63
+ * `shape: 'v1'` (the default) is the frozen 1.x rule; `shape: 'v2'` is the
64
+ * normalize-then-hash rule for `uw_version: "2.0"` files — the block content
65
+ * is reshaped to the canonical nested form first, so both accepted parser
66
+ * shapes yield the identical digest.
60
67
  */
61
- export async function computeBlockHash(block) {
68
+ export async function computeBlockHash(block, options = {}) {
62
69
  // The canonical scope is the block CONTENT including meta, since meta
63
- // carries the cascade-relevant provenance. The two excluded keys are
64
- // stripped by the canonicalizer.
70
+ // carries the cascade-relevant provenance. The excluded keys are stripped
71
+ // by the canonicalizer.
72
+ if (options.shape === 'v2') {
73
+ const normalized = canonicalV2BlockContent({ ...block.content, _meta: block.meta });
74
+ return sha256TextHex(canonicalizeV2(normalized));
75
+ }
65
76
  return sha256Hex({ ...block.content, _meta: block.meta });
66
77
  }
67
78
  /**
@@ -132,6 +143,9 @@ export async function verifyChain(parsed, options = {}) {
132
143
  const issues = [];
133
144
  let chainsWithHashes = 0;
134
145
  let chainsVerified = 0;
146
+ // Canonicalization is versioned by the file's own frontmatter (RFC 0009):
147
+ // digests in a `uw_version: "2.0"` file recompute under the v2 rule.
148
+ const shape = isV2File(parsed.frontmatter) ? 'v2' : 'v1';
135
149
  for (const sectionId of Object.keys(parsed.sections)) {
136
150
  // Build the chain: prior (superseded) blocks first, then current head.
137
151
  const prior = parsed.superseded[sectionId] ?? [];
@@ -160,7 +174,7 @@ export async function verifyChain(parsed, options = {}) {
160
174
  continue;
161
175
  }
162
176
  // INT-04: hash mismatch
163
- const recomputed = await computeBlockHash(block);
177
+ const recomputed = await computeBlockHash(block, { shape });
164
178
  if (recomputed !== stamped) {
165
179
  issues.push({
166
180
  code: 'INT-04',
@@ -246,7 +260,9 @@ async function verifySignatures(parsed, issues, options) {
246
260
  // as INT-04, and the escalation from warning to error is the point: on an
247
261
  // unsigned block a drifted hash is a bookkeeping slip, but on a signed one
248
262
  // it means the content in front of you is not the content anybody signed.
249
- const recomputed = await computeBlockHash(block);
263
+ const recomputed = await computeBlockHash(block, {
264
+ shape: isV2File(parsed.frontmatter) ? 'v2' : 'v1',
265
+ });
250
266
  if (recomputed !== block.meta.content_hash) {
251
267
  issues.push({
252
268
  code: 'INT-07',
@@ -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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"}
@@ -0,0 +1,196 @@
1
+ // Lease-up schedule — state-and-verify trajectory (RFC 0008, UW_FORMAT_SPEC §4.25).
2
+ //
3
+ // A deal states the period-by-period path from current to stabilized rents —
4
+ // natural turnover on a value-add, or an absorption curve on ground-up — plus
5
+ // the assumption set that drives it and a stabilized summary. This module
6
+ // recomputes each stated aggregate over a FIXED, CLOSED vocabulary and reports
7
+ // a three-state verdict, the same shape as `verifyCapitalStack` and
8
+ // `verifyRollup` (RFC 0026 pattern).
9
+ //
10
+ // This deliberately does NOT touch the Tier-3 calc engine. The schedule is
11
+ // stated data, not formulas: a variable-length period array is not addressable
12
+ // by a pack formula (no iteration, RFC 0019 §1), but a deterministic TypeScript
13
+ // verifier walks it directly. Structural rules (period grammar, monotonicity,
14
+ // empty schedules) are validator errors (`LU-01`…`LU-04`, validator.ts), not
15
+ // verifier findings — structure is validation, arithmetic is verification.
16
+ // Browser-safe; performs no I/O.
17
+ import { getSection, deepGet } from './parser.js';
18
+ import { resolveDealSize } from './protocol.js';
19
+ // ─── Quantization ────────────────────────────────────────────────────────────
20
+ /**
21
+ * The decimal quantum each figure family is compared at (protocol §VIII.5
22
+ * posture: both sides quantize at the same boundary). Currency to cents; rates
23
+ * to 4 places, like the capital-stack sizing table. Exported so an emitting
24
+ * surface quantizes where this verifier does rather than keeping its own copy.
25
+ */
26
+ export const LEASE_UP_VERIFY_DECIMALS = Object.freeze({
27
+ currency: 2,
28
+ rate: 4,
29
+ sf: 2,
30
+ });
31
+ /**
32
+ * The relative tolerance CC-15 allows between the schedule's final period /
33
+ * stabilized summary and `noi_model`'s stabilized figures (2%). Deliberate,
34
+ * not softness: unlike CC-01 (one number restated in two places, exact), the
35
+ * trajectory endpoint and the stabilized-year projection are two different
36
+ * models of stabilization, and demanding exact agreement would force
37
+ * producers to hand-tune one to echo the other — destroying the
38
+ * independent-model signal the check exists to read (RFC 0008).
39
+ */
40
+ export const LEASE_UP_STABILIZED_TOLERANCE = 0.02;
41
+ function roundTo(value, decimals) {
42
+ const f = 10 ** decimals;
43
+ return Math.round(value * f) / f;
44
+ }
45
+ function isNum(v) {
46
+ return typeof v === 'number' && Number.isFinite(v);
47
+ }
48
+ // ─── Verification ────────────────────────────────────────────────────────────
49
+ /**
50
+ * Recompute every stated aggregate and report a three-state verdict:
51
+ * - a figure disagrees beyond its quantum → `failed`
52
+ * - a figure reads an input the document does not supply → `unverifiable`
53
+ * - otherwise → `verified`
54
+ *
55
+ * The closed recompute vocabulary (§4.25):
56
+ * - per period: `net_cash_flow` = `rent_revenue + concessions + ti_lc_capex`
57
+ * (all stated; a missing component is `unverifiable` for that row)
58
+ * - `stabilized_summary.occupied_sf` against the final period's
59
+ * - `stabilized_summary.occupancy_rate` = final `occupied_sf` ÷ `ctx.total_sf`
60
+ *
61
+ * A `verified` schedule means the stated figures follow deterministically from
62
+ * the stated rows. It does not mean the trajectory is achievable.
63
+ */
64
+ export function verifyLeaseUpSchedule(schedule, ctx) {
65
+ const issues = [];
66
+ const rows = schedule.schedule ?? [];
67
+ for (const row of rows) {
68
+ if (!isNum(row.net_cash_flow))
69
+ continue; // nothing stated, nothing to verify
70
+ if (!isNum(row.rent_revenue) || !isNum(row.concessions) || !isNum(row.ti_lc_capex)) {
71
+ issues.push({
72
+ code: 'LU-UNEVALUABLE',
73
+ severity: 'indeterminate',
74
+ period: row.period,
75
+ message: `Period ${row.period} states net_cash_flow but omits a component (rent_revenue, concessions, ti_lc_capex), so it cannot be verified.`,
76
+ });
77
+ continue;
78
+ }
79
+ const dp = LEASE_UP_VERIFY_DECIMALS.currency;
80
+ const recomputed = roundTo(row.rent_revenue + row.concessions + row.ti_lc_capex, dp);
81
+ const stated = roundTo(row.net_cash_flow, dp);
82
+ if (stated !== recomputed) {
83
+ issues.push({
84
+ code: 'LU-NCF-DISAGREES',
85
+ severity: 'failure',
86
+ period: row.period,
87
+ message: `Period ${row.period} states net_cash_flow ${row.net_cash_flow} but the components sum to ${recomputed}.`,
88
+ expected: String(stated),
89
+ actual: String(recomputed),
90
+ });
91
+ }
92
+ }
93
+ const summary = schedule.stabilized_summary;
94
+ const final = rows.length > 0 ? rows[rows.length - 1] : undefined;
95
+ if (summary && final) {
96
+ if (isNum(summary.occupied_sf)) {
97
+ if (!isNum(final.occupied_sf)) {
98
+ issues.push({
99
+ code: 'LU-UNEVALUABLE',
100
+ severity: 'indeterminate',
101
+ message: `stabilized_summary states occupied_sf but the final period (${final.period}) does not, so it cannot be verified.`,
102
+ });
103
+ }
104
+ else {
105
+ const dp = LEASE_UP_VERIFY_DECIMALS.sf;
106
+ const stated = roundTo(summary.occupied_sf, dp);
107
+ const recomputed = roundTo(final.occupied_sf, dp);
108
+ if (stated !== recomputed) {
109
+ issues.push({
110
+ code: 'LU-SUMMARY-DISAGREES',
111
+ severity: 'failure',
112
+ message: `stabilized_summary.occupied_sf states ${summary.occupied_sf} but the final period (${final.period}) states ${final.occupied_sf}.`,
113
+ expected: String(stated),
114
+ actual: String(recomputed),
115
+ });
116
+ }
117
+ }
118
+ }
119
+ if (isNum(summary.occupancy_rate)) {
120
+ const sf = isNum(final.occupied_sf) ? final.occupied_sf : summary.occupied_sf;
121
+ if (!isNum(sf) || ctx.total_sf === null || ctx.total_sf === 0) {
122
+ issues.push({
123
+ code: 'LU-UNEVALUABLE',
124
+ severity: 'indeterminate',
125
+ message: 'stabilized_summary states occupancy_rate but no square-foot denominator resolves through the size-intensive registry (Protocol §XIII), so it cannot be verified.',
126
+ });
127
+ }
128
+ else {
129
+ const dp = LEASE_UP_VERIFY_DECIMALS.rate;
130
+ const stated = roundTo(summary.occupancy_rate, dp);
131
+ const recomputed = roundTo(sf / ctx.total_sf, dp);
132
+ if (stated !== recomputed) {
133
+ issues.push({
134
+ code: 'LU-SUMMARY-DISAGREES',
135
+ severity: 'failure',
136
+ message: `stabilized_summary.occupancy_rate states ${summary.occupancy_rate} but ${sf} ÷ ${ctx.total_sf} recomputes to ${recomputed}.`,
137
+ expected: String(stated),
138
+ actual: String(recomputed),
139
+ });
140
+ }
141
+ }
142
+ }
143
+ }
144
+ if (issues.some((i) => i.severity === 'failure')) {
145
+ return { verdict: 'failed', issues };
146
+ }
147
+ if (issues.some((i) => i.severity === 'indeterminate')) {
148
+ return { verdict: 'unverifiable', issues };
149
+ }
150
+ return { verdict: 'verified', issues };
151
+ }
152
+ /**
153
+ * Pull the occupancy denominator from a parsed document through the Protocol
154
+ * §XIII size-intensive registry — which is what the registry exists for. Only
155
+ * a `sqft`-unit primary size is a valid denominator for `occupied_sf`; a
156
+ * keys/units/beds class resolves to `null`, which makes `occupancy_rate`
157
+ * `unverifiable` rather than dimensionally wrong. A multifamily document that
158
+ * states its secondary `total_nra_sqft` supplies the denominator that way.
159
+ */
160
+ export function leaseUpContext(parsed) {
161
+ const size = resolveDealSize(parsed);
162
+ if (size && size.unit === 'sqft')
163
+ return { total_sf: size.quantity };
164
+ // Secondary sqft fields (Protocol §XIII secondary lists) still denominate.
165
+ const property = getSection(parsed, 'property');
166
+ if (property) {
167
+ for (const path of ['total_nra_sqft', 'rentable_square_feet', 'net_rentable_square_feet']) {
168
+ const v = deepGet(property.content, path);
169
+ if (isNum(v) && v > 0)
170
+ return { total_sf: v };
171
+ }
172
+ }
173
+ return { total_sf: null };
174
+ }
175
+ // ─── Period grammar (shared with the validator) ──────────────────────────────
176
+ const QUARTER_RE = /^(\d{4})-Q([1-4])$/;
177
+ const MONTH_RE = /^(\d{4})-(0[1-9]|1[0-2])$/;
178
+ /**
179
+ * A period's ordinal on its granularity's axis, or `null` when the string is
180
+ * outside the grammar for that granularity. Consecutive periods differ by
181
+ * exactly 1, which is what makes the validator's gap-free check (`LU-02`) a
182
+ * subtraction rather than a calendar library.
183
+ */
184
+ export function leaseUpPeriodOrdinal(period, granularity) {
185
+ if (granularity === 'quarterly') {
186
+ const m = QUARTER_RE.exec(period);
187
+ if (!m)
188
+ return null;
189
+ return Number(m[1]) * 4 + (Number(m[2]) - 1);
190
+ }
191
+ const m = MONTH_RE.exec(period);
192
+ if (!m)
193
+ return null;
194
+ return Number(m[1]) * 12 + (Number(m[2]) - 1);
195
+ }
196
+ //# sourceMappingURL=lease-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease-up.js","sourceRoot":"","sources":["../src/lease-up.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import type { ConfidenceLevel, InheritedFrom, MarketDataRef, SourceTag, UWBlockSignature, UWFieldOverride, UWFrontmatter, UWMeta } from './types.js';
2
+ export interface UWMetaV2Provenance {
3
+ /** The actor (RFC 0031 grammar): `manual | agent/<id> | document/<id> |
4
+ * system/<id> | institution/<id>`. Absent only for legacy-tag blocks the
5
+ * shim refused to invent an actor for. */
6
+ source?: SourceTag;
7
+ /** How the value was resolved — one canonical SOURCE_TAGS member. */
8
+ resolution?: SourceTag;
9
+ actor?: string;
10
+ agent_id?: string | null;
11
+ agent_version?: string | null;
12
+ timestamp?: string;
13
+ notes?: string | null;
14
+ market_data_ref?: MarketDataRef;
15
+ inherited_from?: InheritedFrom;
16
+ }
17
+ export interface UWMetaV2Quality {
18
+ confidence?: ConfidenceLevel;
19
+ human_review_required?: boolean;
20
+ flags?: string[];
21
+ partial?: boolean;
22
+ provisional?: boolean;
23
+ }
24
+ export interface UWMetaV2Lifecycle {
25
+ /** 1-based supersede-chain position. Renamed from v1 `version` to avoid
26
+ * colliding with frontmatter `uw_version` (RFC 0009 resolved question 1). */
27
+ revision: number;
28
+ superseded: boolean;
29
+ }
30
+ export interface UWMetaV2Integrity {
31
+ /** Defaults to 'sha256' when absent; 'sha256' is the only admitted value at
32
+ * 2.0 (RFC 0009 resolved question 2). A defaulted value is excluded from
33
+ * the digest; a non-default one is hashed. */
34
+ algorithm?: 'sha256';
35
+ input_hash?: string | null;
36
+ content_hash?: string;
37
+ parent_hash?: string | null;
38
+ signature?: UWBlockSignature;
39
+ }
40
+ export interface UWMetaV2 {
41
+ section?: string;
42
+ provenance: UWMetaV2Provenance;
43
+ quality: UWMetaV2Quality;
44
+ lifecycle: UWMetaV2Lifecycle;
45
+ integrity?: UWMetaV2Integrity;
46
+ [key: string]: unknown;
47
+ }
48
+ export type MetaShape = 'v1' | 'v2';
49
+ /**
50
+ * A raw `_meta` object is v2-shaped iff it carries object-valued `provenance`
51
+ * AND `lifecycle` (the v2 triple minus the section key, which both shapes
52
+ * carry under one spelling or another). Anything else — including the empty
53
+ * object a block without `_meta` degrades to — reads as v1: the flat shape is
54
+ * the permissive default for the whole of 1.x.
55
+ */
56
+ export declare function detectMetaShape(raw: Record<string, unknown> | undefined): MetaShape;
57
+ /** Major component of a `uw_version` frontmatter string; unparseable or
58
+ * absent means 1 (mirrors `envelope.ts`'s `?? '1.1'` default). */
59
+ export declare function uwVersionMajor(uwVersion: string | undefined): number;
60
+ /** True when the file's frontmatter declares format 2.0 or later. */
61
+ export declare function isV2File(frontmatter: Pick<UWFrontmatter, 'uw_version'> | undefined): boolean;
62
+ /**
63
+ * Structural reshape of a flat v1 `_meta` into the canonical v2 nested form
64
+ * (RFC 0009 §"Migration story"). Deterministic; applies RFC 0031's read-time
65
+ * interpretation first — a canonical tag in flat `source` becomes
66
+ * `provenance.resolution`, and `provenance.source` is left **absent, not
67
+ * invented**. `field_overrides` is NOT carried (it lifts to the block-level
68
+ * `_overrides` annotation — see `canonicalV2BlockContent`).
69
+ *
70
+ * Output is fully defaulted (explicit nulls / empty arrays per the RFC
71
+ * pseudocode) because this is also the digest normalization target.
72
+ */
73
+ export declare function reshapeMetaV1toV2(flat: UWMeta): UWMetaV2;
74
+ /**
75
+ * Flatten a nested v2 `_meta` (plus the block's `_overrides`, if any) into
76
+ * the in-memory `UWMeta` every existing consumer reads. Lossless view over
77
+ * the nested data: `lifecycle.revision` surfaces as `version`,
78
+ * `integrity.*` flattens, `_overrides` surfaces as `field_overrides`.
79
+ */
80
+ export declare function reshapeMetaV2toV1(nested: UWMetaV2, overrides?: UWFieldOverride[]): UWMeta;
81
+ /**
82
+ * Produce the canonical v2 form of a block's content object — the input to
83
+ * v2 canonicalization. Accepts either shape and returns a NEW object:
84
+ *
85
+ * - flat `_meta` → reshaped nested, `field_overrides` lifted to `_overrides`
86
+ * - nested `_meta` → re-normalized through the same flat round-trip, so both
87
+ * shapes land on the identical defaulted form (a nested block omitting
88
+ * `quality.partial` digests the same as a flat block omitting `partial`)
89
+ *
90
+ * Exclusion of `integrity.content_hash` / `integrity.signature` / defaulted
91
+ * `integrity.algorithm` is canonicalization step 2 and lives in
92
+ * `integrity-canonical.ts` — this function deliberately keeps them so the
93
+ * stripping stays in one place.
94
+ */
95
+ export declare function canonicalV2BlockContent(content: Record<string, unknown>): Record<string, unknown>;
96
+ //# sourceMappingURL=meta-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-shape.d.ts","sourceRoot":"","sources":["../src/meta-shape.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,MAAM,EACP,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,kBAAkB;IACjC;;+CAE2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC;kFAC8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC;;mDAE+C;IAC/C,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAIpC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,CAGnF;AAMD;mEACmE;AACnE,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIpE;AAED,qEAAqE;AACrE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,SAAS,GAAG,OAAO,CAE5F;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAmDxD;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,CAiCzF;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCjG"}