Repository navigation
Let the desk add titles.yml variations - #504
Conversation
The first desk run found series that other sources name differently (PyDay Chile Rancagua for PyDay Rancagua) but could only change the three data files, so it left the titles.yml entries to the maintainer. The desk may now add variations to utils/tidy_conf/data/titles.yml, nothing else in it. Subagents propose them in a new `titles` list in their change sets, the critic verifies each against its source and against titles.yml, rejections.yml and the data files, and the desk commits them with the series' data. rejections.yml and the rest of utils/ stay with the maintainer. The sort applies titles.yml to every entry, so a variation can rename an existing entry and set off the duplicate merge. The stray-write check treats such a rename as a reason to drop the variation and defer it to the maintainer, so the desk only lands variations that fold future imports. The tamper check leaves titles.yml out, since step 6.3 now checks it with the data files. The guard needs no code change: it never restricted the desk's own file edits outside .github/, and still blocks subagent writes. Tests pin both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013sKyvme6kQEAzWQFrJnPCe
|
Routine review 1. RequestThe PR body is the request (no linked issue): let the desk add variations to 2. Checked against
3. Needs your decisionNone. The diff covers every instance the body names and nothing else. The two follow-ups the body lists under "Outside this repo" are not changes in this PR. They are 4. FindingsImportant: None. Nits
5. Tests
6. Bounds
Generated by Claude Code |
|
Routine review 1. RequestNo issue is linked, so the request is the PR description: let the desk add variations to 2. Checked against
3. Needs your decision
4. FindingsImportant
Nits None. 5. Tests
6. Bounds
Generated by Claude Code |
24 of the 53 titles.yml keys hold only `global:` (and some `regexes:`). Adding a variation there needs a `variations:` line, which step 6.3 counted as a stray write: the desk would restore, reapply, see the line again and stop the run after five tries. The stray-write rule and "Data mechanics" now allow that line, placed after the key's other fields, which is where yaml.dump puts it. The critic also checks the forms load_title_mappings derives from a variation (without years, "Conference"/"Conf", spaces or punctuation), so a variation such as "PyDay Chile 2026" cannot claim the shared name "PyDay Chile". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013sKyvme6kQEAzWQFrJnPCe
The first desk run found series that sources also name another way (PyDay Rancagua as "PyDay Chile Rancagua", PyDay Santiago as "PyDay Chile Santiago") and could not record that, because only the three data files were in scope. This lets the desk add variations to
utils/tidy_conf/data/titles.yml, and nothing else in that file.What changes
conference, another series'alt_name). Change sets gain an optionaltitleslist (key, variation, URL, quote). "Data mechanics" says how to add a variation and stagestitles.ymlalong with the data files.rejections.yml,global,regexesandspellingstay with the maintainer.titles.ymlas editable data.titles.yml, and adds evidence rows to the ledger.titles.ymlwith:(exclude). It used to cover all ofutils/, so the desk's own edit would have stopped the run.titles.yml,rejections.ymland the data files.titles.ymlpasses, that a subagent's is blocked, and that the new procedure commands get through. The guard code itself needs no change: outside.github/it never restricted the desk's own edits.The rename rule
The sort runs
tidy_titlesover every entry in all three files. A variation that matches an existing entry'sconferencerenames that entry, and the rename can then triggermerge_duplicates, where the longer value wins. If the sort renames anything after a variation is added, the desk takes the variation out again, commits the rest and defers the variation to the maintainer, naming the entries it would rename. So the desk only lands variations that fold future imports. Consolidating existing entries stays a maintainer call. The enricher's import-duplicatequestioncase therefore staysneeds-maintainer.Checks
pytest tests/test_desk_guard.py: 1097 passed.ruff@0.4.4 check utils tests: clean.uvsort:PyDay Rancagua→PyDay Chile Rancagua: only 3 added lines intitles.yml, data unchanged, keys still sorted.PyDay Copiapó): the sort renames that entry, which the rename rule above catches.titles.yml: the sort exits 1 and writes nothing.Outside this repo
~/.desk-guard.jsonin the Routine environment: if adeny_pathspattern coversutils/, it will still block the edit.titles.ymladded.🤖 Generated with Claude Code
https://claude.ai/code/session_013sKyvme6kQEAzWQFrJnPCe
Generated by Claude Code