Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,15 @@ deep `verify_install` suite, and URL hygiene all live in PyAutoHeart now;
`autohands verify_install` / `autohands url_check` / `autohands watch|status|
tick|fix` are thin shims that delegate to `pyauto-heart`. Build keeps only the
executor primitives: the build/notebook pipeline (`pre_build`, `generate*`,
`run_all` / `run*`), the navigator catalogue (the `navigator.py` /
`check_navigator.py` / `regenerate_navigator.py` modules — workflow-invoked,
not CLI verbs), tagging + release (`tag_and_merge`, `bump_colab_urls`,
`release.yml`), the release-notes and Slack tooling
(`generate_release_notes`, `slack_release_notes`), the release board
(`board`, published by `release_board.yml`), assistant seeding
(`clone_seed`), and `repro_command`. `bin/autohands help` is the registry of
what is a CLI verb; see `docs/internals.md` for the pipeline detail.
`run_all` / `run*`), the navigator catalogue and the workspace guards, tagging +
release (`tag_and_merge`, `bump_colab_urls`, `release.yml`), the release-notes
and Slack tooling (`generate_release_notes`, `slack_release_notes`), the release
board (`board`, published by `release_board.yml`), assistant seeding
(`clone_seed`), and `repro_command`. `bin/autohands help` is the **complete**
registry of `autohands/` — every module there is a CLI verb or an
`INTERNAL_MODULES` entry, enforced by `tests/test_autohands_registry.py`, so
read `help` rather than listing verbs here. See `docs/internals.md` for the
pipeline detail.

See [`docs/internals.md`](docs/internals.md) for the build pipeline, workspace
folder structure, config files, and `release.yml` details. Read it when
Expand Down
36 changes: 0 additions & 36 deletions autohands/generate_release_notes.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,39 +14,9 @@
import subprocess
import sys
from argparse import ArgumentParser
from datetime import date
from pathlib import Path


# Time-boxed announcement banner prepended to generated release notes.
# The banner is included only while today <= EXPIRY, then drops off
# automatically — no follow-up edit needed. Set EXPIRY to None (or move the
# date into the past) to disable. `repos` limits which repos show it; None
# means all repos.
ANNOUNCEMENT = {
"expiry": date(2026, 7, 24),
"repos": {"PyAutoLabs/PyAutoLens"},
"markdown": (
"> 📣 **Major Milestones Announcement** — PyAutoLens now ships an AI assistant "
"(conversational + agentic), full JAX GPU support, and agentic-AI development via "
"PyAutoScientist. "
"[Read the announcement →](https://github.com/PyAutoLabs/PyAutoLens/discussions/603)"
),
}


def announcement_banner(repo, today=None):
"""Return the announcement markdown for `repo`, or "" if none applies today."""
today = today or date.today()
expiry = ANNOUNCEMENT.get("expiry")
if not expiry or today > expiry:
return ""
repos = ANNOUNCEMENT.get("repos")
if repos and repo not in repos:
return ""
return ANNOUNCEMENT.get("markdown", "")


# Dependency chain: downstream repos include upstream changes
UPSTREAM_DEPS = {
"PyAutoLabs/PyAutoFit": [],
Expand Down Expand Up @@ -197,12 +167,6 @@ def generate_notes(repo, version, prs, upstream_prs_by_repo):
name = REPO_NAMES.get(repo, repo.split("/")[-1])
lines = [f"# {name} v{version}", ""]

# Time-boxed announcement banner (self-expiring; see ANNOUNCEMENT above).
banner = announcement_banner(repo)
if banner:
lines.append(banner)
lines.append("")

# Classify own PRs
categories = {"breaking": [], "feature": [], "fix": [], "internal": []}
for pr in prs:
Expand Down
Loading
Loading