Published March 27, 2026 | Version 1.0.0
Software Open

hed-standard/hed-python: Release 1.0.0 March 27, 2026

  • 1. UCSD, @sccn
  • 2. Dartmouth College, @dandi, @Debian, @DataLad, @neurodebian, @PyMVPA, @fail2ban
  • 3. CatalystNeuro

Description

This is a major release of hedtools with breaking changes. It removes several subsystems that have been moved to separate repositories, completes library schema extras support across all schema formats, and cleans up the public API in preparation for long-term stability.

⚠️ Breaking changes

Removed subsystems (now in separate packages)

| Removed from hedtools | New home | |---|---| | hed/tools/remodeling/ (dispatcher, operations, backup manager) and CLI entry points run_remodel, run_remodel_backup, run_remodel_restore | table-remodeler | | hed/tools/visualization/ (TagWordCloud, word_cloud_util) and wordcloud dependency | hed-vis | | hed/tools/analysis/sequence_map.py | hed-vis | | ontology_util.py and create_ontology.py script | hed-ontology |

HED ID management is now handled by hed/schema/schema_io/hed_id_util.py.

API changes

  • HedLogger removed — use Python's standard logging module instead.
  • check_prerelease parameter removed from load_schema_version(), load_schema(), from_string(), from_dataframes(), and all SchemaLoader subclasses. Prerelease schemas are found automatically when present in the local cache.
  • ErrorReporter.check_warnings() renamed to check_for_warnings() for API consistency.
  • versionner dependency removed — version management is fully handled by setuptools-scm.

Schema enhancements

Library schema extras fully supported across all formats

Extra (non-standard) sections in library schemas, marked with inLibrary, now round-trip correctly through all three schema file formats:

  • XML: inLibrary attribute written and read for all extra node types.
  • JSON/DataFrame: in_library column propagated through all extra section tables.
  • MediaWiki: inLibrary tags serialized and parsed in extra sections.

Comprehensive roundtrip test suites have been added for each format.

Consistent inLibrary / in_library naming

A naming inconsistency between the XML attribute name (inLibrary) and the internal DataFrame column name (in_library) has been resolved. All internal representations now use in_library; serialization to XML uses inLibrary as required by the schema specification.

Prerelease schemas found automatically

Prerelease schemas in the local cache are now loaded without any additional flags. A prerelease library schema with withStandard set may also load against its matching prerelease standard partner.

Auto-download missing schemas from GitHub

get_hed_version_path() now automatically fetches a schema from GitHub when the requested version is absent from the local cache.

Default schema version resolved dynamically

The default schema version is derived at runtime from the highest released version in the cache rather than being hardcoded. New schema releases no longer require a code change.

Other schema fixes

  • CRLF/LF differences in schema files are normalized on read and write, preventing spurious diffs on Windows.
  • Writing a schema to DataFrame format no longer fails when a section (e.g., unit modifiers) is empty.
  • Schemas stored in older TSV formats that predate the current DataFrame layout now load correctly.
  • Columns prefixed with omn: that were written but never populated have been removed from the TSV/DataFrame schema format.
  • Schema-level errors and warnings are now distinguished more precisely; check_for_warnings() returns only genuine warning-level issues.
  • Spec-test compliance checking now validates only the latest released version of each schema.

Bug fixes

  • Fixed a race condition in schema-version auto-detection when multiple processes access the cache simultaneously.
  • Fixed duplicate HED ID detection — check_duplicate_hed_ids() now correctly tracks already-seen IDs across all schema sections.
  • Verified all built-in error messages are unique (no two distinct error codes share the same message text).
  • Normalized error message punctuation: sentence-ending periods are followed by one space.
  • Fixed extension capitalization check in schema attribute validation.
  • Removed stray debug print statements from the schema loading path.

CI/CD and developer tooling

  • Migrated to uv — all CI workflows use astral-sh/setup-uv for environment creation and package installation; pip-based setup and the black formatter have been removed.
  • Updated GitHub Actions: actions/checkout v4 → v6; astral-sh/setup-uv v5 → v7; added cache-dependency-glob for correct cache invalidation.
  • Replaced codespell with typos — spell-check configuration is consolidated in pyproject.toml; the separate .codespellrc file has been removed.
  • Added AI code review workflowsclaude_code_review.yaml posts inline review comments; claude_pr_assistant.yaml responds to /review commands in PR comments. Bot-authored PRs are excluded from automated review.
  • Added project context files.github/copilot-instructions.md, CLAUDE.md, and .rules/ are now tracked in the repository.
  • Consolidated tool configurationlychee.toml updated for newer lychee releases; pyproject.toml is the single source of truth for spell-check word lists; submodule directories excluded from ruff linting.

Migration guide

If you use any of the removed subsystems, install the replacement package before upgrading:

# If you used hed/tools/remodeling/:
pip install table-remodeler

# If you used TagWordCloud or sequence_map:
pip install hedvis

Replace ErrorReporter.check_warnings() calls with check_for_warnings(), and remove any check_prerelease=True arguments from schema-loading calls.

Replace any use of HedLogger with Python's standard logging module:

# Before
from hed.errors import HedLogger
logger = HedLogger()

# After
import logging
logger = logging.getLogger(__name__)

Full changelog: CHANGELOG.md

Files

hed-standard/hed-python-1.0.0.zip

Files (2.9 MB)

Name Size Download all
md5:93d1a3b0a2be550881a87942deac1e44
2.9 MB Preview Download

Additional details

Related works