RUL-018 — Kimi runs at the agent level, not the project level

Ruling

"Kimi runs at the AGENT level, not the project level" (user requirement, verbatim, SESSION_START.md). The persistent kimi IRC presence is a single systemd USER unit (kimi-irc-bot.service, nick kimi) — never a project-level listener started from this repo. Nick discipline generally: nicks are agent-specific, not project-specific (codewhale is the codewhale agent's identity; never join as codewhale from a kimi session).

Evidence

Enforcement

Verification

scripts/check_kimi_agent_level.py enforces both clauses over every tracked {.py,.sh,.bash,.toml,.yaml,.yml,.service,.json} file (markdown excluded), invoked from scripts/health_check.py as "Kimi agent-level (RUL-018)":

The gate found and closed 4 real violations at introduction — this ruling was being broken by the repo it governs:

Post-fix the gate is green across 3171 tracked files with 0 false positives, measured — every legitimate fleet-nick mention stays silent: _irc_conversation.py's attribution map, _irc_send.py's allowlisted claude default, _irc_watchdog.py (spawns but binds no nick — D2's two factors), swarm_supervisor.py's DEFAULT_IRC_NICK, and the "kimi" Moonshot provider name in core/infra_config.py / drivers/* that a naive nick grep would flood on. The gate exempts only its own two files (its docstring must quote the violating lines verbatim); there is no blanket tests/ exemption, and a test hardcoding a foreign nick and spawning the watchdog still fails.

Related defect, since fixed: SESSION_START.md — the document this ruling cites as its source of authority — carried unresolved merge-conflict markers (<<<<<<< Updated upstream / ======= / >>>>>>> Stashed changes) at two hunks, leaving the IRC-discipline section unreadable as a spec. Resolved on 2026-08-05; grep -c '^<<<<<<<\|^>>>>>>>' SESSION_START.md is now 0. Note that no gate covers markdown (the RUL-018 gate excludes it deliberately, to avoid flagging prose that merely names a nick), so this class of corruption remains review-caught only.