Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
7e2ed23
Align Actions triggers with the renamed main branch
tpeulen May 19, 2026
5962ce3
chore: modernise .gitignore and ignore run artefacts
tpeulen Jul 27, 2026
64aaebe
docs(okf): add the Open Knowledge Format bundle and CLAUDE.md
tpeulen Jul 27, 2026
92ce43b
core: replace quest.lib with a flat quest.core package
tpeulen Jul 27, 2026
d4d46d2
feat: add the service layer every surface calls through
tpeulen Jul 27, 2026
fde6731
feat: describe every parameter once, and translate that description
tpeulen Jul 27, 2026
790dc1d
gui: generate the Qt form from the catalog instead of carrying .ui files
tpeulen Jul 27, 2026
f34e9a2
webui: add the FastAPI backend, Next.js frontend and desktop shell
tpeulen Jul 27, 2026
7f51688
docs: replace the notebooks with four that run, and add scripted exam…
tpeulen Jul 27, 2026
1fa4226
build: drive everything from pixi, and package with rattler-build
tpeulen Jul 27, 2026
1807e72
docs(okf): record the commit series in the log and handover
tpeulen Jul 27, 2026
1b997ec
core: make IMP.bff the primary accessible-volume backend
tpeulen Jul 27, 2026
5b8fc2a
core: stop stripping HETATM records; keep water stripped
tpeulen Jul 27, 2026
4f3dad2
core: one allowed_sphere_radius default of 2.1 A
tpeulen Jul 27, 2026
ea74ca9
test: pin QuEst's AV against upstream's on both backends
tpeulen Jul 27, 2026
5982368
docs(okf): record decisions 1-3, and why 4 stops here
tpeulen Jul 27, 2026
52db006
build: declare imp-tricks as a dependency
tpeulen Jul 28, 2026
78dc4c8
core: take density2points from IMP.bff.av (DUP-02)
tpeulen Jul 28, 2026
9b1192e
core: take the RDA sampling from IMP.bff (DUP-03)
tpeulen Jul 28, 2026
80d39fe
core: reject simulation_type=AV3 instead of crashing on it
tpeulen Jul 28, 2026
da2774d
core: compute accessible volumes through IMP.bff.av.compute_av (DUP-01)
tpeulen Jul 28, 2026
9c1d5fb
docs(okf): close all four decisions and record what dedup cost
tpeulen Jul 28, 2026
b979744
hygiene: make run artefacts opt-in, and stop leaking a foreign DYLD path
tpeulen Jul 28, 2026
d394efc
env: run all four surfaces from arm64, and test the fallbacks that ba…
tpeulen Jul 28, 2026
40743de
test: pin the numbers in a baseline, and verify the two unmeasured su…
tpeulen Jul 28, 2026
fc80e9c
core: one Angstrom-to-voxel map, on both backends
tpeulen Jul 28, 2026
83bac32
core: take residue identity from IMP, not from the residue number
tpeulen Jul 28, 2026
d9ba940
fret: state kappa2 instead of burying it, and reject the DUP-03 adoption
tpeulen Jul 28, 2026
dae3763
core: adopt the upstream contact-volume split, and ask the capability…
tpeulen Jul 28, 2026
bd35f0c
docs(okf): rewrite the handover for the programme's midpoint
tpeulen Jul 28, 2026
4539b22
api: make quest.api a facade, and move serialization to the transport
tpeulen Jul 28, 2026
82b75d4
tasks: one mechanism for long-running work, and split "job" from "run"
tpeulen Jul 28, 2026
0dd0ac5
test: give i18n an end condition
tpeulen Jul 28, 2026
8218c22
test(e2e): the run listing key is `runs`
tpeulen Jul 28, 2026
8ffb347
docs(okf): handover for phases 0-9 and 11
tpeulen Jul 28, 2026
e4e9dfd
docs: stop citing an imp-tricks version that does not exist
tpeulen Jul 28, 2026
3147f2e
docs(okf): record phase 10 — the ChiSurf plugin declares itself
tpeulen Jul 28, 2026
a78709a
docs(okf): prune known-issues to the corrections
tpeulen Jul 28, 2026
bcb4557
docs(okf): handover at twelve of thirteen phases
tpeulen Jul 28, 2026
c3b19c7
docs(okf): imp-tricks stays local, and the CI consequence was overstated
tpeulen Jul 28, 2026
a4d7f56
fix(decay): the histogram counts photons that were never emitted (RF-…
tpeulen Jul 28, 2026
8e2d535
webui: κ² never reached the web FRET panel
tpeulen Jul 28, 2026
6a3d83b
refactor: lay the package out by kind, not by prefix
tpeulen Jul 28, 2026
6d55f69
okf: migrate the knowledge bundle to OKF v0.2
tpeulen Aug 6, 2026
1ac9675
okf: correct post-refactor paths, document quest/tasks.py
tpeulen Aug 6, 2026
6d70594
okf: re-read the four stale concepts; one was wrong, not merely dated
tpeulen Aug 6, 2026
6098987
okf: make committing in between a rule
tpeulen Aug 6, 2026
127b992
webui: label the bare selects and keep the panel inside its card
tpeulen Aug 7, 2026
b157b45
webui: density + modern refresh, CSS-only
tpeulen Aug 7, 2026
acfa908
webui: indigo + slate color refresh (modern)
tpeulen Aug 7, 2026
0ff3926
webui: light/dark theme switch (defaults dark, persisted)
tpeulen Aug 7, 2026
5bd71bb
webui: reusable guided user tour (spotlight + tooltip)
tpeulen Aug 7, 2026
66c3317
okf: document the autoform view-spec scheme as the port blueprint
tpeulen Aug 7, 2026
230b9ce
webui: exhaustive cross-page multi-lingual guided tour
tpeulen Aug 7, 2026
8971639
feat(autoform, rpc): bring Web AutoForm support and 5-way ChiSurf plu…
tpeulen Aug 7, 2026
a8368ee
feat(autoform, pyqt): unify PyQt and WebUI on shared AutoForm JSON sc…
tpeulen Aug 7, 2026
51ffd6c
refactor(pyqt): major overhaul of PyQt desktop application and AutoFo…
tpeulen Aug 7, 2026
f481de8
docs(autoform): add ChiSurf AutoForm integration and dependency speci…
tpeulen Aug 7, 2026
a7bdef6
feat(gui): add quest/gui/__main__.py for direct python -m quest.gui e…
tpeulen Aug 7, 2026
e47ceba
refactor(pyqt): switch to standard native Qt desktop layout and styling
tpeulen Aug 7, 2026
0737341
feat(gui): separate plot canvases using nested QSplitters for flexibl…
tpeulen Aug 7, 2026
e5cf481
feat(gui): integrate ChiMol 3D molecular structure viewer into PyQt d…
tpeulen Aug 7, 2026
d76a0b4
feat(gui): set handleWidth=6 and non-collapsible policy on QSplitters…
tpeulen Aug 7, 2026
cd0d058
feat(tour): implement unified 148L demo mode and shared guided tour f…
tpeulen Aug 7, 2026
3846893
fix(chimol): resolve add_structure signature and coordinates fallback…
tpeulen Aug 7, 2026
c5556c1
feat(viewer): display 3D protein viewport canvas continuously even wh…
tpeulen Aug 7, 2026
239841b
fix(tour): correct create_demo_project dictionary schema to match dom…
tpeulen Aug 7, 2026
d3dc195
refactor(gui): replace 'Demo Mode' terminology with standard ChiSurf …
tpeulen Aug 7, 2026
74d7421
fix(git): anchor the lib/ ignore to the repo root
tpeulen Aug 10, 2026
c79ec26
fix(structure): strip crystallographic water on every path into a sur…
tpeulen Aug 10, 2026
c31e3d2
fix(rpc): the ZMQ transport serialises its results and names malforme…
tpeulen Aug 10, 2026
7170f58
feat(webui): the web form is AutoForm only; no form is hand-written a…
tpeulen Aug 10, 2026
30fae2c
feat(gui): click a residue to label it, on both surfaces
tpeulen Aug 10, 2026
6affa9c
docs(okf): record the commit sweep, the hidden frontend sources and t…
tpeulen Aug 10, 2026
83a715e
docs: keep the 2026-08-07 session transcript
tpeulen Aug 10, 2026
d19badd
docs(okf): re-read the two surface concepts against the code
tpeulen Aug 10, 2026
962890c
docs(okf): verify the four concepts the handover had flagged since 20…
tpeulen Aug 10, 2026
3f2829e
feat(gui): the desktop run is a job, and the window survives it
tpeulen Aug 10, 2026
df09f3f
fix(ci): the two permanently red jobs solve again, without publishing…
tpeulen Aug 10, 2026
6bc5123
docs(okf): note that the web viewer is to become chimol, and where to…
tpeulen Aug 10, 2026
3b46f22
docs(okf): record what the chimol swap needs, now that the desktop po…
tpeulen Aug 10, 2026
a83144e
docs(okf): DUP-07's open question has an upstream answer — ChiMOL, no…
tpeulen Aug 10, 2026
29da4da
docs(okf): log the upstream AV radius bug, and why QuEst is not affected
tpeulen Aug 10, 2026
33e05fe
docs(okf): flag PRD-97 — a fourth AV backend selector is coming into …
tpeulen Aug 10, 2026
616300b
okf: link the FPSIMP sibling by file, not by prose
tpeulen Aug 11, 2026
477ef03
okf: scope the IMP.bff rule with the dependency policy
tpeulen Aug 11, 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
111 changes: 111 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: CI

# Replaces the old conda-build workflow, which still pointed at
# `modules/quest/**` — the path QuEst has when it is vendored inside ChiSurf,
# not the layout of this repository — so it had stopped matching anything.

on:
workflow_dispatch:
push:
branches: [main]
pull_request:
branches: [main]

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

env:
# ChiSurf brings tttrlib with its own OpenMP runtime; numba's `workqueue`
# layer aborts the interpreter alongside it. See okf/workflows/testing.md.
NUMBA_THREADING_LAYER: omp

jobs:
test:
name: Library & web backend (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4

- uses: prefix-dev/setup-pixi@v0.8.1
with:
pixi-version: latest
cache: true
environments: default

# The browser suite skips itself unless the servers are up; it runs in the
# `e2e` job below, so it is excluded here rather than silently skipped.
- name: Library
run: pixi run -e default test

- name: Web backend
run: pixi run -e default test-web

gui:
name: Qt GUI (offscreen)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: prefix-dev/setup-pixi@v0.8.1
with:
pixi-version: latest
cache: true
environments: desktop

# A Qt binding needs an X stack even offscreen.
- name: System Qt dependencies
run: |
sudo apt-get update
sudo apt-get install -y libegl1 libgl1 libxkbcommon-x11-0 \
libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \
libxcb-render-util0 libxcb-shape0 libxcb-xinerama0

- name: Widget tests
run: pixi run -e desktop test-gui

frontend:
name: Web UI (typecheck & build)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: prefix-dev/setup-pixi@v0.8.1
with:
pixi-version: latest
cache: true
environments: frontend

- run: pixi run -e frontend typecheck
- run: pixi run -e frontend build

package:
name: Conda package (rattler-build)
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: prefix-dev/setup-pixi@v0.8.1
with:
pixi-version: latest
cache: true
environments: build

- name: Build
run: pixi run -e build build-pkg

- uses: actions/upload-artifact@v4
with:
name: quest-conda-${{ matrix.os }}
path: build/pkg/**/*.conda
if-no-files-found: error
97 changes: 0 additions & 97 deletions .github/workflows/quest-conda.yml

This file was deleted.

163 changes: 146 additions & 17 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,22 +1,151 @@
build
# ==========================================
# Python build, distribution and packaging
# ==========================================
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
# Anchored to the repository root: an unanchored `lib/` also swallowed
# webui/frontend/src/lib/, whose sources went uncommitted for weeks.
/lib/
/lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# ==========================================
# Compiled binaries, shared libraries, Cython
# ==========================================
# Global ignores for dynamic libraries
*.so
*.dylib
*.dll
*.pyd
*.o
*.obj
*.a
*.lib

# Cython generated C/C++ sources in quest package
quest/**/*.c
quest/**/*.cpp

# Older specific compiled targets (kept for safety)
_*-darwin.so
_64-linux-gnu.so

# ==========================================
# Caches, testing, and coverage
# ==========================================
__pycache__/
*.pyc
*.pyo
.pytest_cache/
.coverage
.coverage.*
htmlcov/
.nosetests
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.mypy_cache/
.dmypy.json
dmypy.json

# ==========================================
# WebUI & Frontend (Node, Next.js)
# ==========================================
# Next.js build output
.next/
out/
*.tsbuildinfo

# Node dependencies
node_modules/

# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# npm log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# ==========================================
# Virtual environments
# ==========================================
.venv/
venv/
env/
.env/
ENV/
env.bak/
venv.bak/

# ==========================================
# IDEs, Editors, and OS-specific files
# ==========================================
.DS_Store
Thumbs.db
.vscode/
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.swp
*.pro.user
*.pro.user.*
CMakeLists.txt.user
CMakeLists.txt.user.*
cmake-build-*
_*-darwin.so
_64-linux-gnu.so
__pycache__

quest/lib/fps/fps.cpp
quest/lib/math/functions/rdf.cpp
quest/lib/math/functions/small.cpp
quest/lib/math/functions/rdf.cpython-39-x86_64-linux-gnu.so
quest/lib/fps/fps.cpython-39-x86_64-linux-gnu.so
quest/lib/math/functions/small.cpython-39-x86_64-linux-gnu.so
quest/lib/math/linalg/vector.cpp
quest/lib/tools/dye_diffusion/photon.cpython-39-x86_64-linux-gnu.so
quest/lib/tools/dye_diffusion/photon.cpp
quest/lib/structure/cStructure.cpython-39-x86_64-linux-gnu.so
quest/lib/structure/cStructure.cpp
quest/lib/math/linalg/vector.cpython-39-x86_64-linux-gnu.so

# ==========================================
# Jupyter Notebooks
# ==========================================
.ipynb_checkpoints/

# ==========================================
# Project-specific ignores
# ==========================================
.kilocode/
.omx/
.webui-data/
.antigravity/
.antigravitycli/

# Simulation output. `simulate_project` writes `jobs/<uuid>/` under the current
# working directory whenever `save_outputs` is true, so anything run from the
# repo root leaves a directory behind. Tests should pass `save_outputs=False`
# or a temporary `project_dir` rather than rely on this.
jobs/

# Scratch left behind by manual runs and by the molecule viewer.
/out.xyz
/out_slow.xyz
/test.pdb
/test.cif
/webui-viewer-testpdb.png
tests/sim_test.log


# ==========================================
# Pixi
# ==========================================
# Environments are reproducible from pixi.toml + pixi.lock, both of which are
# committed. The materialised environment is not.
.pixi/
Loading
Loading