Repository navigation
Release v0.10.0
🚀 TopMark 0.10.0 — Major Pipeline & Machine Output Redesign
This release delivers a major internal and external evolution of TopMark, featuring a complete redesign of the machine-output schema, a reworked pipeline architecture, and substantial CLI behavior changes.
⚠️ BREAKING CHANGES
Machine Output (JSON / NDJSON)
- Completely redesigned schema
- Every record now includes a
kinddiscriminator (config,config_diagnostics,result,summary) - All records carry a top-level
metablock (version, intent, timestamps) - File-level results use a stable envelope (
file,statuses,hints,diagnostic_counts,outcome) - NDJSON is now strictly one record per line, with consistent keys
- Every record now includes a
- ❌ All pre-0.10.0 machine formats are removed
- 🔧 Downstream tools must update parsers
CLI Output & Presentation
- CLI rendering fully rewritten:
- New bucketing semantics aligned with pipeline axes and policy
- Summary footer replaced by a consistent, structured report
- Changed / unchanged / would-change classification now driven by the comparison axis
- Hints grouped, severity-ranked, and verbosity-aware
- Legacy formatting and summary behavior removed
Pipeline Architecture
ProcessingContextsplit into clear responsibilities:pipeline.context.model— orchestration & statepipeline.context.policy— pure policy and feasibilitypipeline.context.status— axis status tracking
- Legacy pipeline modules removed
- Internal imports of old pipeline paths must be updated
CLI Commands
- Deprecated and legacy commands removed:
- Old
topmark header …compatibility paths - Legacy updater / stripper debug modes
- Old
- Removed commands now fail fast with explicit errors
✨ Highlights
- Clean separation of pipeline concerns (context / policy / status)
- Unified, stable machine-readable output for long-term integrations
- Significantly clearer CLI output with accurate bucket and hint logic
- Simplified typing and import model (
collections.abc, RuffUP/TC) - Large set of correctness fixes across scanning, rendering, and writing
➕ Added
- New
pipeline/context/package:model.py,policy.py,status.py
- Centralized machine-output builder (
cli_shared.machine_output) - Structured summary renderer (
topmark.api.view.format_summary) - Linting policy documentation in
CONTRIBUTING.md - GitHub-Flavored Markdown table support via
mdformat-gfm
🔄 Changed
- ProcessingContext
- Policy logic removed from the core context
- Stronger invariants and explicit public interfaces
- Pipeline Steps
- Rewritten to rely on pure policy helpers and explicit axes
- Rendering
- Fully redesigned summary, bucketing, and writer output
- Machine Output
- Predictable envelopes, deterministic NDJSON ordering
- Config dumps and diagnostics included in machine mode
- Tooling
- Dependency ranges tightened
- Requirements regenerated
mdformat-tablesreplaced bymdformat-gfm
➖ Removed
ReasonHint- Legacy updater header paths
- Deprecated CLI commands and pre-0.9 compatibility code
- Legacy summary and bucketing pipeline
🐛 Fixed
- BOM / shebang / newline interactions
- Indentation handling for Markdown, HTML, and XML
- Header bound edge cases (multi-header, malformed, block comments)
- Writer stability in dry-run vs apply
- Accurate “would change” vs “changed” classification under policy constraints
- Improved file type detection for HTML / Markdown block comments
ℹ️ Notes
topmark.api remains public and stable, but all machine-readable output formats and internal pipeline interfaces have changed.
➡️ Integrators consuming JSON or NDJSON must migrate to the new schema and envelopes.
Full Changelog: v0.9.1...v0.10.0