Skip to content

Release v0.10.0

Choose a tag to compare

@github-actions github-actions released this 20 Nov 01:41
· 901 commits to main since this release

🚀 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.

⚠️ This is a breaking release. Downstream consumers of JSON/NDJSON output or internal pipeline APIs must update.


⚠️ BREAKING CHANGES

Machine Output (JSON / NDJSON)

  • Completely redesigned schema
    • Every record now includes a kind discriminator (config, config_diagnostics, result, summary)
    • All records carry a top-level meta block (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
  • ❌ 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

  • ProcessingContext split into clear responsibilities:
    • pipeline.context.model — orchestration & state
    • pipeline.context.policy — pure policy and feasibility
    • pipeline.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
  • 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, Ruff UP / 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-tables replaced by mdformat-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