Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
2a4efed
chore(deps): bump the github-actions group across 1 directory with 3 …
dependabot[bot] Jul 6, 2026
9f2273d
chore(deps): bump the python-packaging group across 1 directory with …
dependabot[bot] Jul 6, 2026
6440169
feat(data-quality): add ascii tick training feature substrate
dmidlo Jul 8, 2026
befedd2
fix(influx): enrich legacy tick caches before projection
dmidlo Jul 8, 2026
4778e3c
Merge pull request #418 from dmidlo/codex/416-eurusd-triangle-influx-…
dmidlo Jul 8, 2026
b19e362
Merge pull request #316 from dmidlo/dependabot/github_actions/github-…
dmidlo Jul 8, 2026
296f7f6
Merge pull request #402 from dmidlo/dependabot/pip/python-packaging-0…
dmidlo Jul 8, 2026
17caeb3
fix(data-quality): remove retired m1 fingerprint residue (#410)
dmidlo Jul 10, 2026
fc9b330
fix(raw-input): close private ascii tick bypasses (#412)
dmidlo Jul 10, 2026
824d497
perf(dev): run coverage once at final gate
dmidlo Jul 10, 2026
0d46a63
feat(data-quality): emit validation evidence artifacts
dmidlo Jul 10, 2026
388d74b
feat(data-quality): add decomposition and structural-regime fingerprints
dmidlo Jul 10, 2026
20b86b0
feat(data-quality): add structured quality skip events
dmidlo Jul 10, 2026
40e9f2f
feat(data-quality): add bounded topology inspection context
dmidlo Jul 10, 2026
1603cfc
feat(data-quality): add run-scoped cross-series fingerprints
dmidlo Jul 10, 2026
52a95fb
feat(data-quality): improve remediation rule attribution
dmidlo Jul 11, 2026
43b47d4
feat(data-quality): classify remediation actionability boundaries
dmidlo Jul 11, 2026
0fa1cfc
feat(data-quality): emit remediation plan artifacts
dmidlo Jul 11, 2026
9c26537
feat(data-quality): add non-mutating repair plans
dmidlo Jul 11, 2026
d4419d8
perf(ci): run coverage only for production promotion
dmidlo Jul 11, 2026
004033d
feat(data-quality): preserve profile resolution provenance
dmidlo Jul 12, 2026
b2c8aa8
feat(data-quality): make calendar remediation profile-aware
dmidlo Jul 12, 2026
35c265d
feat(data-quality): recommend next fingerprint work
dmidlo Jul 12, 2026
6efa3cb
feat(data-quality): add fingerprint cache source parity diagnostics
dmidlo Jul 12, 2026
4617cd7
feat(data-quality): add synthetic fingerprint constraint protocol
dmidlo Jul 12, 2026
31fa1f3
feat(data-quality): add classical fingerprint baselines
dmidlo Jul 12, 2026
bd67f11
feat(data-quality): add classical model input contracts
dmidlo Jul 12, 2026
f7927b4
feat(data-quality): add exponential-smoothing model family
dmidlo Jul 12, 2026
55c3116
feat(data-quality): add explicit-order autoregressive model family
dmidlo Jul 12, 2026
2874e25
feat(data-quality): add seasonal and exogenous model family
dmidlo Jul 12, 2026
9ccc024
feat(data-quality): add state-space and Kalman model family
dmidlo Jul 12, 2026
6e40bea
feat(data-quality): add arch and garch volatility models
dmidlo Jul 13, 2026
d9ca023
feat(data-quality): add classical-model comparison reporting
dmidlo Jul 13, 2026
3261657
feat(data-quality): generate synthetic ticks from reference sets
dmidlo Jul 13, 2026
bcb267c
feat(synthetic): add variable-cardinality event contracts
dmidlo Jul 13, 2026
284b6b8
feat(synthetic): add reconstruction streaming contracts
dmidlo Jul 13, 2026
cffac05
feat(synthetic): enforce reconstruction information modes
dmidlo Jul 13, 2026
66a6a08
feat(data-analytics): detect technological feed epochs
dmidlo Jul 13, 2026
3367475
feat(synthetic): add feed observation operators
dmidlo Jul 13, 2026
20e7d7c
feat(synthetic): add reverse-degradation benchmark
dmidlo Jul 13, 2026
7fbb0e4
feat(market-context): add point-in-time timeline
dmidlo Jul 13, 2026
c548369
feat(synthetic): build empirical reference motif index
dmidlo Jul 13, 2026
1746744
feat(synthetic): generate empirical motif candidates
dmidlo Jul 13, 2026
1979733
feat(synthetic): add deterministic historical carving
dmidlo Jul 14, 2026
baeb50d
feat(synthetic): reconcile cross-currency streams
dmidlo Jul 14, 2026
806ec6b
feat(synthetic): calibrate reconstruction ensembles
dmidlo Jul 14, 2026
ab7984e
fix(synthetic): restore full-tree ensemble typing
dmidlo Jul 14, 2026
6e53f6f
feat(broker-capture): capture append-only broker delivery events
dmidlo Jul 14, 2026
94a86d7
feat(broker-delivery): fit immutable broker delivery fingerprints
dmidlo Jul 14, 2026
c52adb8
feat(synthetic): apply broker delivery style to constrained reconstru…
dmidlo Jul 14, 2026
a3bd47a
feat(synthetic): persist reconstruction products atomically
dmidlo Jul 14, 2026
d3d6c9a
feat(orchestration): orchestrate reconstruction windows with temporal
dmidlo Jul 14, 2026
1af61b2
feat(synthetic): define reconstructed activity semantics
dmidlo Jul 14, 2026
cba0f2b
feat(synthetic): derive reconstruction candlesticks
dmidlo Jul 14, 2026
2069f0c
feat(synthetic): evaluate reconstruction strategy sensitivity
dmidlo Jul 14, 2026
a54e264
feat(synthetic): certify reconstruction release evidence
dmidlo Jul 14, 2026
c4f461d
feat(api): add timezone-aware output projection
dmidlo Jul 14, 2026
c12fe3e
docs(rtd): make project documentation build-ready
dmidlo Jul 14, 2026
bc71ceb
feat(container): add rootless multi-platform image
dmidlo Jul 14, 2026
786e6a2
feat(data): add deterministic random windows
dmidlo Jul 14, 2026
78f6827
feat(analytics): fit active-time multivariate feed epochs
dmidlo Jul 15, 2026
fd837f0
feat(synthetic): calibrate historical observation operators
dmidlo Jul 15, 2026
57f16d7
feat(market-context): ingest point-in-time corpus
dmidlo Jul 15, 2026
28019dc
feat(market-context): add point-in-time cftc positioning corpus
dmidlo Jul 15, 2026
bd15a74
fix(market-context): restore full mypy compatibility
dmidlo Jul 15, 2026
0caec14
feat(synthetic): predeclare benchmark promotion gates
dmidlo Jul 15, 2026
6b14f6c
feat(synthetic): publish real reverse-degradation benchmark corpus
dmidlo Jul 16, 2026
fe5f632
feat(synthetic): qualify real modern reference motif library
dmidlo Jul 16, 2026
4e89d69
feat(synthetic): compose first-party reconstruction plan
dmidlo Jul 16, 2026
f1adfd0
feat(synthetic): wire reconstruction handlers end to end
dmidlo Jul 16, 2026
c1eb2ad
feat(reconstruction): expose public cli and typed api (#467)
dmidlo Jul 16, 2026
edd641b
feat(reconstruction): certify modern reference campaign
dmidlo Jul 16, 2026
f388e57
bump: version 2.0.1 → 2.1.0
dmidlo Jul 16, 2026
27447b6
fix(release): promote exact TestPyPI artifacts
dmidlo Jul 16, 2026
79d4ba0
fix(runtime): make memory probes portable on windows
dmidlo Jul 19, 2026
a503954
bump: version 2.1.0 → 2.1.1
dmidlo Jul 19, 2026
4dfb45a
fix(packaging): declare timezone data for windows
dmidlo Jul 19, 2026
06df27b
bump: version 2.1.1 → 2.1.2
dmidlo Jul 19, 2026
7dd7da3
fix(modeling): keep failed state samples bounded
dmidlo Jul 19, 2026
3418fc7
bump: version 2.1.2 → 2.1.3
dmidlo Jul 19, 2026
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
2 changes: 1 addition & 1 deletion .cz.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
commitizen:
name: cz_conventional_commits
tag_format: $version
version: 2.0.1
version: 2.1.3
version_files:
- src/histdatacom/__init__.py
9 changes: 9 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
**
!Dockerfile
!pyproject.toml
!README.md
!LICENSE
!container
!container/constraints.txt
!src
!src/**
85 changes: 67 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,28 @@ jobs:
run: ./actionlint -color
shell: bash

docs:
name: Build documentation
runs-on: ubuntu-latest

steps:
- name: Check out source
uses: actions/checkout@v7.0.0

- name: Set up Python
uses: actions/setup-python@v6.3.0
with:
python-version: "3.13"
cache: pip

- name: Install documentation dependencies
run: |
python -m pip install --upgrade pip "setuptools>=77" wheel
python -m pip install -e ".[docs]"

- name: Build documentation with warnings as errors
run: python -m sphinx -W --keep-going -b html docs docs/_build/html

test:
name: Python ${{ matrix.python-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
Expand All @@ -57,7 +79,7 @@ jobs:
uses: actions/checkout@v7.0.0

- name: Set up Python
uses: actions/setup-python@v6.2.0
uses: actions/setup-python@v6.3.0
with:
python-version: ${{ matrix.python-version }}
cache: pip
Expand All @@ -67,21 +89,8 @@ jobs:
python -m pip install --upgrade pip "setuptools>=77" wheel
python -m pip install -e ".[test]"

- name: Run tests with coverage
run: python -m pytest --cov=histdatacom --cov-report=term-missing:skip-covered --cov-report=xml --cov-report=html

- name: Enforce coverage threshold
run: python -m coverage report

- name: Upload coverage reports
if: always()
uses: actions/upload-artifact@v7.0.1
with:
name: coverage-${{ matrix.os }}-py${{ matrix.python-version }}
path: |
coverage.xml
htmlcov/
if-no-files-found: warn
- name: Run tests
run: python -m pytest

- name: Compile source and tests
run: python -m compileall -q src tests scripts samples test.py snippets.py
Expand Down Expand Up @@ -110,6 +119,42 @@ jobs:
PY
shell: bash

production-coverage:
name: Production coverage
if: github.event_name == 'pull_request' && github.base_ref == 'main' && github.head_ref == 'dev'
runs-on: ubuntu-latest

steps:
- name: Check out source
uses: actions/checkout@v7.0.0

- name: Set up Python
uses: actions/setup-python@v6.3.0
with:
python-version: "3.13"
cache: pip

- name: Install test dependencies
run: |
python -m pip install --upgrade pip "setuptools>=77" wheel
python -m pip install -e ".[test]"

- name: Run production coverage
run: python -m pytest --cov=histdatacom --cov-report=term-missing:skip-covered --cov-report=xml --cov-report=html

- name: Enforce coverage threshold
run: python -m coverage report

- name: Upload production coverage report
if: always()
uses: actions/upload-artifact@v7.0.1
with:
name: production-coverage
path: |
coverage.xml
htmlcov/
if-no-files-found: warn

build:
name: Build package artifacts
runs-on: ubuntu-latest
Expand All @@ -119,7 +164,7 @@ jobs:
uses: actions/checkout@v7.0.0

- name: Set up Python
uses: actions/setup-python@v6.2.0
uses: actions/setup-python@v6.3.0
with:
python-version: "3.13"
cache: pip
Expand Down Expand Up @@ -175,6 +220,8 @@ jobs:
"jupyter",
"pandas",
"pyarrow",
"statsmodels",
"arch",
"temporalio",
):
metadata.version(distribution_name)
Expand All @@ -184,6 +231,8 @@ jobs:
"ipywidgets",
"pandas",
"pyarrow",
"statsmodels",
"arch",
"temporalio",
):
if importlib.util.find_spec(module_name) is None:
Expand Down Expand Up @@ -215,7 +264,7 @@ jobs:
uses: actions/checkout@v7.0.0

- name: Set up Python
uses: actions/setup-python@v6.2.0
uses: actions/setup-python@v6.3.0
with:
python-version: "3.13"
cache: pip
Expand Down
105 changes: 105 additions & 0 deletions .github/workflows/container.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Container

on:
pull_request:
paths:
- ".dockerignore"
- ".github/workflows/container.yml"
- "Dockerfile"
- "container/constraints.txt"
- "scripts/smoke_container.py"
- "tests/unit/test_container_distribution.py"
- "tests/unit/test_smoke_container.py"
push:
tags:
- "v*"
Comment on lines +14 to +15

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Match container publishing to SemVer release tags

The release workflow and release docs now use bare SemVer tags such as 2.1.0, but this container workflow only triggers on v* tags and the publish job repeats startsWith(github.ref, 'refs/tags/v'). With the documented 2.1.0 release tag, the container workflow never runs, so the GHCR image described in the README is not published for that release. Align this trigger and publish guard with the SemVer tag pattern used by release.yml.

Useful? React with 👍 / 👎.

workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name != 'push' }}

jobs:
validate:
name: Build and smoke native image
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Check out source
uses: actions/checkout@v7.0.0

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4.2.0

- name: Build and smoke application image
run: |
python scripts/smoke_container.py \
--image histdatacom:ci-smoke \
--version "${GITHUB_REF_NAME}" \
--revision "${GITHUB_SHA}"
shell: bash

publish:
name: Publish multi-platform image
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
needs: validate
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
contents: read
id-token: write
packages: write

steps:
- name: Check out source
uses: actions/checkout@v7.0.0

- name: Set up QEMU
uses: docker/setup-qemu-action@v4.2.0

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4.2.0

- name: Log in to GitHub Container Registry
uses: docker/login-action@v4.4.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Resolve image metadata
id: metadata
uses: docker/metadata-action@v6.2.0
with:
images: ghcr.io/${{ github.repository }}
flavor: latest=auto
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha,prefix=sha-

- name: Resolve build timestamp
id: build
run: echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "${GITHUB_OUTPUT}"
shell: bash

- name: Build and publish image
uses: docker/build-push-action@v7.3.0
with:
build-args: |
IMAGE_CREATED=${{ steps.build.outputs.created }}
IMAGE_REVISION=${{ github.sha }}
IMAGE_VERSION=${{ github.ref_name }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: .
labels: ${{ steps.metadata.outputs.labels }}
platforms: linux/amd64,linux/arm64
provenance: mode=max
push: true
sbom: true
tags: ${{ steps.metadata.outputs.tags }}
Loading
Loading