Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
cd3c57c
UI tweaks and bug fixes
TonyXTYan Dec 11, 2024
7ea6087
UI tweaks and stability
TonyXTYan Dec 13, 2024
799a294
minor UI tweaks
TonyXTYan Dec 15, 2024
9c8a3f1
StatusWorker dev
TonyXTYan Dec 16, 2024
6cbff4a
UI enhancements
TonyXTYan Dec 17, 2024
d4f9f57
added legacy plotly from he34 scattering project
TonyXTYan Dec 18, 2024
690533a
performance enchancement (GUI still freeze when file system don't res…
TonyXTYan Dec 18, 2024
c2a35f5
fixed type checking
TonyXTYan Dec 18, 2024
624b97c
GUI tweaks
TonyXTYan Dec 19, 2024
c3184ba
using diskcache
TonyXTYan Dec 19, 2024
95a8872
performance optimisaiton and UI tweaks
TonyXTYan Dec 28, 2024
a8060cc
missing diskcache requirement (?)
TonyXTYan Dec 30, 2024
403fa49
disabled problematic test
TonyXTYan Dec 30, 2024
cae3945
windows drive issues?
TonyXTYan Dec 30, 2024
41667ea
fixing for fu*king annoying windows OS
TonyXTYan Dec 30, 2024
4e777c3
data ram caching
TonyXTYan Dec 30, 2024
3439201
load to ram in background thread
TonyXTYan Jan 3, 2025
ce3c17f
ram caching data folders
TonyXTYan Jan 3, 2025
5b28bd8
caching robustness
TonyXTYan Jan 10, 2025
024a3b7
threadingSetup and statusRescan
TonyXTYan Jan 10, 2025
e2bb202
minor bug fixes
TonyXTYan Jan 10, 2025
991ad75
general bug fixes and some docstring
TonyXTYan Jan 11, 2025
d840478
fuck matlab
TonyXTYan Jan 11, 2025
e008a22
I hate matlab
TonyXTYan Jan 11, 2025
cd4d670
something wrong with icloud?
TonyXTYan Jan 11, 2025
edd3e36
what about this?
TonyXTYan Jan 11, 2025
cda58e0
database lock issue?
TonyXTYan Jan 11, 2025
9c84ab8
sql timeout lock?
TonyXTYan Jan 11, 2025
5fb3a18
added bunch of tests
TonyXTYan Jan 11, 2025
afd16c6
typing typo fix
TonyXTYan Jan 11, 2025
441e59a
maybe some performance optimisation,
TonyXTYan Jan 11, 2025
83a48d9
hummm
TonyXTYan Jan 11, 2025
00cd336
checkpoint
TonyXTYan Jan 11, 2025
6089090
fix performance bug (hopefully)
TonyXTYan Jan 12, 2025
d523f53
fixing (shitty) windowsOS problems
TonyXTYan Jan 12, 2025
2e23617
AI generated many tests
TonyXTYan Jan 12, 2025
9401764
logic bug fix, improvements and reduced time.sleep amount
TonyXTYan Jan 12, 2025
60ddb65
icloud sync issue
TonyXTYan Jan 12, 2025
334d178
Merge remote-tracking branch 'TonyXTYan/dev' into dev
TonyXTYan Jan 12, 2025
4be8399
status logic bug fix
TonyXTYan Jan 12, 2025
7234733
???
TonyXTYan Jan 13, 2025
55fa99b
bug fixes and performance optimisation
TonyXTYan Jan 13, 2025
ddc92c0
Merge remote-tracking branch 'TonyXTYan/dev' into dev
TonyXTYan Jan 13, 2025
e24b86e
very robust and fast data loading
TonyXTYan Jan 13, 2025
8d45299
some basic plots
TonyXTYan Jan 15, 2025
f699004
just update
TonyXTYan Jan 15, 2025
93c99a9
plot experiments
TonyXTYan Jan 15, 2025
e9f6a2f
unified file system caching
TonyXTYan Jan 16, 2025
a62955f
typo
TonyXTYan Jan 16, 2025
3100753
Improved ram cache logic. changed file names
TonyXTYan Jan 18, 2025
9b835df
plots kind of working yeah
TonyXTYan Jan 18, 2025
4b5d0de
llm stuff
TonyXTYan Jan 25, 2025
393a1a1
Claude script selector
TonyXTYan Mar 18, 2025
68a1483
Claude \doc
TonyXTYan Mar 21, 2025
0567990
checkpoint
TonyXTYan Oct 30, 2025
82bb077
checkpoint
TonyXTYan Aug 17, 2026
36aca33
checkpoint 2
TonyXTYan Aug 17, 2026
cf87b76
rga data visualiser
TonyXTYan Aug 17, 2026
83e698b
rga data compare tweaks
TonyXTYan Aug 17, 2026
df6c900
various bug fixes
TonyXTYan Aug 17, 2026
aa20a76
ci fix?
TonyXTYan Aug 17, 2026
eeb28a8
Fix CI hang: cancel leftover Qt workers, add timeouts, guard deferred…
TonyXTYan Aug 17, 2026
0a33dc5
Replace deprecated codecov/test-results-action with codecov-action
TonyXTYan Aug 17, 2026
569cdf6
Bump version to 0.0.4a; auto-tag and release on version bump in CI
TonyXTYan Aug 17, 2026
2d7614f
Skip release job entirely unless a version bump warrants it
TonyXTYan Aug 17, 2026
591fb76
Raise RLIMIT_NOFILE at startup to fix crash when launched from Finder
TonyXTYan Aug 17, 2026
c24fbed
Switch macOS build to onedir mode instead of onefile+bundle
TonyXTYan Aug 17, 2026
9073f86
Fix nested dataChanged parent, missing action column, and cancel stat…
TonyXTYan Aug 17, 2026
6e1ff8d
Set console=False so the macOS app gets a menu bar and Dock icon
TonyXTYan Aug 17, 2026
7ce49a9
Merge branch 'main' into dev
TonyXTYan Aug 17, 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
1 change: 1 addition & 0 deletions .ai/coding-workspace.md
6 changes: 6 additions & 0 deletions .ai/memory/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Memory Index

See `.ai/coding-workspace.md` for what belongs here vs `.ai/sessions/`.

- [Ask before commit](feedback_ask_before_commit.md) — never `git commit` without asking first, even after verifying a fix works
- [Preferred address](user_preferred_address.md) — address the user as "🎓Tony"
15 changes: 15 additions & 0 deletions .ai/memory/feedback_ask_before_commit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
name: feedback-ask-before-commit
description: "Always ask before running git commit, even when changes are verified and ready"
metadata:
node_type: memory
type: feedback
originSessionId: 83fa924c-d904-40df-ba15-ec9696cf8992
modified: 2026-08-17T11:04:40.505Z
---

Never run `git commit` without asking Tony first, even after a fix has been implemented, tested, and verified. Staging, diffing, and reviewing changes (`git add`, `git status`, `git diff`) is fine without asking — only the commit itself requires explicit go-ahead each time.

**Why:** Tony wants a final checkpoint before changes become permanent history, regardless of how confident the work is. This applies even in auto-mode / when otherwise encouraged to act without stopping for clarification.

**How to apply:** After finishing and verifying a change, present the diff/summary and ask whether to commit, rather than committing and reporting after the fact. This is now codified in `.ai/coding-workspace.md` (symlinked from `ai-common/coding-workspace.md`), so it applies across all of Tony's repos, not just this one.
11 changes: 11 additions & 0 deletions .ai/memory/user_preferred_address.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
name: user-preferred-address
description: "Tony wants to be addressed as \"🎓Tony\" in conversation"
metadata:
node_type: memory
type: user
originSessionId: 83fa924c-d904-40df-ba15-ec9696cf8992
modified: 2026-08-17T11:05:50.821Z
---

Address the user as "🎓Tony" (with the graduation-cap emoji prefix) when using their name in conversation, rather than plain "Tony".
152 changes: 112 additions & 40 deletions .github/workflows/dev-cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,99 @@ name: CI CD

on:
push:
branches: "*"
branches: "*"
tags: 'v*.*.*'

permissions:
contents: write

jobs:
get-version:
name: Detect version bump
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.compare.outputs.tag_name }}
should_release: ${{ steps.compare.outputs.should_release }}
steps:
- name: Checkout code
uses: actions/checkout@v7

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Restore resolvable GitHub Action versions

The workflow upgrades its core dependencies to nonexistent major tags, including actions/checkout@v7, actions/setup-python@v7, actions/upload-artifact@v7, actions/download-artifact@v8, and codecov/codecov-action@v7. Every push therefore fails while resolving the first checkout step, before the documented test matrix, builds, or automatic release logic can run; use published action majors instead.

AGENTS.md reference: AGENTS.md:L85-L87

Useful? React with 👍 / 👎.

with:
fetch-depth: 0
fetch-tags: true

- name: Set up Python
uses: actions/setup-python@v7
with:
python-version: '3.12'

- name: Install packaging
run: pip install packaging

- name: Compare setup.py version against existing tags
id: compare
shell: python
run: |
import os
import re
import subprocess
from packaging.version import Version, InvalidVersion

with open("setup.py") as f:
content = f.read()
match = re.search(r'version\s*=\s*["\']([^"\']+)["\']', content)
if not match:
raise SystemExit("Could not find version= in setup.py")
raw_version = match.group(1)
current = Version(raw_version)
tag_name = f"v{raw_version}"

existing_tags = subprocess.run(
["git", "tag", "-l"], capture_output=True, text=True, check=True
).stdout.splitlines()

latest_version = None
latest_tag = None
for t in existing_tags:
if not t.startswith("v"):
continue
try:
v = Version(t[1:])
except InvalidVersion:
continue
if latest_version is None or v > latest_version:
latest_version = v
latest_tag = t

print(f"setup.py version: {raw_version} ({tag_name})")
print(f"latest tagged version: {latest_tag or '(none)'}")

if latest_version is not None and current < latest_version:
raise SystemExit(
f"::error::setup.py version {raw_version} is lower than latest "
f"tagged version {latest_tag}. Version must not decrease."
)

tag_exists = tag_name in existing_tags
on_main = os.environ["GITHUB_REF"] == "refs/heads/main"
should_release = on_main and not tag_exists

if tag_exists:
print(f"Tag {tag_name} already exists, skipping release.")
elif not on_main:
print(f"Version {raw_version} not yet tagged, but not on main; skipping release.")
else:
print(f"Will tag and release {tag_name}.")

gh_output = os.environ["GITHUB_OUTPUT"]
with open(gh_output, "a") as f:
f.write(f"tag_name={tag_name}\n")
f.write(f"should_release={'true' if should_release else 'false'}\n")

test:
# name: Test on ${{ matrix.os }} - Python ${{ matrix.python-version }}
name: Test on ${{ matrix.os }} py3.${{ matrix.python3-version }}
runs-on: ${{ matrix.os }}-latest
timeout-minutes: 20
# continue-on-error: true # Allow continue to build even if tests fail
continue-on-error: ${{ matrix.python3-version != '12' }}
strategy:
Expand All @@ -24,7 +109,7 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7

# - name: Cache pip
# uses: actions/cache@v4
Expand Down Expand Up @@ -64,7 +149,7 @@ jobs:
echo "No dependencies to install on Windows."

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: 3.${{ matrix.python3-version }}
cache: 'pip'
Expand All @@ -91,31 +176,33 @@ jobs:
else
source venv/bin/activate
fi
pytest -n 4 -v --cache-clear --cov=helab --junitxml=junit.xml -o junit_family=legacy
pytest -n 4 --verbose --cache-clear --cov=helab --junitxml=junit.xml -o junit_family=legacy --reruns 5 --reruns-delay 2 --timeout=120 --timeout-method=thread

# pytest -n 1 -v --cache-clear --cov=helab --junitxml=junit.xml -o junit_family=legacy
# pytest -n 8 -v --cache-clear --cov=helab --junit-xml=pytest-report.xml

- name: Upload Test Results
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: test-results-${{ matrix.os }}-py3${{ matrix.python3-version }}
path: junit.xml

- name: Upload test results to Codecov
if: ${{ !cancelled() }}
uses: codecov/test-results-action@v1
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}
report_type: test_results

- name: Run test with code coverage report
if: matrix.python3-version == '12' && matrix.os == 'macos'
run: |
source venv/bin/activate
pytest --cov=helab --cov-report=xml --cov-report=term --ignore=tests/test_typing.py
pytest --cov=helab --cov-report=xml --cov-report=term --ignore=tests/test_typing.py --cache-clear --timeout=120 --timeout-method=thread

- name: Upload Code Coverage Report
if: matrix.python3-version == '12' && matrix.os == 'macos'
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}

Expand All @@ -138,7 +225,7 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7

# - name: Cache pip
# uses: actions/cache@v4
Expand Down Expand Up @@ -178,7 +265,7 @@ jobs:
libopengl0

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: 3.${{ matrix.python3-version }}
cache: 'pip'
Expand Down Expand Up @@ -208,7 +295,7 @@ jobs:
pyinstaller HeLab.spec --clean -y

- name: Archive build artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: build-${{ matrix.os }}-py3${{ matrix.python3-version }}
# name: build-${{ matrix.os }}-py${{ format('{0}', matrix.python-version) | replace('.','') }}
Expand All @@ -223,23 +310,24 @@ jobs:

release:
name: Create Release on Tag
needs: [test, build]
needs: [get-version, test, build]
if: needs.get-version.outputs.should_release == 'true'
runs-on: ubuntu-latest
steps:
- name: Download macOS Build Artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: build-macos-py312
path: dist/macos

- name: Download Windows Build Artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: build-windows-py312
path: dist/windows

- name: Download Ubuntu Build Artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: build-ubuntu-py312
path: dist/ubuntu
Expand All @@ -260,9 +348,8 @@ jobs:
zip -r -9 HeLab-ubuntu.zip HeLab

- name: Prepare Release Body
# if: startsWith(github.ref, 'refs/tags/')
run: |
RELEASE_BODY="## Release ${{ github.ref_name }}
RELEASE_BODY="## Release ${{ needs.get-version.outputs.tag_name }}

**Date:** $(date +'%Y-%m-%d %H:%M') UTC

Expand All @@ -275,23 +362,23 @@ jobs:
- **macOS ARM64** build (Python 3.12)
- **Windows Intel64** build (Python 3.12)
- **Ubuntu Intel64** build (Python 3.12)

**Note:** This is an automated release. Please verify builds before production use."

echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
echo "$RELEASE_BODY" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV

echo "Release body preview:"
echo "$RELEASE_BODY"

- name: Create Release and Upload Assets on Tag
if: github.ref_type == 'tag'
- name: Create Release and Upload Assets on Version Bump
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.PAT_TOKEN }}
tag: ${{ github.ref_name }}
name: "Automated Release ${{ github.ref_name }}"
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ needs.get-version.outputs.tag_name }}
commit: ${{ github.sha }}
name: "Automated Release ${{ needs.get-version.outputs.tag_name }}"
body: ${{ env.RELEASE_BODY }}
draft: true
prerelease: true
Expand All @@ -300,18 +387,3 @@ jobs:
dist/windows/HeLab-windows.zip
dist/ubuntu/HeLab-ubuntu.zip

# - name: Create Release and Upload Assets on Tag 2
# if: startsWith(github.ref, 'refs/tags/')
# uses: ncipollo/release-action@v1
# with:
# token: ${{ secrets.PAT_TOKEN }}
# tag: ${{ github.ref_name }}
# name: "Automated Release ${{ github.ref_name }}"
# body: ${{ env.RELEASE_BODY }}
# draft: true
# prerelease: true
# artifacts: |
# dist/macos/HeLab-macos.zip
# dist/windows/HeLab-windows.zip
# dist/ubuntu/HeLab-ubuntu.zip

23 changes: 22 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ CMakeLists.txt.user*
*.dll
*.exe

.idea
# .idea
.qtcreator
env
HELIUM.pyproject*
Expand All @@ -86,3 +86,24 @@ Icon?
helab.egg-info
coverage.xml
.coverage
helab_tempfiles
helab_caches
helab_temps
*.ipynb
coverage.xml
helab_main.prof
*.log
mprofile_*.dat
profile.html
profile.json
.pytest_cache
.idea/misc.xml
.idea/modules.xml
.coverage.*
.coverage*
junit.xml
_server alias/
.ai/temp/
venv
side_projects/rga_visualiser/RGAData
venv.nosync
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "legacy/tdc_autoconverter"]
path = legacy/tdc_autoconverter
url = https://github.com/HeBECANU/tdc_autoconverter
branch = master
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions .idea/HeLab.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading