linux observer

release: add operator-driven PyPI release infrastructure master

Adds scripts/release.sh (with --test/--help and a RELEASE_DRY_RUN env switch), make release/release-test wrappers, and a pure-shell CHANGELOG block extractor with pytest fixtures. The release flow builds an sdist + py3-none-any wheel via uv build, runs twine check, uploads to PyPI (or TestPyPI), tags the commit, pushes the tag, and creates a matching GitHub Release with both artifacts and the CHANGELOG block as release notes. Refuses dirty trees and missing tokens cleanly; post-twine failures surface PyPI-immutable recovery hints. Bootstraps CHANGELOG.md with the 0.1.0 entry describing the current state of the package. Pins build-system.requires to hatchling>=1.18 for PEP 625 filename normalization. Adds a "Releasing" section to AGENTS.md (CLAUDE.md is a symlink and inherits the change). No CI/workflow files — releases stay operator-driven. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>