chore: drop expired release-notes banner; complete the autohands registry - #254
Merged
Conversation
Two hygiene leftovers from the 2026-08-19 release-board census (#239). The time-boxed ANNOUNCEMENT banner in generate_release_notes.py expired 2026-07-24, so announcement_banner() had returned "" on every call since. Delete the mechanism rather than document it; the datetime.date import goes with it. The banner markdown also appears as a literal fixture string in test_slack_release_notes.py, which imports nothing from the deleted code — kept as the file's only blockquote -> mrkdwn case, with its comment corrected. `bin/autohands help` claimed to be "the registry of what is a CLI verb", but eleven modules in autohands/ had grown __main__ blocks without ever appearing in it. Nine become real verbs (generate_markdown, regenerate_navigator, the four workspace guards, slack_release_notes, tombstone, clone_seed), each with help text stating its actual input contract — they differ: cwd, --root, or a positional path. The rest are declared in a new INTERNAL_MODULES array with a one-line reason each, and printed by `autohands help`, so the registry describes the whole package rather than a subset. tests/test_autohands_registry.py makes that an enforced invariant: every executable module is a verb or allowlisted, the allowlist has no ghosts, every verb carries its SHORT_DESC + cmd_* + help_* trio, and the two lists are disjoint. Each assertion was negative-tested to confirm it fires. Refs #249 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Jammy2211
added a commit
that referenced
this pull request
Aug 23, 2026
…ntexts (#255) `autohands check_dataset_allowlist`, newly registered as a CLI verb in #254, crashed with ModuleNotFoundError when run from a workspace root. The two merges combined to expose it: #253 added `from autohands.env_config import ...` to this module, and #254 made it reachable from the dispatcher. `bin/autohands` (`_python_in_autohands`) runs these tools as scripts with `autohands/` ITSELF on PYTHONPATH, so siblings are top-level modules — the flat `from env_config import ...` idiom the other guards here already use. As a library import (pytest, or anything importing `autohands.check_dataset_allowlist`) the package's PARENT is on the path and the flat name does not resolve. Supporting only one form breaks the other, so `_env_config()` tries flat first and falls back to package-qualified. Also fixes a quieter instance of the same bug. `_releasing_tokens` wrapped its import in `except Exception` and returned the hardcoded `{full_datasets, real_output}` fallback, so under the CLI it swallowed the ImportError and never consulted ENV_DECLARATION_TOKENS at all — a silent degradation that still produced a green run, and would have stopped honouring any future releasing token without failing. The fallback is now a genuine last resort. Verified in both contexts: the CLI verb runs clean from a workspace root and still reports the originating defect (exact file, line, resolved path) when that workspace is reverted to its pre-fix state. Suite 375 passed; firewall gate OK. Claude-Session: https://claude.ai/code/session_01F11sMzmaVWfU6NCz1PKVVb Co-authored-by: Jammy2211 <JNightingale2211@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #249. Both in-scope bullets from the 2026-08-19 release-board census (#239).
The work was committed on 2026-08-20 and has been sitting unshipped since; rebased today onto
90f108fand opened.1. Expired ANNOUNCEMENT banner → deleted
autohands/generate_release_notes.pycarried a banner mechanism that expired 2026-07-24. It has been dead code for a month. Deleted rather than documented — delete the trap.2.
bin/autohands helpis now the complete registrySeven modules existed but were unreachable from the dispatcher:
navigator,check_navigator,regenerate_navigator,generate_markdown,validate_env_profiles,check_search_memory,check_dataset_allowlist. #239 fixed the prose in AGENTS.md to call them "workflow-invoked"; this fixes the actual gap.Each module was decided per-module — CLI verb or deliberately internal — and the outcome is enforced by tests rather than asserted in prose (
tests/test_autohands_registry.py):INTERNAL_MODULESentry with a reason;So the registry cannot silently drift back out of date, which is how it got here. AGENTS.md now points at
bin/autohands helpinstead of re-listing verbs — one source of truth.Timely side effect:
check_dataset_allowlistbecomes a directly invokable verb, so the capped-deletion guard added in #253 is runnable locally rather than only reachable throughpre_build.Out of scope, deliberately
The census's third bullet — ~30 stale remote branches including
origin/masterandorigin/release— is not here. It belongs in a separate/repo_cleanupsweep so a destructive branch delete never rides a code diff.Verification
bin/autohands helprenders the full grouped registry. Suite: 374 passed (main's 370 plus this branch's 4 new registry tests). Tenant-firewall gate OK. Rebase preserved the branch diff byte-for-byte.🤖 Generated with Claude Code
https://claude.ai/code/session_01F11sMzmaVWfU6NCz1PKVVb