@@ -53,7 +53,7 @@ deps and belong here.
5353| ` url ` | URL parsing |
5454| ` tempfile ` | Temp files/dirs (` NamedTempFile ` ) |
5555| ` smallvec ` | Stack-allocated small vectors |
56- | ` bumpalo ` | Arena allocation (` collections ` feature) — tsv's core AST strategy; see rust-perf.md §Arena allocation |
56+ | ` bumpalo ` | Arena allocation (` collections ` feature) — tsv's core AST strategy; see ./ rust-perf.md §Arena allocation |
5757| ` string-interner ` | String interning |
5858| ` phf ` | Compile-time perfect-hash maps/sets (keyword tables) |
5959| ` unicode-ident ` / ` unicode-segmentation ` / ` unicode-width ` | Unicode text handling |
@@ -75,7 +75,7 @@ deps and belong here.
7575
7676| Crate | Purpose |
7777| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
78- | ` parking_lot ` | ` Mutex ` /` RwLock ` for sync-only critical sections (no poisoning). See rust-perf.md §Async lock hygiene for when to use ` tokio::sync ` or ` std::sync ` instead. |
78+ | ` parking_lot ` | ` Mutex ` /` RwLock ` for sync-only critical sections (no poisoning). See ./ rust-perf.md §Async lock hygiene for when to use ` tokio::sync ` or ` std::sync ` instead. |
7979| ` lru ` | Bounded LRU cache backing the ` RateLimiter ` — caps tracked keys so a key-enumeration attacker can't grow the map unboundedly (twin of fuz_app's ` LruMap ` ). |
8080
8181## Database
@@ -112,7 +112,7 @@ deps and belong here.
112112
113113| Crate | Purpose |
114114| ------ | --------------------------------------------------------------------------------------------------- |
115- | ` argh ` | Derive arg parser, size-optimized. See rust-patterns.md §CLI Patterns for the parser-tier guidance. |
115+ | ` argh ` | Derive arg parser, size-optimized. See ./ rust-patterns.md §CLI Patterns for the parser-tier guidance. |
116116
117117## Logging
118118
@@ -133,7 +133,7 @@ deps and belong here.
133133| ` wit-bindgen ` | Component-model bindings |
134134| ` wasmtime ` / ` wasmtime-wasi ` | WASM host (tests, benches) |
135135
136- See wasm-patterns.md for the binding-layer conventions these support.
136+ See ./ wasm-patterns.md for the binding-layer conventions these support.
137137
138138## Image processing
139139
@@ -157,31 +157,22 @@ dependency graph or it is not, and that is auditable.
157157- Enforcement is the ` cargo xtask check-release ` dep-graph audit (` fuz_audit ` ),
158158 which fails if any non-` testing_ ` -prefixed binary transitively links a
159159 forbidden crate; workspaces add extra forbids via ` AuditRules ` . See
160- rust-spine.md §xtask & check-release for the entry points and the
160+ ./ rust-spine.md §xtask & check-release for the entry points and the
161161 built-in layering rules.
162162
163- ## Shared low-level leaves (consolidation candidates)
164-
165- The pattern is proven: the sandboxed config-eval harness was extracted from
166- zap into the spine's ` fuz_eval ` — a spine-free leaf (no tokio-server/HTTP/DB
167- surface) consumable even by spine-free repos — and is now shared across
168- consumers, including the JS wrapper ingredients themselves
169- (` DETERMINISM_STUBS_JS ` , ` CONSOLE_TO_STDERR_JS ` ,
170- ` build_extract_export_wrapper ` ). Remaining candidates, still independently
171- reimplemented:
172-
173- - a minimal dotenv (` KEY=VALUE ` ) parser — three copies today (` zap_core ` ,
174- plus two inside zzz: the CLI's daemon-env loader and its xtask),
175- - an env-isolating subprocess harness with a capped output drain —
176- prototyped in ` fuz_forge_server ` , promotion deferred until a second
177- consumer,
178- - the atomic-write/flock transactional-file dance for spine-free consumers —
179- ` fuz_sys::fs::write_atomic ` is canonical but zap can't link it and
180- hand-rolls both authority calibrations (rust-patterns.md §Transactional
181- state files),
182- - an exponential-backoff retry combinator — no generic one exists;
183- ` fuz_sidecar ` 's crash-recovery respawn loop is the only backoff
184- implementation, and it's supervision-shaped, not request-retry.
163+ ## Shared low-level leaves
164+
165+ ** When a utility gets reimplemented a third time, extract it as a spine-free
166+ leaf** — no tokio-server/HTTP/DB surface, so spine-free repos can link it too.
167+ ` fuz_eval ` (the sandboxed config-eval harness, lifted out of zap) is the proven
168+ case, now shared down to its JS wrapper ingredients.
169+
170+ Known-duplicated, not yet extracted: a minimal dotenv (` KEY=VALUE ` ) parser
171+ (three copies), an env-isolating subprocess harness with a capped output drain
172+ (one, awaiting a second consumer), the atomic-write/flock dance for consumers
173+ that can't link ` fuz_sys::fs::write_atomic ` (./rust-patterns.md §Transactional
174+ state files), and an exponential-backoff retry combinator (none generic today —
175+ the only backoff is supervision-shaped, not request-retry).
185176
186177Signal-crate convention: prefer ` nix ` for syscall wrappers; reserve ` libc ` for
187178types/constants ` nix ` doesn't expose (PTY). Avoid pulling both into one
@@ -192,7 +183,7 @@ workspace for the same job.
192183- ** ` default-features = false ` + explicit feature lists** for deps with heavy
193184 optional trees — ` reqwest ` , ` nix ` , ` notify ` , ` futures-util ` all do. Opt into
194185 exactly what the workspace uses; don't inherit a crate's default surface.
195- - ** ` multiple_crate_versions = "allow" ` ** (rust-patterns.md §Lints) tolerates
186+ - ** ` multiple_crate_versions = "allow" ` ** (./ rust-patterns.md §Lints) tolerates
196187 _ forced_ duplicate majors from the dep graph — e.g. ` tsv ` carries hashbrown
197188 0.16 (via ` string-interner ` ) and 0.17 (via ` serde_json ` → ` indexmap ` ),
198189 unresolvable until ` string-interner ` bumps upstream. Not a license to ignore
0 commit comments