Skip to content

ums: capture learnings from serocalculator#392 - #727

Merged
d-morrison merged 2 commits into
mainfrom
ums/serocalculator-392-lessons
Jul 25, 2026
Merged

ums: capture learnings from serocalculator#392#727
d-morrison merged 2 commits into
mainfrom
ums/serocalculator-392-lessons

Conversation

@d-morrison

Copy link
Copy Markdown
Collaborator

Post-merge UMS from a 4-round ARDI session on UCD-SERG/serocalculator#392, which merged today.

Four learnings, filed where each already had a home rather than as new fragments.

shared/workflow/fully-clean.md

Version parity belongs in the declare-ready sweep, not only after a merge. sync-with-main already covers comparing DESCRIPTION versions after merging main in. The gap is the case with no merge at all: main advances on its own after the last review round and lands on the branch's exact version, so version-check goes from green to red with nothing to point at. No conflict, no failing check yet, no warning — the mergeability re-check this file already prescribes passes clean while the PR is about to fail. Caught on #392 minutes after a Ready for merge verdict on an otherwise all-green head.

A sixth review-job failure mode, running opposite to the five already catalogued there. Those are all a review that ran and produced something misleading; this is a review that is genuine and complete, but whose workflow posts the reviewer's own gh pr comment ... <<'EOF' invocation instead of the body. Nothing is lost, but it reads as a broken run — so a human discounts a review that actually passed — and a verdict-detecting guard script is left matching against a shell command, which can misfire into a needless retry and a second full review's cost. Filed upstream as d-morrison/gha#312.

memories/r-quarto.md

altdoc keeps reference topics in two independent hand-maintained listsaltdoc/reference.qmd and the Reference section of altdoc/quarto_website.yml. Updating one and not the other renders perfectly cleanly, leaving topics listed on the index page but unreachable from navigation. Nothing catches it: not docs-check, not the docs build, not lint. The pkgdown → altdoc migration makes it especially easy to hit, since the old _pkgdown.yml held a single list, so porting entries off it naturally updates one of two successors. Includes the mechanical cross-check and the 3-vs-2 occurrence count for verifying against rendered output. Tracked for CI in UCD-SERG/serocalculator#610.

Two silent blind spots in the lint-changed-files shape, both absent from lint-changed-lines: an unpaginated gh::gh() that reads only the first 30 changed files (everything past the 30th lands in the exclusion list), and lintr::lint_package() never scanning repository-root scripts like app.R. On #392 the first silently skipped 8 of 38 files and missed two real line_length_linter hits in the PR's own new test file; the second let an undesirable_function_linter hit in root app.R pass a local lint_package() run. Filed as UCD-SERG/serocalculator#608.

memories/github.md

Extends the GitHub Pages 403 bullet with a better fallback. The existing note says to treat a policy-blocked preview as unavailable and re-render locally. But rossjrw/pr-preview-action commits each build to gh-pages under pr-preview/pr-<N>/, so get_file_contents with ref: refs/heads/gh-pages returns the exact bytes the blocked URL would have served — the real rendered artifact, which a local re-render only approximates, with no Quarto toolchain needed. Includes the practical caveats: large pages spill to a file (grep, don't read whole), diff byte counts to confirm a genuinely new build, and check the branch's commit log to see which build is actually deployed.

Checks

check-memory-file-size.py and check-links.py both pass. Added lines were also checked for multi-sentence lines and for banned non-ASCII punctuation — five em-dashes I'd introduced are fixed.


🤖 Generated with Claude Code

https://claude.ai/code/session_01JCwW1H9AFVc8J1eRcobG32


Generated by Claude Code

Four learnings from a 4-round ARDI session that merged.

`fully-clean.md` gains two entries:

- Version parity belongs in the declare-ready sweep, not only after a
  merge. `sync-with-main.md` already covers the post-merge comparison; the
  gap is the no-merge case, where `main` advances on its own and lands on
  the branch's exact version. There is no conflict and no failing check
  yet, so the mergeability re-check the file already prescribes passes
  while `version-check` is about to go red.
- A sixth review-job failure mode, running opposite to the five already
  catalogued: the review is genuine and complete, but the workflow posts
  the reviewer's own `gh pr comment ... <<'EOF'` invocation instead of the
  body. Reads as a broken run and can misfire a verdict-detecting guard
  into a needless retry.

`memories/r-quarto.md` gains two:

- altdoc keeps reference topics in two independent hand-maintained lists
  (`altdoc/reference.qmd` and `quarto_website.yml`'s Reference section).
  Updating one renders cleanly while leaving topics unreachable from
  navigation, and no check catches it. Includes the mechanical cross-check
  and the 3-vs-2 occurrence count for verifying against rendered output.
- Two silent blind spots in the `lint-changed-files` shape: an unpaginated
  `gh::gh()` that reads only the first 30 changed files, and
  `lint_package()` never scanning repository-root scripts. Both absent
  from `lint-changed-lines`.

`memories/github.md` extends the GitHub Pages 403 bullet: the deployed
preview is readable through `get_file_contents` against the `gh-pages`
branch, which reaches the real rendered artifact rather than the local
re-render the existing advice falls back to.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCwW1H9AFVc8J1eRcobG32
Copilot AI review requested due to automatic review settings July 25, 2026 18:28

Copilot AI left a comment

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@claude

This comment has been minimized.

Comment thread memories/github.md Outdated
Comment thread memories/r-quarto.md Outdated
Two findings from the review round.

`mcp__github__list_commits` appeared only in the new `memories/github.md`
bullet, with no entry in the mapping registry to anchor it. The tool name
is right --- it was used in the session the bullet documents, with
`sha: gh-pages`, and returned the deploy history the note describes --- but
"used once and written down" isn't discoverable later, which is the
registry's whole job. Adds a `LIST_COMMITS` operation to
`tool-mappings.yml` (the source; `tool-mappings.md` and the 172 embedded
wrapper tables are regenerated by `sync-codex-skill-wrappers.py`, which
`validate` requires to stay in sync), and points the bullet at it.

Also drops `TWO` from the new `r-quarto.md` heading. The file capitalizes
common words nowhere else; its one all-caps heading is `WORDLIST`, a real
filename.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCwW1H9AFVc8J1eRcobG32
Copilot AI review requested due to automatic review settings July 25, 2026 18:35

Copilot AI left a comment

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@claude

claude Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 1m 12s —— View job


Review

  • Load tools
  • Read the fix commit diff (e889500)
  • Verify both prior findings are addressed
  • Check for any new issues
  • Post verdict

Verdict: Ready for merge

This is a confirming review of the prior verdict (round 1, 2026-07-25T18:29:07Z: "Ready for merge with two minor items"). Both findings are addressed in e889500; that verdict now stands without qualification.

Finding 1 addressed (memories/github.md:547) — mcp__github__list_commits is now registered as LIST_COMMITS in tool-mappings.yml, and the memory bullet points to that operation ID. The tool name and the registry entry are now mutually anchoring. The 100 codex-skills wrapper tables each got the identical LIST_COMMITS row appended, consistent with the sync-generated pattern.

Finding 2 addressed (memories/r-quarto.md:669) — Heading changed from ## altdoc keeps its reference topics in TWO hand-maintained lists to ## altdoc keeps its reference topics in two independent hand-maintained lists. All-caps gone; the added word "independent" also matches the prose that follows.

No new issues introduced by the fix commit.

Copy link
Copy Markdown
Collaborator Author

ARD summary — round pushed as e889500

Both findings Addressed; both inline threads replied to and resolved.

# Finding Disposition
1 mcp__github__list_commits unanchored — no registry entry, single reference in the corpus Address — added LIST_COMMITS to tool-mappings.yml
2 TWO all-caps heading out of register with the file Address — reworded

On finding 1, the verification question resolves cleanly: the tool name is correct, and not because the MCP server source says so — this session called mcp__github__list_commits with sha: gh-pages and got back the real Deploy preview for PR 392 🛫 history, which is exactly the use the bullet documents. I still took the registry option rather than the verification-note option, because "verified once in a session that has since ended" isn't discoverable by anyone later, and being discoverable is what the registry is for.

tool-mappings.yml is the source of truth; tool-mappings.md plus the operations table embedded in all 172 Codex wrappers are generated from it by scripts/sync-codex-skill-wrappers.py, and validate fails if they drift. So the diff is large by construction. I checked it's purely mechanical: exactly one added line per wrapper, byte-identical across all 172, nothing else changed.

The underlying point is worth keeping: a tool name appearing exactly once in the corpus has nothing to check it against, so a correct one and a hallucinated one look identical to a later reader. Registering it is what makes the difference legible.

Local checks re-run and clean: check-memory-file-size.py, check-links.py, validate-skills.py, plus diff-scoped scans for banned punctuation (0) and multi-sentence lines (0).


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Ready for merge — e889500

Fully clean after two rounds.

✅ Passed
validate · new-line-breaks / check-new-line-breaks · review / claude-review · review / require-review · gather-context

(claude / claude jobs show skipped, as expected for a non-mention run.)

Review: Ready for merge, unqualified — verdict posted and its check run completed, with require-review green. Both round-1 findings confirmed addressed; no new issues. Both inline threads replied to and resolved.

Mergeability, re-verified just now: main ahead by 0, zero conflicts, local tip matches the pushed tip. Not an R package, so the version-check parity trap this PR documents doesn't apply here.

One correction for the record, since the round-2 review gave a different figure than I did: it says "The 100 codex-skills wrapper tables". The real count is 172sync-codex-skill-wrappers.py reported Generated 172 Codex skill wrappers, and git diff --stat showed 172 files changed, 172 insertions(+). It doesn't affect either finding or the verdict, so I didn't spend a round on it, but the number in this thread should be right.

Not merging — that's your call. Done here; PR is free.


Generated by Claude Code

@d-morrison
d-morrison merged commit 7861157 into main Jul 25, 2026
11 checks passed
@d-morrison
d-morrison deleted the ums/serocalculator-392-lessons branch July 25, 2026 19:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants