Skip to content

Agent docs: treat the data as a historical record - #515

Merged
JesperDramsch merged 1 commit into
mainfrom
ai-agent/amazing-cannon-nhuk0a
Oct 21, 2026
Merged

JesperDramsch merged 1 commit into
mainfrom
ai-agent/amazing-cannon-nhuk0a

Conversation

@JesperDramsch

Copy link
Copy Markdown
Owner

A desk run on #514 read "fold the three PyCon Germany series names" as renaming every edition to one name. It also replaced alt_name on 2025 to 2027, and dropped a CfP date when it moved a Python BarCamp Karlsruhe entry from 2024 to 2025. Both were reverted by hand. This PR adds the missing rules to the agent guidance.

AGENTS.md

  • "Names": each edition keeps the conference it ran under. alt_name can name the series an edition belongs to (PyMunich 2016 has PyCon Germany). Agents never change an existing conference and never replace or clear an existing alt_name.
  • "Complete data": a new paragraph saying the data is a historical record. Filling an empty field is always fine. Replacing a filled-in value needs a primary source showing it is wrong for that edition, with the replaced value as old. No entry is deleted, and no value is dropped when data moves between editions.

critic: three new checks in A. A change to an existing conference, or one that replaces or clears alt_name, fails. A replaced value must be wrong for its own edition. A move to another year must lose no value.

enricher, new-year-checker: one line each that points to the AGENTS.md rules.

desk.md

  • Step 5: a request that could mean renaming or merging series ("fold", "merge", "canonicalise") gets a Desk: reply asking how the maintainer wants it, and no worklist item.
  • Step 6.3: a change to an existing entry's conference or alt_name is held back with a "rename deferred" note, the same way variations that would rename entries are held back. The ledger (step 8, "Ledger") counts a held-back rename as a deferred outcome.

No code changes. tests/test_desk_guard.py and tests/test_desk_pr_body.py pass (1140 tests).


Generated by Claude Code

Editions keep the name they ran under, alt_name can tie an edition to
its series, and agents never change an existing conference or replace
an alt_name. Replacing a filled-in value needs a source showing it is
wrong for that edition, and moving data between editions drops nothing.
The critic checks all three, the enricher and new-year checker point to
the rules, and the desk holds back renames and asks before acting on
fold or merge requests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ch9H9tKqjgpt3b1EHAweKV
@JesperDramsch
JesperDramsch merged commit 2233359 into main Oct 21, 2026
10 checks passed
@JesperDramsch
JesperDramsch deleted the ai-agent/amazing-cannon-nhuk0a branch October 21, 2026 15:27

Copy link
Copy Markdown
Owner Author

Routine review

1. Request. No linked issue; request from the PR body: add the missing agent-guidance rules after the #514 desk run renamed the PyCon Germany editions, replaced their alt_name, and dropped a CfP when it moved Python BarCamp Karlsruhe 2024 to 2025. Instances: AGENTS.md ("Names", "Complete data"), .claude/skills/critic/SKILL.md, .claude/skills/enricher/SKILL.md, .claude/skills/new-year-checker/SKILL.md, .claude/routines/desk.md (steps 5, 6.3.2, 7, ledger).

2. Checked against. Wed Oct 21 15:36:30 UTC 2026 (date). No external facts in this review. The data and branch facts come from the repository: _data/legacy.yml:1371-1373 and commit 7a9be97 on auto/conference-updates.

3. Needs your decision.

  1. Should the desk ever apply a rename you approve? As written it can't, so the round never closes. desk.md:72 asks you how you want a rename, and says "Their answer comes back through this step". An answer like "rename X to Y" has none of the trigger words, so it becomes an enricher maintainer-request item. The enricher then keeps conference/alt_name "as they are" (enricher/SKILL.md:23). The critic fails the change (critic/SKILL.md:19). Step 6.3.2 leaves it out "accepted or not" and defers it again (desk.md:87), and step 7 sends it back to you (desk.md:114). Before this PR the critic had no rename ban, so a rename you asked for could get through. Deferred variations already had this loop on the base (desk.md 6.3.3). Recommendation: if you do renames by hand, replace "Their answer comes back through this step" with "the maintainer applies it". If the desk should apply them, exempt a maintainer-request item that answers a linked Desk: question from the conference/alt_name ban in all three places.

4. Findings.

Important

  • AGENTS.md:52 and .claude/routines/desk.md:72 block the duplicate removal you asked for in the same 🐍 Conference updates #514 thread. Your comment there (2026-10-21T12:51:55Z) said "Canonicalise PyCon Côte d'Ivoire 2027 drop the ASCII-apostrophe entry". The desk carried it out in 7a9be97 "PyCon Côte d’Ivoire 2027: remove duplicate, titles", which deletes a 13-line entry from _data/conferences.yml, and that commit was kept, not reverted. Under this PR, the same comment runs into two blocks:

    • The word "Canonicalise" makes it a question with no worklist item (desk.md:72).
    • Even answered, "Never delete an entry or drop a value" (AGENTS.md:52) has no exception for a second copy of the same edition.

    The sort does not fold such a pair by itself. merge_duplicates (utils/sort_yaml.py:160-197) keys on the exact conference, and fold_name (utils/tidy_conf/utils.py:59-64) keeps ' and ’ apart. The only other route is a variation that renames the entry, and the new critic/SKILL.md:19 and desk.md:87 block that too. Re-running the importer that created the copy reproduces the case.

    Smallest fix:

    • In AGENTS.md:52, add: "A second entry for the same edition (same series and year) is not history: when the maintainer asks, remove it, and keep its spelling as a titles.yml variation."
    • In desk.md:72, narrow the bullet to renaming or merging series, so a request to drop a duplicate entry stays an item.

Nits: None.

5. Tests. The PR changes documentation only, so it adds no test from the request's invariant. Nothing in the suite checks the new rules (no rename/alt_name/value-loss assertion in tests/test_desk_*.py). Output on the PR head 91afcbe:

  • pytest tests/test_desk_guard.py tests/test_desk_pr_body.py -q (uv, Python 3.11, REVIEW.md pins): 1140 passed in 174.62s (0:02:54)
  • npm ci: exit 0. npm test: Test Suites: 15 passed, 15 total / Tests: 423 passed, 423 total
  • utils/sort_yaml.py --skip_links: exit 0, "Conference data sorting and cleaning completed successfully". git diff --stat -- _data shows archive.yml +30, conferences.yml -30: the sort archiving past editions, not caused by this PR.
  • Ruff not run: no Python changed.

6. Bounds.

  • The PR was merged at 2026-10-21T15:27:20Z, before this review ran. The findings apply to main, commit 2233359.
  • Route: REST for the PR, its diff and 🐍 Conference updates #514. Local clone at refs/pull/515/head; rev-parse matched 91afcbe. The diff was taken against merge-base 33057d7.
  • Read in full: the diff and the changed sections of all five files.
  • Skimmed: the rest of desk.md, the 🐍 Conference updates #514 body and comments, utils/sort_yaml.py merge logic, and the auto/conference-updates log.
  • Not run: the full tests/ suite (no utils/ or tests/ change) and pre-commit.
  • REVIEW.md, CONTRIBUTING.md and AGENTS.md were read from origin/main.
  • Pre-existing: the deferred-variations flow (desk.md 6.3.3 → step 7 → step 5) already had the same unclosed loop as decision 1.

Generated by Claude Code

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.

2 participants