From 8e66d1cf8f5afbc7f5e157fe32dba42f94217a42 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 13 Oct 2026 17:51:46 +0000 Subject: [PATCH] Number limits: refuse, never clamp, exact text-backed numbers; exit code 3 needs the import marker A number typed into a form box is read as its text (a whole number as an exact integer, a decimal one compared with the limits as exact decimal text). Beyond a limit (default or declared) it is refused with the worker's sentence ('L' must be <= 9007199254740991), no run starts, nothing is sent, nothing is put at the limit. The worker hint calls exit code 3 an import failure only when the last output has `cannot import tool module`. Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN --- README.md | 13 +- docs/user-guide.md | 1 + .../qupath/LabConstrictorTools.groovy | 100 +++++----- .../labconstrictor/qupath/LcNumbers.groovy | 127 +++++++++++++ .../labconstrictor/qupath/parts.txt | 1 + tests/gui_test_numbers_body.groovy | 179 ++++++++++++++++++ tests/gui_test_parity_form_body.groovy | 11 +- tests/gui_test_parity_host_body.groovy | 14 +- tests/run_gui_ci.sh | 4 +- 9 files changed, 394 insertions(+), 56 deletions(-) create mode 100644 src/main/resources/org/cellmigrationlab/labconstrictor/qupath/LcNumbers.groovy create mode 100644 tests/gui_test_numbers_body.groovy diff --git a/README.md b/README.md index a137add..9132ca7 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Needs **labconstrictor-tools 0.3.0a1 or newer** in the app's environment (the ru * **Trust checks** on every registry entry (same rules as the Python registry and the Fiji script): the entry names its five text fields; the app name is a plain name; the interpreter lies inside the install prefix (which is not a filesystem root); the entry and its schema file are owned by you (in a shared folder also by root) and not writable by group or others; the schema sits next to the entry; the interpreter, its folder and the prefix are not writable by everybody (a sticky folder like `/tmp` excepted); tool ids and parameter names are plain names, parameter names Python identifiers (a parameter name becomes a file name). An entry that fails is listed under "skipped" with its reason and never started. On Windows the owner and permission checks do not apply. * **Results and run records, and their clean-up** (SPEC_WRONG_SCIENCE section 3). Each run makes a results folder `~/.labconstrictor/results/