Skip to content

feat(naming): fold running-retro tournament lessons into name-it-better#862

Merged
kyle-sexton merged 4 commits into
mainfrom
feat/naming-tournament-lessons
Jul 21, 2026
Merged

feat(naming): fold running-retro tournament lessons into name-it-better#862
kyle-sexton merged 4 commits into
mainfrom
feat/naming-tournament-lessons

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

What

Folds the four naming-tournament lessons recorded during the running-retro naming round (batch ledger, "Naming-skill lessons this round") into name-it-better; naming 0.2.0 → 0.3.0.

  • Terms-of-art brief field — the field's established names for the act with researched, not recalled, meanings. Evidence: running-retro r4 found reflect (agent-lit: output-critique-retry), introspect (type inspection), and self-review (repo-colonized for diff review) all misleading; the honest field term was retrospective minus cadence.
  • Blocklist provenance — every word-level blocklist entry records user-stated vs agent-inferred origin; inferred entries are proposals to confirm. Evidence: the "retro" blocklist entry was agent-assumed, never user-decided, and was reversed on re-derivation.
  • Sentence-form test as an early merge filter for utterance names (skills/commands): the imperative you would actually say, cold-readable. Evidence: filtered contentless idioms (take-stock, bare check) across r1-r2.
  • Temporal-neutrality constraint for skills loadable as primed context: name must read valid before any work exists (critique-your-own-run failure class).

Gates

  • claude plugin validate . — PASS
  • markdownlint-cli2 — 0 errors
  • skill-quality check name-it-better — PASS (0 errors; 1 pre-existing soft line-target warning, file was already over 200 before this change)

Related

🤖 Generated with Claude Code

Four lessons recorded in the running-retro naming round, now part of the
method: a terms-of-art brief field with researched (not recalled) field
meanings; per-entry blocklist provenance (user-stated vs agent-inferred,
inferred entries are proposals to confirm); the sentence-form test as an
early merge filter for utterance names; and a temporal-neutrality
constraint for skills loadable as primed context. Naming 0.2.0 -> 0.3.0.

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

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

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 47s —— View job


PR Review: feat(naming): fold running-retro tournament lessons into name-it-better

  • Gather context and read changed files
  • Review plugin.json changes
  • Review SKILL.md changes
  • Review CHANGELOG.md
  • Post final review

Summary

Clean, well-scoped PR. All four retro lessons land in the correct sections of the skill, the version bump is appropriate, and the CHANGELOG accurately reflects the changes. No security or architectural concerns.


plugin.json — LGTM

Version bump 0.2.0 → 0.3.0 is correct semver for backward-compatible feature additions. The newly added keywords array (plugin.json L11–18) — naming, name, rename, identifier, candidates, anti-anchoring, skill — are all relevant and improve marketplace discoverability. The existing description field still accurately describes the plugin's headline capabilities; the new lessons are internal algorithmic improvements.


SKILL.md — Four additions, all correctly placed

1. Terms-of-art brief field (L101–107)
Well-placed inside the structured context brief. "Research them before the fan-out" is a clear, actionable directive, and the consequence framing ("a term whose field meaning diverges from this target is misleading (criterion 1) and the divergence belongs in the brief") ties it correctly back to the existing criteria priority.

2. Blocklist provenance (L109–112)
The distinction between user-stated and agent-inferred entries is a genuine safety improvement — the "retro" reversal is a solid concrete motivation. The phrasing "an assumed blocklist word can eliminate the honest winner" is the right threat model to surface.

One minor gap: the skill says new entries from this point forward must carry provenance, but existing conversations that already have a growing blocklist across rounds will have entries without metadata. Worth considering a note like "treat any inherited entry without provenance as agent-inferred (confirm before treating as hard)" — but not blocking.

3. Sentence-form test (L133–137)
Correctly placed as a pre-scoring filter in step 3 (Merge and score). The two examples (bare "check", "take stock") are concrete and cold-readable. The "utterance name" scoping (skills, commands) is precise — this filter doesn't bleed into non-utterance contexts.

4. Temporal-neutrality constraint (L82–84)
Correctly placed inside the "Claude Code skills are the sharp special case" paragraph. The failure class example ("critique your run") is clear and memorable. The constraint is tight enough to be useful without over-specifying.


CHANGELOG.md — LGTM

Follows Keep a Changelog structure. The 0.3.0 block accurately summarises all four additions and is correctly positioned above 0.2.0.

Pre-existing note (not introduced by this PR): neither the 0.3.0, 0.2.0, nor 0.1.0 entries carry a release date (## [0.3.0] - YYYY-MM-DD), which the Keep a Changelog spec calls for. This is a pre-existing gap worth closing in a follow-up.


CLAUDE.md alignment

Rule Status
Repo-agnostic (no hardcoded paths) ✅ Still uses consuming-project convention resolution
Configurable without editing the plugin ✅ No new baked-in values
Plugin-form-safe (${CLAUDE_PLUGIN_ROOT} references) context/sources.md references are plugin-relative
Versioned ✅ Explicit semver bump
Security review ✅ No code execution, remote MCP, secrets, or egress

Verdict

Approve. The four lessons are correctly integrated, the version bump is right, and no issues block merge. The legacy-blocklist-provenance gap and missing CHANGELOG dates are both worth a follow-up but neither is introduced by this PR.

@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 53s —— View job


Security Review — PR #862

  • Gather PR diff and changed files
  • Review plugins/naming/.claude-plugin/plugin.json
  • Review plugins/naming/skills/name-it-better/SKILL.md
  • Review plugins/naming/CHANGELOG.md
  • Report findings

No security issues found.

All three changed files are purely documentation and skill-instruction prose. Here is the surface area examined:

plugin.json (+10/-2) — version string bumped 0.2.0 → 0.3.0; keywords array reformatted to multi-line (no values added or removed). No new fields: no mcpServers, hooks, allowedTools, permissions, or egress capabilities introduced. Clean.

SKILL.md (+21/-3) — four prose additions to the naming-skill instructions:

  • Terms-of-art brief field (instructs the LLM to research field meanings before the fan-out)
  • Blocklist provenance annotation (user-stated vs agent-inferred)
  • Sentence-form test as a merge-step filter
  • Temporal-neutrality constraint for skills that load as primed context

None of these additions introduce command execution, shell interpolation, template injection surfaces, remote content fetching, or elevated privilege. The internal path references (context/sources.md) are relative plugin-local paths, not ../ escapes. No instruction directs the model to exfiltrate data to an external endpoint.

CHANGELOG.md (+17/-0) — changelog entry only. No executable content.

GitHub Actions — no .github/workflows/ files changed. No pull_request_target, workflow_run, or run: blocks with github context interpolation are touched by this PR.

Supply chain / dependencies — no package manifests, lock files, or action pins modified.

@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: 541ee3deb8

ℹ️ 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
Comment thread plugins/naming/skills/name-it-better/SKILL.md
@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 18s —— View job


PR Review — feat(naming): fold running-retro tournament lessons into name-it-better

  • Read changed files
  • Evaluate Codex P2 findings
  • Post final review

Both Codex P2 findings are confirmed valid against the current text. Details below.


Finding 1 — Inferred blocklist entries still hard-disqualify at merge (P2, confirmed)

Location: SKILL.md L108–112 (provenance rule) vs SKILL.md L139–144 (merge step enforcement)

The provenance rule introduced in this PR says agent-inferred entries are "a proposal to confirm with the user, never a silently hard constraint." But the merge step at L139–144 says to "disqualify any candidate… that contains a word-level blocklist entry" — with no provenance check. The enforcement step makes no distinction between user-stated and agent-inferred entries, so an inferred entry still causes silent hard disqualification. The stated guarantee has no teeth.

What the merge step needs to say (or equivalent): disqualify candidates containing a user-stated or user-confirmed blocklist word; flag candidates containing an agent-inferred entry for the human to review rather than silently dropping them.

Fix this →


Finding 2 — Sentence-form test absent from tournament pre-filter (P2, confirmed)

Location: SKILL.md L133–137 (sentence-form test, default pass) vs SKILL.md L183–188 (tournament pre-filter)

The tournament section explicitly enumerates the filters it inherits before the bracket begins: reject-list, blocklist, and collision check. It does not include the sentence-form test. A contentless utterance name like bare check can pass all three tournament pre-filters and enter the elimination bracket, winning against meaningful competitors — exactly the failure case the new rule is meant to prevent.

The fix is small: add the sentence-form test for utterance names to the tournament's pre-bracket filter list alongside the three it already inherits.

Fix this →


Other notes (non-blocking, pre-existing)

  • Legacy blocklist provenance (flagged by previous Claude review): entries inherited from earlier conversation rounds carry no provenance metadata. Worth adding guidance like "treat any entry without explicit provenance as agent-inferred."
  • Missing CHANGELOG dates (## [0.3.0] - YYYY-MM-DD): pre-existing gap across all three version entries; worth a follow-up.

Verdict

Two correctness issues require changes before merge. Both are introduced by this PR: the provenance guarantee is stated but not enforced at merge time, and the sentence-form test is missing from the tournament path. Both are small, targeted fixes. The rest of the PR is clean.

@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 11s —— View job


Security Review — PR #862

  • Gather PR diff
  • Review plugins/naming/.claude-plugin/plugin.json
  • Review plugins/naming/skills/name-it-better/SKILL.md
  • Review plugins/naming/CHANGELOG.md
  • Report findings

No security issues found.

All three changed files are prose and a version/keyword update. Here is the surface area examined:

plugin.json (+10/-2) — version bump 0.2.0 → 0.3.0; keywords array reformatted to multi-line (no values changed). No new fields: no mcpServers, hooks, allowedTools, permissions, dangerouslyAllowedPermissions, or env entries introduced. Capability surface unchanged.

SKILL.md (+21/-3) — four prose additions to the naming-skill instructions:

  • Terms-of-art brief field (directs the model to research field meanings before generating)
  • Blocklist provenance annotation (user-stated vs agent-inferred) — a net safety improvement; it makes an implicit constraint explicit and prevents agent-assumed blocklist entries from silently eliminating candidates
  • Sentence-form test as an early merge-step filter
  • Temporal-neutrality constraint for skills that load as primed context

None of these additions introduce shell interpolation, command injection, path traversal (../), template injection via untrusted ${...} expansion, credential/secret handling, remote-content fetching directives beyond the skill's already-established subagent pattern, privilege escalation, or data-exfiltration paths. The context/sources.md references are unchanged plugin-local paths.

CHANGELOG.md (+17/-0) — changelog prose only. No executable content.

GitHub Actions — no .github/workflows/ files touched. No pull_request_target, workflow_run, run: blocks, permissions: widening, or action-pin changes in scope.

Supply chain / dependencies — no package manifests, lock files, or action pins modified.

@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: 619e8ccab5

ℹ️ 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
…lters

Codex review findings: the merge step disqualified candidates on ANY
blocklist word, contradicting the new provenance rule — agent-inferred
entries now flag instead of disqualify, user-stated entries still hard
disqualify; and tournament mode's pre-bracket filters now include the
sentence-form test and the same provenance-aware blocklist behavior.

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

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

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 55s —— View job


PR Review — feat(naming): fold running-retro tournament lessons into name-it-better

  • Gather context and read changed files
  • Verify fixes for previous P2 findings (blocklist provenance at merge, sentence-form test in tournament)
  • Check new Codex P2 finding (temporal neutrality enforcement)
  • Post final review

Status of previous P2 findings

Finding 1 — Inferred blocklist entries hard-disqualify at merge:Fixed (commit 93ad8a0)

The merge step at L141–146 now correctly distinguishes provenance:

  • Hard-disqualify: USER-STATED blocklist words only
  • Agent-inferred matches: stay in, flagged for the user to confirm or override

The provenance guarantee now has teeth at the enforcement point.

Finding 2 — Sentence-form test absent from tournament pre-filter:Fixed (commit 93ad8a0)

The tournament section at L186–193 now explicitly names the sentence-form test as one of the inherited merge filters applied before the bracket begins. The provenance rule is also wired in here correctly.


Remaining open finding (P2)

Temporal-neutrality constraint not wired into merge filters or tournament pre-bracket

The temporal-neutrality rule is stated at L80–84 in the modality-layer discussion: "A skill loadable as primed context at conversation start must also be temporally neutral: the name has to read valid before any work exists."

The merge step at L133–148 added the sentence-form test as an explicit filter, but did not add temporal neutrality alongside it. The tournament pre-bracket at L186–193 has the same gap.

The sentence-form test does not cover this case — it asks whether a candidate reads as the imperative you would say, cold. A name like critique-your-run passes the sentence-form test (it IS an imperative utterance) but violates temporal neutrality (it presupposes a completed run exists). A temporally invalid name can survive scoring and win a tournament bracket without any filter rejecting it.

The fix is parallel to what was done for the sentence-form test: add temporal neutrality as an explicit early filter at the merge step for skills that can fire as primed context, and reference it in the tournament pre-bracket list.

Fix this →


Other notes (pre-existing, non-blocking)

  • Legacy blocklist provenance — entries accumulated in prior conversation rounds carry no provenance metadata. A "treat inherited entries without explicit provenance as agent-inferred (confirm before treating as hard)" note would close the gap.
  • Missing CHANGELOG dates## [0.3.0] - YYYY-MM-DD format is called for by Keep a Changelog; all three version entries are undated. Pre-existing.

Verdict

The two P2 findings from the previous review are correctly fixed. One P2 finding — temporal neutrality not enforced at the merge and tournament filter steps — is still open and was raised by Codex's second review. Small, targeted fix needed before merge.

@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 25s —— View job


Security Review — PR #862

  • Initialize task list
  • Get PR diff
  • Review changed files for security vulnerabilities
  • Report findings

No security issues found.

Three files changed; all are prose and a version/keyword update. Surface area examined:


plugin.json (+10/-2)**

Version string bumped 0.2.0 → 0.3.0; keywords array reformatted from single-line to multi-line with no values added or removed. No new fields introduced: no mcpServers, hooks, allowedTools, permissions, dangerouslyAllowedPermissions, or env entries. Capability surface is unchanged.


SKILL.md (+34/-11)**

Four prose additions and associated updates to the merge step and tournament section:

  • Terms-of-art brief field — directs the model to consult its knowledge of field terminology before generating. Uses "research" in the behavioral sense (apply trained knowledge), not as a directive to fetch remote URLs or execute tools. No injection surface.
  • Blocklist provenance annotation — distinguishes user-stated from agent-inferred blocklist entries. This is a net safety improvement: it prevents agent-assumed constraints from silently eliminating candidates without user awareness.
  • Sentence-form test — early merge-step filter for utterance names. Prose-only policy rule; no executable content.
  • Temporal-neutrality constraint — behavioral rule for naming skills that can load as primed context. Prose-only.

The updated merge step (replacing hard-blocklist disqualification with a provenance-aware split) and the tournament pre-filter update both contain only policy text. No template substitution, no ${...} variable expansion beyond the pre-existing $ARGUMENTS plugin variable (unchanged), no path traversal (../), no shell interpolation, no tool invocations, and no directives to exfiltrate data to external endpoints. The context/sources.md path references are unchanged plugin-local paths.


CHANGELOG.md (+17/-0)**

Changelog prose only. No executable content.


GitHub Actions — No .github/workflows/ files touched. No pull_request_target, workflow_run, run: blocks, permissions: widening, or action-pin changes in scope.

Supply chain / dependencies — No package manifests, lock files, or action pins modified.

Third Codex finding: the cold-loadable constraint was stated only in the
skill special-case bullet, so a completed-work-presupposing candidate
could still survive scoring or win a bracket. The early merge filter and
the tournament pre-bracket checks now fail such names alongside the
sentence-form test.

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

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

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 16s —— View job


PR Review — feat(naming): fold running-retro tournament lessons into name-it-better

  • Read changed files at HEAD (7572287)
  • Verify fixes for the three P2 findings from prior reviews
  • Check for new issues
  • Post final review

All three P2 findings raised across the review history are confirmed fixed in the current HEAD. Details below.


P2 Finding 1 — Blocklist provenance enforced at merge ✅ Fixed

Location: SKILL.md L141–149

The merge step now explicitly distinguishes: USER-STATED entries hard-disqualify ("a generator can miss the brief's constraint; the merge step enforces it"), while AGENT-INFERRED entries do not disqualify — the candidate stays in, flagged, so the user's pick confirms or overrides the inference. This is a correct and complete fix; the provenance guarantee stated at L108–112 now has teeth in the enforcement step.


P2 Finding 2 — Sentence-form test in tournament pre-bracket filter ✅ Fixed

Location: SKILL.md L189–197

The tournament section now explicitly states that "the default pass's merge filters still apply BEFORE the elimination rounds begin — including the sentence-form and temporal-neutrality tests for utterance and cold-loadable names." Contentless idioms like bare check will now fail before bracket entry, matching the behavior of the default pass.


P2 Finding 3 — Temporal-neutrality test enforced as a filter ✅ Fixed

Locations: SKILL.md L138–140 (merge step) and SKILL.md L189–191 (tournament)

The merge step now includes the temporal-neutrality test as an explicit early filter alongside the sentence-form test: "a candidate that presupposes completed work fails before scoring, however accurate it is once work exists." The tournament section mirrors this. The constraint stated at L82–84 is now enforced at all decision points.


Other files — LGTM

plugin.json — version 0.3.0 is correct semver for feature additions; keywords array is clean.

CHANGELOG.md — accurately summarises all four lessons in the 0.3.0 block.


Pre-existing notes (non-blocking, carry forward)

  • Legacy blocklist provenance — entries from prior rounds carry no provenance metadata. "Treat any inherited entry without explicit provenance as agent-inferred" would close this gap, but it's pre-existing.
  • Missing CHANGELOG dates — all three version entries still use ## [0.3.0] without a date. Pre-existing, worth a follow-up.
  • Prose nit in tournament section (L193–194) — "fail contentless idioms and completed-work-presupposing names early, and disqualify any that match the rejected incumbent, contain a user-stated blocklisted word" — the "contain" continuation is slightly awkward at the line break. Non-blocking.

Verdict

Approve. All three P2 correctness findings are resolved and correctly enforced at every relevant decision point (merge step + tournament pre-bracket). The skill's stated guarantees now match its enforcement logic. No security concerns; CLAUDE.md rules satisfied.

@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 30s —— View job


Security Review — PR #862

  • Initialize task list
  • Get PR diff (git diff origin/main...HEAD)
  • Review changed files for security vulnerabilities
  • Report findings

No security issues found.

Three files changed; all are prose, keyword formatting, and a version bump. Full surface area examined:


plugin.json (+10/-2)**

Version string bumped 0.2.0 → 0.3.0; keywords array reformatted from single-line to multi-line with no values added or removed. No new fields introduced: no mcpServers, hooks, allowedTools, permissions, dangerouslyAllowedPermissions, or env entries. Capability surface unchanged.


SKILL.md (+38/-11)**

Four prose additions plus wiring into the merge step and tournament section:

  • Terms-of-art brief field (L101–107) — directs the model to apply its trained knowledge of field terminology before generating candidates. The phrase "Research them before the fan-out" is a behavioral directive for the model, not a directive to fetch remote URLs or invoke tools. No new subagent spawning. No injection surface.

  • Blocklist provenance (L108–112) — prose policy that distinguishes user-stated from agent-inferred blocklist entries. The provenance label ("user-stated" / "agent-inferred") is written by the model into the brief, not rendered from unsanitized external input in a privileged context. No injection surface; this is a net safety improvement.

  • Sentence-form test in merge step (L133–137) — prose-only filter rule. No executable content.

  • Temporal-neutrality test in merge step (L138–151) — prose-only filter rule. No executable content.

  • Updated tournament section (L189–197) — adds references to the new filters; no new injection surfaces. The only variable in the tournament section ($ARGUMENTS at L180) is a standard, pre-existing plugin variable; no new variable expansions introduced.

No template substitution, path traversal (../), shell interpolation, command injection, credential or secret handling, remote-content-fetching directives, privilege escalation, or data-exfiltration paths in any of the added text. The context/sources.md path references are unchanged plugin-local relative paths.


CHANGELOG.md (+17/-0)**

Changelog prose only. No executable content.


GitHub Actions — No .github/workflows/ files touched. No pull_request_target, workflow_run, run: blocks, permissions: widening, or action-pin changes in scope.

Supply chain / dependencies — No package manifests, lock files, or action pins modified.

@kyle-sexton
kyle-sexton enabled auto-merge (squash) July 21, 2026 16:50
@kyle-sexton
kyle-sexton merged commit 21b1b86 into main Jul 21, 2026
23 checks passed
@kyle-sexton
kyle-sexton deleted the feat/naming-tournament-lessons branch July 21, 2026 16:50
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