Skip to content
Draft
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
62 changes: 62 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Bug report
description: Report a reproducible OpenHCS failure
title: "[Bug]: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
Thanks for helping improve OpenHCS. Do not include patient data, credentials, private plate paths, or proprietary images.
- type: input
id: version
attributes:
label: OpenHCS version
description: Copy the version from About, `python -m openhcs --version`, or package metadata.
validations:
required: true
- type: dropdown
id: install
attributes:
label: Installation route
options:
- Windows installer
- macOS installer
- PyPI
- Source checkout
- Other
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
description: Operating system, Python version if applicable, CPU/GPU, viewer, and MCP client/surface if involved.
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Minimal reproduction
description: Numbered steps, with a synthetic or redacted example when data is involved.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected and actual behavior
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs or screenshots
description: Paste the smallest relevant excerpt and redact sensitive paths or data.
render: shell
- type: checkboxes
id: sensitive
attributes:
label: Data safety
options:
- label: I removed credentials, patient data, private paths, and proprietary image content.
required: true
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: true
contact_links:
- name: Security report
url: mailto:tristan.simas@mail.mcgill.ca
about: Report vulnerabilities privately rather than opening an issue.
- name: Documentation
url: https://openhcs.readthedocs.io/
about: Check installation, architecture, and MCP client guidance.
16 changes: 16 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## What changed

Describe the user-visible outcome and the declaration or typed owner changed.

## Evidence

- [ ] Added or updated a focused regression
- [ ] Ran the relevant local tests
- [ ] Preserved declaration ownership; no mirrored registry or metadata source
- [ ] Documented platform, GPU, viewer, or installer journeys not run locally

Commands and results:

```text

```
11 changes: 7 additions & 4 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,8 @@ jobs:
run: git config --global core.longpaths true

- uses: actions/checkout@v4
with:
submodules: ${{ env.OPENHCS_CI_DEP_SOURCE == 'submodules' && 'recursive' || 'false' }}

- name: Set up Python 3.12
uses: actions/setup-python@v5
Expand All @@ -557,6 +559,9 @@ jobs:
python -m pip install build packaging pytest
python -m pytest -q -c tests/installer/pytest.ini tests/installer

- name: Build installer source wheelhouse
run: python -m scripts.build_installer_source_wheelhouse --output dist --dependency-source "${{ env.OPENHCS_CI_DEP_SOURCE }}"

- name: Parse Windows PowerShell installer sources
if: matrix.platform == 'windows'
shell: pwsh
Expand All @@ -574,8 +579,7 @@ jobs:
shell: pwsh
timeout-minutes: 30
run: |
python -m build --wheel
$releaseVersion = python -c "from pathlib import Path; from packaging.utils import parse_wheel_filename; print(parse_wheel_filename(next(Path('dist').glob('*.whl')).name)[1])"
$releaseVersion = python -c "from pathlib import Path; from packaging.utils import parse_wheel_filename; versions=[parse_wheel_filename(path.name)[1] for path in Path('dist').glob('*.whl') if str(parse_wheel_filename(path.name)[0])=='openhcs']; assert len(versions)==1, versions; print(versions[0])"
$releaseVersion = $releaseVersion.Trim()
$stage = Join-Path $env:RUNNER_TEMP "OpenHCS-Windows-Smoke"
$installRoot = Join-Path $env:RUNNER_TEMP "OpenHCS Installed"
Expand Down Expand Up @@ -828,8 +832,7 @@ jobs:
- name: Execute and verify macOS installer
if: matrix.platform == 'macos'
run: |
python -m build --wheel
release_version=$(python -c "from pathlib import Path; from packaging.utils import parse_wheel_filename; print(parse_wheel_filename(next(Path('dist').glob('*.whl')).name)[1])")
release_version=$(python -c "from pathlib import Path; from packaging.utils import parse_wheel_filename; versions=[parse_wheel_filename(path.name)[1] for path in Path('dist').glob('*.whl') if str(parse_wheel_filename(path.name)[0])=='openhcs']; assert len(versions)==1, versions; print(versions[0])")
staged_contract="$RUNNER_TEMP/installer_contract.json"
installer_app="$RUNNER_TEMP/OpenHCS Release Installer.app"
smoke_home="$RUNNER_TEMP/openhcs-installer-home"
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,10 @@ benchmark/results/napari_streaming_validator/
/*.md
!/README.md
!/CHANGELOG.md
!/CITATION.cff
!/CODE_OF_CONDUCT.md
!/CONTRIBUTING.md
!/SECURITY.md

# Chunkhound
.chunkhound/
Expand Down
104 changes: 104 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- Removed the dataset-specific BBBC021 and BBBC038 microscope choices. BBBC
datasets now use their declared source bindings, while benchmark dataset IDs
remain available as provenance.
- Renamed Napari component placement from ``slice`` to ``layer`` so display
configuration now distinguishes separate viewer layers from genuine image
slices; Fiji slice placement is unchanged.

### Added

#### Auto-Add Output Plate Feature
Expand Down Expand Up @@ -41,6 +50,91 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added `requests>=2.31.0` dependency for HTTP communication
- Comprehensive test suite for LLM service and chat panel

## [0.7.11] - 2026-08-01

### Fixed

- Windows multiprocessing now preserves the installed interpreter used to
launch OpenHCS instead of resolving to an unrelated Python executable.
- Desktop monitoring presents the canonical brand and exposes its typed
settings without clipped information text.

## [0.7.10] - 2026-08-01

### Fixed

- Execution progress registration now routes through the control authority so
UI and agent projections observe the same lifecycle.

## [0.7.9] - 2026-08-01

### Changed

- Configuration layouts now reflow responsively while preserving readable
field and help surfaces.

## [0.7.8] - 2026-07-31

### Fixed

- Release builds resolve versions for independently published dependencies
from their authoritative package declarations.

## [0.7.7] - 2026-07-31

### Changed

- Native desktop updates and their recovery/presentation lifecycle were
hardened across supported platforms.

## [0.7.6] - 2026-07-31

### Fixed

- Dock widgets correctly return to the managed workspace and branding refresh
no longer disturbs the native layout.

## [0.7.5] - 2026-07-31

### Changed

- Desktop startup, docked workspace presentation, and CI runner path handling
were polished after the initial gallery release.

## [0.7.4] - 2026-07-31

### Added

- A verified workflow media gallery and capture tooling that rejects fabricated
UI state.
- Unit/core CI gates, typed viewer controls, agent-visible viewer authority,
UI recovery receipts, and hardened bridge endpoint identity.

### Changed

- The main workspace uses native dock and control theming, preserves geometry,
and suppresses consoles for background GUI processes.
- ObjectState 1.1.1 provides transactional typed configuration and edit-history
recovery.

## [0.7.3] - 2026-07-30

### Fixed

- The official logo family is used consistently across release and desktop
surfaces.

## [0.7.2] - 2026-07-30

### Added

- Canonical brand assets for the GUI, launcher, installer, website, and package.

### Changed

- Windows GUI launchers suppress the console and the public site describes the
current beta without stale patch-level launch claims.

## [0.7.1] - 2026-07-30

### Added
Expand Down Expand Up @@ -221,4 +315,14 @@ See git history for changes in versions 0.3.14 and earlier.

[0.4.0]: https://github.com/trissim/openhcs/compare/v0.3.15...v0.4.0
[0.3.15]: https://github.com/trissim/openhcs/releases/tag/v0.3.15
[0.7.11]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.10...v0.7.11
[0.7.10]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.9...v0.7.10
[0.7.9]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.8...v0.7.9
[0.7.8]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.7...v0.7.8
[0.7.7]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.6...v0.7.7
[0.7.6]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.5...v0.7.6
[0.7.5]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.4...v0.7.5
[0.7.4]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.3...v0.7.4
[0.7.3]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.2...v0.7.3
[0.7.2]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.7.1...v0.7.2
[0.7.0]: https://github.com/OpenHCSDev/OpenHCS/compare/v0.6.17...v0.7.0
17 changes: 17 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
cff-version: 1.2.0
message: "If you use OpenHCS, cite the exact release and archive identifier used in your analysis."
title: "OpenHCS: typed high-content microscopy workflows"
type: software
authors:
- family-names: Simas
given-names: Tristan
email: tristan.simas@mail.mcgill.ca
repository-code: "https://github.com/OpenHCSDev/OpenHCS"
url: "https://openhcs.readthedocs.io/"
license: MIT
keywords:
- high-content screening
- bioimage analysis
- microscopy
- image processing
- Model Context Protocol
23 changes: 23 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Code of Conduct

OpenHCS is committed to a welcoming, harassment-free community for scientists,
software contributors, and users of every background and level of experience.

Be respectful and specific. Critique ideas and evidence rather than people;
assume good faith while accepting correction; protect private research data;
and make space for people who are new to bioimage analysis or open-source
development. Harassment, intimidation, discriminatory language, sexualized
attention, doxxing, and sustained disruption are not acceptable.

Maintainers may edit or remove contributions and temporarily or permanently
restrict participation when conduct is unsafe or persistently disruptive.
Enforcement decisions should be proportionate, documented privately, and avoid
unnecessary disclosure of the reporter's identity.

Report conduct concerns privately to
[tristan.simas@mail.mcgill.ca](mailto:tristan.simas@mail.mcgill.ca). Reports
will be reviewed promptly and handled as confidentially as practical. This
policy applies in project repositories, documentation, community forums, and
project-related private communications.

This policy is informed by the Contributor Covenant, version 2.1.
69 changes: 69 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Contributing to OpenHCS

OpenHCS welcomes reproducible bug reports, microscope fixtures, processing
functions, documentation, and focused code changes.

## Report an issue

Search the issue tracker first, then include the OpenHCS version, installation
route, operating system, Python version, minimal steps, expected behavior, and
relevant logs. For microscopy failures, describe the instrument, axes, naming
pattern, and expected output without uploading sensitive image data.

Security vulnerabilities should be reported privately as described in
[SECURITY.md](SECURITY.md).

## Development checkout

OpenHCS uses source submodules for its independently published libraries:

```bash
git clone --depth 1 --recurse-submodules --shallow-submodules \
https://github.com/OpenHCSDev/OpenHCS.git
cd OpenHCS
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e "external/python-introspect"
python -m pip install -e "external/metaclass-registry"
python -m pip install -e "external/ObjectState"
python -m pip install -e "external/arraybridge"
python -m pip install -e "external/pycodify"
python -m pip install -e "external/PolyStore"
python -m pip install -e "external/pyqt-reactive"
python -m pip install -e "external/zmqruntime"
python -m pip install -e ".[dev,dev-gui,gui,mcp]"
```

See `docs/development_setup.md` for optional GPU, viewer, Bio-Formats, OMERO,
and CellProfiler compatibility dependencies.

## Architecture expectations

Read `docs/source/architecture/quick_start.rst`, then
`system_overview.rst`, `nominal_ownership.rst`, and
`abstraction_lattices.rst` before a structural change.

- Change the declaration or typed owner of a behavior.
- Derive schemas, UI projections, registries, and runtime plans from that owner.
- Do not add mirrored metadata tables, parallel kind registries, sidecars, or
compatibility shims when the owning contract can express the rule.
- Keep compilation deterministic. Workers consume frozen compiled plans rather
than reinterpreting mutable authoring objects.
- Put reusable behavior in the library that owns it; update the OpenHCS
submodule pointer only after that library change is independently tested.

## Tests and pull requests

Run the narrowest relevant tests while developing, then the CPU unit gate:

```bash
OPENHCS_CPU_ONLY=1 python -m pytest tests/unit
python -m ruff check openhcs tests
```

GUI tests can use `QT_QPA_PLATFORM=offscreen`. Add a regression that fails for
the reported behavior and exercises its public or nominal boundary. Keep pull
requests focused, explain the evidence boundary, and note any platform or GPU
journey you could not run locally. All contributions must follow
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
Loading
Loading