Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
e8dcd12
fix: harden public prediction and deployment contracts
jam-sudo Sep 23, 2026
a266e7a
fix: validate finite holdout data and smoke-test API image
jam-sudo Sep 23, 2026
baeb763
build: add reproducible holdout evaluator container
jam-sudo Sep 23, 2026
ab13a08
fix: lock external holdout scoring and corpus integrity
jam-sudo Sep 23, 2026
6faf5db
fix: bind holdout acquisition plan to verified cohort files
jam-sudo Sep 23, 2026
2d61e28
docs: quantify official regulatory inventory feasibility
jam-sudo Sep 23, 2026
6b4a31b
fix: enforce preregistered dates for clinical Cmax sources
jam-sudo Sep 23, 2026
f8074e3
docs: quantify NCATS FRDB holdout candidate attrition
jam-sudo Sep 23, 2026
4c34255
docs: record EPA Cmax extract screening limits
jam-sudo Sep 23, 2026
b7a401f
fix: freeze holdout verifier provenance
jam-sudo Sep 23, 2026
0534dc0
fix: pin holdout resources to frozen checkout
jam-sudo Sep 23, 2026
f95818f
docs: assess Health Canada Cmax source yield
jam-sudo Sep 23, 2026
b6461b8
test: isolate N50 freeze fixture and enforce recovered statin gate
jam-sudo Sep 23, 2026
f71cd60
docs: screen ClinicalTrials.gov Cmax source feasibility
jam-sudo Sep 23, 2026
ce13329
docs: quantify structural attrition in trial-registry leads
jam-sudo Sep 23, 2026
cdf72b4
docs: assess PMDA review-report candidate pool
jam-sudo Sep 23, 2026
780e31c
fix: show actual prediction evidence in console
jam-sudo Sep 23, 2026
1cd4c2f
fix: enforce fallback holdout superiority margin
jam-sudo Sep 23, 2026
5f86e72
fix: align regimen dose boundaries and mass balance
jam-sudo Sep 23, 2026
3b6d8fd
fix: preserve regimen AUC across dose jumps
jam-sudo Sep 23, 2026
bc9ed5f
fix: enforce regimen horizons after infusion ends
jam-sudo Sep 23, 2026
5a2ada9
docs: rule out local DrugBank text as holdout source
jam-sudo Sep 23, 2026
98dbe61
docs: describe VDss track as volume proxy
jam-sudo Sep 23, 2026
618106b
docs: distinguish archived preprint from current benchmark
jam-sudo Sep 23, 2026
8943113
docs: preregister self-run external-data pilot
jam-sudo Sep 23, 2026
34ba64a
docs: align pilot screen with FRDB structure availability
jam-sudo Sep 23, 2026
5392bdd
validation: freeze label-free P0 candidates
jam-sudo Sep 23, 2026
667c717
validation: freeze P0 prediction runner and environment
jam-sudo Sep 23, 2026
84856cf
validation: seal P0 predictions before outcome extraction
jam-sudo Sep 23, 2026
be863ce
validation: record provisional first-ten source review
jam-sudo Sep 23, 2026
f6bf5b4
validation: correct healthy-elderly source adjudication
jam-sudo Sep 23, 2026
ba5c1c6
validation: cross-check second P0 source batch
jam-sudo Sep 23, 2026
c5ff8e3
validation: adjudicate third P0 source batch
jam-sudo Sep 23, 2026
cd425ea
Record blinded P0 source review for candidates 31-40
jam-sudo Sep 23, 2026
754df2b
validation: adjudicate fourth P0 source batch
jam-sudo Sep 23, 2026
edda094
validation: adjudicate fifth P0 source batch
jam-sudo Sep 23, 2026
7728c34
Record P0 source review for candidates 61-70
jam-sudo Sep 23, 2026
4c5d7b3
Record P0 source review for candidates 71-80
jam-sudo Sep 23, 2026
38020b6
Record blinded P0 source review for candidates 81-90
jam-sudo Sep 23, 2026
9ebc7a2
Record blinded P0 source review for candidates 91-100
jam-sudo Sep 23, 2026
7ac82f4
Record blinded P0 source review for candidates 101-110
jam-sudo Sep 23, 2026
3c4d7e9
Record blinded P0 source review for candidates 111-120
jam-sudo Sep 23, 2026
dcec0cc
Record blinded P0 source review for candidates 121-130
jam-sudo Sep 23, 2026
9cc274b
Record blinded P0 source review for candidates 131-140
jam-sudo Sep 23, 2026
5ed4a75
Record blinded P0 source review for candidates 141-150
jam-sudo Sep 23, 2026
0a10649
Record blinded P0 source review for candidates 151-160
jam-sudo Sep 23, 2026
8a6bbeb
Record blinded P0 source review for candidates 161-170
jam-sudo Sep 23, 2026
ad89990
Record blinded P0 source review for candidates 171-180
jam-sudo Sep 23, 2026
02205aa
Record blinded P0 source review for candidates 181-186
jam-sudo Sep 23, 2026
df6c37f
Freeze P0 source adjudication rules before prediction unsealing
jam-sudo Sep 23, 2026
d9c4e4c
Freeze P0 source adjudication before prediction unsealing
jam-sudo Sep 23, 2026
1093633
Score frozen P0 cohort and document diagnostic result
jam-sudo Sep 23, 2026
6f41640
Record P0 track diagnostics and post-unseal source concern
jam-sudo Sep 23, 2026
90a1154
Disclose diagnostic P0 result in project validation claims
jam-sudo Sep 23, 2026
ca84507
Require verified parent dose basis in V1 holdout contract
jam-sudo Sep 23, 2026
61aa49b
Verify post-dose fasting duration in V1 holdout
jam-sudo Sep 23, 2026
3d74d35
Connect P0 bioavailability diagnosis to prior failed levers
jam-sudo Sep 23, 2026
f8a9a9b
Report P0 source-statistic sensitivity analyses
jam-sudo Sep 23, 2026
861a88c
Bind source Cmax statistic in V1 holdout labels
jam-sudo Sep 23, 2026
94fd4c3
Avoid eager NumPy trapz fallback evaluation
jam-sudo Sep 23, 2026
db83d40
Trace P0 ipragliflozin exposure error to gut uptake
jam-sudo Sep 23, 2026
ffb62fb
Classify phenolic amines by strong ionizable groups
jam-sudo Sep 23, 2026
5e095a4
Document ipragliflozin formulation sensitivity diagnostic
jam-sudo Sep 23, 2026
4b9bfe0
Commit blind holdout outcomes before prediction
jam-sudo Sep 23, 2026
64f8b77
Seal predictions and isolate final-test holdout cohort
jam-sudo Sep 23, 2026
9156f24
Audit declared holdout synonyms and drug relations
jam-sudo Sep 23, 2026
a138179
Align holdout power claim and guard curated relation fields
jam-sudo Sep 23, 2026
1893287
Resolve early IV exposure for bioavailability estimates
jam-sudo Sep 23, 2026
ded0a0b
Use converged exposure for measured bioavailability
jam-sudo Sep 23, 2026
19053b7
Fail closed in N50 exclusion audits
jam-sudo Sep 23, 2026
885c52a
Normalize salt forms in holdout exclusion paths
jam-sudo Sep 23, 2026
7840abb
Require verifiable training sources for external holdout
jam-sudo Sep 23, 2026
860ac08
Quantify blinded holdout identity source overlap
jam-sudo Sep 23, 2026
966a680
Pin recovered Omega Cmax source for exclusion audits
jam-sudo Sep 23, 2026
f0c4bd4
Pin co-committed CLF and VDF training source
jam-sudo Sep 23, 2026
cac1ba6
Treat DrugBank fup overlap as prospective exclusion
jam-sudo Sep 23, 2026
3ff9cd3
Block DrugBank-trained fup artifact from public holdout
jam-sudo Sep 23, 2026
7f9790c
Retrain public fup model and refresh development evidence
jam-sudo Sep 23, 2026
f60da3c
Pin public Peff training and refresh current predictions
jam-sudo Sep 23, 2026
6968ef7
Pin public Cmax training and refresh current evidence
jam-sudo Sep 24, 2026
c8f0b09
Pin public hepatocyte CLint training and refresh evidence
jam-sudo Sep 24, 2026
803e8a5
Pin public VDss training and bind current evidence
jam-sudo Sep 24, 2026
5ab7c75
Bind external score to frozen audit and cohort target
jam-sudo Sep 24, 2026
ef8fe7f
Reject analyte mismatch and verify frozen runtime settings
jam-sudo Sep 24, 2026
324b81e
Report paired Meta versus ML uncertainty on development cohort
jam-sudo Sep 24, 2026
30332e3
Fail closed on Peff model errors and nonfinite ADME values
jam-sudo Sep 24, 2026
9c46e54
Preflight residual calibration and fail strict VDss errors
jam-sudo Sep 24, 2026
2c2f52d
Document PK-DB external holdout feasibility screen
jam-sudo Sep 24, 2026
9e02af0
Limit development residual interval to calibrated prediction path
jam-sudo Sep 24, 2026
3786fe0
Verify residual calibration provenance before displaying interval
jam-sudo Sep 24, 2026
aa0a9a4
Align research claims with current validation evidence
jam-sudo Sep 24, 2026
ed0380a
Reject superiority gate for undersized external cohorts
jam-sudo Sep 24, 2026
c2c7fb1
Quantify FDA oral NME name-screen attrition
jam-sudo Sep 24, 2026
1da8bcd
Correct pravastatin parent identity and refresh development evidence
jam-sudo Sep 24, 2026
827d276
Adjudicate development stereochemistry and pin UGT routing
jam-sudo Sep 24, 2026
0e05bd7
Bind experimental docking caches to exact molecular structure
jam-sudo Sep 24, 2026
26634af
Exclude modeler-seen FRDB leads from blinded holdout
jam-sudo Sep 24, 2026
8dd09d9
Remove pravastatin leakage from production CLint training
jam-sudo Sep 24, 2026
6933949
Guard all production fitted snapshots against development overlap
jam-sudo Sep 24, 2026
e32250d
Qualify P0 diagnostic for possible VDss training overlap
jam-sudo Sep 24, 2026
a45265f
Require the pinned public fup model at runtime
jam-sudo Sep 24, 2026
89231e9
Verify fitted artifact hashes before external holdout
jam-sudo Sep 24, 2026
7b474d5
Screen two additional public PK acquisition sources
jam-sudo Sep 24, 2026
d7e2508
Screen e-Drug3D for untouched oral Cmax leads
jam-sudo Sep 24, 2026
a56c8a4
Make direct DrugBank lookups respect execution profile
jam-sudo Sep 24, 2026
a158416
Fail closed on licensed logP feature drift
jam-sudo Sep 24, 2026
316f075
Adjudicate amphetamine reference identity and dose
jam-sudo Sep 24, 2026
d2dcebd
Adjudicate morphine development reference and refresh evidence
jam-sudo Sep 24, 2026
b56f427
Adjudicate Baekdal digoxin and quarantine warfarin reference
jam-sudo Sep 24, 2026
c5e2a61
Adjudicate remaining PMID-linked training references
jam-sudo Sep 24, 2026
0e01e5d
Quarantine mismatched PMID-linked Cmax references
jam-sudo Sep 24, 2026
3be35c6
Complete PMID-linked training reference adjudication
jam-sudo Sep 24, 2026
27dbc69
Audit estimated development Cmax labels and refresh benchmark
jam-sudo Sep 24, 2026
320cc29
Correct prodrug development labels and preserve holdout leakage guard
jam-sudo Sep 24, 2026
1191582
Quarantine three more prodrug metabolite development labels
jam-sudo Sep 24, 2026
0cc7468
Correct mismatched development Cmax dose arms
jam-sudo Sep 24, 2026
90a0147
Quarantine steady-state labels from single-dose development benchmark
jam-sudo Sep 24, 2026
6839583
Audit four additional development PK reference arms
jam-sudo Sep 24, 2026
5c2b4db
Replace three generic PK arms with exact observed sources
jam-sudo Sep 24, 2026
657c300
Correct dasatinib development Cmax to single-dose arm
jam-sudo Sep 24, 2026
00d2390
Audit development calibration reference arms
jam-sudo Sep 24, 2026
786cca6
Correct additional calibration labels and bind interval sources
jam-sudo Sep 24, 2026
613fbf5
Screen development references for analyte and regimen mismatches
jam-sudo Sep 24, 2026
f3c4da1
Audit training dose and specimen provenance
jam-sudo Sep 24, 2026
2e004b8
Correct five development PK arms and source inventory
jam-sudo Sep 24, 2026
60cf5e9
Re-source six development PK training arms
jam-sudo Sep 24, 2026
0074cea
Correct three more training PK source mismatches
jam-sudo Sep 24, 2026
ea04f38
Correct four more development PK reference arms
jam-sudo Sep 24, 2026
87fe5b2
Re-source ibuprofen and metoclopramide training arms
jam-sudo Sep 24, 2026
fd603d5
Re-source nifedipine and pitavastatin development arms
jam-sudo Sep 24, 2026
e999d6d
Replace steady-state development proxies with observed single-dose arms
jam-sudo Sep 24, 2026
e430461
Clarify four development label arms and clomipramine dose basis
jam-sudo Sep 24, 2026
192fed8
Reconcile current development metrics in experiment log
jam-sudo Sep 24, 2026
a3f13a7
Audit additional development PK source arms
jam-sudo Sep 24, 2026
fd84567
Correct oral PK arms against regulatory labels
jam-sudo Sep 24, 2026
53f29ad
Quarantine four mismatched development PK arms
jam-sudo Sep 24, 2026
a5f6a5b
Correct generic-label development PK arms
jam-sudo Sep 24, 2026
e2c805d
Audit remaining generic-label development PK arms
jam-sudo Sep 24, 2026
882251d
Verify OSP observed analyte and single-dose provenance
jam-sudo Sep 24, 2026
908a484
Correct acamprosate and phenytoin development references
jam-sudo Sep 24, 2026
1e9e3dd
Remove synthetic clinical reference curves
jam-sudo Sep 24, 2026
7c61002
Bind external holdout names to verified shortlist
jam-sudo Sep 24, 2026
77ef337
Remove stale headline pins from probe isolation tests
jam-sudo Sep 24, 2026
be3b44c
Correct scored parent doses and quinine source arm
jam-sudo Sep 24, 2026
ba0e8c7
Replace ambiguous codeine reference with FDA fasted arm
jam-sudo Sep 24, 2026
2d390d6
Correct implicit salt doses and mismatched PK arms
jam-sudo Sep 24, 2026
7f2f576
Adjudicate remaining salt strengths and PK source arms
jam-sudo Sep 24, 2026
369bc68
Correct ulipristal acetate reference identity and preserve exclusion …
jam-sudo Sep 24, 2026
558ce69
Use original dapagliflozin Cmax table for development reference
jam-sudo Sep 24, 2026
e99d3a9
Audit OSP silver PK references and preserve quarantines
jam-sudo Sep 24, 2026
e978ff0
Reconcile three silver PK arms with original sources
jam-sudo Sep 24, 2026
8a69a25
Quarantine penicillamine midpoint and verify three PK arms
jam-sudo Sep 24, 2026
b463bb6
Quarantine acamprosate peak and correct three PK source arms
jam-sudo Sep 24, 2026
b32be66
Quarantine repeat-dose alvimopan and align donepezil parent dose
jam-sudo Sep 24, 2026
2102026
Correct ketorolac development arm and trace brincidofovir source
jam-sudo Sep 24, 2026
f989d16
Correct lamivudine single-dose reference and mercaptopurine provenance
jam-sudo Sep 24, 2026
f40704e
Quarantine repeat-dose progesterone and retire stale FDA builder
jam-sudo Sep 24, 2026
cbe72b8
Replace indomethacin benchmark arm with primary regulatory data
jam-sudo Sep 24, 2026
59774a5
Use original fasted ketoconazole tablet Cmax arm
jam-sudo Sep 24, 2026
dfd82d0
Guard public benchmark figures against cache drift
jam-sudo Sep 24, 2026
b48def6
Document metadata-only ClinicalTrials source screen
jam-sudo Sep 24, 2026
0418d77
Triage protocol-only trial leads without opening outcomes
jam-sudo Sep 24, 2026
50dd25e
Align F diagnostic with converged production calculation
jam-sudo Sep 24, 2026
ac8123f
Correct absolute bioavailability diagnostic provenance
jam-sudo Sep 24, 2026
4f114c8
Correct overstated Cmax ceiling diagnosis and public audit notes
jam-sudo Sep 24, 2026
95d215d
Restore CI lint for reference regression checks
jam-sudo Sep 24, 2026
86afaa5
Include runtime schema validator in API image
jam-sudo Sep 24, 2026
edb246b
Align public limitations with source-verified evidence
jam-sudo Sep 24, 2026
0f8d601
Screen PKRxiv as external holdout source
jam-sudo Sep 24, 2026
3d97105
Clarify empirical absorption units and latent transporter scope
jam-sudo Sep 24, 2026
7aed581
Recompute frozen holdout audit and index keyed drug names
jam-sudo Sep 24, 2026
84c0d3c
Exclude modeler-seen ClinicalTrials leads from final holdout
jam-sudo Sep 24, 2026
40d222e
Freeze AI-curated blind P1 diagnostic predictions before label reveal
jam-sudo Sep 24, 2026
79ba057
Report source-checked blind P1 diagnostic and limitations
jam-sudo Sep 24, 2026
f480b84
Index registry aliases and record blind pilot interval gaps
jam-sudo Sep 24, 2026
737d344
Document P1 structural-neighbor diagnostic
jam-sudo Sep 24, 2026
ddbfdf2
Trace blind pilot exposure errors and correct Cmax model description
jam-sudo Sep 24, 2026
9541ca7
Clarify rule-based applicability and direct Cmax tail errors
jam-sudo Sep 24, 2026
ea21bac
Record exhausted FDA P2 acquisition window
jam-sudo Sep 24, 2026
1ec52d7
Clarify P2 source exclusions and release follow-up worker
jam-sudo Sep 24, 2026
5bc7259
Exclude P2 modeler-seen parents from external holdout
jam-sudo Sep 24, 2026
9298c77
Quantify older FDA identity pool without Cmax outcomes
jam-sudo Sep 24, 2026
f6fb5e9
Record older FDA source availability pilot
jam-sudo Sep 24, 2026
8a95a5c
Correct felbamate Cmax source unit and rebuild public evidence
jam-sudo Sep 24, 2026
df8deb6
Refresh accuracy diagnosis and record chiral ablation
jam-sudo Sep 25, 2026
8a2cd82
Correct older FDA holdout identity screen and salt-name gate
jam-sudo Sep 25, 2026
6c17c59
Update PMDA identity feasibility after salt normalization
jam-sudo Sep 25, 2026
ad9f240
Correct P1 diagnostic for whole-blood Cmax arm
jam-sudo Sep 25, 2026
8c19c35
Reject uncertain source labels during holdout integration
jam-sudo Sep 25, 2026
94f6993
Require exact DrugBank names in PK integration
jam-sudo Sep 25, 2026
bcfd986
Quarantine whole-blood indapamide Cmax training labels
jam-sudo Sep 25, 2026
cc8eb99
Quarantine immunosuppressant blood Cmax labels
jam-sudo Sep 25, 2026
f66dd68
Quarantine administered-analyte mismatches in Cmax training
jam-sudo Sep 25, 2026
78dce35
Quarantine pimecrolimus blood Cmax training label
jam-sudo Sep 25, 2026
eb1d257
Quarantine voclosporin whole-blood Cmax training label
jam-sudo Sep 25, 2026
e538574
Report scaffold CV for direct Cmax model
jam-sudo Sep 25, 2026
898ea66
Pin both Omega Cmax source workbooks
jam-sudo Sep 25, 2026
3bf451f
Preserve one-time holdout prediction output
jam-sudo Sep 25, 2026
ebc9edf
Document phenylbutyrate salt-dose adjudication
jam-sudo Sep 25, 2026
d0b8206
Preserve one-time external holdout score output
jam-sudo Sep 25, 2026
16414e9
Quarantine dolasetron metabolite-derived training labels
jam-sudo Sep 25, 2026
216ed69
Reconcile holdout protocol with screened Cmax artifact
jam-sudo Sep 25, 2026
788aab7
Screen CLF and VdF training and correct two salt-dose labels
jam-sudo Sep 25, 2026
c360138
Correct four additional salt-basis training doses
jam-sudo Sep 25, 2026
b4bc10a
Quarantine methenamine concentration-basis labels
jam-sudo Sep 25, 2026
55a116d
fix(data): normalize acoramidis hydrochloride dose
jam-sudo Sep 25, 2026
07ba8bd
fix(data): align givinostat paired mass basis
jam-sudo Sep 25, 2026
f6e1b7c
docs(validation): adjudicate supplemental PK cohorts
jam-sudo Sep 25, 2026
60a0757
fix(validation): bind holdout scoring to frozen release
jam-sudo Sep 25, 2026
e390005
docs(validation): record amd64 holdout smoke
jam-sudo Sep 25, 2026
7703923
docs(validation): clarify ASA and ezetimibe source checks
jam-sudo Sep 25, 2026
e68dfde
docs(validation): verify trospium source arm with FDA review
jam-sudo Sep 25, 2026
019e0ef
docs(validation): verify metformin 1981 source arm
jam-sudo Sep 25, 2026
f90119d
docs(validation): confirm metformin 1979 dose basis in FDA review
jam-sudo Sep 25, 2026
59636a7
docs(validation): verify two supplemental Cmax arms
jam-sudo Sep 25, 2026
1dfdc06
fix(data): normalize almitrine bismesylate dose
jam-sudo Sep 25, 2026
cc339ba
docs(validation): reconcile current Cmax metrics and source counts
jam-sudo Sep 25, 2026
9b8f0b7
fix(data): normalize benazepril hydrochloride dose
jam-sudo Sep 25, 2026
10b6258
fix(data): normalize orphenadrine hydrochloride dose
jam-sudo Sep 25, 2026
3abb68a
fix(data): normalize bisoprolol hemifumarate doses
jam-sudo Sep 25, 2026
5b4c9c3
docs(validation): retract unsupported accuracy ceilings
jam-sudo Sep 25, 2026
f19d463
fix(data): restore reference stereo and residual interval provenance
jam-sudo Sep 25, 2026
27d7414
fix(console): correct preset molecular identities and deployed data
jam-sudo Sep 25, 2026
1040ae4
Downgrade levocetirizine reference confidence after source cross-check
jam-sudo Sep 25, 2026
14f3a52
Restore residual interval provenance after reference update
jam-sudo Sep 25, 2026
f91c5c3
Screen new public PK benchmark for external holdout feasibility
jam-sudo Sep 25, 2026
de2fd79
Record direct Cmax source metadata ablation no-go
jam-sudo Sep 26, 2026
3b2fc41
docs(readme): condense reference-audit narrative and reconcile stale …
jam-sudo Oct 1, 2026
7d24b92
Merge origin/main: renumber Cmax source-metadata dead end to DE-59
jam-sudo Oct 1, 2026
4150e04
docs: use neutral AI-assisted provenance wording
jam-sudo Oct 1, 2026
d9e378a
chore(gitignore): keep internal planning and preprint drafts local
jam-sudo Oct 1, 2026
bee227d
style(tests): wrap overlong holdout-quarantine fixture loop (E501)
jam-sudo Oct 1, 2026
b53fe67
test: re-pin public-clone snapshots after 2026-09 retrains
jam-sudo Oct 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
43 changes: 43 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
.git
.github
.claude
.codex
.env*
*.xml
graphify-out
logs
*.log
.playwright-mcp
.pytest_cache
.ruff_cache
**/__pycache__
**/*.pyc
web
docs
scripts
tests
notebooks
app
archive
v4_build
data/drugbank
data/training
data/docking
data/chembl
data/compounds
data/features
data/reference
data/validation/*
!data/validation/development_residual_interval.json
!data/validation/feature_schema_v1.json
!data/validation/solver_settings_v1.json
models/**/*.bak
models/adme/logp_correction.json
models/adme/xgboost_clint_expanded.json
models/meta_learner
models/sbi
models/surrogate
models/e2e_mlp.pt
*.pdf
*.pkl
*.docx
62 changes: 49 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,24 @@ jobs:
pip install -r requirements-lock.txt
pip install -e . --no-deps

- name: Installed-wheel prediction smoke
run: |
python -m pip wheel . --no-deps --wheel-dir /tmp/sisyphus-wheel
python -m pip install --no-deps --target /tmp/sisyphus-installed /tmp/sisyphus-wheel/*.whl
cd /tmp
SISYPHUS_ROOT="$GITHUB_WORKSPACE" PYTHONPATH=/tmp/sisyphus-installed \
python -c "from sisyphus.pipeline.predict import predict; r=predict('CCO', 10.0, strict=True); assert r.execution_status == 'ok'"

- name: Ruff (gating; pre-existing violations baselined via inline noqa)
run: ruff check src tests
run: >-
ruff check src tests server
scripts/build_n50_exclusion.py
scripts/gen_console_data.py
scripts/audit_external_holdout_manifest.py
scripts/predict_external_holdout_manifest.py
scripts/score_external_holdout.py
scripts/sync_public_model_metrics.py
scripts/prediction_trace.py

- name: Unit tests
run: pytest tests/unit -v --tb=short
Expand All @@ -47,12 +63,9 @@ jobs:
run: pytest tests/benchmark/test_holdout.py -v --tb=short

server-security:
# The engine API security contract (CORS allow-list + /predict rate limit).
# Deliberately engine-free: server/config.py + server/tests import neither the
# heavy engine graph nor torch, so this job stays fast and gates the security
# behavior that the main `test` job's testpaths=["tests"] does not collect.
# Exercise the API contract with the same CPU-only runtime deps as the image.
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 15
steps:
- uses: actions/checkout@v6

Expand All @@ -62,15 +75,38 @@ jobs:
python-version: "3.10"
cache: pip

- name: Install server deps (no engine)
- name: Install production API dependencies and test tools
run: |
python -m pip install --upgrade pip
pip install fastapi slowapi httpx pytest ruff
pip install -r server/requirements.txt pytest==9.0.3 ruff==0.15.11 httpx==0.28.1
pip install -e . --no-deps

- name: Ruff (server policy module + tests)
run: ruff check server/config.py server/tests
- name: Ruff (server adapter, policy, and tests)
run: ruff check server

- name: Server security tests (CORS + rate limit, engine-import-free)
# `python -m pytest` puts the repo root (CWD) on sys.path so the
# top-level `server` package imports without an editable install.
- name: Server API and security tests
run: python -m pytest server/tests -v --tb=short

container:
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v6
- name: Build exact-source API image
run: docker build -f server/Dockerfile -t sisyphus-api:ci .
- name: Smoke-test prediction in built image
run: |
docker run -d --rm -p 127.0.0.1:7860:7860 --name sisyphus-api-ci sisyphus-api:ci
trap 'docker stop sisyphus-api-ci' EXIT
curl --retry 30 --retry-all-errors --retry-delay 1 --fail --silent --show-error http://127.0.0.1:7860/health
curl --fail --silent --show-error -X POST http://127.0.0.1:7860/predict \
-H 'Content-Type: application/json' \
-d '{"smiles":"CCO","dose_mg":100}' -o /tmp/sisyphus-predict.json
python -c 'import json; p=json.load(open("/tmp/sisyphus-predict.json")); assert p["executionStatus"] == "ok" and p["meta"]["cmax"] > 0'
- name: Build and smoke-test holdout evaluator image
run: |
docker build -f scripts/Dockerfile.holdout -t sisyphus-holdout:ci .
docker run --rm -v "$PWD:/repo:ro" sisyphus-holdout:ci \
python scripts/audit_external_holdout_manifest.py --help
docker run --rm -v "$PWD:/repo:ro" sisyphus-holdout:ci \
python -c 'from sisyphus.pipeline.predict import predict; assert predict("CCO", 10, strict=True).execution_status == "ok"'
12 changes: 8 additions & 4 deletions .github/workflows/web-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ name: web-ci

on:
pull_request:
paths: ["web/**"]
paths: ["web/**", "app/**", "index.html"]
push:
branches: [main]
paths: ["web/**"]
paths: ["web/**", "app/**", "index.html"]
workflow_dispatch:

jobs:
Expand All @@ -27,5 +27,9 @@ jobs:
cache: npm
cache-dependency-path: web/package-lock.json
- run: npm ci
- run: npm run build
- run: npm run smoke # headless render guard for all six workflows
- run: npm run build:pages
- run: npm run smoke # headless render guard for supported workflows
- name: Production /app bundle is synchronized
run: git diff --exit-code -- ../app
- run: VITE_API_URL=http://localhost:8000 npm run build
- run: SMOKE_LIVE_RACE=1 npm run smoke
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ AGENTS.md
# scratchpad (untracked 2026-05-30 / 2026-06-18).
docs/_internal/

# Internal research notes + oracle/ablation experiments and their artifacts
# (scripts/JSON/PNG). Local-only research scratchpad; not for the public tree
# (name echoes the retired docs/claude/ convention) (untracked 2026-07-08).
docs/claude_science/

# Manuscript / preprint / FDA-essay drafts and any binary document (local-only;
# binary, frequently revised — not version-tracked). The repo tracks ZERO binary
# documents (verified 2026-06-02), so these formats are ignored everywhere. To
Expand Down Expand Up @@ -109,3 +114,14 @@ predict.png

# N50 exclusion inventory is a build artifact (regenerated by scripts/build_n50_exclusion.py)
data/reference/n50_exclusion_ik14.json

# Preprint build/draft artifacts and submission metadata (local-only, 2026-10-01)
Sisyphus_Preprint_*.md
ChemRxiv_*
*.pkl
v4_build/

# Internal planning material (local-only, untracked 2026-10-01)
.planning/
.superpowers/
docs/breakthrough_path.md
Loading
Loading