Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
working-directory: ${{ runner.temp }}
env:
RISKLABAI_REPOSITORY_ROOT: ${{ github.workspace }}
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.0.0'; print(origin)"
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.1.0'; print(origin)"
- name: Run the installed base package tests
working-directory: ${{ runner.temp }}
run: python -B -m pytest -q -p no:cacheprovider -c "$GITHUB_WORKSPACE/pyproject.toml" "$GITHUB_WORKSPACE/test"
Expand Down Expand Up @@ -91,7 +91,7 @@ jobs:
working-directory: ${{ runner.temp }}
env:
RISKLABAI_REPOSITORY_ROOT: ${{ github.workspace }}
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.0.0'; print(origin)"
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.1.0'; print(origin)"
- name: Run the installed optional-feature tests
working-directory: ${{ runner.temp }}
run: python -B -m pytest -q -p no:cacheprovider -c "$GITHUB_WORKSPACE/pyproject.toml" "$GITHUB_WORKSPACE/test"
Expand Down
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,29 @@
All notable changes to RiskLabAI.py are documented here.
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning: [SemVer](https://semver.org/).

## [3.1.0] - Unreleased

### Added

- Preserved the released 57-name `RiskLabAI.causal_factor_analysis` contract
and added 30 paper-derived names, producing an 87-name causal API with
matching Julia concepts.
- Added general-variance factor-mirage coefficients,
allocation-misspecification diagnostics, accepted-DAG factor roles,
deterministic structural-model evaluation, and separate family- and
selection-level false-discovery analytics for searched trials.
- Added direct analytical examples, independent mathematical and graph oracles,
randomized and stability checks, validation boundaries, and a shared
numerical Python-Julia fixture.

### Documentation

- Classified every relevant causal-factor source found in the systematic
library review. Thirteen contradictory or under-specified method units remain
explicitly source-blocked rather than being approximated or guessed.
- Froze the additive candidate metadata at 3.1.0 for final local integration;
version-control, publication, and release actions remain human-controlled.

## [2.0.1]

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion INSTALLATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Supported environments

RiskLabAI 3.0.0 supports:
RiskLabAI 3.1.0 supports:

- CPython 3.12, 3.13, and 3.14
- NumPy `>=2.2,<3`
Expand Down
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include PACKAGE_FILES.json
include PACKAGE_INSPECTION.md
include .github/workflows/ci.yml
recursive-include src *.py
recursive-include test *.py
recursive-include test *.py *.tsv
recursive-include docs *.md
recursive-include examples *.py
global-exclude __pycache__
Expand Down
2,301 changes: 2,290 additions & 11 deletions PACKAGE_FILES.json

Large diffs are not rendered by default.

48 changes: 28 additions & 20 deletions PACKAGE_INSPECTION.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Future Python package inspection specification

This specification applies only after a separate human authorization creates a
temporary RiskLabAI 3.0.0 wheel and source distribution. It does not authorize
building, installing, uploading, publishing, tagging, or releasing anything.
This specification governs temporary local artifacts built from the exact
RiskLabAI 3.1.0 additive integration candidate. It does not authorize using
version control, uploading, publishing, tagging, or releasing anything.

## Inputs

Expand All @@ -11,29 +11,35 @@ The inspector must use the final, hash-locked source tree and compare it with
`pyproject.toml`. It must reject a changed input, an undecodable file, an
unresolved link, or a concurrent mutation before considering an artifact.

`PACKAGE_FILES.json` separately records active release-source files and
already-public repository-only files. Human repository integration preserves
both classes without deletion; only the active class may enter the source
distribution, and only its declared runtime subset may enter the wheel.

## Archive safety and membership

For both archive formats, reject absolute paths, drive-qualified paths,
backslashes, traversal components, duplicate paths, case-fold or Unicode
normalization collisions, control characters, trailing dots or spaces,
alternate data streams, links, device files, and unexpected native binaries.

The wheel may contain only the 124 declared Python runtime modules plus the
standard metadata directory created for RiskLabAI 3.0.0. Tests, examples,
local readiness controls, caches, bytecode, credentials, and undeclared data
must not be present in the wheel. The source distribution must contain exactly
the 215 release-source members declared in `PACKAGE_FILES.json`, including the
governed `.github/workflows/ci.yml`, plus only the
The wheel may contain only the Python runtime modules declared in
`PACKAGE_FILES.json`, plus the normalized standard metadata directory for the
approved version. Tests, examples, analytical control records, caches, bytecode,
credentials, and undeclared data must not be present in the wheel. The source
distribution must contain exactly the release-source members declared in
`PACKAGE_FILES.json`, including the governed workflow, plus only the
backend-generated metadata members that the inspection record enumerates and
hashes explicitly.

## Metadata

The normalized package metadata must agree exactly with `pyproject.toml`:
name RiskLabAI, version 3.0.0, Python 3.12 through 3.14, BSD-3-Clause, the
declared maintainer and contact, repository, issue, and documentation links,
all required dependency clauses, and every optional group. No dynamic version,
entry point, plugin, executable script, or undeclared dependency is permitted.
The normalized package metadata must agree exactly with the human-approved
`pyproject.toml`: name RiskLabAI, the frozen additive version, Python 3.12
through 3.14, BSD-3-Clause, the declared maintainer and contact, repository,
issue, and documentation links, all required dependency clauses, and every
optional group. No dynamic version, entry point, plugin, executable script, or
undeclared dependency is permitted.

Every wheel record must have a valid cryptographic digest and size, except its
own permitted empty digest fields. The license and long description must match
Expand All @@ -42,12 +48,14 @@ the reviewed source bytes.
## Runtime checks

In fresh, isolated environments for every supported Python and valid NumPy
lane, verify the exact module origins, `RiskLabAI.__version__ == "3.0.0"`, the
13 root exports, all module and package exports in `PUBLIC_API.json`, and the
complete 57-feature causal API. For every module that declares `__all__`,
require every listed name to be bound on that installed module and resolvable by
an explicit import; an advertised but unbound name rejects the artifact. Run
the exact package-scoped test inventory and the valid optional-feature lanes.
lane, verify the exact module origins, the approved version binding, the root
exports, all module and package exports in `PUBLIC_API.json`, and the complete
87-name causal API. Require the released 57-name causal prefix to remain exact
and the 30 additions to match the parity contract. For every module that
declares `__all__`, require every listed name to be bound on that installed
module and resolvable by an explicit import; an advertised but unbound name
rejects the artifact. Run the exact package-scoped test inventory and the valid
optional-feature lanes.
Confirm that optional groups do not become base dependencies and that
changepoints alone is unavailable on Python 3.14. Run installed-package tests
outside the source checkout and reject any import whose resolved path remains
Expand Down
Loading
Loading