Skip to content

code_health: match functions to their base by name, not by signature - #95

Merged
dayfine merged 1 commit into
mainfrom
devtools/code-health-signature-key
Oct 31, 2026
Merged

dayfine merged 1 commit into
mainfrom
devtools/code-health-signature-key

Conversation

@dayfine

@dayfine dayfine commented Oct 31, 2026

Copy link
Copy Markdown
Owner

code_health's ratchet matched each function to its base by full signature, so changing only a parameter's type made an existing long function look new and held it to the 50-line limit. That's what fails #90: the PABotBase2_OemController constructor is 133 lines in both versions, and only its on_rumble parameter changed from std::function to MoveOnlyFunction. Functions now match on their qualified name without parameters, and messages still show the full signature. Overloads with the same name share one base value (the largest), which is slightly more lenient.

Testing: all code_health unit tests pass, including a new policy test (same body with a new parameter type passes, one more line fails). Run against #90's diff, the linter reports 0 failures.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

Changing a parameter's type (std::function to MoveOnlyFunction in #90) changed
the function's key, so an existing 133-line constructor was held to the new
limit of 50 instead of its base length. Functions now match on their qualified
name without parameters; messages still show the full signature.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
@dayfine
dayfine marked this pull request as ready for review October 31, 2026 20:01
@dayfine
dayfine merged commit 0135d0e into main Oct 31, 2026
14 checks passed
@dayfine
dayfine deleted the devtools/code-health-signature-key branch October 31, 2026 20:01
dayfine added a commit that referenced this pull request Nov 1, 2026
* Code health: skip nested and detail classes in the single-method interface check (#82)

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Code health: lexical C++ style checks on added lines (#94)

* Code health: skip nested and detail classes in the single-method interface check

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

* Code health: lexical C++ style checks on added lines

Check the lines a change adds for the upstream bans (std::filesystem,
std::thread, std::mutex, std::async), control-flow brace formatting, and
the Abseil tips adopted in the fork's C++ style notes: mutable globals
(#103), new/delete (#126), std::bind (#108), return std::move(local)
(#120), top-level const by-value header parameters (#109), bool
parameters (#94), header using-directives (#153) and forward
declarations. A comment that describes a neighbouring function is an
advisory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* code_health: match functions to their base by name, not by signature (#95)

Changing a parameter's type (std::function to MoveOnlyFunction in #90) changed
the function's key, so an existing 133-line constructor was held to the new
limit of 50 instead of its base length. Functions now match on their qualified
name without parameters; messages still show the full signature.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Settings: default audio display and collapsed console settings

Two global settings for people who run many programs on one lab machine:
"Default Audio Display" (Audio Pipeline group) is what a program's console
shows for its audio until that console's own setting is saved, so a new
panel no longer opens with the frequency bars; and "Start with console
settings collapsed" folds each program's "Console N Settings" box at
creation, so the video is at the top. Both default to today's behavior.

AudioOption takes its initial display type from the global setting
instead of a fixed FREQ_BARS; a panel's saved value still wins.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
(cherry picked from commit 92d1ed3c6f6fa0468827ab15c51ec3cc71f01d32)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
dayfine added a commit that referenced this pull request Nov 1, 2026
…104)

* Code health: skip nested and detail classes in the single-method interface check (#82)

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.

Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E



* Code health: lexical C++ style checks on added lines (#94)

* Code health: skip nested and detail classes in the single-method interface check

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

* Code health: lexical C++ style checks on added lines

Check the lines a change adds for the upstream bans (std::filesystem,
std::thread, std::mutex, std::async), control-flow brace formatting, and
the Abseil tips adopted in the fork's C++ style notes: mutable globals
(#103), new/delete (#126), std::bind (#108), return std::move(local)
(#120), top-level const by-value header parameters (#109), bool
parameters (#94), header using-directives (#153) and forward
declarations. A comment that describes a neighbouring function is an
advisory.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

---------



* code_health: match functions to their base by name, not by signature (#95)

Changing a parameter's type (std::function to MoveOnlyFunction in #90) changed
the function's key, so an existing 133-line constructor was held to the new
limit of 50 instead of its base length. Functions now match on their qualified
name without parameters; messages still show the full signature.

Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E



* Settings: default audio display and collapsed console settings

Two global settings for people who run many programs on one lab machine:
"Default Audio Display" (Audio Pipeline group) is what a program's console
shows for its audio until that console's own setting is saved, so a new
panel no longer opens with the frequency bars; and "Start with console
settings collapsed" folds each program's "Console N Settings" box at
creation, so the video is at the top. Both default to today's behavior.

AudioOption takes its initial display type from the global setting
instead of a fixed FREQ_BARS; a panel's saved value still wins.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
(cherry picked from commit 92d1ed3c6f6fa0468827ab15c51ec3cc71f01d32)

---------


(cherry picked from commit 0e737fb)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant