Skip to content

Switch to an aggregated Changes system with much lower collision rates [] - #342

Open
wchilders-nvidia wants to merge 1 commit into
mainfrom
changes-entries
Open

wchilders-nvidia wants to merge 1 commit into
mainfrom
changes-entries

Conversation

@wchilders-nvidia

@wchilders-nvidia wchilders-nvidia commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

This PR changes procedures so that contributors stop editing Changes files directly. Each change adds a pending_changes/*.chng.txt entry instead, and a nightly job moves the entries into the Changes file with the date added. This removes the merge conflicts at the top of src/Changes (and makes it easier to work in forks which now just pull the updated Changes entry without conflict against their work).

Suggested order

  1. dev_tools/pylibs/edgchanges/ is the entry format: the parser, its errors, tag wrapping and the date. Everything else builds on it.
  2. dev_tools/bin/edg-check-file-changes adds rules for .chng.txt files: a format_errors key, a spell check against the target Changes file plus //allowed_words:, trailing whitespace not counted toward the line limit, and get-comments required only for code files.
  3. dev_tools/bin/edg-collect-changes takes a Changes file and its pending_changes/ directory. insert_entries is the part to read closely: how it finds the newest version line, opens a new section when that version is already released, and replaces No changes..
  4. .git-hooks/pre-push.py rejects an entry with any problem outright, with no "Okay?" prompt, so a push can't fail CI later. It also prints the //allowed_words: hint.
  5. .github/workflows/: changes-fragments.yml is the PR check and collect-changes.yml is the nightly job. paths-ignore was added to three heavy workflows so the bot's changelog-only commits don't trigger them.
  6. The rest: docs (skills, AGENTS.md, CONTRIBUTING.md), the pending_changes/.gitignore placeholders, a win-bin wrapper, typecheck registration, and the tests in dev_tools/tests/.

Decisions worth a second look

  • Entries only accept GH #N tags. EDGcpfe/N and an empty [] are rejected.
  • Words the target Changes file already uses pass the spell check. Other words need //allowed_words:.
  • The nightly job skips malformed entries but still collects the good ones, then marks the run as failed.
  • When the newest version is already released, the new section takes its version from --version-from src/Changes.
  • The CHANGES_DIRS list appears in both workflows and has to be kept the same by hand.
  • The schedule uses the cron timezone: key, which is new. If GitHub rejects it, the fallback is 0 4,5 * * * in UTC, plus a step that only continues when it's 00:00 in Eastern time.

What's verified and what isn't

  • Verified:
    • 27 unit tests pass on Python 3.13 and 3.6. In the 3.6 container, the tests that need aspell are skipped.
    • mypy strict passes on the new code.
    • --check and collect runs worked on a scratch tree, including in the dev-env container.
  • Not yet run:
    • Neither workflow has run on GitHub.

To try it locally: add an entry under src/pending_changes/, then run edg-exec -- edg-collect-changes --check src/Changes src/pending_changes. Use --dry-run instead of --check to preview where the entry would go.

@edgcpp-bot

Copy link
Copy Markdown
Collaborator

AcknowlEDG review results updated for 1966aabfe02f:

CI success.

Steps:

1. Draft the entry as UTF-8 prose in
`<dir>/pending_changes/<name>.chng.txt` (the `pending_changes/` beside

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we get rid of the .chng? It's already in a pending_changes directory.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants