feat(naming): research-backed criteria, structured briefs, rejection protocol (0.2.0)#341
Conversation
…protocol (0.2.0) Upgrade the name-it-better skill with research-grounded structure, keeping its existing blind-generator method and tone. Delta changes, not a rewrite. - Structured context brief: the loose "distill a brief" step becomes named fields (responsibility, firing/usage context, scope boundaries, collision vocabulary, word-level blocklist with reasons, rejected incumbents with reasons), mirroring the replicated concept -> word -> structure naming model. - Declared criteria priority: research-ordered fallback (semantic accuracy > scope fit > comprehensibility > trigger utility) governs scoring and judging; a consuming project's declared conventions still override. - Rejection-reason iteration protocol: a rejected candidate's REASON is captured as a new brief constraint fed into the next blind round; rejected names and words never re-enter. New eval covers it. - Modality layer: universal semantic vs modality-specific syntactic; documented style conflicts route to the consuming ecosystem's guide; for skills the description (not the name) drives discovery. - Strengthened domain-concept pointer to a domain-modelling capability. - sources.md adds the primary empirical sources behind the criteria priority and modality layer, and honestly marks paywalled book sources as Tier-2-for-verification. Evidence base: .work/naming-theory research artifacts (Feitelson TSE 2022, Alpern 2024, Avidan & Feitelson 2017, Hofmeister 2017; clig.dev and the Claude Code skills docs for the modality layer). Gates: markdownlint-cli2, claude plugin validate, /skill-quality:check (PASS 0/0, all trigger phrases preserved), evals schema-valid (6 cases). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
The naming plugin.json description now names the structured brief and the research-ordered criteria priority; regenerate the README catalog block so the manifest drift gate (scripts/generate-catalog.mjs --check) stays green. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 14019a1a73
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 2m 7s —— View job PR Review —
|
|
Claude finished @kyle-sexton's task in 1m 25s —— View job
Review update —
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f8c9408f06
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 2m 6s —— View job
Review update —
|
| # | Finding | Status |
|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | STILL OPEN |
| 2 | evals.json eval #1 echoes the same contradiction | STILL OPEN |
| 3 | No post-shaping collision re-check | NEW — PLAUSIBLE |
| 4 | Retry reweight not scoped to fallback criteria | NEW — PLAUSIBLE |
Findings 1 and 2 are a confirmed design contradiction that must be fixed before merge. Findings 3 and 4 are real but smaller gaps worth addressing in the same pass.
Everything else — criteria priority ordering, modality layer, rejection-reason iteration structure, Gotchas section, sources.md citation hygiene, evals #2–6, plugin.json, and CHANGELOG.md — remains well-reasoned and unchanged.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6ec224ed59
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ping paths - Rejected incumbent names stay main-thread only; the blind brief carries the abstracted rejection reason, never the name (anti-anchoring). - Collision and reject-list checks re-run on the syntactically shaped form, which can recreate a sibling or rejected incumbent. - Rejection-driven criteria reweighting operates only where declared conventions leave space; contradictions route upstream. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 51s —— View job
Review update —
|
| # | Finding | Status |
|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ |
| 2 | evals.json eval #1 still lists "rejected incumbents" as a brief field |
STILL OPEN ❌ |
| 3 | No post-shaping collision re-check | FIXED ✅ |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ |
One small change remaining before merge: remove rejected incumbents from the brief field descriptions in eval #1 (expected_output + expectations[0]) to match the now-correct SKILL.md.
Everything else — SKILL.md criteria ordering, modality layer, the rejection-reason iteration mechanism, Gotchas section, sources.md citation hygiene, evals #2–6, plugin.json, and CHANGELOG.md — remains well-reasoned and correct.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ec14658b27
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Review finding: the eval's brief field list still named rejected incumbents as brief content. The eval now expects the rejected name to stay on the main-thread reject list with only its abstracted reason entering the brief, matching SKILL.md. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 50s —— View job
Review update —
|
| # | Finding | Status |
|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ (ec14658) |
| 2 | evals.json eval #1 still listed "rejected incumbents" as a brief field |
FIXED ✅ (fa1cb5d) |
| 3 | No post-shaping collision re-check | FIXED ✅ (ec14658) |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ (ec14658) |
The PR is ready to merge. The research grounding, structured brief design, modality layer, rejection-reason iteration protocol, and all six evals are correct and internally consistent.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fa1cb5df9e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ef wording Review findings: the merge step now disqualifies candidates containing a word-level blocklist entry (generators can miss a brief constraint), and the README no longer describes a name-level blocklist in the brief — rejected names live on the main-thread reject list only. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 26s —— View job
Review update —
|
| # | Finding | Status |
|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ (ec14658) |
| 2 | evals.json eval #1 still listed "rejected incumbents" as a brief field |
FIXED ✅ (fa1cb5d) |
| 3 | No post-shaping collision re-check | FIXED ✅ (ec14658) |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ (ec14658) |
| 5 | Word-level blocklist not enforced at merge time | FIXED ✅ (8e47850) |
| 6 | README brief described a name-level blocklist | FIXED ✅ (8e47850) |
The PR is ready to merge. The full design — research-ordered criteria, structured brief with correct field scope, anti-anchoring reject-list separation, post-shaping rechecks, and rejection-reason iteration protocol — is internally consistent across SKILL.md, evals.json, and README.md.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8e47850341
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ject rule Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 8s —— View job
Review update —
|
| # | Finding | Status | Commit |
|---|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ | ec14658 |
| 2 | evals.json eval #1 still listed "rejected incumbents" as a brief field |
FIXED ✅ | fa1cb5d |
| 3 | No post-shaping collision re-check | FIXED ✅ | ec14658 |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ | ec14658 |
| 5 | Word-level blocklist not enforced at merge time | FIXED ✅ | 8e47850 |
| 6 | README brief described a name-level blocklist | FIXED ✅ | 8e47850 |
| 7 | CHANGELOG brief-field list included rejected incumbents | FIXED ✅ | 2940ab1 |
The PR is ready to merge. The design is internally consistent across all four artifacts that describe the brief (SKILL.md, evals.json, README.md, CHANGELOG.md), and the meta-lesson in the final comment — treating SKILL.md as the single source of truth for the field list — is a good process note for future revisions.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2940ab1153
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…tion Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 0s —— View job
Review update —
|
| # | Finding | Status | Commit |
|---|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ | ec14658 |
| 2 | evals.json eval #1 still listed "rejected incumbents" as a brief field |
FIXED ✅ | fa1cb5d |
| 3 | No post-shaping collision re-check | FIXED ✅ | ec14658 |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ | ec14658 |
| 5 | Word-level blocklist not enforced at merge time | FIXED ✅ | 8e47850 |
| 6 | README brief described a name-level blocklist | FIXED ✅ | 8e47850 |
| 7 | CHANGELOG brief-field list included rejected incumbents | FIXED ✅ | 2940ab1 |
| 8 | Word blocklist not applied before tournament elimination | FIXED ✅ | 6363135 |
The PR is ready to merge. The design is now internally consistent across every layer — the anti-anchoring reject-list separation, word-level blocklist enforcement at both merge time and tournament pre-bracket, post-shaping rechecks, and criteria reweighting bounded by declared conventions — and correctly expressed in all five artifacts that describe the protocol (SKILL.md, evals.json, README.md, CHANGELOG.md, and the Gotchas section).
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6363135676
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 3s —— View job
Review update —
|
| # | Finding | Status | Commit |
|---|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ | ec14658 |
| 2 | evals.json eval #1 still listed "rejected incumbents" as a brief field |
FIXED ✅ | fa1cb5d |
| 3 | No post-shaping collision re-check | FIXED ✅ | ec14658 |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ | ec14658 |
| 5 | Word-level blocklist not enforced at merge time | FIXED ✅ | 8e47850 |
| 6 | README brief described a name-level blocklist | FIXED ✅ | 8e47850 |
| 7 | CHANGELOG brief-field list included rejected incumbents | FIXED ✅ | 2940ab1 |
| 8 | Word blocklist not applied before tournament elimination | FIXED ✅ | 6363135 |
| 9 | Word blocklist not re-run after syntactic shaping (affix case) | FIXED ✅ | 13de41b |
The PR is ready to merge. Every layer of the design — anti-anchoring reject-list separation, word-level blocklist enforcement at merge time, at tournament pre-bracket, and on the syntactically shaped form — is internally consistent and correctly expressed across all five artifacts (SKILL.md, evals.json, README.md, CHANGELOG.md, and the Gotchas section).
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 13de41b1eb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Review finding: blind generators need the kind of thing being named to fix noun-vs-verb form, and the shaping pass needs it to select the syntactic conventions. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 22s —— View job
Review update —
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 24a0afff35
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…-shaping Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 33s —— View job
Review update —
|
| # | Finding | Status | Commit |
|---|---|---|---|
| 1 | Rejected incumbents in brief contradicts step-3 never-shared rule | FIXED ✅ | ec14658 |
| 2 | evals.json eval #1 still listed "rejected incumbents" as a brief field |
FIXED ✅ | fa1cb5d |
| 3 | No post-shaping collision re-check | FIXED ✅ | ec14658 |
| 4 | Retry reweight not scoped to fallback criteria | FIXED ✅ | ec14658 |
| 5 | Word-level blocklist not enforced at merge time | FIXED ✅ | 8e47850 |
| 6 | README brief described a name-level blocklist | FIXED ✅ | 8e47850 |
| 7 | CHANGELOG brief-field list included rejected incumbents | FIXED ✅ | 2940ab1 |
| 8 | Word blocklist not applied before tournament elimination | FIXED ✅ | 6363135 |
| 9 | Word blocklist not re-run after syntactic shaping (affix case) | FIXED ✅ | 13de41b |
| 10 | Target modality absent from README, CHANGELOG, evals.json | STILL OPEN ❌ | — |
| 11 | Dedupe not re-run on shaped forms | FIXED ✅ | a3490e6 |
One cluster of three small updates remains before merge: add target modality as the leading brief field in README.md, CHANGELOG.md, and evals.json eval #1.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a3490e61db
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - **Target modality** — what KIND of thing is being named (function, | ||
| type, module, file, CLI command, skill, domain term): it fixes | ||
| noun-for-a-thing vs verb-for-an-action and tells the final shaping | ||
| pass which syntactic conventions apply. |
There was a problem hiding this comment.
Carry resolved syntax constraints in the generator brief
For a request whose convention is not determined by the target kind (for example, a function in a Python versus JavaScript project), target modality alone cannot select casing, separators, affixes, or length limits. The replacement brief no longer includes the old hard language constraints, and generators receive only this brief, so neither they nor the final shaping pass are instructed with the consuming ecosystem's resolved syntactic convention; this can emit names in the wrong required form. Include the language/ecosystem or the resolved syntactic constraints as a brief field.
Useful? React with 👍 / 👎.
What
Upgrades the
namingplugin'sname-it-betterskill (0.1.0 → 0.2.0) withresearch-backed criteria and structure, keeping its existing blind-generator
method and tone. Delta changes, not a rewrite.
brief with named fields — responsibility, firing/usage context, scope
boundaries (what it is NOT), collision vocabulary, word-level blocklist
(with reasons), rejected incumbents (with reasons) — mirroring the
replicated concept → word → structure naming model. The generators
receive this brief, and only this brief. (Fixes the root cause of the
three tournament rounds this work needed: thin, unstructured briefs.)
research-ordered — semantic accuracy (anti-misleading) > scope fit >
comprehensibility > trigger/evocative utility — and this ordering governs
scoring and judging. A consuming project's declared conventions still
override it (layered under, not replacing, "declared conventions win").
captured as an explicit new brief constraint (a blocklist word, a
scope-boundary correction, or a criteria reweight) fed into the next
blind round; rejected names and words never re-enter. New eval (perf(markdown-formatter): unwired producer builds telemetry payload before the opt-in guard (~90ms/edit on Windows) #6)
covers it.
modality/vendor-specific syntactic layer; documented style conflicts
(abbreviation policy, acronym casing, casing style) route to the
consuming ecosystem's own style guide rather than a house verdict. For
Claude Code skills, the description — not the name — drives discovery.
Why / evidence base
Grounded in the session's naming-theory research artifacts (outcome-gated,
primary-source-direct-fetch):
.work/naming-theory/RESEARCH.mdand its foursiblings. Load-bearing findings behind the changes:
arXiv:2103.07487; reproduced by Alpern 2024) — validates blind
multi-generator fan-out.
names ~2:1; "longer names" alone did nothing — the process drives it.
This is the structured brief's shape.
(Avidan & Feitelson, ICPC 2017) — the reason semantic accuracy ranks
first.
experience-moderated (Hofmeister, SANER 2017) — the comprehensibility
tier.
(description-drives-discovery), plus the conflicting official style
guides for the abbreviation/acronym-casing entries.
context/sources.mdrecords these as citations (claim + URL + tier) andhonestly marks paywalled book sources (Clean Code ch.2, .NET 3rd-edition)
as Tier-2-for-verification.
Fresh-docs citation (mandate)
Per the repo's fresh-docs mandate, the Skills doc was fetched this session
before touching the skill: https://code.claude.com/docs/en/skills —
confirms the
description(not thename) drives auto-invocation and thecombined description text is truncated at 1,536 chars in the skill listing,
which backs the modality note.
Gates
markdownlint-cli2(repo config): 0 errors on all changed markdown.claude plugin validate ./plugins/naming: passed./skill-quality:check name-it-better: PASS — 0 errors, 0 warnings; all 11frontmatter trigger phrases preserved (description untouched).
eval perf(markdown-formatter): unwired producer builds telemetry payload before the opt-in guard (~90ms/edit on Windows) #6 added for the rejection-reason protocol).
scripts/generate-catalog.mjs --check): in sync(root README regenerated for the refreshed 0.2.0 description).
Do not merge — for review.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VLztic1sFn2CVFJsubr7pu
Related
No linked issue.