Skip to content

Releases: HYLi360/Operon

Operon 0.9.0

Operon 0.9.0 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 25 Sep 16:14
v0.9.0
ee1fb19

Highlights

  • A unified per-user configuration layer. operon optionally reads an XDG
    config file ($XDG_CONFIG_HOME/operon/config.yml, i.e.
    ~/.config/operon/config.yml), resolves the audit identity and the NCBI
    contact through one documented chain, and keeps secrets out of that file
    entirely: secret-tool → systemd-creds --user → the macOS Keychain
    (/usr/bin/security). Manage it with the new operon config command group —
    path, show, get, set, unset, check, init, plus
    secret list/get/set/clear.
  • The TUI closes the self-service loop. Registry editing (add,
    add-accession, next-id), table import, taxonomy snapshot import and
    reference-set compilation, coverage-profile editing, NCBI Datasets import,
    and — on the Files screen — standardize, import-qc and the one-source
    run-pipeline are available as preview-first, audited dialogs that call the
    same core functions as the CLI and write the same changes /
    workflow_runs provenance.
  • Byte-stable outputs across interpreters and backends. TSV cell quoting is
    decided in Operon instead of delegated to csv (ODR-0044), and cells a
    spreadsheet would execute are escaped (ODR-0040) — in both alignment QC
    backends and every write_tsv consumer, with provenance hashes computed over
    the escaped bytes.

New features

Configuration and secrets

  • operon/config.py: UserConfig / user_config() — XDG location, lazy load
    (importing the module never touches the filesystem), 0600 file / 0700
    directory modes, defaults back-filled, unknown keys preserved. Effective key
    set: schema_version, identity.actor, ncbi.email, ui.splash.
  • operon/secrets.py: a zero-dependency secret-backend chain with an
    actionable error when no backend is available (pointing at --api-key /
    NCBI_API_KEY). Secret resolution order: --api-key > NCBI_API_KEY >
    stored secret; the file-backed stores are kept at 0600 in a 0700 directory,
    and config show never prints secret material.
  • Precedence is explicit and documented: CLI > environment > project
    configuration > user configuration > defaults
    . Existing environment
    variables keep working and take precedence over the file; nothing was
    deprecated.
  • resolve_actor() now backs every audit writer (CLI, TUI, import wizard,
    adapters); resolve_ncbi_email() and resolve_splash() follow the same
    shape with their own --effective source reporting.
  • tests/unit/test_env_audit.py guards the environment reads inside the
    package (operon/**/*.py), so ad-hoc os.environ lookups cannot creep back
    in.

TUI

  • Entities: add, add-accession and next-id dialogs.
  • Home: table-import dialog (template + preview-gated import) and the NCBI
    Datasets import dialog (mandatory dry-run preflight; Cancel stops a
    resume-able run).
  • Coverage: taxonomy snapshot import and reference-set compilation
    (Import taxonomy…, Compile reference set…).
  • Config: the taxonomy_coverage profile editor joins the QC and
    sequence-classification editors, with the same version bump, snapshot and
    rollback machinery.
  • Files: standardize (link-kind preview), import-qc (write-free plan
    preview through plan_qc_import), and run-pipeline (entity prefill,
    profile selection, forced dry-run preflight, and an explicit opt-in for
    curated decisions in place of --yes).
  • Parity: the M4 scope is fully implemented; remaining gaps are registered
    planned with milestones or cli-only with reasons, enforced by
    tests/unit/test_tui_cli_parity.py.

Internals

  • operon/pipeline.py: the four-stage ingest → standardize → QC → evaluate
    runner shared by the CLI and the TUI (CLI output stays byte-identical).
  • operon/qc/imports.py: the shared import-qc core, with plan_qc_import as
    its write-free preview.
  • Helper splits across taxonomy, tools, entity_view, sequence_tools,
    the NCBI adapter and environment; broad exception handlers narrowed or
    documented; the wizard actor and every credential now resolve through the
    user layer.

Fixed defects

See defects.yml.

Compatibility

  • No storage changes: database schema stays 2.11, metadata schema stays
    1.4; existing projects open unchanged.
  • Python 3.10–3.15, verified in CI on Linux and macOS for every version,
    plus a strict Sphinx build of both documentation trees.
  • No new runtime dependencies. The configuration and secret layers use the
    standard library and system tools only.
  • Environment variables keep working and keep precedence over the user
    configuration file; no variable was deprecated.

Full Changelog: v0.8.5...v0.9.0

v0.8.5

v0.8.5 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 21 Sep 11:51
v0.8.5
f50ab6a

Fixed:

  • ODR-0029: Run detail tests treat an empty worker set as completed screen loading
  • ODR-0030: Old editor rows falsely satisfy readiness during a deferred form replacement
  • ODR-0031: Detail panes apply a worker result that no longer matches the selection
  • ODR-0032: A dropped initial panel render leaves the app on the splash screen
  • ODR-0033: Environment-capture tests assert a raw path that capture redacts under $HOME
  • ODR-0034: The classification editor's nesting limit is enforced by branches no caller can reach
  • ODR-0035: The classification editor raises while a mode change replaces its body
  • ODR-0036: A composition that lands while a nested condition row is being removed reads a row with no inputs
  • ODR-0037: A shutdown test reads the grandchild pid file before the shell has written the pid
  • ODR-0038: A Select's own on_mount runs unguarded next to the guarded override, so its mount failure reaches the app
  • ODR-0039: An exhausted Select mount retry leaves options_ready False for good, and the form gate then waits forever

And switch license from AGPL to BSD-2-clause.

Full Changelog: v0.8.4...v0.8.5

v0.8.4 (replace v0.8.3)

Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 20 Sep 03:06
v0.8.4
ff892e9

0.8.3 was been released after a failed CI. We have been hardened the release workflow to avoid release without CI completed or failed.

Fixed in 0.8.4:

ODR-0027: Two config-screen tests read the UI a message-loop turn too early (introduced in 0.8.3)

Full Changelog: v0.8.3...v0.8.4

v0.8.3

v0.8.3 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 19 Sep 10:13
v0.8.3
4a116ce

Full Changelog: v0.8.2...v0.8.3

v0.8.2

v0.8.2 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 16 Sep 12:25
v0.8.2
fd27410

Full Changelog: v0.8.0...v0.8.2

v0.8.0

v0.8.0 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 12 Sep 15:35
v0.8.0
daef39d

Full Changelog: v0.7.2...v0.8.0

v0.7.2

v0.7.2 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 09 Sep 13:11
v0.7.2
b3c866c

Major Changes:

  • Since there is no longer need for closed-source or Windows compatibility, we have removed cx_Freeze from the codebase.

Fixed Bugs:

  • 5a7e800:Several popup interactive problems have been fixed, such as double dismiss can result into ScreenStackError, and OK button of ErrorDialog has no on_button_pressed processor, make that can only closed by Esc button.

Full Changelog: v0.7.1...v0.7.2

v0.7.0

v0.7.0 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 05 Sep 13:15
v0.7.0
8a7e3b2

Full Changelog: v0.6.2...v0.7.0

v0.6.2

v0.6.2 Pre-release
Pre-release

Choose a tag to compare

@HYLi360 HYLi360 released this 04 Sep 12:49
v0.6.2
787f0fc

Full Changelog: v0.2.2...v0.6.2