1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
[]
= "aprender-core"
= true
= "2021"
= "1.91"
= ["Noah Gift <noah@paiml.com>"]
= "MIT"
= "Next-generation machine learning library in pure Rust"
= "https://github.com/paiml/aprender"
= "https://docs.rs/aprender"
= "README.md"
= ["machine-learning", "classification", "clustering", "statistics", "graph-algorithms"]
= ["science", "algorithms"]
= [
# Build/IDE artifacts
"target/",
"*.profraw",
"*.profdata",
".vscode/",
".idea/",
"proptest-regressions/",
# Dev tool artifacts (CB-510 class: recursive patterns required)
".pmat/",
".pmat-metrics/",
".pmat-metrics.toml",
"*.bak",
# CI/CD and dev infrastructure (not needed by library consumers)
".github/",
".githooks/",
".bashrsignore",
"Makefile",
"scripts/",
# Documentation (published on GitHub Pages, not crates.io)
"docs/",
"book/",
# Test data and traces
"golden_traces/",
# root-anchored: /tokenizer.json not tokenizer.json per CB-510.
# Cargo excludes use gitignore semantics, so a pattern with no `/` matches at
# ANY depth -- the bare form silently stripped
# tests/fixtures/setfit/tokenizer.json (loaded by the ENC-02 parity gate)
# from the package while leaving tokenizer_cases.json in.
"/tokenizer.json",
# The two SetFit conformance fixtures over the 1 MiB publish ceiling
# (scripts/check_publish_safety.sh MAX_PACKAGED_BYTES = 1048576):
# gradients.json is 1854378 bytes and optimizer_step.json is 1713469.
# Both carry `/`, so gitignore semantics anchor them at the package root --
# the same CB-510 trap the `/tokenizer.json` entry above documents. The rest
# of tests/fixtures/setfit/ stays packaged deliberately, because the ENC-02
# parity gate loads tokenizer.json from it.
"tests/fixtures/setfit/gradients.json",
"tests/fixtures/setfit/optimizer_step.json",
"defect-report-*.json",
"trace_*.json",
"fuzz/",
# Model files (root-anchored: /models/ not models/ per CB-510)
"/models/",
# Contracts not consumed by build.rs (model-families/ IS needed)
"contracts/chat-template-semantics-v1.yaml",
"contracts/classification-finetune-v1.yaml",
"contracts/kernel-fusion-v1.yaml",
"contracts/layer-parity-v1.yaml",
"contracts/model-metadata-bounds-v1.yaml",
"contracts/quantized-dot-product-v1.yaml",
"contracts/special-tokens-registry-v1.yaml",
"contracts/tensor-layout-v1.yaml",
"contracts/tokenizer-vocab-v1.yaml",
"contracts/publish-safety-v1.yaml",
]
[]
= "aprender"
[]
= true
[]
# Serialization
= { = "1.0", = ["derive"] }
# SafeTensors JSON metadata. `float_roundtrip` is DECLARED HERE rather than inherited:
# `json_roundtrip_of_an_f64_is_bit_exact` and the HeadFitReport stability test assert that
# `from_str(to_string(x)) == x` bit for bit, and a crate that asserts a guarantee has to be
# the crate that requests it. Without the feature serde_json's fast float parser can land
# one ULP away from the value ryu wrote (measured: 2.1531120041346774e-5 -> +1 ULP), which
# is why those tests previously asserted the INEXACTNESS instead. The feature adds no
# dependency (`float_roundtrip = []` in serde_json's manifest).
= { = "1.0", = ["float_roundtrip"] }
= "1.3"
= "1.3" # MessagePack for .apr metadata (spec §2)
= "3.14" # Streaming APR writer temp file (realizar#136)
# Random number generation for model_selection
= { = "0.9", = ["small_rng"] }
= "0.9" # ChaCha20 PRNG for Monte Carlo simulations
# Audio processing
= { = "6.2", = true } # FFT for mel spectrogram computation
= { = "2.0", = true } # Error handling for audio module
# Native audio capture (Linux ALSA)
= { = "0.9", = true } # ALSA bindings for Linux audio capture
# Parallelization for graph algorithms (optional for WASM compatibility)
= { = "1.10", = true }
# Shared formatting and system utilities (Batuta stack)
= { = true }
# Core compute primitives - SIMD-accelerated tensor operations
# v0.14.5: wgpu adapter limits fix (buffer >256MB for 7B+ models)
= { = true }
# K-quantization formats (Q4_K, Q5_K, Q6_K) - Toyota Way: ONE source of truth
# Path dependency until published to crates.io
= { = true }
# APR-2231: sovereign `.apr` container leaf. aprender-core From-wraps its
# AprFormatError into AprenderError and re-exports it (no API break). Leaf has
# no dependency back on core, so this introduces no publish cycle.
= { = "../apr-format", = "0.65" }
# NOTE: trueno-rag (=aprender-rag) removed (APR-MONO self-containment): aprender-rag
# depends on aprender-core + aprender-serve, so core→rag closed a core→rag→serve→core
# cycle. RAG lives in the aprender-rag crate (which depends on core), not the reverse.
# Compression for .apr format (optional, spec §3.3)
= { = "0.11", = true }
= { = "0.13", = true }
# Half-precision floats for quantization (spec §6.2)
= { = "2.4", = true, = false, = ["std"] }
# Digital signatures for .apr format (optional, spec §4.2)
= { = "2.1", = true, = false, = ["std", "zeroize", "rand_core"] }
# Encryption for .apr format (optional, spec §4.1)
= { = "0.10", = true }
= { = "0.5", = true, = false, = ["std"] }
= { = "2.0", = true, = false, = ["static_secrets"] }
= { = "0.12", = true }
= { = "0.10", = true } # For HKDF-SHA256
# Data loading
= { = true, = true }
# entrenar: removed as runtime dep — explainable types now live in aprender (GH-305)
# entrenar remains as dev-dependency for InferenceMonitor integration tests
# Syscall/GPU profiling for showcase benchmarks (dev-only to avoid circular dep)
# renacer depends on aprender, so it cannot be a runtime dep
# renacer = { version = "0.10", optional = true }
# SIMD-accelerated compression for KV cache (optional)
= { = true, = true }
# Hugging Face Hub integration (optional, spec §11.8, hf-hub-upload-spec.md)
= { = "0.4", = true, = false, = ["ureq"] }
= { = "6.0", = true }
= { = "2.12", = true, = ["json"] } # Direct HTTP for HF Hub upload (APR-PUB-001)
# HF Xet protocol for files > 5 GiB (F-PUB-LFS-001,
# contracts/apr-publish-hf-large-file-v1.yaml, spec §12.8)
= { = true, = true }
# SafeTensors format parsing (optional, for HF model comparison)
= { = "0.4", = true }
# HuggingFace tokenizers (optional, `setfit` feature only — Phase 1 ENC-02).
# Workspace pin carries `default-features = false, features = ["fancy-regex"]`
# so no onig/esaxx native toolchain is required. D-06: a build without `setfit`
# must not contain a `tokenizers` node at all.
= { = true, = true }
# Counter-based Philox RNG (lib name `trueno_rand`), `setfit` feature only —
# Phase 3 TRN-06. The SetFit encoder's dropout masks are derived from
# (root_seed, site, forward_ordinal, element) through Philox 4x32-10 rather than
# drawn from a stateful `Mutex<StdRng>`, so a `rand` version bump cannot move the
# loss trace and mask element `i` is a pure function of its index. Leaf crate
# (deps: thiserror only), so the edge is acyclic. Optional and reached ONLY
# through `setfit`: a build without that feature must not contain the node.
= { = true, = true }
# WASM bindings for noise generator (optional, spec: noise-generator-apr-wasm-spec.md)
= { = "0.2", = true }
= { = "0.3", = true }
= { = "2.14.0", = ["loader", "serde"] }
# UCBD: compile-time contract enforcement via #[contract] proc macro
= { = true }
# Toyota Way: ONE source of truth for quantization (Step E)
# NOTE: Currently blocked by cyclic dependency (realizar optionally depends on aprender).
# Resolution requires creating a separate quantization crate.
# See docs/specifications/qwen2.5-coder-showcase-demo.md Section E.7 for roadmap.
# realizar = { version = "0.6", default-features = false, optional = true } # BLOCKED
[]
= { = "1", = ["derive"] }
= "0.10"
[]
= "1.6"
= { = true }
# Permissive version + path: locally resolves via path; clean-room's
# strip_path_deps removes `path = "..."` leaving a valid `version + package`
# entry. Permissive range (>=0.27) breaks the publish-time cycle (otherwise
# aprender-core's publish requires entrenar/renacer at workspace 0.32.0 on
# crates.io BEFORE aprender-core itself ships, but those crates can't ship
# until aprender-core does).
= { = "../aprender-profile", = "aprender-profile" }
= "3.14" # For format module tests
= { = "../aprender-test-lib", = "aprender-test-lib" } # TUI/GUI testing framework with coverage tracking (spec §8)
= "3.4" # Signal handling for SIGINT/SIGTERM (PMAT-098-PF: zombie process mitigation)
= { = "../aprender-contracts", = "aprender-contracts" } # Contract enforcement (dev-only)
# Integration tests for InferenceMonitor (GH-305: was runtime dep, now dev-only).
# Same publish-time cycle break as renacer above.
= { = "../aprender-train", = "aprender-train" }
= "0.9" # YAML contract binding in tests (FALSIFY-SHIP-009 GATE-APR-PROV-004)
# The in-tree contract crate is reached through `provable-contracts` above: upstream
# repointed that key from the crates.io package to ../aprender-contracts, which is
# exactly what the old `setfit-contract-schema` alias (plan 01-08, D-14) existed to
# achieve. Two keys for one package in one table is a cargo error, so the alias is
# gone and the setfit conformance harness uses `provable_contracts::` directly — still
# the SAME deserializer `pv validate` uses, so the generator cannot drift from pv.
= { = true } # IEEE f16 oracle for the convert_report f32_to_f16 RNE falsifier (PMAT-905)
# `tests/setfit_conformance.rs` hashes fixture bytes to pin what it compared against.
# `sha2` is already an OPTIONAL runtime dep (setfit/format-encryption/hf-hub), and an
# optional runtime dep is NOT available to `tests/` unless that feature is on — so a
# plain `cargo test --test setfit_conformance` build needs this dev-dependency.
# Workspace-pinned: no new external package enters the tree.
= { = true }
[]
= ["parallel"]
= ["rayon"] # Enable parallel graph algorithms (disable for WASM)
# `sha2` was an IMPLICIT feature (cargo synthesises one per optional dependency)
# that `format-encryption` and `hf-hub-integration` referenced by bare name. The
# moment any feature writes `dep:sha2`, cargo stops synthesising the implicit
# one and those two references fail to resolve. Declaring it explicitly keeps
# the published feature surface byte-identical while letting `setfit` use the
# unambiguous `dep:` form.
= ["dep:sha2"]
= ["alimentar"] # Enable data loading from alimentar
= ["lz4_flex", "zstd", "apr-format/compression"] # Enable LZ4/ZSTD compression for .apr format (spec §3.3, GH-146); forward to apr-format so container I/O actually compresses
= ["ed25519-dalek"] # Enable Ed25519 signatures for .apr format (spec §4.2)
= ["aes-gcm", "argon2", "x25519-dalek", "hkdf", "sha2"] # Enable encryption for .apr format (spec §4.1)
= ["half"] # Enable quantization for .apr format (spec §6.2)
= [] # Enable homomorphic encryption for .apr format (spec: homomorphic-encryption-spec.md)
# Note: mmap is automatic on native platforms, no feature needed (spec: bundle-mmap-spec.md)
= ["hf-hub", "dirs", "ureq", "sha2"] # Enable Hugging Face Hub integration (GH-100, APR-PUB-001)
= ["hf-hub-integration", "hf-xet"] # Enable HF Xet protocol for files > 5 GiB (F-PUB-LFS-001, spec §12.8)
= ["rustfft", "thiserror"] # Enable audio processing (mel spectrogram, resampling)
= ["audio"] # Enable audio capture base functionality
= ["audio-capture", "alsa"] # Enable ALSA audio capture (Linux only)
= ["audio-capture"] # Enable CoreAudio capture (macOS only)
= ["audio-capture"] # Enable WASAPI capture (Windows only)
= ["audio-capture"] # Enable WebAudio capture (WASM only)
= ["audio"] # Enable audio playback
= ["audio"] # Enable audio codec decoding (WAV, MP3, AAC, FLAC, Opus)
= ["audio"] # Enable ML-based noise generation (GH-144)
= ["audio-noise", "wasm-bindgen", "js-sys"] # Enable WASM bindings for noise generator
= ["safetensors", "hf-hub-integration", "half"] # Enable SafeTensors comparison (GH-121)
# `rag` feature removed (APR-MONO self-containment) — RAG lives in the aprender-rag crate.
# inference-monitoring feature removed — explainable types now unconditional (GH-305)
= ["trueno/gpu"] # Enable GPU acceleration via trueno wgpu backend
= [] # Enable heavy model/inference tests (requires models/ dir, ollama, GPU)
= ["trueno/cuda-monitor"] # Enable CUDA monitoring via trueno-gpu (NVIDIA GPUs)
= []
= [] # Renacer profiling (disabled: renacer→aprender circular dep)
= ["trueno-zram-core"] # Enable trueno-zram KV cache compression for showcase benchmarks (PAR-040)
= [] # Enable integration tests for aprender explainability + entrenar InferenceMonitor (GH-305)
# Chaos engineering features (from renacer)
= []
= ["chaos-basic"]
= ["chaos-basic"]
= ["chaos-network", "chaos-byzantine"]
# SetFit / MiniLM differentiable conformance (Phase 1, contract
# setfit-encoder-conformance-v1).
#
# `dep:sha2` is NOT optional polish. `sha2` is declared optional above and is
# otherwise enabled only by `format-encryption` and `hf-hub-integration`; the
# setfit module hashes tokenizer bytes and input text in PRODUCTION code, so
# `cargo check -p aprender-core --features setfit` would not compile without it.
# The feature is declared dependency-CLOSED: enabling `setfit` alone must build.
#
# `dep:aprender-rand` (Phase 3, TRN-06) is the same kind of entry: `setfit/dropout_rng`
# uses Philox 4x32-10 in PRODUCTION code, so the feature would not build without it.
# `cargo check -p aprender-core --no-default-features` is the standing proof that
# neither node reaches a build that did not ask for `setfit`.
= ["dep:tokenizers", "dep:sha2", "dep:aprender-rand"]
# Conformance fixtures gate the test-only slice constructor, which lives inside
# `#[cfg(feature = "setfit")] mod setfit` — so this must IMPLY setfit rather than
# being an empty marker that could be enabled alone and gate nothing.
= ["setfit"]
# WASM support: enable getrandom's "js" feature for browser environments
[]
= { = "0.2", = ["js"] }
# Memory-mapped I/O for native platforms (spec: bundle-mmap-spec.md)
[]
= "0.9"
[[]]
= "book"
= "tests/book/mod.rs"
[[]]
= "linear_regression"
= false
[[]]
= "kmeans"
= false
[[]]
= "dataframe"
= false
[[]]
= "graph"
= false
[[]]
= "recommend"
= false
[[]]
= "citl"
= false
[[]]
= "bpe"
= false
[[]]
= "ollama_parity"
= false
= ["format-quantize"]
[[]]
= "shell_encryption_demo"
= ["format-encryption"]
[[]]
= "chat_template"
[[]]
= "text_preprocessing"
[[]]
= "time_series_forecasting"
[]
= true
= ["--generate-link-to-definition"]
= ["x86_64-unknown-linux-gnu"]
[]
= false
= false
= true
= true
= true
= "v{{version}}"
= "release: aprender v{{version}}"
[[]]
= "CHANGELOG.md"
= "## \\[Unreleased\\]"
= "## [{{version}}] - {{date}}"
# PMAT-262: Self-patch so transitive deps (realizar, entrenar) use the local
# workspace aprender instead of a stale crates.io version. This prevents type
# mismatches when building apr-cli from the workspace.
# GH-344: Sibling patches (realizar, trueno, etc.) moved to .cargo/config.toml.dev-overrides
# so that `git clone && cargo check` works without sibling repos.
# See .cargo/config.toml.dev-overrides for full-stack development setup.