Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
443 commits
Select commit Hold shift + click to select a range
340649c
feat: stream column role inference for Arrow sources
parthdongre Aug 16, 2026
ff7ca3a
test: verify streaming parquet role inference
parthdongre Aug 16, 2026
4ecf320
fix: distinguish sampled and native role cardinality
parthdongre Aug 16, 2026
49a59d2
feat: stream bounded statistics for Arrow sources
parthdongre Aug 16, 2026
3a96766
test: verify bounded streaming statistics
parthdongre Aug 16, 2026
f8d94eb
feat: add bounded full-analysis path for streaming sources
parthdongre Aug 16, 2026
a8d7c41
ci: run streaming statistics regression
parthdongre Aug 16, 2026
6d1bfa4
feat: dispatch public analysis through streaming sources
parthdongre Aug 16, 2026
b1785a2
feat: route public analyze through source dispatcher
parthdongre Aug 16, 2026
43cc645
test: verify full analyze streams parquet input
parthdongre Aug 16, 2026
f6eddd2
feat: stream bounded anomaly analysis for Arrow sources
parthdongre Aug 16, 2026
6d7d152
test: verify anomaly analysis streams numeric parquet projection
parthdongre Aug 16, 2026
704175e
feat: add bounded streaming target diagnostics
parthdongre Aug 16, 2026
33486f3
feat: stream bounded target diagnostics for Arrow sources
parthdongre Aug 16, 2026
b9e6660
feat: route installed CLI analyze through source dispatcher
parthdongre Aug 16, 2026
07f9df8
build: use source-aware CLI entrypoint
parthdongre Aug 16, 2026
fa7c003
feat: bound drift comparison for streaming sources
parthdongre Aug 16, 2026
186ce54
test: verify installed analyze command uses streaming dispatcher
parthdongre Aug 16, 2026
fb49438
test: cover bounded streaming drift and gates
parthdongre Aug 16, 2026
b197eae
ci: exercise streaming drift regression
parthdongre Aug 16, 2026
8d6674b
fix: include Arrow capability in all extra
parthdongre Aug 16, 2026
5eb94cf
feat: stream CSV and TSV sources with Arrow
parthdongre Aug 16, 2026
dff5946
test: cover Arrow CSV and TSV streaming
parthdongre Aug 16, 2026
396ea1c
ci: validate CSV streaming and complete all extra
parthdongre Aug 16, 2026
8d74fdf
fix: preserve FileSource compatibility for delimited inputs
parthdongre Aug 16, 2026
315c19b
refactor: route CLI through canonical public engines
parthdongre Aug 16, 2026
f5cbe0e
refactor: retire CLI monkeypatch shim
parthdongre Aug 16, 2026
73f60eb
packaging: use canonical CLI entrypoint
parthdongre Aug 16, 2026
76e0d68
refactor: collapse legacy API into canonical facade
parthdongre Aug 16, 2026
096d038
test: lock canonical API facade boundaries
parthdongre Aug 16, 2026
928646b
feat: add first-class quality gate CLI
parthdongre Aug 16, 2026
be72cec
test: cover quality gate CLI semantics
parthdongre Aug 16, 2026
65e625c
test: prove CLI gate preserves Parquet streaming
parthdongre Aug 16, 2026
7287826
ci: exercise streaming quality gate CLI
parthdongre Aug 16, 2026
d17a3a0
docs: align README with source-aware quality gate architecture
parthdongre Aug 16, 2026
14dab9f
packaging: move Excel and AI-only deps out of core
parthdongre Aug 16, 2026
7c6a4e6
feat: explain optional Excel reader requirement
parthdongre Aug 16, 2026
cb76fc3
test: lock optional dependency boundaries
parthdongre Aug 16, 2026
0ed0778
packaging: mark FrameVitals as typed
parthdongre Aug 16, 2026
5e19aa2
packaging: include PEP 561 marker in wheels
parthdongre Aug 16, 2026
19761df
ci: require PEP 561 marker in wheel
parthdongre Aug 16, 2026
1d6df7d
docs: capture source-aware overhaul in changelog
parthdongre Aug 16, 2026
fd35aec
ci: cancel stale package runs and restrict permissions
parthdongre Aug 16, 2026
f89939e
ci: cancel stale test runs and restrict permissions
parthdongre Aug 16, 2026
7b4e858
ci: verify release version before PyPI publish
parthdongre Aug 16, 2026
edaf3a4
ci: add reproducible performance benchmark workflow
parthdongre Aug 16, 2026
02e32ca
refactor: load plotting modules only when needed
parthdongre Aug 16, 2026
c6819a9
refactor: isolate optional web dependencies and canonical drift
parthdongre Aug 16, 2026
4e667a6
test: lock lazy web optional dependencies
parthdongre Aug 16, 2026
e9624fa
refactor: make explainability plotting optional
parthdongre Aug 16, 2026
e7cde5f
packaging: move plotting stack out of core
parthdongre Aug 16, 2026
5099944
test: enforce lazy plotting dependency boundary
parthdongre Aug 16, 2026
bb0d4ee
test: skip web boundary check without Flask
parthdongre Aug 16, 2026
aafc942
ci: verify optional dependency boundaries
parthdongre Aug 16, 2026
d82642b
feat: ship reusable FrameVitals gate action
parthdongre Aug 16, 2026
ad309c0
ci: smoke-test reusable gate action
parthdongre Aug 16, 2026
bc48a56
fix: make gate action setup portable
parthdongre Aug 16, 2026
0c38044
docs: document contributor architecture boundaries
parthdongre Aug 16, 2026
a30fe7c
docs: document extras and reusable gate action
parthdongre Aug 16, 2026
183d766
docs: record optional stack and gate action overhaul
parthdongre Aug 16, 2026
30a96b8
feat: add persistent snapshot history API
parthdongre Aug 16, 2026
2f5ec9a
feat: expose snapshot history publicly
parthdongre Aug 16, 2026
f376d8e
test: cover persistent snapshot history
parthdongre Aug 16, 2026
904650e
feat: add extensible custom data checks
parthdongre Aug 16, 2026
4b66268
feat: run custom checks inside quality gates
parthdongre Aug 16, 2026
ab5a063
feat: expose custom checks through public API
parthdongre Aug 16, 2026
a09bae3
feat: expose custom checks through compatibility API
parthdongre Aug 16, 2026
f50dbf3
test: cover extensible custom checks and gate integration
parthdongre Aug 16, 2026
2240650
fix: accept NumPy boolean custom check outcomes
parthdongre Aug 16, 2026
745fcde
chore: ignore local FrameVitals monitoring state
parthdongre Aug 16, 2026
89b9d6c
feat: surface custom checks in gate summaries
parthdongre Aug 16, 2026
de2e026
feat: add structured custom check results
parthdongre Aug 16, 2026
d4726c8
docs: add custom quality gate example
parthdongre Aug 16, 2026
4af8704
docs: add snapshot monitoring history example
parthdongre Aug 16, 2026
779698e
feat: discover third-party check plugins
parthdongre Aug 16, 2026
ac48442
test: cover third-party check plugin discovery
parthdongre Aug 16, 2026
b2f6134
fix: preserve CSV fallback across Python versions
parthdongre Aug 16, 2026
dbf536f
feat: support in-memory Arrow sources
parthdongre Aug 16, 2026
47daaa7
refactor: route analysis through dataset sources
parthdongre Aug 16, 2026
b408aa6
test: cover in-memory Arrow sources
parthdongre Aug 16, 2026
f4c27c6
ci: cover in-memory Arrow inputs
parthdongre Aug 16, 2026
fec8290
feat: accept Arrow PyCapsule table inputs
parthdongre Aug 16, 2026
9d3934c
test: cover Arrow capsule interoperability
parthdongre Aug 16, 2026
07f1f86
feat: add streaming DuckDB relation source
parthdongre Aug 16, 2026
4859075
feat: route DuckDB relations through source adapter
parthdongre Aug 16, 2026
f3215e4
feat: add optional DuckDB interoperability extra
parthdongre Aug 16, 2026
9686ee0
test: cover streaming DuckDB relation inputs
parthdongre Aug 16, 2026
50b9346
ci: add Arrow and DuckDB interoperability checks
parthdongre Aug 16, 2026
ec9b261
fix: report source materialization by execution semantics
parthdongre Aug 16, 2026
02d1f81
fix: align custom check results and materialization provenance
parthdongre Aug 16, 2026
4ab16d5
feat: expose checks and plugin discovery at package root
parthdongre Aug 16, 2026
c78a45f
test: lock custom check result contract
parthdongre Aug 16, 2026
561658c
test: expose plugin discovery through public API
parthdongre Aug 16, 2026
4eb536d
test: verify DuckDB materialization provenance
parthdongre Aug 16, 2026
497b3b8
feat: mirror check discovery in compatibility API
parthdongre Aug 16, 2026
0261899
docs: document interoperable source-aware FrameVitals
parthdongre Aug 16, 2026
bc22b98
docs: record interoperability and extensibility work
parthdongre Aug 16, 2026
2dfa5b7
feat: add public source capability inspection
parthdongre Aug 16, 2026
27d247b
feat: expose source inspection at package root
parthdongre Aug 16, 2026
5dfd74e
feat: mirror source inspection in compatibility API
parthdongre Aug 16, 2026
54e2ae1
test: cover public source capability inspection
parthdongre Aug 16, 2026
57fd09e
test: expose Arrow source capabilities publicly
parthdongre Aug 16, 2026
b928c2a
test: expose DuckDB source capabilities publicly
parthdongre Aug 16, 2026
dd16918
feat: define execution provenance schema
parthdongre Aug 16, 2026
547dd6e
refactor: standardize custom check execution provenance
parthdongre Aug 16, 2026
abcaa30
refactor: standardize operation execution provenance
parthdongre Aug 16, 2026
216adbe
test: lock execution provenance schema
parthdongre Aug 16, 2026
623a884
refactor: version budgeted execution metadata
parthdongre Aug 16, 2026
848e3fe
refactor: standardize focused execution provenance
parthdongre Aug 16, 2026
48be420
test: require execution schema on streaming statistics
parthdongre Aug 16, 2026
e1af9f9
test: lock public execution schema v1
parthdongre Aug 16, 2026
9a56a44
refactor: version streaming role provenance
parthdongre Aug 16, 2026
9957e21
refactor: version streaming health provenance
parthdongre Aug 16, 2026
4f667fb
refactor: version streaming ML-readiness provenance
parthdongre Aug 16, 2026
d9f65e5
refactor: version streaming quality provenance
parthdongre Aug 16, 2026
0202cb2
docs: add FrameVitals documentation home
parthdongre Aug 16, 2026
6ca09bb
docs: define execution provenance contract
parthdongre Aug 16, 2026
c4bfee2
docs: explain source-aware execution
parthdongre Aug 16, 2026
540e5a9
docs: explain quality gates and extensions
parthdongre Aug 16, 2026
b9e8dcf
build: add documentation capability
parthdongre Aug 16, 2026
a45a460
docs: configure MkDocs site
parthdongre Aug 16, 2026
6b843d8
ci: validate documentation site
parthdongre Aug 16, 2026
dbe886d
feat: add source inspection CLI command
parthdongre Aug 16, 2026
7c68251
test: cover source inspection CLI
parthdongre Aug 16, 2026
2a24a98
docs: record source inspection and provenance schema
parthdongre Aug 16, 2026
a8c3889
feat: add dict-compatible focused diagnostic results
parthdongre Aug 16, 2026
ba90522
feat: return focused DiagnosticResult objects
parthdongre Aug 16, 2026
eb87779
typing: expose focused DiagnosticResult type
parthdongre Aug 16, 2026
86805b2
test: cover focused DiagnosticResult ergonomics
parthdongre Aug 16, 2026
4d14295
docs: document public result objects
parthdongre Aug 16, 2026
f563d7b
test: lock public package surface
parthdongre Aug 16, 2026
dab75ff
test: cover zero-dependency Polars interoperability
parthdongre Aug 16, 2026
b07989b
ci: verify Polars Arrow interoperability
parthdongre Aug 16, 2026
728ec2b
docs: add extension author guide
parthdongre Aug 16, 2026
b220168
examples: add third-party check plugin package
parthdongre Aug 16, 2026
1fec938
examples: implement third-party FrameVitals checks
parthdongre Aug 16, 2026
b837ce3
examples: document check plugin template
parthdongre Aug 16, 2026
5474e21
ci: verify external check plugin contract
parthdongre Aug 16, 2026
cf5e4cd
test: cover snapshot monitoring CLI
parthdongre Aug 16, 2026
5420960
docs: add snapshot monitoring workflow
parthdongre Aug 16, 2026
9c60f13
perf: define initial profiling guardrails
parthdongre Aug 16, 2026
f000c4a
perf: add deterministic performance guardrail
parthdongre Aug 16, 2026
6ff54aa
ci: enforce catastrophic performance guardrails
parthdongre Aug 16, 2026
b03a9a3
dev: add lightweight pre-commit guardrails
parthdongre Aug 16, 2026
3cd2bca
ci: validate contributor pre-commit hooks
parthdongre Aug 16, 2026
804f5a1
test: cover system capability CLI
parthdongre Aug 16, 2026
55022a2
docs: add reproducible support guidance
parthdongre Aug 16, 2026
2509ce1
ci: test declared minimum core dependencies
parthdongre Aug 16, 2026
f1b7001
ci: add Windows and macOS package smoke tests
parthdongre Aug 16, 2026
95ed294
security: add CodeQL analysis
parthdongre Aug 16, 2026
7fc696f
docs: define compatibility and stability policy
parthdongre Aug 16, 2026
7e8b569
chore: prepare stabilization patch
parthdongre Aug 16, 2026
50e1734
chore: remove temporary stabilization placeholder
parthdongre Aug 16, 2026
38de281
fix: include pre-commit in development extra
parthdongre Aug 16, 2026
f678e32
fix: normalize Arrow view types for streaming compute
parthdongre Aug 16, 2026
cf7115f
test: lock compute-safe Polars Arrow normalization
parthdongre Aug 16, 2026
7501796
test: freeze 0.2 package-root API surface
parthdongre Aug 16, 2026
98cb9ca
fix: align compatibility facade result typing
parthdongre Aug 16, 2026
6e01a83
docs: expose complete 0.2 documentation surface
parthdongre Aug 16, 2026
fab519c
docs: align contributor setup with enforced guardrails
parthdongre Aug 16, 2026
29eecbe
docs: harden 0.2 release and promotion checklist
parthdongre Aug 16, 2026
73aafa3
fix: complete monitoring and system CLI surface
parthdongre Aug 16, 2026
554bb22
test: respect optional AI dependency boundary
parthdongre Aug 16, 2026
eac759a
test: respect optional plotting dependency boundary
parthdongre Aug 16, 2026
8ccbd8c
docs: record 0.2 stabilization work
parthdongre Aug 16, 2026
773e417
ci: run one-off largest scale benchmark
parthdongre Aug 16, 2026
6be938b
ci: remove one-off scale benchmark workflow
parthdongre Aug 16, 2026
7dd188d
fix: bound streaming profile by table width
parthdongre Aug 16, 2026
b26ed9a
test: lock width-aware streaming budgets
parthdongre Aug 16, 2026
1646bc5
test: cover ultra-wide streaming budgets
parthdongre Aug 16, 2026
f1ca713
test: keep width budget coverage in Arrow suite
parthdongre Aug 16, 2026
680aa69
temp
parthdongre Aug 16, 2026
7598862
chore: remove accidental stress placeholder
parthdongre Aug 16, 2026
95d8e4f
fix: make public analysis modes materially distinct
parthdongre Aug 16, 2026
1cc3e3f
test: lock public analysis mode policy
parthdongre Aug 16, 2026
89a0274
fix: align selector inventory with standard mode execution
parthdongre Aug 16, 2026
1a436f0
test: align selector contract with mode execution
parthdongre Aug 16, 2026
4cfa0ea
test: align quick streaming expectations with mode policy
parthdongre Aug 16, 2026
ad5d693
fix: preserve quick target and artifact compatibility
parthdongre Aug 16, 2026
40171b5
test: preserve quick compatibility in mode contract
parthdongre Aug 16, 2026
12c5056
test: restore deferred quick streaming cleaning contract
parthdongre Aug 16, 2026
1be238e
fix: preserve explicit disabled-module provenance
parthdongre Aug 16, 2026
f01b3c6
perf: reserve model training for research mode
parthdongre Aug 16, 2026
6247266
fix: align research-only modeling inventory
parthdongre Aug 16, 2026
fa40064
test: lock four-tier analysis mode contract
parthdongre Aug 16, 2026
f020f3f
test: align planning expectations with analysis tiers
parthdongre Aug 16, 2026
59b9aee
feat: add adaptive streaming intelligence
parthdongre Aug 16, 2026
3c1f630
perf: replace deep bootstrap hot path with fast confidence intervals
parthdongre Aug 17, 2026
6b5e1be
test: update deep triage hook for fast inference
parthdongre Aug 17, 2026
1d77228
bench: add reproducible 8k x 180 deep performance target
parthdongre Aug 17, 2026
b28b253
perf: bound ultra-wide streaming analysis by column budget
parthdongre Aug 17, 2026
159dfb5
bench: parameterize extreme streaming workload
parthdongre Aug 17, 2026
3f8ed05
bench: compare all modes on 100k x 100k stream
parthdongre Aug 17, 2026
7690112
bench: add real 100k x 10k parquet benchmark
parthdongre Aug 17, 2026
4d6c5ed
ci: run real 100k x 10k parquet analysis benchmark
parthdongre Aug 17, 2026
a061718
fix: scope ML readiness to profiled streaming columns
parthdongre Aug 17, 2026
a1135bd
fix: report projected quality coverage accurately
parthdongre Aug 17, 2026
0e25d56
test: cover projected streaming scoring semantics
parthdongre Aug 17, 2026
494952b
perf: adapt research confidence intervals by sample size
parthdongre Aug 17, 2026
852d26b
test: enforce adaptive research inference policy
parthdongre Aug 17, 2026
fd3c247
feat: reuse exact streaming statistics downstream
parthdongre Aug 17, 2026
d331294
fix: enforce exact-once streaming summaries
parthdongre Aug 17, 2026
2b56486
test: protect streaming exact-once reuse
parthdongre Aug 17, 2026
fdb6134
bench: report native backend and exact-once reuse
parthdongre Aug 17, 2026
648a5d8
bench: compare native Rust and NumPy fallback on real wide data
parthdongre Aug 17, 2026
2fb5243
test: use valid minimum quality sample size
parthdongre Aug 17, 2026
3f8bb39
perf: profile Arrow record batches directly in Rust
parthdongre Aug 17, 2026
b30eca4
style: format native Arrow bridge
parthdongre Aug 17, 2026
2930bc6
perf: specialize native streaming profile sketches
parthdongre Aug 17, 2026
861cca1
perf: skip duplicate materialized core work for streams
parthdongre Aug 17, 2026
c3ea3a7
perf: accelerate native log-quantile bin updates
parthdongre Aug 17, 2026
bd685fa
style: simplify quantile bin type
parthdongre Aug 17, 2026
bd56c24
style: apply rustfmt to quantile sketch
parthdongre Aug 17, 2026
61092f0
perf: cache Parquet source metadata and handle
parthdongre Aug 17, 2026
ccb95b7
test: ensure Parquet metadata is parsed once per source
parthdongre Aug 17, 2026
0305250
fix: modernize Anderson-Darling normality diagnostics
parthdongre Aug 17, 2026
310e695
test: support Anderson contracts across SciPy bounds
parthdongre Aug 17, 2026
cd9523a
bench: add extensive 2.5B-cell physical stress matrix
parthdongre Aug 17, 2026
ff04c25
bench: add 5B-cell physical stress case
parthdongre Aug 17, 2026
2f9bdc1
test: add mixed statistical ground-truth validation
parthdongre Aug 17, 2026
12919d1
test: respect native full-stream categorical provenance
parthdongre Aug 17, 2026
0320f25
ci: rerun mixed validation for covered tests
parthdongre Aug 17, 2026
4679b76
fix: avoid periodic aliasing in bounded samples
parthdongre Aug 17, 2026
b2c8aff
build: ship native wheels alongside portable fallback
parthdongre Aug 17, 2026
7a7ed95
test: install runtime deps for native wheel smoke
parthdongre Aug 17, 2026
f4761cb
fix: align focused sampling provenance with stratified jitter
parthdongre Aug 17, 2026
e47a18c
test: assert stratified streaming sampling provenance
parthdongre Aug 17, 2026
23e21f7
fix: avoid pandas string-dtype selection deprecation
parthdongre Aug 17, 2026
a73c94f
test: align statistics sampling provenance
parthdongre Aug 17, 2026
30d04be
feat: reuse exact full-stream skew and kurtosis
parthdongre Aug 17, 2026
3274936
style: format higher-moment Rust state
parthdongre Aug 17, 2026
132c860
docs: preserve useful architecture planning before branch cleanup
parthdongre Aug 17, 2026
378a60f
chore: prepare FrameVitals 0.2.0 release candidate
parthdongre Aug 17, 2026
4dac326
fix: harden 0.2.0 release contracts
parthdongre Aug 17, 2026
4032f4d
ci: make Python dead-code lint blocking
parthdongre Aug 17, 2026
ed1bb13
ci: include release hardening in backend parity gate
parthdongre Aug 17, 2026
a17fa85
ci: rerun performance guardrail for release hardening
parthdongre Aug 17, 2026
4616b9e
build: pin Rust dependencies for 0.2.0
parthdongre Aug 17, 2026
e9d8809
ci: enforce locked Rust dependencies in package builds
parthdongre Aug 17, 2026
05b11e5
ci: enforce locked Rust dependencies in PyPI release
parthdongre Aug 17, 2026
2c3b327
bench: record 0.2.0 release performance delta
parthdongre Aug 17, 2026
13e1679
test: keep release branding check optional-safe
parthdongre Aug 17, 2026
c294028
bench: record same-dataset 0.2.0 accuracy parity
parthdongre Aug 17, 2026
235d5c8
docs: pair 0.2.0 speedup with same-dataset accuracy evidence
parthdongre Aug 17, 2026
1eff600
test: validate same-dataset release accuracy evidence
parthdongre Aug 17, 2026
7c56225
Merge pull request #40 from parthdongre/develop/august
parthozyy Aug 17, 2026
e47aa24
docs: update README for FrameVitals 0.2.0
parthdongre Aug 17, 2026
9b06a3c
Merge pull request #41 from parthdongre/release/readme-0.2.0
parthozyy Aug 17, 2026
9aaa4a2
Simplify and tighten README
parthdongre Aug 18, 2026
1912dfe
Merge pull request #42 from parthdongre/agent/crisp-readme
parthozyy Aug 18, 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
76 changes: 76 additions & 0 deletions .github/workflows/action-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Gate Action Smoke Test

on:
push:
branches: [main, dev, "develop/august"]
paths:
- action.yml
- pyproject.toml
- src/framevitals/cli.py
- src/framevitals/operations.py
- .github/workflows/action-smoke.yml
pull_request:
paths:
- action.yml
- pyproject.toml
- src/framevitals/cli.py
- src/framevitals/operations.py
- .github/workflows/action-smoke.yml

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
smoke:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Create stable fixture datasets
shell: bash
run: |
cat > reference.csv <<'CSV'
age,income,segment
21,30000,basic
34,62000,pro
48,81000,pro
52,90000,enterprise
CSV
cp reference.csv current.csv

- name: Run local FrameVitals gate action
id: framevitals
uses: ./
with:
current: current.csv
reference: reference.csv
output: gate-result.json

- name: Verify action outputs
shell: bash
env:
STATUS: ${{ steps.framevitals.outputs.status }}
PASSED: ${{ steps.framevitals.outputs.passed }}
RESULT_PATH: ${{ steps.framevitals.outputs.result-path }}
run: |
test "$STATUS" = "pass"
test "$PASSED" = "true"
test "$RESULT_PATH" = "gate-result.json"
test -s gate-result.json
python - <<'PY'
import json
from pathlib import Path

payload = json.loads(Path("gate-result.json").read_text(encoding="utf-8"))
assert payload["status"] == "pass"
assert payload["passed"] is True
assert payload["checks_run"] == ["drift"]
PY
152 changes: 152 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
name: Performance Benchmark

on:
push:
branches: [main, "develop/august"]
paths:
- "src/framevitals/**"
- "benchmarks/**"
- ".github/workflows/benchmark.yml"
workflow_dispatch:
inputs:
rows:
description: Rows in the synthetic profile benchmark workload
required: false
default: "50000"

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
profile-scale:
name: profile scale benchmark
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
cache-dependency-path: pyproject.toml

- name: Install benchmark runtime
run: |
python -m pip install --upgrade pip
pip install -e ".[arrow]"

- name: Run reproducible profile benchmark
env:
BENCHMARK_ROWS: ${{ inputs.rows || '50000' }}
run: |
python benchmarks/benchmark_profile_scale.py \
--rows "$BENCHMARK_ROWS" \
--numeric-columns 40 \
--categorical-columns 5 \
--scenarios numpy auto parquet \
--output benchmark-results.json

- name: Publish benchmark summary
run: |
python - <<'PY'
import json
import os
from pathlib import Path

payload = json.loads(Path("benchmark-results.json").read_text(encoding="utf-8"))
lines = [
"## FrameVitals profile benchmark",
"",
"| Scenario | Seconds | Peak RSS (MB) | Backend |",
"| --- | ---: | ---: | --- |",
]
for measurement in payload["measurements"]:
backend = measurement.get("backend_status", {}).get("selected", "unknown")
lines.append(
f"| {measurement['scenario']} | {measurement['elapsed_seconds']:.3f} "
f"| {measurement['peak_rss_mb']:.1f} | {backend} |"
)
lines.extend([
"",
"Results are measurements, not absolute pass/fail thresholds. Compare like-for-like runs.",
])
Path(os.environ["GITHUB_STEP_SUMMARY"]).write_text(
"\n".join(lines) + "\n",
encoding="utf-8",
)
PY

- name: Upload benchmark result
uses: actions/upload-artifact@v5
with:
name: framevitals-profile-benchmark
path: benchmark-results.json
retention-days: 30

deep-8k-180:
name: 8k x 180 Deep benchmark
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
cache-dependency-path: pyproject.toml

- name: Install benchmark runtime
run: |
python -m pip install --upgrade pip
pip install -e "."

- name: Run reproducible 8k x 180 Deep benchmark
env:
FRAMEVITALS_BACKEND: numpy
run: |
python benchmarks/benchmark_deep_pipeline.py \
--rows 8000 \
--columns 180 \
--output deep-benchmark-results.json

- name: Publish Deep benchmark summary
run: |
python - <<'PY' >> "$GITHUB_STEP_SUMMARY"
import json
from pathlib import Path

payload = json.loads(Path("deep-benchmark-results.json").read_text())
print("## FrameVitals 8k x 180 Deep benchmark")
print()
print(f"- Wall time: **{payload['elapsed_seconds']:.3f}s**")
print(f"- Historical original: {payload['historical_original_seconds']:.3f}s")
print(f"- Speedup vs historical original: **{payload['speedup_vs_historical_original']:.2f}x**")
print(f"- 10x target: {payload['ten_x_target_seconds']:.3f}s")
print(f"- Target met: **{payload['ten_x_target_met']}**")
print()
print("### Pipeline stages")
for name, milliseconds in sorted(payload["pipeline_timings_ms"].items()):
if isinstance(milliseconds, (int, float)):
print(f"- {name}: {milliseconds / 1000:.3f}s")
PY

- name: Upload Deep benchmark result
uses: actions/upload-artifact@v6
with:
name: framevitals-deep-8k-180-benchmark
path: deep-benchmark-results.json
retention-days: 30
45 changes: 45 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: CodeQL

on:
push:
branches: [main, dev]
pull_request:
branches: [main, dev]
schedule:
- cron: "17 4 * * 1"
workflow_dispatch:

permissions:
contents: read

jobs:
analyze:
name: ${{ matrix.language }} security analysis
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
packages: read
security-events: write
strategy:
fail-fast: false
matrix:
language:
- python
- javascript-typescript

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}

- name: Analyze
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
57 changes: 57 additions & 0 deletions .github/workflows/developer-guardrails.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Developer Guardrails

on:
pull_request:
paths:
- ".pre-commit-config.yaml"
- "pyproject.toml"
- "src/framevitals/**"
- "tests/**"
- ".github/workflows/developer-guardrails.yml"
push:
branches: [main, dev, "develop/august"]
paths:
- ".pre-commit-config.yaml"
- "pyproject.toml"
- "src/framevitals/**"
- "tests/**"
- ".github/workflows/developer-guardrails.yml"

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
hooks:
name: pre-commit + pre-push contracts
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
cache-dependency-path: pyproject.toml

- name: Install development environment
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"

- name: Verify dependency consistency
run: python -m pip check

- name: Run commit-stage hooks
run: pre-commit run --all-files --hook-stage pre-commit --show-diff-on-failure

- name: Run pre-push public contract hooks
run: pre-commit run --all-files --hook-stage pre-push --show-diff-on-failure
52 changes: 52 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Docs

on:
push:
branches: [main, dev, "develop/august"]
paths:
- "docs/**"
- "mkdocs.yml"
- "pyproject.toml"
- ".github/workflows/docs.yml"
pull_request:
paths:
- "docs/**"
- "mkdocs.yml"
- "pyproject.toml"
- ".github/workflows/docs.yml"

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: strict MkDocs build
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
cache-dependency-path: pyproject.toml

- name: Install documentation dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[docs]"

- name: Verify dependency consistency
run: python -m pip check

- name: Build documentation strictly
run: mkdocs build --strict
Loading