code wiki / (root) / nx_hold_lib.nx

nx_hold_lib.nx

buildroot/runtime/nx_hold_lib.nx

10705 B274 linesdepth 7pulls 12 transitivereach 2 importersview sourcekind library
docsdependenciesstructsconstsfunctions

about

nx_hold_lib.nx -- LEGAL HOLD / PRESERVATION (the EDRM LEFT SIDE) + the FRCP 37(e) sanction ladder. nx_ediscovery screens what goes OUT (production is an allow-list). This is the other half, and it is the half that ends cases: evidence destroyed before review ever happens. You cannot screen a document you already deleted. THE DUTY (Zubulake / FRCP 37(e)): the obligation to preserve attaches when litigation is REASONABLY ANTICIPATED -- not when a complaint is filed, not when counsel is retained. Anticipation is normally the EARLIER date, so the duty runs from the MINIMUM of the two triggers. Anchoring preservation to the filing date is the most common preservation error and it silently discards months of evidence. THE TOOTH THAT MATTERS MOST: issuing a hold notice is NOT preservation. Three things are separate and all three are required -- the NOTICE went out, every custodian ACKNOWLEDGED it, and automated DELETION was actually SUSPENDED on every system. A notice sent while the email retention policy keeps purging on schedule is a hold that exists only on paper. Systems conflate the notice with the suspension constantly, so they are counted independently and defensibility never rests on the notice. THE SAFE HARBOUR, ENCODED EXACTLY: FRCP 37(e) does NOT punish lost ESI as such. Sanctions require ALL of -- ESI was lost, REASONABLE STEPS were not taken, and it cannot be restored or replaced. If reasonable steps WERE taken the answer is no sanctions even though data is gone. Severe measures (adverse-inference, dismissal) require an additional finding of INTENT TO DEPRIVE; negligence, however gross, tops out at curative. Collapsing those tiers turns a discovery dispute into a lost case. STRUCTURE: a PURE DECISION CORE (rules, no I/O) plus REGISTRY ADAPTERS. The rules gate with zero writes so a storage stall cannot make them unverifiable (debt 1785519597), and each rule exists once. SCALE ENVELOPE (declared): the matter record is ONE packed canonical record; one record per custodian. DRY: composes nx_matter_lib. license_tier: ORIGINAL LIB.

dependencies 1 imports · 2 importers

nx_matter_lib.nx nx_hold_lib.nx nx_hold_pure_gate.nx nx_legal_svc.nx

imports: nx_matter_lib.nx

imported by: nx_hold_pure_gate.nxnx_legal_svc.nx

structs

none

consts

30const HD_UNSET: i64 = 0 - 2000000002
32const HD_NO_SANCTION: i64 = 0
33const HD_CURATIVE: i64 = 1
34const HD_SEVERE: i64 = 2
36const HD_RECBUF: i64 = 1024
37const HD_IDBUF: i64 = 256

functions

43func hd_is1(v: i64) -> i64
49func hd_duty_pure(anticipated: i64, filed: i64) -> i64
called by 2: hd_duty_daymain
56func hd_duty_attached_pure(duty: i64, asof: i64) -> i64
65func hd_unsuspended_pure(total: i64, suspended: i64) -> i64
73func hd_exposure_pure(unacked: i64, unsuspended: i64) -> i64
79func hd_defensible_pure(duty_attached: i64, notice_issued: i64, unacked: i64, unsuspended: i64) -> i64
88func hd_release_premature_pure(released: i64, duty: i64) -> i64
96func hd_sanction_tier(lost: i64, reasonable_steps: i64, restorable: i64, intent: i64) -> i64
called by 2: mainleg_hold_sanction calls 1: hd_is1
104func hd_sanction_label(t: i64, out: *u8) -> i64
called by 2: mainleg_hold_sanction calls 1: mt_catcopy
116func hd_atoi(s: *u8) -> i64
called by 1: hd_field
135func hd_itoa(v: i64, out: *u8) -> i64
called by 1: hd_put calls 1: mt_catn
146func hd_put(prefix: *u8, matter: *u8, anticipated: i64, filed: i64, notice: i64, released: i64, sys_total: i64, sys_susp: i64) -> i64
178func hd_field(prefix: *u8, matter: *u8, field: *u8, flen: i64) -> i64
187func hd_duty_day(prefix: *u8, matter: *u8) -> i64
191func hd_duty_attached(prefix: *u8, matter: *u8, asof: i64) -> i64
195func hd_notice_issued(prefix: *u8, matter: *u8) -> i64
called by 1: hd_defensible calls 1: hd_field
200func hd_notice_lag(prefix: *u8, matter: *u8) -> i64
208func hd_systems_unsuspended(prefix: *u8, matter: *u8) -> i64
212func hd_cust_key(matter: *u8, cid: *u8, out: *u8) -> i64
called by 2: hd_cust_puthd_cust_acked calls 1: mt_catcopy
221func hd_cust_put(prefix: *u8, matter: *u8, cid: *u8, notified: *u8, acknowledged: *u8) -> i64
237func hd_cust_acked(prefix: *u8, matter: *u8, cid: *u8) -> i64
249func hd_cust_unacked(prefix: *u8, matter: *u8, cids: *i64, n: i64) -> i64
259func hd_exposure(prefix: *u8, matter: *u8, cids: *i64, n: i64) -> i64
263func hd_defensible(prefix: *u8, matter: *u8, cids: *i64, n: i64, asof: i64) -> i64
267func hd_released(prefix: *u8, matter: *u8) -> i64
calls 1: hd_field
272func hd_release_premature(prefix: *u8, matter: *u8) -> i64