Skip to content

feat(naming): add name-it-better plugin#250

Merged
kyle-sexton merged 6 commits into
mainfrom
feat/naming-plugin
Jul 17, 2026
Merged

feat(naming): add name-it-better plugin#250
kyle-sexton merged 6 commits into
mainfrom
feat/naming-plugin

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

What

New single-skill plugin naming/naming:name-it-better generates
and evaluates fresh name candidates for anything (identifier, file, module,
skill, repo, domain term), then hands the human a scored shortlist. It never
auto-locks a name.

The dominant trigger is a reactive retry: a name was just rejected, and the
same context that produced it will only produce more of the same. So the
generators run blind to the conversation — seeded only with a distilled
context brief — across three distinct lenses (responsibility-literal,
moment-of-use, domain-lore). Diverge widely, converge once, and keep the
first-seen suggestion from anchoring the choice. An optional tournament
action widens to ~5 generators with elimination rounds and independent
judges for high-stakes, hard-to-refactor names — framed honestly as an
adaptation of elimination brackets + pairwise scoring, not a documented
naming technique.

Design decisions

  • Repo-agnostic (portability). The source personal skill scored against
    melodic-software/standards naming docs. Generalized: the skill scores
    against the consuming org's naming/domain-language conventions when
    the project declares them (CLAUDE.md / .claude/rules / a standards
    source it points to), degrading to the general criteria grounded in the
    skill's context/sources.md when none is declared. A missing criterion
    flows UP into the org's conventions, never hardcoded into the skill.
  • context/sources.md kept as the plugin's own one-shot research
    deliverable
    (method grounding: Belshee/Deep Roots naming-as-a-process,
    Ottinger/Clean Code, DDD ubiquitous language, Double Diamond, anchoring
    bias, and the tournament-mode adaptation basis). Only its two references
    to "the standards repo" were generalized to "the consuming org's
    conventions".
  • Naming. Namespace naming (gerund, activity domain) + skill
    name-it-better (action verb) — no name:name stutter. Plugin name
    locked by the owner via the blind-generator naming protocol.

Gates

  • markdownlint-cli2 (MD013=80): clean on all 4 files.
  • /skill-quality:check: PASS, 0 errors / 0 warnings.
  • Evals present and schema-valid (4 warranted cases: blind-retry→human-pick,
    collision-check, tournament honest-framing, missing-criterion-routes-up).
  • claude plugin validate (plugin) and --strict (catalog): pass.

Part of the round-2 personal-skill graduation. Sibling PR #249 adds the
re-anchor corrector plugin; another sibling adds keep-going to
session-flow. Raw ~/.claude/skills/ copies are removed only after these
merge and verify.

Related

No linked issue — round-2 personal-skill graduation is driven by the planning brief, not a tracked GitHub issue.

New single-skill plugin. /naming:name-it-better generates fresh name
candidates by fanning out ~3 blind, fresh-context generators from
distinct lenses (responsibility-literal, moment-of-use, domain-lore),
scores a collision-checked shortlist against the consuming org's naming
criteria, and recommends — the human always picks, never an auto-locked
name. Optional tournament action adds elimination rounds with
independent judges for high-stakes, hard-to-refactor names, framed
honestly as an adaptation rather than a documented technique.

Repo-agnostic: scores against the consuming project's declared naming
conventions when present, degrading to the general criteria grounded in
the skill's context/sources.md when none is declared. Ships warranted
evals and the method-grounding sources file.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ea5d0076e0

ℹ️ 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".

Comment thread plugins/naming/skills/name-it-better/SKILL.md Outdated
sources.md cites three authoritative naming references whose hosts refuse
automated link-checking — arlobelshee.com (DNS-unreachable, flagged in the
file and corroborated via digdeeproots) and science.org / oreilly.com (403
to non-browser clients). Add them to the online-lane exclude list, matching
the existing bot-blocked-URL entries; the Tversky-Kahneman open-PDF mirror
stays checked. Verified with lychee: 12 OK, 0 errors, 3 excluded.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5790430b42

ℹ️ 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".

Comment thread plugins/naming/skills/name-it-better/SKILL.md Outdated
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 5m 54s —— View job


PR Review — feat(naming): add name-it-better plugin

  • Gather context
  • Read changed files
  • Review SKILL.md and plugin structure against CLAUDE.md / playbook requirements
  • Validate evals schema and coverage
  • Check marketplace.json and plugin.json correctness
  • Assess Codex review comments
  • Post final review

Summary

Solid plugin migration. The repo-agnostic criteria resolution (consuming org's conventions → sources.md fallback), the anti-anchoring design rationale, honest tournament framing, and security posture (no hooks, no MCP, no egress, no userConfig) are all well-executed. Two issues need resolution before merge: one is a behavioral correctness gap in the merge step, and one is a false contract in the frontmatter. Three nits follow.


🔴 Important

1. disable-model-invocation: true + "Use when:" trigger phrases without a user-only signal

SKILL.md:3–6

The description advertises live trigger phrases — 'name it better', 'better name', 'rename this', etc. — in "Use when:" form. With disable-model-invocation: true, those phrases never reach Claude's context and cannot trigger the skill. A user who says "name it better" mid-conversation gets silence from the skill, not a shortlist.

The migration playbook is explicit: "trigger phrases are behavior, not marketing copy." Listing them under a disable-model-invocation: true skill inverts that rule.

Two valid resolutions:

  • Remove disable-model-invocation: true (set it to false or omit the line) so the advertised trigger phrases actually work. Comparable skills in this repo that carry "Use when:" trigger phrases and intend model auto-invocation all use disable-model-invocation: false (debugging/diagnose, prototype/logic, discovery/explore, docs-hygiene/rename-references).
  • Keep disable-model-invocation: true and remove the trigger phrase language from the description. Add an explicit user-only signal like disk-hygiene/clean does ("manual-only") so it is clear the skill only responds to an explicit slash command. Update evals 1 and 4, which use natural-language prompt forms that would never invoke a disable-model-invocation: true skill.

Note: education/teach and disk-hygiene/clean follow the same mixed pattern as this PR and likely warrant the same fix — but that is a pre-existing issue, not a reason to carry the pattern forward.

Fix this →


2. Rejected incumbent can re-enter the shortlist at merge time

SKILL.md:58–60

The default pass correctly seeds generators blind (no conversation, brief only). But the merge step deduplicates candidates against each other and collision-checks only against existing codebase vocabulary. The rejected incumbent is not in the existing vocabulary — it was proposed but not yet adopted. A generator that independently re-derives it (common for popular names like DataManager, Manager, Context) would pass both filters and land in the shortlist, defeating the anti-anchoring purpose.

The Gotchas section (lines 105–107) addresses generator-level anchoring but not merge-time reappearance. Fix: the main thread should carry the rejected incumbent as an explicit reject list passed to the merge step, where it is disqualified before scoring — regardless of whether any generator independently arrived at it.

Fix this →


🟡 Nit

3. Eval case 1 expectations verify seeding but not merge-time incumbent exclusion

evals.json:11

The expectation "Distills a context brief and seeds the generators with the brief ONLY (blind to the conversation), not the rejected name" checks generator seeding but not the shortlist itself. Given finding #2, a well-seeded run could still return the rejected name. An expectation like "The rejected incumbent ('DataManager') does not appear in the shortlist" would cover this gap.

4. CHANGELOG.md missing URL reference links

CHANGELOG.md

Keep a Changelog format expects a comparison URL at the bottom — [0.1.0]: https://github.com/melodic-software/claude-code-plugins/releases/tag/naming-v0.1.0 (or the equivalent tag). Other plugin changelogs in the repo include these. Minor, but inconsistent with the cited format.

5. context/sources.md promotes arlobelshee.com as PRIMARY while flagging it as DNS-unreachable

sources.md:20–25

The file labels the Belshee origin PRIMARY but then flags it as "DNS-unreachable during research, so Belshee's exact per-stage prose is corroborated by the Deep Roots rewrite below rather than quoted from the origin." If the primary source was unreachable and the actual content comes from Deep Roots, Deep Roots is the de-facto primary citation for this content. Consider promoting Deep Roots to PRIMARY for the staged-naming process section and downgrading Belshee to AUTHORITATIVE-PENDING or adding an explicit note that the tier reflects original authorship, not research access. The lychee exclusion and the flag itself are correct; this is a tier-labeling question only.


Security review pass (plugin-acceptance checklist)

Surface Status
Code execution (hooks/scripts) ✅ None — skill only
MCP servers ✅ None
Consumer config (userConfig) ✅ None; documented in README
Cache isolation (no reach-outs) ✅ Sources file uses relative context/sources.md references, not runtime fetches
Data egress / telemetry ✅ None; fan-out generators are Claude subagents, not external endpoints
Provenance ✅ Author matches org; MIT license; first-party

Architecture alignment

Check Status
Repo-agnostic (no hardcoded paths/names)
Configurable without fork (consumer CLAUDE.md / rules)
Plugin-form-safe (${CLAUDE_PLUGIN_ROOT} scope)
Versioned (0.1.0)
Namespace noun naming, skill verb name-it-better (no stutter)
tournament as argument (depth variant, not structural fork) ✅ Defensible — the execution difference is prose-level, not a context: fork frontmatter change
$schema in plugin.json and marketplace.json
Marketplace entry category/tags appropriate (design)
lychee excludes justified with rationale

Two Codex review findings on the reactive-retry naming workflow:

- SKILL.md advertised natural-language trigger phrases ('name it
  better', 'better name', ...) in "Use when:" form while
  disable-model-invocation: true kept its description out of context,
  so those phrases could never load the skill. Per the Skills docs
  (https://code.claude.com/docs/en/skills#control-who-invokes-a-skill),
  that flag hides the description entirely rather than merely
  requiring a slash command. Remove it so the advertised triggers work,
  matching other action skills in this repo (debugging/diagnose,
  discovery/explore).
- The merge step deduped and collision-checked against existing
  vocabulary but never excluded the rejected incumbent itself, so a
  blind generator that independently re-derived a common name (e.g.
  DataManager, Manager, Context) could still land in the shortlist and
  defeat the anti-anchoring purpose. Carry the rejected name as an
  explicit main-thread reject list — never shared with the blind
  generators — and disqualify it at merge time. Extend eval case 1 to
  assert the rejected incumbent cannot reappear in the shortlist.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9c4eb2b099

ℹ️ 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".

Comment thread plugins/naming/skills/name-it-better/SKILL.md
kyle-sexton added a commit that referenced this pull request Jul 17, 2026
## What

Adds a fifth skill to **`session-flow`**: `/session-flow:keep-going` —
recover and continue after any interruption (rate limit, crash,
disconnect,
gap). It is the resume counterpart to `handoff`: handoff deliberately
pauses
a session, keep-going picks it back up.

Flow: **inventory** off-thread work → **inspect** each item's real state
from its own artifact (never assume "probably done" / "probably died") →
**recover** (resume the resumable, restart the dead, surface the
unrecoverable) → **reconcile** the main thread from a fresh read of its
backing plan or handoff file → **report** recovered / restarted /
still-running / lost.

**Autonomy policy:** safe, idempotent, read-only work auto-resumes;
re-running anything with external side effects (a push, a PR comment, a
deploy) is gated when inspection cannot prove it did not already land —
double-firing a side effect is worse than pausing.

## Design decisions

- **Cause not diagnosed.** Short-limit vs weekly-limit vs crash does not
  change the recovery, so it is deliberately not classified.
- **No capability enumeration.** Harness mechanisms (background tasks,
shells, monitors, scheduled tasks, workflows, subagents) are named only
as
  marked examples of the *kinds* of off-thread work — the duty is to
inventory whatever the current harness exposes, so the skill survives
tool
  evolution.
- **Follows the plugin's conventions.** Version bump 0.6.0 → 0.7.0,
`## X.Y.Z — DATE` changelog format, README skill-table + section,
keywords,
  and root catalog entry all updated in the plugin's existing style.

## Coordination note

This PR bumps `session-flow` to **0.7.0** and edits the shared plugin
files (plugin.json version/description, README, CHANGELOG, root
marketplace + catalog row). If a concurrent `session-flow` PR (e.g. a
further orchestrate change) lands first, these shared-file edits are the
expected conflict resolved by serializing the merge — this branch
rebases
onto the new base and re-bumps the version. The `keep-going/` skill
files
themselves are conflict-free.

## Gates

- markdownlint-cli2 (MD013=80): clean.
- `/skill-quality:check`: PASS, 0 errors / 0 warnings.
- Evals present and schema-valid (4 warranted cases: real-state
inspection,
side-effect re-fire gating, nothing-off-thread,
does-not-diagnose-cause).
- `claude plugin validate` (plugin) and `--strict` (catalog): pass.

Part of the round-2 personal-skill graduation, alongside `re-anchor`
(#249) and `naming` (#250). Raw `~/.claude/skills/` copies are removed
only
after these merge and verify.

## Related

- Sibling round-2 graduation PRs: #249 (re-anchor), #250 (naming), #251
(keep-going session-flow skill).
- Upstream issues filed from this work: #252 (extract-ssot threshold),
#253 (docs-hygiene proactive detection).

No linked issue — round-2 personal-skill graduation is driven by the
planning brief, not a tracked GitHub issue.
The tournament action runs in place of the default pass but never carried
over the default pass's reject-list and collision disqualification. A
tournament triggered after a rejection (or with a collision constraint)
could present an already-rejected or colliding name as the winner.

Gate bracket entry on the same disqualification: pool the widened
candidates and drop reject-list/collision matches before the elimination
rounds begin, so a rejected or colliding name can never reach the
finalist. Add an eval locking this behavior.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b2bd63c040

ℹ️ 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".

Comment thread plugins/naming/skills/name-it-better/SKILL.md Outdated
The name-it-better description advertised a bare 'rename this' trigger.
Because Claude uses the description to auto-load skills, a prompt like
"rename Foo to Bar" — where the target name is already chosen — could
load this name generator, which then stops to ask for candidate
selection instead of applying/sweeping the decided rename. That prompt
belongs to docs-hygiene:rename-references, whose description explicitly
handles 'rename X to Y'.

Narrow the trigger to the undecided-name case: drop bare 'rename this',
scope the phrase list to "name is still UNDECIDED", and add an explicit
skip clause routing already-decided renames ('rename X to Y', 'I renamed
X') to the rename-references sweep. Preserve the help-me-pick affordance
with 'help me rename this to something better'.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6c6f2bb156

ℹ️ 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".

Comment thread lychee.toml Outdated
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 38s —— View job


Claude finished @kyle-sexton's task ——


Follow-up Review — feat(naming): add name-it-better plugin

  • Gather context
  • Read current SKILL.md and evals after fixes
  • Check tournament mode fix
  • Check disable-model-invocation fix
  • Check already-decided rename routing
  • Verify nits from previous review
  • Post final review

Summary

All four fixes from the prior review round landed correctly. Both 🔴 blocking issues are resolved, the two Codex P2 findings are addressed, and eval coverage is solid. Two minor items remain but neither blocks merge.


Prior issues — resolved ✅

1. disable-model-invocation: true removed + already-decided rename exclusion

SKILL.md:1–6

The offending line is gone. The frontmatter now uses user-invocable: true (slash command available) without disable-model-invocation, so the advertised trigger phrases in the description reach Claude's context and can auto-invoke the skill as intended.

The description also gained the explicit exclusion for already-decided renames ("Not for an already-decided rename ('rename X to Y', 'I renamed X') — that routes to the rename-references sweep"), which resolves both the Codex routing concern and the false-trigger risk.

2. Rejected incumbent disqualified at merge time

SKILL.md:57–61

Step 3 now explicitly carries the rejected incumbent as a main-thread reject list and disqualifies any match at merge time — before scoring, before ranking — regardless of how a generator arrived at it. The Gotchas section (lines 115–118) explicitly covers the re-derivation scenario and names the mechanism. ✅

3. Tournament mode preserves reject and collision filters

SKILL.md:78–82

The tournament block now explicitly applies the same reject-list and collision disqualification before the elimination rounds begin. A rejected or colliding candidate cannot enter the bracket. ✅

4. Eval coverage for merge-time exclusion and tournament filtering

evals.json

Eval 1 now has six expectations, including "Carries 'DataManager' as a main-thread reject list and disqualifies it at merge time" and "The rejected incumbent ('DataManager') does not appear in the final shortlist". Eval 5 (new) exercises the tournament-mode reject+collision combination end-to-end. ✅


Remaining items

5. CHANGELOG.md — missing reference links (nit, unchanged)

CHANGELOG.md

Keep a Changelog format expects a reference link block at the bottom of the file (e.g. [0.1.0]: https://github.com/melodic-software/claude-code-plugins/releases/tag/naming-v0.1.0). For 0.1.0 there is no [Unreleased] comparison — a releases tag link is sufficient. Other plugin changelogs in the repo include these. Low priority, but the stated format is cited and worth following consistently.

6. lychee.toml — standards-sync durability concern (nit)

lychee.toml:28–35

AGENTS.md warns that files marked managed by melodic-software/standards are silently overwritten on the next sync. The Codex reviewer flagged this: if lychee.toml is in the managed set, the naming-plugin excludes (lines 28–35) would be lost on the next chore: sync standards components commit. The rationale comments and exclusion patterns are well-written — they just need to live in the standards source of truth, not only here, if the file is managed. Worth confirming the sync scope before merge; if it's not managed this concern evaporates.


Security review pass (unchanged — no regressions)

Surface Status
Code execution (hooks/scripts) ✅ None
MCP servers ✅ None
Consumer config (userConfig) ✅ None
Cache isolation ✅ No runtime fetches; context/sources.md is reference-only
Data egress ✅ None

Verdict: All blocking and important issues resolved. Items 5 and 6 are low-priority nits. ✅ Ready to merge once the lychee.toml sync question is confirmed.

kyle-sexton added a commit that referenced this pull request Jul 17, 2026
## What

New plugin **`re-anchor`** — **five discipline correctors plus a
deep-verification sibling, sharing one re-anchor / audit /
correct-forward
engine doc**. Each corrector re-anchors a standing rule mid-session,
audits
the work in flight against it, and corrects what has drifted.

| Skill | Discipline it re-anchors |
|---|---|
| `/re-anchor:do-your-research` | Research / no-assumptions before
assertion |
| `/re-anchor:do-your-research-deep` | Verification-fan-out tier of
do-your-research — subagents verify every load-bearing claim so far |
| `/re-anchor:follow-our-standards` | Alignment to the consuming org's
engineering conventions |
| `/re-anchor:point-dont-copy` | Pointer over copy — cite the living
source, don't duplicate it |
| `/re-anchor:reason-dont-recite` | Interrogate inherited content —
precedent describes, it doesn't justify |
| `/re-anchor:tighten-your-output` | Terseness — fewer words or lines
with no loss of meaning or correctness |

The shared **re-anchor → audit → correct-forward** method lives once at
plugin scope (`context/re-anchor-audit-correct.md`); each skill carries
only
its own delta and cites the method doc (mirrors the `prototype`
precedent).

## Design decisions

- **Corrector tone.** Firing a corrector is a re-anchor, not an
accusation;
gentle-reminder use is first-class; the audit may honestly return clean.
- **Repo-/machine-agnostic (portability).** The source personal skills
hardcoded `~/.claude/CLAUDE.md`, `melodic-software/standards`, ghq, and
a
sync-manifest path — all removed. Each corrector resolves its
discipline's
  source of truth from the **consumer's own** instruction layer via the
convention-resolution ladder, degrading to a **plugin-authored portable
  baseline**. No `userConfig`, so no setup skill.
- **Model-invocable correctors (`disable-model-invocation: false`).**
Each
corrector advertises natural-language trigger phrases in its
`description`
("you're guessing", "too verbose", …). Those phrases only reach the
model's
invocation path when model invocation is enabled, so the flag is `false`
on
every corrector — the same choice the sibling `keep-going` skill (#251)
made, and consistent with the repo's convention that `true` is reserved
for
  setup / destructive / mode-entry skills (`architecture:improve` even
re-enabled it). This makes the "Use when:" phrasing accurate rather than
  inert, resolving both bot findings on this flag in one move.
- **`deep` is a sibling skill, not an argument.** The deep verification
pass
  fans forked subagents out over every load-bearing claim — a change in
execution *topology*, not a depth knob on one path.
`MIGRATION-PLAYBOOK.md`
  fixes execution-tier variants in frontmatter as siblings (the
  `/discovery:research-deep` precedent), so `deep` graduated to
`/re-anchor:do-your-research-deep`. That sibling points at the parent's
discipline + the shared method doc (no duplication) and carries only the
  fan-out delta, including a wave-cap / retry throttle so a claim-heavy
  session cannot fire an unthrottled burst (mirrors `codebase-health`'s
  per-file fan-out throttle and the guardrails burst-529 guidance).
- **`point-dont-copy` SSOT.** Its re-anchor routes through the org
standards'
`reference-don't-duplicate` (in-repo facts) and
`documentation-and-citations`
(external facts) conventions rather than restating that doctrine; the
skill
keeps only its own pins — threshold **two** (tighter than the
convention's
  three-or-more smell signal), point-at-public-contracts, no-capability-
  enumeration — plus the not-a-copy carve-outs.
- **`reason-dont-recite`.** Incumbency discipline, a distinct axis from
  do-your-research (external evidence you lack vs internal evidence you
  inherited). A standards disagreement it surfaces routes upstream via
`follow-our-standards` (routing-only delta; that skill owns "never
silent
  deviation, never silent conformance" — no doctrine duplicated).
- **`tighten-your-output`.** Terseness. Code side re-anchors the org's
`simpler-code` convention (named failure modes; constraints never traded
for
line count); prose terseness has **no standards doc** (verified against
the
standards engineering conventions), so the skill flags that gap rather
than
inventing a rubric — a standards-repo issue proposes the prose sibling
of
`simpler-code.md`. Batch work routes to a compress capability (prose)
and a
  simplify capability (code).
- **Plugin name `re-anchor`** reads verb-ish rather than the noun/gerund
the
repo's namespace guidance prefers — kept as owner-locked
(blind-generator
  protocol). No `name:name` stutter.
- **Dogfooded `point-dont-copy`** on the plugin's own correctors:
trimmed
  gotchas that restated the shared method doc.

## Gates

- markdownlint-cli2: clean on all 9 markdown files.
- `claude plugin validate` (re-anchor) + `--strict` (catalog): both
pass.
- `validate-plugin-contracts.mjs`: pass.
- Evals present + schema-valid against
`skill-quality/reference/evals.schema.json`
  (4 warranted cases each across all 6 eval sets).
- Root catalog regenerated via `scripts/generate-catalog.mjs` (in sync).

## Related

- Sibling round-2 graduation PRs: #249 (re-anchor), #250 (naming), #251
(keep-going session-flow skill).
- Upstream issues filed from this work: #252 (extract-ssot threshold),
#253 (docs-hygiene proactive detection), plus a
melodic-software/standards issue proposing a markdown/prose-terseness
convention (linked in the PR thread).

No linked issue — round-2 personal-skill graduation is driven by the
planning brief, not a tracked GitHub issue.
…ludes

The prior commit added three exclude patterns (arlobelshee.com,
science.org, oreilly.com) to root lychee.toml so the online link-check
would skip method-source URLs whose hosts are DNS-dead or 403 non-browser
clients. But lychee.toml is a standards-synced, upstream-managed config
(see AGENTS.md and standards/distribution/sync-manifest.yml): a local edit
is silently overwritten on the next sync, dropping the excludes and
re-breaking the check. The fix belongs in the branch-owned source file.

Revert lychee.toml to be byte-identical to main, and reformat the three
blocked citations in the naming plugin's sources.md from markdown
reference links to inline code-span URLs. lychee skips verbatim/code
segments by default (include_verbatim is unset; the link-check lane passes
only --config lychee.toml, no --include-verbatim), so a code-span URL is
not extracted for checking while remaining a readable, useful citation.
Verified with lychee 0.24.2 --dump against sources.md: the three blocked
URLs no longer appear in extraction, and the reachable cs.tufts open-PDF
mirror (tk-1974-pdf, still a reference link) does. Remove the three
now-orphaned reference definitions; no dangling labels remain.
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 19s —— View job


Claude finished @kyle-sexton's task


Follow-up Review — feat(naming): add name-it-better plugin

  • Gather context and read changed files
  • Check resolution of prior nits (CHANGELOG reference links, lychee.toml sync concern)
  • Review latest commit (1162aac — cite bot-blocked sources as code spans)
  • Full review pass on SKILL.md, evals, plugin.json, marketplace.json
  • Post final review

Summary

The 1162aac commit cleanly resolves the last open concern from the prior review round. One cosmetic nit remains (CHANGELOG reference link block, flagged across two rounds). Everything else is solid.


Prior nit #6 — RESOLVED ✅

lychee.toml standards-sync durability concern

The 1162aac commit takes the right approach: instead of adding naming-specific bot-blocked URLs to a standards-managed lychee.toml (fragile on sync), the three DNS/bot-blocked sources in context/sources.md are now cited as inline code spans:

sources.md:21
sources.md:38
sources.md:59

Markdown-aware link extractors (including lychee) treat content inside inline code spans as literal text, not hyperlinks — so these URLs are never submitted to the checker. The lychee.toml is left clean with no naming-specific entries, and there is nothing to lose on the next standards sync. ✅


Prior nit #5 — still open (cosmetic, does not block merge)

CHANGELOG.md missing reference link block

CHANGELOG.md:6–19

Unchanged from the last two rounds. The file still has no reference link at the bottom for the [0.1.0] heading. Keep a Changelog cites this as the expected format; other plugin changelogs in the repo include a footer like:

[0.1.0]: https://github.com/melodic-software/claude-code-plugins/releases/tag/naming-v0.1.0

Low priority — the changelog is readable and accurate without it — but worth a follow-up commit to stay consistent with the repo pattern.


Full review pass — no new issues

Area Status
SKILL.md — frontmatter, description, trigger routing ✅ Clean. user-invocable: true, no disable-model-invocation. Already-decided rename exclusion explicit.
SKILL.md — Default pass logic (steps 1–5) ✅ Brief-only seeding, reject list at merge time, collision-before-scoring, human-picks stop.
SKILL.md — Tournament mode ✅ Reject list + collision disqualification applied before elimination rounds. Honest-framing flag present.
SKILL.md — Gotchas section ✅ Covers generator re-derivation of the incumbent; names the mechanism.
evals/evals.json — 5 cases, schema-valid ✅ Eval 1 covers blind seeding + merge-time disqualification. Eval 2 covers collision-before-scoring. Eval 3 covers tournament honest framing. Eval 4 covers missing-criterion routing. Eval 5 covers tournament reject+collision end-to-end.
context/sources.md — tier labels, bot-blocked citations ✅ Bot-blocked URLs in code spans (resolved by 1162aac). Reference-style links used for checkable URLs.
plugin.json — schema, version, metadata $schema present, 0.1.0, author/license correct.
marketplace.json — entry, category, tags naming registered under design, tags match plugin capability.
README.md — install, configuration, honest tournament framing ✅ No userConfig, no persistent state, runtime network claim correct (subagents, not external fetches).

Security review pass (unchanged — no regressions)

Surface Status
Code execution (hooks/scripts) ✅ None
MCP servers ✅ None
Consumer config (userConfig) ✅ None
Cache isolation ✅ No runtime fetches; context/sources.md is reference-only
Data egress ✅ None

Verdict: All blocking issues resolved across two rounds; the lychee durability concern is now also closed. ✅ Ready to merge. The CHANGELOG reference link nit can be addressed in a follow-up.

@kyle-sexton
kyle-sexton merged commit e6c82b2 into main Jul 17, 2026
19 checks passed
@kyle-sexton
kyle-sexton deleted the feat/naming-plugin branch July 17, 2026 16:29
kyle-sexton added a commit that referenced this pull request Jul 26, 2026
…coverage table (#1594)

## Summary

Closes the loop-lane prompt coverage gap: parked human-gated items,
decision-pending items, and deferred-with-trigger decisions belonged to
no standing lane and rotted silently (ci-workflows accumulated 13 before
an ad-hoc burn-down).

- **Template 3b — parked-decision burn-down** (attended, on demand):
three scoped populations (parked human-gated via three-way role
resolution; live-resolved decision-pending status label; trigger sweep
over 3b's own populations plus 90-day closed-item decision comments),
wayfind/attention-view/telemetry exclusions, bounded-query discipline,
brief-verify-ratify pipeline with fresh-context verifiers before
ratification, five outcome verbs (flip / decide-close / retarget /
re-home / re-park-with-named-trigger), inlined work-class contract,
AI-disclaimer form, and rate-limit floor (the block invokes no skill, so
it inherits nothing).
- **Intro coverage table**: one row per item state → owner, including
the deliberately/currently unowned states (dormant needs-info, external
recurring automation, unscheduled lease audit, lane telemetry) so
absence is visible instead of silent.
- **Filled ready-to-paste instance** for this repository, per the file's
convention.

An independent fresh-context review of the draft returned
SHIP-WITH-FIXES with 16 findings (4 blocking: false completeness claim
in the coverage table, trigger-sweep population colliding with the
worker lane, wayfind HITL items captured with a mode-destroying Flip,
hardcoded status label breaking portability); all 16 are addressed in
this revision.

## Test plan

- `markdownlint-cli2` on the file: 0 errors.
- `git diff --check`: clean.
- Template contracts cross-checked against `plugins/work-items`
(attend-queue view grammar, triage closing invariant, role-label
resolution, wayfind label ownership) and the loop-lane convention's
inline-floor rule during the review pass.
- Prompt-shaped content — no executable surface changed; the live
validation is the next burn-down session run from this template.

## Related

- Closes #1582
- Codifies the attended burn-down pattern from the ci-workflows session
2026-07-26 (ci-workflows#148 retarget, #241/#250 decisions)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01X47ju75UpdNcLgfsaEM9tj

---------

Co-authored-by: Claude Fable 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