Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .claude/skills/build-insight-dashboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ One round:
the first suspect is the cache and the first move is to clear it — before
re-reading the config, before doubting the change, before restarting
anything. Runs lose whole stretches to this by debugging the edit instead,
and it is the same symptom as the un-restarted server (`rounds.md`): what you
and it is the same symptom as the un-restarted server (`scaffold-workflow-app/rounds.md`): what you
see is the previous configuration, faithfully served.
2. **Resolve every candidate to its edit before offering it.** In thinking, name
the file and the change that implements it. A candidate whose edit you cannot
Expand Down Expand Up @@ -292,7 +292,7 @@ print(page.frame_locator("iframe").first.locator("body")

Only then shorten headers if the total overflows. Three builds on two notebooks had the 45px figure and the observed panel fits and still converged by trial across four and five gate cycles, because nothing here turned a panel width into a column width. A fourth had the formula and converged anyway, because the formula is only the numerator.

**And do not buy the fit by dropping a column.** The same build removed one to make the sum work and disclosed it in its closing turn, which is the one place `handover.md` says a decision must never first appear. A column that does not fit is a question, not a silent edit.
**And do not buy the fit by dropping a column.** The same build removed one to make the sum work and disclosed it in its closing turn, which is the one place `scaffold-workflow-app/handover.md` says a decision must never first appear. A column that does not fit is a question, not a silent edit.

**The gate does not see the wrap.** A build reported *"875 wrapped onto a phantom row, 800 clipped 'Score', 815 fit"* and added that only the screenshot showed it — the gate returned 11/11 on the wrapped page. So a green gate is not evidence the table fits; the screenshot is. Read it before believing the count, and never treat a passing gate as the check for this. This rule used to name a fixed figure for a 1280px window until two builds on two notebooks sized their columns against it and wrapped anyway: one measured ~830px at a 1280px window, the other 864px with the wrap at a 865px sum. Both then re-derived the budget from a screenshot and repeated gate runs, which is the cost of a number that was one layout's measurement rather than something to compute. `verify-webapp-usability` measures the real property and fails on it; shorten a long header rather than widening its column |
| **Normalise per side before a mirror plot** | The halves share one symmetric axis; raw counts (~7e4) against theoretical intensities (~1) flatten one onto the baseline |
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/interview-parameters/probe.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ def main() -> int:
if (
re_eff > MATERIAL_THRESHOLD
and re_eff >= MASKING_RATIO * max(eff, EFFECT_THRESHOLD)
and (best_unmask is None or re_eff > best_unmask[1])
and (best_unmask is None or re_eff > best_unmask[1]) # pylint: disable=unsubscriptable-object
):
best_unmask = (other["key"], re_eff)
if best_unmask:
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/notebook-to-webapp/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ Four lines. The same build narrated step by step runs to eight: a line for the
extracted file, one for the golden test, one for the workflow class and its
pages, one for registering them, one for the template cleanup, one for the test
lists. Each is a step inside a stage, and the last of them reads a phrase
straight out of `cleanup.md` — a step that only exists because this framework
straight out of `scaffold-workflow-app/cleanup.md` — a step that only exists because this framework
has a rule about it is not a step the user is waiting on.

**The bad version is described here and not written out, deliberately.** It used
Expand Down
29 changes: 26 additions & 3 deletions .github/scripts/ci-assertions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -916,6 +916,7 @@ assert_doc_links_resolve() {
# `docs/a16-storage-runbook.md`, while a sibling reference inside docs/
# may reasonably write just `build_app.md`.
_ci_dangling=""
_ci_dangling_at=""
_ci_checked=0
for _ci_ref in $_ci_refs; do
_ci_checked=$((_ci_checked + 1))
Expand All @@ -925,14 +926,36 @@ assert_doc_links_resolve() {
if git ls-files --error-unmatch "docs/$_ci_ref" >/dev/null 2>&1; then
continue
fi
# Skills cite their own supporting files by bare name (`cleanup.md`)
# or relative to the skills root (`scaffold-workflow-app/handover.md`).
if git ls-files --error-unmatch ".claude/skills/$_ci_ref" >/dev/null 2>&1; then
continue
fi
# Last, relative to the directory of the Markdown file citing it. Every
# citing file has to resolve it on its own: one file with a sibling of
# that name says nothing about another file citing the same name.
_ci_unresolved=""
for _ci_citer in $(git ls-files '*.md' -z 2>/dev/null \
| xargs -0 grep -l -- "\`$_ci_ref\`" 2>/dev/null); do
if ! git ls-files --error-unmatch "$(dirname "$_ci_citer")/$_ci_ref" >/dev/null 2>&1; then
_ci_unresolved="$_ci_unresolved $_ci_citer"
fi
done
if [ -z "$_ci_unresolved" ]; then
continue
fi
_ci_dangling="$_ci_dangling $_ci_ref"
for _ci_citer in $_ci_unresolved; do
_ci_dangling_at="$_ci_dangling_at $_ci_citer:$_ci_ref"
done
done

if [ -n "$_ci_dangling" ]; then
_ci_fail "tracked Markdown cites .md paths that do not exist:$_ci_dangling"
printf '%s\n' "$_ci_dangling" | tr ' ' '\n' | grep -v '^$' | while read -r _ci_d; do
git ls-files '*.md' -z 2>/dev/null \
| xargs -0 grep -n -- "\`$_ci_d\`" 2>/dev/null | sed 's|^| |' >&2 || true
# Only the citing files that cannot resolve the reference.
for _ci_d in $_ci_dangling_at; do
grep -n -- "\`${_ci_d#*:}\`" "${_ci_d%%:*}" 2>/dev/null \
| sed "s|^| ${_ci_d%%:*}:|" >&2 || true
done
_ci_rc=1
fi
Expand Down
176 changes: 20 additions & 156 deletions .github/workflows/build-windows-executable-app.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ permissions:
contents: write

env:
OPENMS_VERSION: 3.5.0
# Override to pin contrib to a specific release when OPENMS_VERSION is a non-release branch (e.g. "develop").
# Leave empty to use OPENMS_VERSION.
OPENMS_CONTRIB_VERSION: ""
PYTHON_VERSION: 3.11.0
# Name of the installer
APP_NAME: OpenMS-StreamlitTemplateApp
Expand All @@ -26,160 +22,28 @@ env:
TOPP_TOOLS: "FeatureFinderMetabo FeatureLinkerUnlabeledKD SiriusExport"

jobs:
build-openms:
runs-on: windows-2022

# `with:` of a reusable-workflow call cannot read `env`, so this job hands
# TOPP_TOOLS over as an output and it stays defined in one place.
config:
runs-on: ubuntu-latest
outputs:
topp-tools: ${{ steps.out.outputs.topp-tools }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
repository: OpenMS/OpenMS
ref: release/${{ env.OPENMS_VERSION }}
path: 'OpenMS'

- name: Install Qt (Windows)
uses: jurplel/install-qt-action@v4
with:
version: '6.8.3' ## Note this version is build with win64_msvc2022_64 and should always match what we use
arch: 'win64_msvc2022_64'
cache: 'false'
archives: 'qtsvg qtimageformats qtbase'

# https://github.com/marketplace/actions/visual-studio-shell
- name: Set up Visual Studio shell
uses: egor-tensin/vs-shell@v2
with:
arch: x64
- id: out
run: echo "topp-tools=$TOPP_TOOLS" >> "$GITHUB_OUTPUT"

- name: Setup build tools
shell: bash
run: |
choco install ccache ninja -y --no-progress
choco install cmake --version=3.31.12 -y --no-progress --force
## GH CLI "SHOULD BE" installed. Sometimes I had to manually install nonetheless. Super weird.
# https://github.com/actions/runner-images/blob/main/images/win/scripts/Installers/Install-GitHub-CLI.ps1
echo "C:/Program Files (x86)/GitHub CLI" >> $GITHUB_PATH

- name: Extract branch/PR infos
shell: bash
run: |
cd OpenMS
RUN_NAME_LOCAL=$(echo ${GITHUB_REF#refs/heads/} | tr / -)
echo "RUN_NAME=${RUN_NAME_LOCAL}" >> $GITHUB_ENV
echo "BASE_REF=$(gh pr view --json baseRefName -q .baseRefName || echo ${RUN_NAME_LOCAL})" >> $GITHUB_ENV
id: extract_branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Cache contrib
id: cache-contrib-win
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/OpenMS/contrib
key: ${{ runner.os }}-contrib-${{ env.OPENMS_CONTRIB_VERSION || env.OPENMS_VERSION }}

- name: Load contrib build
if: steps.cache-contrib-win.outputs.cache-hit != 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cd OpenMS/contrib
# Download the file using the URL fetched from GitHub
gh release download release/${{ env.OPENMS_CONTRIB_VERSION || env.OPENMS_VERSION }} -R OpenMS/contrib --pattern 'contrib_build-Windows.tar.gz'
# Extract the archive
7z x -so contrib_build-Windows.tar.gz | 7z x -si -ttar
rm contrib_build-Windows.tar.gz
ls

- name: Add contrib to PATH
shell: bash
run: |
# Add contrib library path for runtime DLL resolution
echo "${{ github.workspace }}/OpenMS/contrib/lib" >> $GITHUB_PATH

- name: Setup ccache cache
uses: actions/cache@v4
with:
path: .ccache
key: ${{ runner.os }}-ccache-${{ env.RUN_NAME }}-${{ github.run_number }}
# Restoring: From current branch, otherwise from base branch, otherwise from any branch.
restore-keys: |
${{ runner.os }}-ccache-${{ env.RUN_NAME }}
${{ runner.os }}-ccache-${{ env.BASE_REF }}
${{ runner.os }}-ccache-

- name: Add THIRDPARTY
shell: bash
run: |
# initialize THIRDPARTY
cd OpenMS
git submodule update --init THIRDPARTY
cd ..
# add third-party binaries to PATH
# use flat THIRDPARTY structure
mkdir -p _thirdparty
cp -R OpenMS/THIRDPARTY/Windows/x86_64/* _thirdparty/
cp -R OpenMS/THIRDPARTY/All/* _thirdparty/
# add third-party binaries to PATH
for thirdpartytool in ${{ github.workspace }}/_thirdparty/*
do
echo $thirdpartytool >> $GITHUB_PATH
done

- name: Build Windows
shell: bash
run: |
mkdir $GITHUB_WORKSPACE/OpenMS/bld/
bash OpenMS/tools/ci/capture-env.sh -v $GITHUB_WORKSPACE/OpenMS/bld/CMakeCache.txt
ctest --output-on-failure -V -S $GITHUB_WORKSPACE/OpenMS/tools/ci/cibuild.cmake
env:
OPENMS_CONTRIB_LIBS: "${{ github.workspace }}/OpenMS/contrib"
CI_PROVIDER: "GitHub-Actions"
CMAKE_GENERATOR: "Ninja"
SOURCE_DIRECTORY: "${{ github.workspace }}/OpenMS"
BUILD_NAME: "${{ env.RUN_NAME }}-Win64-class-topp-${{ github.run_number }}"
ENABLE_STYLE_TESTING: "OFF"
ENABLE_TOPP_TESTING: "ON"
ENABLE_CLASS_TESTING: "ON"
WITH_GUI: "OFF"
WITH_PARQUET: "OFF"
ADDRESS_SANITIZER: "Off"
BUILD_TYPE: "Release"
OPENMP: "Off"
USE_STATIC_BOOST: "On"
# BUILD_FLAGS: "-p:CL_MPCount=2" # For VS Generator and MSBuild
BUILD_FLAGS: "-j2" # Ninja will otherwise use all cores (doesn't go well in GHA)
CMAKE_CCACHE_EXE: "ccache"
CCACHE_BASEDIR: ${{ github.workspace }}
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 12
CCACHE_MAXSIZE: 400M

- name: Test Windows
shell: bash
run: ctest --output-on-failure -V -S $GITHUB_WORKSPACE/OpenMS/tools/ci/citest.cmake
env:
SOURCE_DIRECTORY: "${{ github.workspace }}/OpenMS"
CI_PROVIDER: "GitHub-Actions"
BUILD_NAME: "${{ env.RUN_NAME }}-Win64-class-topp-${{ github.run_number }}"

- name: Package
shell: bash
run: |
ctest --output-on-failure -V -S $GITHUB_WORKSPACE/OpenMS/tools/ci/cipackage.cmake
env:
SOURCE_DIRECTORY: "${{ github.workspace }}/OpenMS"
PACKAGE_TYPE: zip
SEARCH_ENGINES_DIRECTORY: "${{ github.workspace }}/_thirdparty"
CI_PROVIDER: "GitHub-Actions"
CPACK_PACKAGE_FILE_NAME: "openms-package"

- name: Upload package as artifact
uses: actions/upload-artifact@v4
with:
name: openms-package
path: ${{ github.workspace }}/OpenMS/bld/*.zip
# OpenMS TOPP tools, DLLs and share/ from the official Windows installer.
# See docs/openms-windows-workflow.md for the inputs, including `mode: source`
# for building a branch or fork. App repositories call the same workflow as
# OpenMS/streamlit-template/.github/workflows/openms-windows.yml@<ref>.
build-openms:
needs: config
uses: ./.github/workflows/openms-windows.yml
with:
openms-version: "3.5.0"
mode: installer
topp-tools: ${{ needs.config.outputs.topp-tools }}
artifact-name: openms-package

build-executable:
runs-on: windows-2022
Expand Down
Loading
Loading