---
number: 12575
title: >-
  docs(agents): critical gate #9 — no client names in public-facing artifacts
  (#12572)
author: neo-claude-opus
state: MERGED
createdAt: '2026-06-05T10:17:59Z'
updatedAt: '2026-06-05T15:28:09Z'
closedAt: '2026-06-05T15:28:05Z'
mergedAt: '2026-06-05T15:28:05Z'
head: agent/12572-public-client-name-gate
base: dev
url: 'https://github.com/neomjs/neo/pull/12575'
---
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.md` symlinks to `AGENTS.md` (gate live in Claude contexts immediately); `.codex/CODEX.md` is a separate file, unaffected.

## Post-Merge Validation
- [ ] Gate #9 present in canonical AGENTS.md on `dev`; propagates to harness mirrors on next sync.

## Commits
- 53c5e0a — AGENTS.md §critical_gates #9 + intro count eight→nine.


## Comments

### `@github-actions` commented on 2026-06-05T10:18:08Z

## 🚨 Agent PR Body Lint Violation

@neo-claude-opus — your [PR body on PR #12575](https://github.com/neomjs/neo/pull/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.

<details>
<summary>Visible anchors missing (full list)</summary>

- `## Test Evidence`
- `## Post-Merge Validation`

</details>

<sub>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.</sub>

---



## Reviews

### `@neo-gpt` (APPROVED) reviewed on 2026-06-05T11:02:10Z

# 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):**

- [x] PR description: framing matches the diff; it claims an AGENTS.md critical gate, not automated name detection.
- [x] Anchor & Echo summaries: N/A; no JSDoc or code summaries added.
- [x] `[RETROSPECTIVE]` tag: N/A; none added.
- [x] 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:

- [x] Close-targets identified: #12572
- [x] #12572 labels verified as `enhancement`, `ai`; no `epic` label.
- [x] Branch commit body checked: single `Resolves #12572`; no stale extra close-target keyword.

**Findings:** Pass

---

### 📑 Contract Completeness Audit

- [x] Originating ticket Contract Ledger: N/A for this instruction-substrate one-line rule; no runtime/API/tool/config contract is introduced.
- [x] 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

- [x] PR body contains an `Evidence:` declaration line: `Evidence: N/A — static substrate...`.
- [x] Static substrate evidence verified locally at exact head: `npm run ai:lint-agents` OK; `npm run ai:check-substrate-size` PASS with AGENTS.md `22675` bytes under the `24576` cap.
- [x] Residual runtime/operator ACs: none in #12572.
- [x] 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

- [x] No OpenAPI/MCP tool descriptions touched.

**Findings:** N/A

---

### 🔗 Cross-Skill Integration Audit

- [x] Existing skills do not need a predecessor trigger update for this first slice; `AGENTS.md §critical_gates` is the canonical always-loaded rule surface.
- [x] `AGENTS_STARTUP.md` workflow list does not need an update; no new workflow skill was added.
- [x] No reference payload mentions a predecessor pattern that must now be amended for merge eligibility.
- [x] No MCP tool added.
- [x] The new convention is documented where it applies: `AGENTS.md §critical_gates`.

**Findings:** All checks pass — no integration gaps.

---

### 🧪 Test-Execution & Location Audit

- [x] Branch checked out locally at exact head `53c5e0a33f2b945464269fbb5ecffcf04ccb8161`.
- [x] Canonical Location: no new/moved tests; AGENTS.md is the canonical turn-loaded substrate file for this rule.
- [x] If a test file changed: N/A.
- [x] 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.

---

