lacuna-quant 0.13.0__tar.gz

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 (64) hide show
  1. lacuna_quant-0.13.0/CHANGELOG.md +410 -0
  2. lacuna_quant-0.13.0/Cargo.lock +672 -0
  3. lacuna_quant-0.13.0/Cargo.toml +24 -0
  4. lacuna_quant-0.13.0/LICENSE +21 -0
  5. lacuna_quant-0.13.0/PKG-INFO +592 -0
  6. lacuna_quant-0.13.0/README.md +541 -0
  7. lacuna_quant-0.13.0/pyproject.toml +137 -0
  8. lacuna_quant-0.13.0/python/lacuna/__init__.py +150 -0
  9. lacuna_quant-0.13.0/python/lacuna/__main__.py +5 -0
  10. lacuna_quant-0.13.0/python/lacuna/_advanced_inference.py +1362 -0
  11. lacuna_quant-0.13.0/python/lacuna/_attrition.py +35 -0
  12. lacuna_quant-0.13.0/python/lacuna/_decay.py +455 -0
  13. lacuna_quant-0.13.0/python/lacuna/_frames.py +365 -0
  14. lacuna_quant-0.13.0/python/lacuna/_native.pyi +22 -0
  15. lacuna_quant-0.13.0/python/lacuna/_portfolio.py +476 -0
  16. lacuna_quant-0.13.0/python/lacuna/_resampling.py +39 -0
  17. lacuna_quant-0.13.0/python/lacuna/_signal_transform.py +880 -0
  18. lacuna_quant-0.13.0/python/lacuna/_version.py +3 -0
  19. lacuna_quant-0.13.0/python/lacuna/adapters/__init__.py +68 -0
  20. lacuna_quant-0.13.0/python/lacuna/adapters/backtest.py +178 -0
  21. lacuna_quant-0.13.0/python/lacuna/adapters/duckdb.py +100 -0
  22. lacuna_quant-0.13.0/python/lacuna/adapters/factor_panel.py +245 -0
  23. lacuna_quant-0.13.0/python/lacuna/adapters/polars.py +105 -0
  24. lacuna_quant-0.13.0/python/lacuna/adapters/sklearn.py +150 -0
  25. lacuna_quant-0.13.0/python/lacuna/adapters/types.py +89 -0
  26. lacuna_quant-0.13.0/python/lacuna/adapters/vendor.py +189 -0
  27. lacuna_quant-0.13.0/python/lacuna/audit.py +703 -0
  28. lacuna_quant-0.13.0/python/lacuna/audit_profiles.py +912 -0
  29. lacuna_quant-0.13.0/python/lacuna/benchmark.py +896 -0
  30. lacuna_quant-0.13.0/python/lacuna/bias.py +1608 -0
  31. lacuna_quant-0.13.0/python/lacuna/bundle.py +926 -0
  32. lacuna_quant-0.13.0/python/lacuna/cli.py +483 -0
  33. lacuna_quant-0.13.0/python/lacuna/config.py +110 -0
  34. lacuna_quant-0.13.0/python/lacuna/costs.py +2173 -0
  35. lacuna_quant-0.13.0/python/lacuna/cv.py +788 -0
  36. lacuna_quant-0.13.0/python/lacuna/diagnostics.py +507 -0
  37. lacuna_quant-0.13.0/python/lacuna/events.py +680 -0
  38. lacuna_quant-0.13.0/python/lacuna/exceptions.py +29 -0
  39. lacuna_quant-0.13.0/python/lacuna/experiment.py +712 -0
  40. lacuna_quant-0.13.0/python/lacuna/labels.py +359 -0
  41. lacuna_quant-0.13.0/python/lacuna/native.py +24 -0
  42. lacuna_quant-0.13.0/python/lacuna/plugins.py +308 -0
  43. lacuna_quant-0.13.0/python/lacuna/py.typed +1 -0
  44. lacuna_quant-0.13.0/python/lacuna/regime.py +665 -0
  45. lacuna_quant-0.13.0/python/lacuna/report.py +839 -0
  46. lacuna_quant-0.13.0/python/lacuna/robustness.py +1010 -0
  47. lacuna_quant-0.13.0/python/lacuna/schemas/__init__.py +49 -0
  48. lacuna_quant-0.13.0/python/lacuna/schemas/audit-result-v1.schema.json +157 -0
  49. lacuna_quant-0.13.0/python/lacuna/schemas/lacuna-bundle-manifest-v1.schema.json +168 -0
  50. lacuna_quant-0.13.0/python/lacuna/schemas/persisted-artifact-compatibility-v1.json +51 -0
  51. lacuna_quant-0.13.0/python/lacuna/schemas/standard-audit-profile-v1.schema.json +90 -0
  52. lacuna_quant-0.13.0/python/lacuna/signal.py +1300 -0
  53. lacuna_quant-0.13.0/python/lacuna/study.py +395 -0
  54. lacuna_quant-0.13.0/python/lacuna/types.py +383 -0
  55. lacuna_quant-0.13.0/python/lacuna/validation.py +1171 -0
  56. lacuna_quant-0.13.0/rust/lacuna-core/Cargo.toml +22 -0
  57. lacuna_quant-0.13.0/rust/lacuna-core/benches/kernels.rs +119 -0
  58. lacuna_quant-0.13.0/rust/lacuna-core/src/lib.rs +395 -0
  59. lacuna_quant-0.13.0/rust/lacuna-python/Cargo.toml +22 -0
  60. lacuna_quant-0.13.0/rust/lacuna-python/src/lib.rs +63 -0
  61. lacuna_quant-0.13.0/schemas/audit-result-v1.schema.json +157 -0
  62. lacuna_quant-0.13.0/schemas/lacuna-bundle-manifest-v1.schema.json +168 -0
  63. lacuna_quant-0.13.0/schemas/persisted-artifact-compatibility-v1.json +51 -0
  64. lacuna_quant-0.13.0/schemas/standard-audit-profile-v1.schema.json +90 -0
@@ -0,0 +1,410 @@
1
+ # Changelog
2
+
3
+ All notable changes to Lacuna will be documented here. The project intends to follow [Semantic Versioning](https://semver.org/) once its public release process begins.
4
+
5
+ ## Unreleased
6
+
7
+ ## [0.13.0] - 2026-08-27
8
+
9
+ ### Changed
10
+
11
+ - Publish future core distributions under the unambiguous PyPI name `lacuna-quant` while
12
+ preserving the `lacuna` import package and `lacuna` command.
13
+ - Split OIDC publication across protected `pypi` and `pypi-options` GitHub environments so each
14
+ PyPI project has a unique trusted-publisher identity without storing registry credentials.
15
+ - Add an installation diagnostic that fails clearly when the conflicting `lacuna` distribution is
16
+ installed beside `lacuna-quant`, preserving diagnostic schema and method version 1.
17
+ - License the repository and all future core and extension distributions under MIT only. Releases
18
+ already published under the former dual-license terms retain those original grants.
19
+ - Advance `lacuna-options` to `0.2.0` so its dependency metadata targets
20
+ `lacuna-quant>=0.13,<0.14` instead of the unrelated PyPI `lacuna` project; its import API and
21
+ analytical semantics are unchanged.
22
+
23
+ ## [0.12.0] - 2026-08-26
24
+
25
+ ### Added
26
+
27
+ - Add immutable `FactorPanelSchema` and `FactorPanelSemantics` contracts plus
28
+ `adapt_factor_panel()` for explicit generic Polars, Arrow, and optional named pandas MultiIndex
29
+ ingestion without filtering, joining, bucketing, label construction, or statistical work.
30
+ - Add materialization/copy, source mapping, unknown-semantics, source-order, and no-methodology
31
+ evidence for factor-panel adaptation.
32
+ - Add an Alphalens Reloaded migration guide and a small numerical IC fixture pinned and attributed
33
+ to reviewed commit `f0a07c22`, with named tests for compatible and deliberately divergent cases.
34
+ - Add the cumulative `0.12.x` public API fixture while preserving every earlier compatibility
35
+ contract and result schema version 1.
36
+
37
+ ### Changed
38
+
39
+ - Advance the reproducible benchmark artifact to version 6 with grouped/null bucketing,
40
+ neutralization, multi-lag turnover, diagnostic projection, event-window, and chunked factor-panel
41
+ cases.
42
+ - Require zero skips in full-extra CI, exercise statistics/report/pandas wheels independently,
43
+ render Plotly reports in the Chromium revision pinned by Playwright, enforce a same-runner 15%
44
+ legacy median-regression budget, and run 500-simulation event/decay calibration for nightly and
45
+ tagged releases.
46
+
47
+ ### Fixed
48
+
49
+ - Map corrupt ZIP member reads during reproducibility-bundle verification to a concise
50
+ `ReportError`, so `lacuna bundle verify` rejects damaged archives without exposing a Python
51
+ traceback.
52
+
53
+ ## [0.11.0] - 2026-08-26
54
+
55
+ ### Added
56
+
57
+ - Add `fit_decay()` with positive constrained exponential fitting, joint-period stationary block
58
+ bootstrap, explicit identifiability gates, deterministic RNG provenance, and use-site optional
59
+ SciPy through `lacuna[statistics]`.
60
+ - Add immutable `PortfolioProjectionResult` and explicit gross/net, leg, weighting, group-neutral,
61
+ contribution, concentration, coverage, attrition, and target-turnover evidence without portfolio
62
+ compounding or execution simulation.
63
+ - Add `lacuna.events` with availability-default event anchors, next-observation alignment, window
64
+ censoring and overlap evidence, and complete-path anchor-cluster stationary-bootstrap pointwise
65
+ and simultaneous response bands.
66
+ - Add ADR-015, the event-study subsystem contract, the shared v0.11 methodology, and the cumulative
67
+ `0.11.x` public API fixture.
68
+
69
+ ### Changed
70
+
71
+ - Retain jointly aligned period/horizon IC and spread tables in descriptive decay evidence so
72
+ inference resamples each period across all horizons without recomputation.
73
+ - Extend interactive reports with stored decay-fit, portfolio-cohort, and event-response panels.
74
+
75
+ ## [0.10.0] - 2026-08-26
76
+
77
+ ### Added
78
+
79
+ - Add immutable `BucketSpec` and `SignalTransformResult` APIs for balanced or tie-preserving
80
+ quantiles, split-aware quantiles, equal-width buckets, explicit edges, thresholds, and visible
81
+ exclusion policy.
82
+ - Add availability-aware grouped IC/bucket evidence and float64 weighted least-squares signal
83
+ neutralization with deterministic categorical encoding and rank/fit diagnostics.
84
+ - Add standardized `data_attrition` tables to labels and touched signal methods, plus exact
85
+ multi-lag rank, autocorrelation, and all-bucket membership turnover while preserving lag-one
86
+ outputs.
87
+ - Add immutable named evidence to `AuditReport`, study evidence retention and bundle inclusion, and
88
+ a deterministic self-contained Plotly renderer over stored evidence through `lacuna[report]`.
89
+ - Add the cumulative `0.10.x` public API contract and make historical signature checks accept only
90
+ additive optional keyword parameters.
91
+
92
+ ### Changed
93
+
94
+ - Extend `SignalStudy` with explicit bucket, neutralization, grouping, multi-lag, and caller-evidence
95
+ delegation while preserving the functional APIs as the analytical source of truth.
96
+
97
+ ## [0.9.0] - 2026-08-26
98
+
99
+ ### Added
100
+
101
+ - Add a published persisted-artifact compatibility matrix and tagged-fixture regression corpus for
102
+ result schema v1 across core `0.1`–`0.8`, bundle v1 across `0.7`–`0.8`, and standardized audit
103
+ profile v1 from `0.8`.
104
+ - Add strict non-executing `AuditProfile.from_dict(...)` / `from_json(...)` and standalone
105
+ `BundleManifest.from_dict(...)` / `from_json(...)` readers with fail-closed version, field,
106
+ duplicate-key, non-finite, and nested-contract validation.
107
+ - Add a versioned public installation-diagnostics API and `lacuna doctor --strict` gate with stable
108
+ check codes for package/native identity, Python and wheel support, dependency metadata, packaged
109
+ schemas, and runtime configuration; diagnostics redact configured paths and never inspect user
110
+ data or activate plugins.
111
+ - Advance the deterministic benchmark artifact to version 5 with an integrated strategy-audit case
112
+ spanning labels, signal IC, purged validation, stationary bootstrap, cost stress, point-in-time
113
+ data, vendor/backtest adapters, and standardized-audit composition; publish the initial profile
114
+ and retain production behavior because it found no justified semantic-preserving optimization.
115
+ - Add a complete Python API surface reference and versioned coverage manifest; contract tests now
116
+ require every cumulative root/module export, compatibility fixture, human symbol section, and
117
+ semantic design route to agree exactly.
118
+
119
+ ### Changed
120
+
121
+ - Advance `lacuna-options` to `0.1.3` only to widen its compatible core range to
122
+ `lacuna>=0.5,<0.10`; its independent `0.1.x` Python API and analytical semantics are unchanged.
123
+ - Complete the internal `0.9` roadmap boundary and v1 ledger audit. Every internal v1 definition
124
+ item now has released or release-gated evidence; `1.0.0` remains blocked by the explicitly
125
+ external requirement for real users applying Lacuna to independent research stacks.
126
+
127
+ ### Fixed
128
+
129
+ - Pin repository JSON artifacts to LF checkouts so persisted-fixture SHA-256 and Git blob identities
130
+ remain byte-stable on Windows as well as Linux and macOS.
131
+
132
+ ## [0.8.0] - 2026-08-26
133
+
134
+ ### Added
135
+
136
+ - Add versioned standardized audit profiles for signal, strategy, and options research scopes over
137
+ every released analytical, adapter, plugin, and extension method family.
138
+ - Add explicit required, optional, and not-applicable capability coverage; category, requirement,
139
+ inventory, and domain-finding evidence tables; and unchanged propagation of source findings.
140
+ - Add a published standardized-audit profile v1 JSON Schema, frozen strategy/profile and additive
141
+ `0.8.x` public API fixtures, plus real options-extension profile integration.
142
+ - Add strict `AnalysisResult.from_dict(...)` and `from_json(...)` readers with duplicate-key,
143
+ non-finite, schema, field, enum, timestamp, and version rejection.
144
+ - Add `lacuna audit --scope ... --evidence NAME=PATH` with bounded named evidence, deterministic
145
+ bundle output, safe overwrite behavior, and existing finding-based exit policies.
146
+ - Add an executable vendor/backtester-to-audit example and installed-wheel standardized-audit,
147
+ strict-reader, schema-resource, and bundle coverage.
148
+
149
+ ### Changed
150
+
151
+ - Render standardized reports as categorical evidence assessments with required/optional coverage
152
+ and no universal cross-phase strategy-quality score; the frozen v0.1 signal score is unchanged.
153
+ - Advance `lacuna-options` to `0.1.2` only to widen its compatible core range to
154
+ `lacuna>=0.5,<0.9`; its independent `0.1.x` public API remains unchanged.
155
+ - Publish the standardized-audit reference, ADR-014, profile-specific agent review workflow, and an
156
+ updated v1 ledger that leaves migration/operational hardening and independent real-user evidence
157
+ as the remaining pre-v1 work.
158
+
159
+ ## [0.7.0] - 2026-08-26
160
+
161
+ ### Added
162
+
163
+ - Add deterministic `.lacuna` reproducibility bundles containing the canonical audit,
164
+ Markdown/HTML projections, resolved configuration/environment summaries, and optional structured
165
+ evidence, provenance, and invocation metadata.
166
+ - Add a published bundle-manifest v1 JSON Schema, frozen additive `0.7.x` API fixture, SHA-256
167
+ artifact-set/member verification, and Python plus CLI creation/verification workflows.
168
+ - Add bounded hostile-archive validation, supplemental secret/URL/path redaction, fail-closed
169
+ canonical evidence checks, and explicit integrity-versus-authenticity semantics.
170
+
171
+ ### Changed
172
+
173
+ - Extend clean-wheel smoke and release archive inspection to require the bundle module, installed
174
+ manifest schema, and an end-to-end bundle create/verify path.
175
+ - Publish the reproducibility-bundle contract, v1-readiness ledger, architectural trust decision,
176
+ migration boundary, and `0.8`/`0.9` candidate hardening scopes.
177
+
178
+ ### Fixed
179
+
180
+ - Escape source-derived HTML metacharacters in Markdown reports so a downstream Markdown renderer
181
+ cannot interpret hostile finding text as embedded HTML.
182
+
183
+ ## [0.6.0] - 2026-08-26
184
+
185
+ ### Added
186
+
187
+ - Add DuckDB Arrow-stream ingestion without pandas or SQL construction, and a dependency-free
188
+ scikit-learn bridge over frozen walk-forward, purged, and combinatorial temporal folds.
189
+ - Add immutable vendor schemas with explicit availability, revision, timezone, adjustment, and
190
+ identifier declarations, plus generic return/trade/position adapters that require complete
191
+ backtest semantics.
192
+ - Add domain-specific Python entry-point groups, metadata-only discovery, deterministic conflict
193
+ selection, explicit trusted-code activation, and protocol-major/capability negotiation with
194
+ structured evidence.
195
+ - Add the independently versioned `lacuna-options` 0.1 distribution with normalized empirical
196
+ chains, carry forwards, log-forward moneyness, deterministic delta buckets, and supplied-model IV
197
+ residual evidence.
198
+ - Freeze additive core `0.6.x` and independent extension `0.1.x` public export/signature fixtures,
199
+ and add real DuckDB/scikit-learn integration plus options property/adversarial tests.
200
+
201
+ ### Changed
202
+
203
+ - Extend CI, clean-wheel smoke testing, release-set inspection, checksums, and provenance to cover
204
+ the separately built options wheel/source distribution without adding core runtime dependencies.
205
+ - Publish the Phase 8 adapter, plugin, options, package-version, security, testing, and post-phase
206
+ integration contracts throughout the developer and agent handbook.
207
+
208
+ ## [0.5.0] - 2026-08-26
209
+
210
+ ### Added
211
+
212
+ - Add combinatorial purged K-fold over every held-out group combination, with half-open interval
213
+ purging, embargo after every test group, explicit combinatorial safety limits, visible group/fold
214
+ tables, and deterministic complete-path reconstruction.
215
+ - Add unrestricted, within-date, within-group, block, and sign-flip permutation schemes with
216
+ explicit null contracts, alternatives, deterministic per-replicate streams, and finite-resample
217
+ p-value correction.
218
+ - Add non-Normal-return Sharpe uncertainty, two-sided confidence bounds, Probabilistic Sharpe Ratio,
219
+ minimum track-record length, and Deflated Sharpe Ratio over a visible complete trial family and
220
+ declared effective independent-trial count.
221
+ - Add symmetric CSCV/PBO over synchronous strategy matrices with complete IS/OOS selection evidence,
222
+ average OOS ranks, logits, deterministic tie policy, partition sensitivity, and bounded
223
+ combination enumeration.
224
+ - Add joint stationary bootstrap that shares one index path across strategy columns and reports
225
+ per-strategy means, standard errors, and long-run covariance evidence.
226
+ - Add White Reality Check with joint stationary resampling and Hansen SPA with studentization,
227
+ the stationary-bootstrap population long-run variance kernel, and separately exposed lower,
228
+ consistent, and upper null recenterings.
229
+ - Add literal equation-level White/Hansen references, deterministic stream fixtures, CPCV/PBO
230
+ properties, adapter equivalence, and fixed-seed permutation, Sharpe, PBO, Reality Check, and SPA
231
+ simulation suites.
232
+ - Publish a comprehensive advanced-inference methodology and agent review contract, and freeze the
233
+ additive `0.5.x` public API while preserving executable `0.1.x` through `0.4.x` contracts.
234
+
235
+ ### Changed
236
+
237
+ - Complete roadmap Phase 7 and designate separately optional adapters and extensions as the next
238
+ `0.6.x` milestone.
239
+ - Advance the reproducible benchmark artifact to version 4 with public CPCV, PBO, Reality Check,
240
+ and SPA reference cases, stable checksums, workload-specific throughput, and traced memory.
241
+ - Require the advanced-inference implementation, CV surface, and validation surface in source and
242
+ wheel distributions, and exercise CPCV/PBO/permutation/Sharpe/Reality Check/SPA in clean-wheel
243
+ smoke tests.
244
+
245
+ ### Fixed
246
+
247
+ - Use the declared two-sided confidence level for Sharpe confidence bounds while retaining the
248
+ one-sided confidence quantile for PSR and minimum track-record decisions.
249
+ - Reject permutation-invariant mean statistics for reorder-only permutation schemes, ambiguous PBO
250
+ partition types, non-numeric DSR trial families, and invalid CPCV integer configuration early with
251
+ domain-specific errors.
252
+
253
+ ## [0.4.0] - 2026-08-26
254
+
255
+ ### Added
256
+
257
+ - Add deterministic point-in-time as-of joins with explicit decision/availability semantics,
258
+ identity matching, exact-boundary and staleness policies, stable left order, explicit unmatched
259
+ handling, revision-tie resolution, and a verified zero-future-match invariant.
260
+ - Add direct future-data diagnostics with missing-availability preservation, equal-boundary counts,
261
+ bounded affected-row evidence, and optional absolute materiality.
262
+ - Add structural revision-history diagnostics with unique version identities, monotone publication
263
+ ordering, per-fact version summaries, and explicit point-in-time/latest-only/unknown source modes.
264
+ - Add three-state survivorship evidence, planted delisting support, half-open membership interval
265
+ validation, overlap and late-availability detection, and no unknown-to-pass conversion.
266
+ - Add availability-safe historical membership selection that rejects ambiguous interval sources and
267
+ visibly excludes otherwise-active rows that were not yet observable.
268
+ - Add consecutive universe additions, removals, retention, Jaccard similarity, and drift evidence
269
+ with explicit source survivorship status.
270
+ - Add reusable `DatasetSpec` contracts and structured validation for required fields, empty inputs,
271
+ null constraints, key uniqueness, numeric/temporal dtypes, non-finite values, and temporal order.
272
+ - Add exact temporal/revision/survivorship fixtures, generated latest-nonfuture and half-open
273
+ interval invariants, and eager/lazy Polars, pandas, and Arrow equivalence.
274
+ - Publish a complete point-in-time data-correctness methodology guide and freeze the additive
275
+ `0.4.x` public API while preserving executable `0.1.x` through `0.3.x` contracts.
276
+
277
+ ### Changed
278
+
279
+ - Complete roadmap Phase 6 and designate advanced inference as the next guarded milestone.
280
+ - Advance the reproducible benchmark artifact to version 3 with a public point-in-time as-of case,
281
+ deterministic checksum, left-row throughput, and traced-memory evidence.
282
+ - Require `lacuna.bias` in wheel/source distributions and exercise the availability firewall in
283
+ clean-wheel smoke tests.
284
+
285
+ ## [0.3.0] - 2026-08-26
286
+
287
+ ### Added
288
+
289
+ - Add a runtime-checkable cost-model protocol, configurable normalized trade columns, and immutable
290
+ `CostEstimate` values with named per-trade components, complete/known-only totals, explicit
291
+ unknown rows, assumptions, findings, units, and stable fingerprints.
292
+ - Add fixed/per-unit/notional commission, observed or assumed half/full spread, fixed/proportional
293
+ slippage, volatility-scaled slippage, general participation impact, square-root impact, and
294
+ annualized borrow models.
295
+ - Add component composition with strict row/currency/name reconciliation and safeguards against
296
+ silently applying costs again to observed execution prices or existing component columns.
297
+ - Add deterministic Cartesian cost grids and explicit correlated `CostScenario` sets with gross/net
298
+ P&L, return, Sharpe, turnover, component reconciliation, support, and unknown-cost status.
299
+ - Add monotonicity-checked, bracketed all-in-cost break-even solving for net P&L, net return, net
300
+ Sharpe, and CAGR, including complete solver traces and no silent extrapolation.
301
+ - Add point-in-time or explicitly retrospective liquidity diagnostics with participation coverage,
302
+ distribution summaries, constraints, and unknown/future-volume evidence.
303
+ - Add multi-scenario square-root-impact capacity curves across strictly increasing capital values,
304
+ including liquidity coverage, participation, component costs, net performance, and constraint
305
+ status without inventing one capacity number.
306
+ - Add hand-computed, property, planted, temporal, missing-data, component, adapter, packaging-smoke,
307
+ and frozen `0.3.x` public API contract tests while preserving the `0.1.x` and `0.2.x` contracts.
308
+ - Add a complete trading-cost/capacity methodology guide and promote the subsystem architecture from
309
+ target design to implemented behavior.
310
+
311
+ ### Changed
312
+
313
+ - Advance the implementation roadmap through Phase 5 and designate point-in-time data correctness
314
+ as the next milestone for the `0.4.x` series.
315
+ - Reuse validated path-independent sufficient statistics and one-time base-model estimates across
316
+ stress surfaces.
317
+ - Advance the reproducible benchmark artifact to version 2 with a nine-point public cost-stress
318
+ case measuring scenario throughput, output equivalence checksum, and traced memory.
319
+ - Require `lacuna.costs` in wheels/source distributions and exercise a cost surface in clean-wheel
320
+ smoke tests.
321
+
322
+ ## [0.2.0] - 2026-08-26
323
+
324
+ ### Added
325
+
326
+ - Add versioned canonical JSON and SHA-256 research identities with rejection of ambiguous,
327
+ non-finite, timezone-naive, callable, unordered, and credential-bearing values.
328
+ - Add an append-only SQLite experiment registry for completed, failed, cancelled, retried, and
329
+ explicitly superseding attempts, plus full eligible-set selection lineage and structured registry
330
+ snapshots.
331
+ - Add Bonferroni, Holm, Benjamini-Hochberg, and Benjamini-Yekutieli multiple-testing corrections
332
+ over explicit trial families or current registry attempts.
333
+ - Add deterministic parameter-surface evaluation with failed-point visibility, local neighborhoods,
334
+ peak isolation, plateau width, grid-boundary evidence, threshold support, and selection/evaluation
335
+ sample separation.
336
+ - Add seeded continuous parameter perturbation with normal, lognormal, and uniform distributions,
337
+ bounds, integer rounding, named constraints, rejection accounting, attempt budgets, and registry
338
+ integration.
339
+ - Add declared half-open subperiod analysis with sample support, confidence interval passthrough,
340
+ overlap warnings, sign consistency, dispersion, trend, failures, and outcome concentration.
341
+ - Add timestamped universe perturbation with stable membership identities, complete instrument sets,
342
+ retained-baseline fractions, composition Jaccard distance, sample support, and explicit
343
+ retrospective-membership findings.
344
+ - Add fixed, strictly trailing expanding/rolling, and explicitly retrospective quantile regime
345
+ classifiers with source-availability validation and unknown-history states.
346
+ - Add conditional regime evidence with raw/effective sample size, confidence intervals, Sharpe,
347
+ hit rate, drawdown, net/absolute contribution, leave-one-regime-out totals, overlap semantics, and
348
+ concentration findings.
349
+ - Publish and regression-test the additive `0.2.x` public API contract while continuing to test
350
+ preservation of the `0.1.x` contract.
351
+
352
+ ### Changed
353
+
354
+ - Advance the implementation roadmap through Phase 4 and designate trading realism as the next
355
+ milestone for the `0.3.x` series.
356
+ - Make release-contract verification select the public API fixture for the release's major/minor
357
+ series and require new Phase 4 modules in wheels and source distributions.
358
+
359
+ ## [0.1.0] - 2026-08-26
360
+
361
+ ### Changed
362
+
363
+ - Promote the fully verified `0.1.0-rc.1` implementation and its frozen `0.1.x` public contract to
364
+ Lacuna's initial stable release.
365
+ - Publish stable version tags as GitHub Releases while retaining prerelease treatment for SemVer
366
+ candidate tags.
367
+ - Record the maintainer decision to waive independent-user acceptance for `0.1.0` because no testers
368
+ were available; this release makes no claim of external user validation.
369
+
370
+ ### Removed
371
+
372
+ - Retire the candidate-specific acceptance protocol and public validation tracker references.
373
+
374
+ ## [0.1.0-rc.1] - 2026-08-26
375
+
376
+ ### Added
377
+
378
+ - Initial mixed Python/Rust project scaffold.
379
+ - Typed configuration, finding, provenance, and analysis result contracts.
380
+ - Polars-first dataframe normalization boundary.
381
+ - Native bridge diagnostics and checked numerical smoke kernel.
382
+ - Unit, property, integration, Rust, and CI test foundations.
383
+ - Initial project documentation and branding.
384
+ - Comprehensive developer handbook, subsystem architecture contracts, reference material, and coding-agent playbooks derived from the technical specification.
385
+ - Forward-return labels, Pearson/Spearman IC, quantile diagnostics, turnover, decay, and native grouped-rank, bootstrap-reduction, and interval-purge kernels.
386
+ - Expanding and rolling walk-forward splits, interval-aware purged K-fold with embargo, and deterministic IID, moving, circular, and stationary bootstrap inference.
387
+ - Versioned audit rules and scoring with explicit unknown/not-applicable evidence, deterministic JSON/Markdown/self-contained HTML reports, a functional audit API, the `SignalStudy` workflow, and the `lacuna signal` CLI.
388
+ - Published audit-result JSON Schema and golden fixtures, plus pandas/Arrow/lazy adapter equivalence, SciPy reference checks, and randomized native differential/property suites.
389
+ - Reproducible Python end-to-end and Criterion Rust benchmark suites with deterministic generators, equivalence checksums, throughput, memory evidence, and smoke/small/medium dataset tiers.
390
+ - Complete v0.1 methodology documentation, executable signal/purging examples, corrected implementation status, and a packaged copy of the published audit-result schema.
391
+ - Add strict documentation and clean source-distribution/wheel smoke jobs to CI.
392
+ - Redesign CI as a staged, cross-platform gate with frozen installs, immutable action pins, coverage,
393
+ retained evidence, Dependabot maintenance, and a stable branch-protection result.
394
+ - Add conservative adapter-copy/materialization provenance and execution-operation diagnostics to
395
+ analytical input evidence.
396
+ - Validate signal, label, and price time/identity schemas, external label intervals, delisting-return
397
+ dtypes, key compatibility, and runtime policy values before analytical execution.
398
+ - Freeze the `0.1.x` root/module export surface and primary call signatures in an executable public
399
+ API contract with documented compatibility and migration rules.
400
+ - Build tagged CPython 3.11 stable-ABI wheels for Linux x86_64/aarch64, macOS arm64, and Windows
401
+ x86_64; smoke-test each target artifact, validate the complete distribution set, publish checksums,
402
+ and generate GitHub provenance before creating a prerelease.
403
+ - Add an independent-user release-candidate protocol and structured feedback issue form with explicit
404
+ acceptance criteria and a non-fabricated evidence register.
405
+ - Keep RC1 registry publication disabled because the PyPI `lacuna` distribution is owned by an
406
+ unrelated project; distribute checksummed and attested wheels through GitHub Releases instead.
407
+
408
+ ### Fixed
409
+
410
+ - Treat positive and negative floating-point zero as the same tie in native Spearman ranking.