← stitchkitDocumentation

Lock owners are process instances

Decision

A PID identifies a process-table slot, not a lifetime. The exclusive lock records an optional process identity alongside its existing machine attribution. Both the protected lock and its reclaim guard use the same record and diagnosis.

Linux uses /proc/sys/kernel/random/boot_id, field 22 of /proc/<pid>/stat, and PID/time namespace identities. The caller’s own NStgid status verifies the proc mount’s PID namespace without requiring permission to inspect PID 1. A proc mount that cannot be attributed to the caller supplies no evidence. Darwin uses kern.bootsessionuuid and proc_pid_rusage(RUSAGE_INFO_V0).ri_proc_start_abstime through the existing packaged Node-API binding. The shared binding lives in internal; recovery never imports the agent runtime. These are kernel lifetime identifiers, not wall-clock estimates, command names or elapsed-time thresholds.

Only after machine attribution may a different boot or process birth prove the recorded owner gone. A different namespace, missing native/proc evidence, unknown platform or malformed process identity refuses recovery. Null marks an explicitly unmeasured modern identity; an absent field marks a legacy record. Legacy records retain the conservative PID/zombie probe: a live reused PID cannot be distinguished and requires quiescent operator recovery. No timestamp-based migration can invent the missing identity. New acquisitions persist the modern record automatically.

The journal retains refuse by default; reclaim-stale opts into recovery. withExclusiveLock retains its explicit ownerless-file grace policy; a malformed process identity inside an otherwise readable owner is never treated as ownerless. Reclamation retains the exclusive guard, re-reads under it, and respects inode identity when releasing a file. Diagnosis distinguishes lifetime evidence from legacy PID reachability. Kernel token collisions cause a conservative refusal, never age-based takeover.

References: Linux proc stat, Linux namespace process IDs and Darwin resource API.

Invariants: I8, I10, I12, I13.