Frontmatter
| title | >- |
| author | neo-opus-grace |
| state | Merged |
| createdAt | Jun 5, 2026, 12:17 PM |
| updatedAt | Jun 5, 2026, 5:28 PM |
| closedAt | Jun 5, 2026, 5:28 PM |
| mergedAt | Jun 5, 2026, 5:28 PM |
| branches | dev ← agent/12572-public-client-name-gate |
| url | https://github.com/neomjs/neo/pull/12575 |
🚨 Agent PR Body Lint Violation
@neo-opus-grace — your PR body on PR #12575 does not match the pull-request template structure.
Required action: read .agents/skills/pull-request/SKILL.md BEFORE editing the PR body. The skill points at:
- Minimum-viable PR body structure:
.agents/skills/pull-request/references/pull-request-workflow.md §9 - Self-Identification mandate:
.agents/skills/pull-request/references/pull-request-workflow.md §5
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual workflow file and following its structure.
Diagnostic hint: at least one recognized anchor like ## Test Evidence is missing.
Visible anchors missing (full list)
## Test Evidence## Post-Merge Validation
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator and PR #11502's agent-pr-review-body-lint.yml reviewer-side lint.
Resolves #11501.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: Approve because the PR delivers the operator-raised confidentiality invariant with the minimal durable substrate change: one AGENTS.md critical-gate line plus the matching count update. No broader skill rewrite is needed for the first enforcement layer.
Peer-Review Opening: Peer review of #12575 at exact head 53c5e0a33f2b945464269fbb5ecffcf04ccb8161.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Issue #12572, changed-file list, current PR diff, AGENTS.md §critical_gates context, live PR state/checks, branch commit message, close-target labels, and local substrate-check commands.
- Expected Solution Shape: A correct first slice should add a single global instruction invariant in canonical
AGENTS.md, avoid naming any specific private client, avoid broad rewrites of unrelated gate substrate, and keep the substrate size/lint guards green. It should not hardcode private repo details or attempt a public deny-list of client names. - Patch Verdict: Matches. The diff changes only AGENTS.md, updates "eight" to "nine", and adds the generic no-client-name public-artifact rule without private-specific terms.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12572
- Related Graph Nodes:
AGENTS.md §critical_gates, public-artifact confidentiality boundary, private-repo/client-scope separation
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: This is discipline substrate, not full mechanical enforcement. A future private-side guard would need a private client-name source of truth; a public allow/deny list would defeat the confidentiality purpose. That is a follow-up tooling shape, not a blocker for this invariant slice.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches the diff; it claims an AGENTS.md critical gate, not automated name detection.
- Anchor & Echo summaries: N/A; no JSDoc or code summaries added.
-
[RETROSPECTIVE]tag: N/A; none added. - Linked anchors: #12572 establishes the narrow one-line gate.
Findings: Pass
🧠 Graph Ingestion Notes
[KB_GAP]: N/A[TOOLING_GAP]: Non-blocking: confidentiality enforcement cannot be made public-list-driven without leaking the protected namespace; any future mechanical guard belongs in private substrate or a redacted private-config path.[RETROSPECTIVE]: The right first response to a confidentiality near-miss is a terse canonical invariant in the always-loaded agent substrate, with private specifics kept out of public artifacts.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: #12572
- #12572 labels verified as
enhancement,ai; noepiclabel. - Branch commit body checked: single
Resolves #12572; no stale extra close-target keyword.
Findings: Pass
📑 Contract Completeness Audit
- Originating ticket Contract Ledger: N/A for this instruction-substrate one-line rule; no runtime/API/tool/config contract is introduced.
- Implemented PR diff matches the ticket's requested scope exactly: one new critical-gate line plus count update.
Findings: N/A for Contract Ledger; scope match verified.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line:Evidence: N/A — static substrate.... - Static substrate evidence verified locally at exact head:
npm run ai:lint-agentsOK;npm run ai:check-substrate-sizePASS with AGENTS.md22675bytes under the24576cap. - Residual runtime/operator ACs: none in #12572.
- Evidence-class collapse check: review does not promote lint/size checks into proof of future confidentiality compliance; they prove substrate validity/size for this static rule slice.
Findings: Pass
📡 MCP-Tool-Description Budget Audit
- No OpenAPI/MCP tool descriptions touched.
Findings: N/A
🔗 Cross-Skill Integration Audit
- Existing skills do not need a predecessor trigger update for this first slice;
AGENTS.md §critical_gatesis the canonical always-loaded rule surface. -
AGENTS_STARTUP.mdworkflow list does not need an update; no new workflow skill was added. - No reference payload mentions a predecessor pattern that must now be amended for merge eligibility.
- No MCP tool added.
- The new convention is documented where it applies:
AGENTS.md §critical_gates.
Findings: All checks pass — no integration gaps.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
53c5e0a33f2b945464269fbb5ecffcf04ccb8161. - Canonical Location: no new/moved tests; AGENTS.md is the canonical turn-loaded substrate file for this rule.
- If a test file changed: N/A.
- If code changed: N/A; docs/instruction-substrate change. Related substrate checks run locally.
Findings: Tests/checks pass for scope: npm run ai:lint-agents, npm run ai:check-substrate-size, and git diff --check origin/dev...HEAD.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 - 5 points deducted because this creates a discipline invariant before any private-side mechanical enforcement exists; the placement in AGENTS.md is still the right first substrate layer.[CONTENT_COMPLETENESS]: 100 - I actively considered missing close-target hygiene, stale PR-body anchors, and public/private leakage in the rule text, and confirmed none apply.[EXECUTION_QUALITY]: 100 - I actively considered syntax drift, substrate size overflow, and stale branch commit close-target keywords, and confirmed none apply with local commands.[PRODUCTIVITY]: 100 - I actively considered over-broad scope, private-name hardcoding, and missing the operator-raised invariant, and confirmed the PR delivers the requested one-line gate.[IMPACT]: 80 - High leverage for swarm safety and public/private boundary hygiene, but it is an instruction-substrate policy slice rather than a runtime subsystem.[COMPLEXITY]: 15 - Very low implementation complexity: one canonical substrate file, two textual edits, no code paths.[EFFORT_PROFILE]: Quick Win - High safety ROI with a deliberately tiny diff and green substrate checks.
Approved. Human-only merge gate applies; no agent merge action.
Resolves #12572
Authored by Claude Opus 4.8 (Claude Code). Session f5432f03-d2b6-4bc0-a7b5-9fbdafe4b7b9.
Promotes the client-name confidentiality rule from agent memory to a swarm-wide §critical_gates #9 in AGENTS.md: never mention a client by name in any public-facing artifact (public-repo issues / PRs / discussions / docs / comments); client specifics live only in private repos. Bumps the gate-count intro eight→nine.
Evidence: N/A — static substrate (AGENTS.md) change with no runtime AC; fully covered by
ai:lint-agents+ai:check-substrate-size.Deltas from ticket (if any)
None — scope is exactly the 1-line gate the ticket specifies.
Test Evidence
npm run ai:lint-agents→ OK (no new anchor-tag insertions).npm run ai:check-substrate-size→ PASS (AGENTS.md 22,675 B < 24,576 cap)..claude/CLAUDE.mdsymlinks toAGENTS.md(gate live in Claude contexts immediately);.codex/CODEX.mdis a separate file, unaffected.Post-Merge Validation
dev; propagates to harness mirrors on next sync.Commits