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.
- lacuna_quant-0.13.0/CHANGELOG.md +410 -0
- lacuna_quant-0.13.0/Cargo.lock +672 -0
- lacuna_quant-0.13.0/Cargo.toml +24 -0
- lacuna_quant-0.13.0/LICENSE +21 -0
- lacuna_quant-0.13.0/PKG-INFO +592 -0
- lacuna_quant-0.13.0/README.md +541 -0
- lacuna_quant-0.13.0/pyproject.toml +137 -0
- lacuna_quant-0.13.0/python/lacuna/__init__.py +150 -0
- lacuna_quant-0.13.0/python/lacuna/__main__.py +5 -0
- lacuna_quant-0.13.0/python/lacuna/_advanced_inference.py +1362 -0
- lacuna_quant-0.13.0/python/lacuna/_attrition.py +35 -0
- lacuna_quant-0.13.0/python/lacuna/_decay.py +455 -0
- lacuna_quant-0.13.0/python/lacuna/_frames.py +365 -0
- lacuna_quant-0.13.0/python/lacuna/_native.pyi +22 -0
- lacuna_quant-0.13.0/python/lacuna/_portfolio.py +476 -0
- lacuna_quant-0.13.0/python/lacuna/_resampling.py +39 -0
- lacuna_quant-0.13.0/python/lacuna/_signal_transform.py +880 -0
- lacuna_quant-0.13.0/python/lacuna/_version.py +3 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/__init__.py +68 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/backtest.py +178 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/duckdb.py +100 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/factor_panel.py +245 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/polars.py +105 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/sklearn.py +150 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/types.py +89 -0
- lacuna_quant-0.13.0/python/lacuna/adapters/vendor.py +189 -0
- lacuna_quant-0.13.0/python/lacuna/audit.py +703 -0
- lacuna_quant-0.13.0/python/lacuna/audit_profiles.py +912 -0
- lacuna_quant-0.13.0/python/lacuna/benchmark.py +896 -0
- lacuna_quant-0.13.0/python/lacuna/bias.py +1608 -0
- lacuna_quant-0.13.0/python/lacuna/bundle.py +926 -0
- lacuna_quant-0.13.0/python/lacuna/cli.py +483 -0
- lacuna_quant-0.13.0/python/lacuna/config.py +110 -0
- lacuna_quant-0.13.0/python/lacuna/costs.py +2173 -0
- lacuna_quant-0.13.0/python/lacuna/cv.py +788 -0
- lacuna_quant-0.13.0/python/lacuna/diagnostics.py +507 -0
- lacuna_quant-0.13.0/python/lacuna/events.py +680 -0
- lacuna_quant-0.13.0/python/lacuna/exceptions.py +29 -0
- lacuna_quant-0.13.0/python/lacuna/experiment.py +712 -0
- lacuna_quant-0.13.0/python/lacuna/labels.py +359 -0
- lacuna_quant-0.13.0/python/lacuna/native.py +24 -0
- lacuna_quant-0.13.0/python/lacuna/plugins.py +308 -0
- lacuna_quant-0.13.0/python/lacuna/py.typed +1 -0
- lacuna_quant-0.13.0/python/lacuna/regime.py +665 -0
- lacuna_quant-0.13.0/python/lacuna/report.py +839 -0
- lacuna_quant-0.13.0/python/lacuna/robustness.py +1010 -0
- lacuna_quant-0.13.0/python/lacuna/schemas/__init__.py +49 -0
- lacuna_quant-0.13.0/python/lacuna/schemas/audit-result-v1.schema.json +157 -0
- lacuna_quant-0.13.0/python/lacuna/schemas/lacuna-bundle-manifest-v1.schema.json +168 -0
- lacuna_quant-0.13.0/python/lacuna/schemas/persisted-artifact-compatibility-v1.json +51 -0
- lacuna_quant-0.13.0/python/lacuna/schemas/standard-audit-profile-v1.schema.json +90 -0
- lacuna_quant-0.13.0/python/lacuna/signal.py +1300 -0
- lacuna_quant-0.13.0/python/lacuna/study.py +395 -0
- lacuna_quant-0.13.0/python/lacuna/types.py +383 -0
- lacuna_quant-0.13.0/python/lacuna/validation.py +1171 -0
- lacuna_quant-0.13.0/rust/lacuna-core/Cargo.toml +22 -0
- lacuna_quant-0.13.0/rust/lacuna-core/benches/kernels.rs +119 -0
- lacuna_quant-0.13.0/rust/lacuna-core/src/lib.rs +395 -0
- lacuna_quant-0.13.0/rust/lacuna-python/Cargo.toml +22 -0
- lacuna_quant-0.13.0/rust/lacuna-python/src/lib.rs +63 -0
- lacuna_quant-0.13.0/schemas/audit-result-v1.schema.json +157 -0
- lacuna_quant-0.13.0/schemas/lacuna-bundle-manifest-v1.schema.json +168 -0
- lacuna_quant-0.13.0/schemas/persisted-artifact-compatibility-v1.json +51 -0
- 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.
|