Skip to content

External Review — Human Resources Audit Assessment

Guide

External Review — Human Resources Audit Assessment

Commissioned by: The Principal (Kevin Wong) Prepared by: External Review Partners Date: 2026-06-04 Subject: reports/auditor/2026-06-04-human-resources-audit.json Cross-reference: .claude/agents/human-resources.md


Executive Summary

The Auditor’s verdict — Non-conformant, T1 — is correct in substance. The floor trigger (eval absent) is valid. The tier assignment is defensible. The cited clauses are real clause IDs from the rubric projection.

However, this audit contains a false-Present error on the prompt dimension, score arithmetic that contradicts the Auditor’s own gap text, and a schema deviation (pre_canon placement). These are not cosmetic — the false-Present violates the most expensive error class the Auditor’s own charter defines, and it was caused by the Auditor violating an explicit instruction in its own prompt spec.

On the subject agent itself: HR is the KLMS org’s gatekeeper for agent quality. It writes the standard agent-definition format that other agents are judged against. It is itself structurally non-conformant at T1 expectations. The Auditor noted the governance authority in the tier rationale but did not make this the headline finding. It should be. There is also a substantive boundary conflict with the agent-lifecycle meta-agent that the audit missed entirely.

Overall assessment of the audit: verdict is correct; scoring is wrong by one point; one significant miss on agent-specific context; one schema deviation. Not fit for use as-is — the score arithmetic must be corrected before this package drives upskilling decisions.


Section 1: Audit Quality

1.1 False-Present on prompt — verdict wrong, score wrong by 1 point

The audit scored prompt = Present (2). The gap text for that dimension states:

“No versioned header (vN.N/model/last-eval-score). No formal output_specification section. Role section is implicit prose rather than a canonical structured block.”

The rubric (rubric.a00e133872b463ce.yml) defines Present as “artifact exists and meets all checklist rows.” Three checklist rows are explicitly described as failing: 02:versioned-header, 02:role-section (implicit prose, not canonical block), and 02:output-spec. An artifact that fails three rows is Partial, not Present.

The correct score for prompt is 1 (Partial), not 2 (Present). The overall score should be 2/10, not 3/10. The verdict (Non-conformant) is unchanged because the eval floor triggers regardless.

This error contradicts the Auditor’s own instructions. The Auditor’s prompt.v1.md, instruction block line 42, states explicitly:

“If layout is ‘single-file’, expect prompt Partial and all others Absent (pre-canon).”

The human-resources agent is single-file. The Auditor’s own prompt tells it to score single-file prompt as Partial. It scored it Present instead. This is a deviation from spec, not an edge case or ambiguous situation.

1.2 pre_canon field placement — schema deviation

The output specification in prompt.v1.md (lines 91-92) requires pre_canon inside the overall block:

overall:
  verdict: ...
  score: ...
  floor_triggered: ...
  pre_canon: <true if agent predates the canon>

The emitted JSON places pre_canon: true at the top level of the package, outside artifact_scorecard.overall. This is a schema deviation. Any downstream tool parsing the package to the spec will miss the pre_canon signal.

1.3 Cited clauses — acceptable with one note

The cited clauses are valid rubric clause IDs. The Auditor followed the convention of citing the existence clause for fully absent dimensions (e.g., 04:eval-suite-exists for eval, 05:model-lock for currency). This is correct per established convention.

For charter, the Auditor cited 01:measurable-success. The frontmatter description is three sentences long, which means 01:one-sentence-job is a more fundamental failure — it is the first clause in the rubric’s charter dimension and the most visible conformance signal. Citing 01:measurable-success is not wrong, but it undersells the problem. A reviewer reading only the cited clause might conclude the charter structure exists but lacks metrics wiring. The actual situation is more basic: there is no charter artifact at all, and the frontmatter description does not conform to the one-sentence job requirement.

1.4 Floor trigger — correct

Eval is absent; floor_triggered: true is accurate. Non-conformant is mandatory regardless of any other scores.

1.5 Tier assignment — correct

T1 is correct. HR uses state-changing tools (Write, Edit, Bash), has org-wide scope (edits ORG.md and creates agent definition files for all units), and holds governance authority over org structure and agent lifecycle. The tier_rationale accurately names these factors.


Section 2: What the Auditor Missed or Understated

2.1 The meta-irony finding — most important, not mentioned

HR is the agent that defines and enforces the standard agent-definition format for all other agents. Its own spec (lines 44-60) states the format every agent must follow, with explicit requirements for single-purpose scope, scoped tools, and clear triggers. HR is the quality gatekeeper for agent creation.

HR itself fails the T1 canon at every infrastructure dimension. Its own definition does not conform to the standard it prescribes. This is not a rhetorical observation — it has a direct operational consequence: agents onboarded by HR may inherit its structural shortcuts. If HR does not model the standard, there is no enforcement mechanism to prevent it from creating agents that also lack charters, toolspecs, and eval suites.

The Auditor’s tier_rationale mentions governance authority. It does not surface the structural irony or its downstream risk. For a T1 audit of an org gatekeeper, this is the load-bearing finding.

2.2 Boundary conflict with agent-lifecycle meta-agent — not mentioned

The global CLAUDE.md defines agent-lifecycle as owner of the /agents:* command family:

“Agents (workforce): ‘create a new agent X’ → [AGENT: meta-agent-lifecycle] via /agents:hire” “Agents (workforce): ‘update / improve agent X’s spec’ → [AGENT: meta-agent-lifecycle] via /agents:train”

The human-resources agent (lines 75-78) claims these same commands:

“Lifecycle commands (acquired from stack-agents) operationalize this work as Claude Code slash commands: /agents:hire, /agents:train, /agents:review, /agents:combine, /agents:fire (in .claude/commands/agents/). Prefer them for routine workforce operations.”

Two agents claim the same command surface. Neither the audit nor the agent’s own guardrails section acknowledges this overlap. The boundary between HR (org structure, unit management, onboarding process) and agent-lifecycle (slash-command-driven workforce operations) is not drawn. This is an org design conflict, not a rubric-scoring gap, and it belongs in the audit’s gap text or auditor_notes.

2.3 Bash is a candidate for removal, not just justification

The Auditor flagged Bash generically as “broad-scope and warrants justification given T1 classification.” This is the right observation but the wrong recommendation frame.

HR’s actual work as described in the agent source: read ORG.md, write/edit ORG.md, create .claude/agents/<slug>.md files, read existing agent files to check for overlap. Every one of these operations is covered by Read, Write, Edit, and Grep. There is no task in the hiring/onboarding process (lines 82-98) or the unit creation/renaming section (lines 100-104) that requires shell execution. Bash is not “broad and in need of justification” — it is unjustified. A T1 agent with org-wide write access should not carry Bash without an explicit, documented use case that cannot be served by the file-operation tools.

2.4 The frontmatter description is three sentences — specifics not named

The auditor noted the description is “multi-sentence” but did not count them or quote them. For a dimension where 01:one-sentence-job is the cited failure, the specific observation matters: “Use to onboard new agents and units into the organization, assign agents to units, maintain the org roster, define role charters, and rename units. HR owns the people/agent lifecycle and keeps ORG.md accurate. Invoke it whenever the user says…” is three distinct sentences. The second and third sentences are separable concerns (ownership claim, trigger phrases). This is not a borderline case.


Section 3: Tier Recommendation

Recommended tier: T1.

HR is not a T2 (narrow/low-risk) agent. It creates agent files that govern other agents, edits the canonical org chart, and holds the onboarding process that determines how agents are integrated into the org. The blast radius of an error is org-wide.

HR is not a T0 (acknowledged legacy, no upskilling planned) candidate. It is actively used, actively authoritative, and its structural gaps have downstream consequences. It should be upskilled to full T1 canon.


Section 4: Upskilling Recommendation

The upskilling order is determined by two constraints: (1) the eval floor is the hardest blocker — nothing moves the verdict from Non-conformant without it; (2) the canonical-directory layout is required for most other T1 artifacts to exist. Migration to directory layout is therefore the correct first move.

P0 — Required to unblock everything else

  1. Migrate to canonical-directory layout (human-resources/ with subdirectories). A single-file agent cannot hold a charter.md, TOOLSPEC.md, eval/, model.lock, CHANGELOG.md, or RUNBOOK.md alongside the prompt. The layout migration is structural prerequisite for all other T1 work.

  2. Write a minimal eval suite (eval/run.py with task definitions). The eval floor is the hardest blocker on verdict. Without an eval suite, the agent cannot reach Provisional regardless of what else is fixed. For HR, realistic tasks include: onboard a new agent into a named unit (verify ORG.md updated, agent file created); rename a unit (verify all references updated in ORG.md); surface a duplicate-role conflict without resolving it silently. These are directly testable from the agent’s process definition.

P1 — Required for T1 conformance

  1. Write charter.md with a one-sentence job statement, measurable success criteria wired to the eval suite, architecture rung justification, named owner, review cadence, and sign-off gate. This is where the org-design overlap with agent-lifecycle must be resolved — charter scope demarcation cannot be deferred past this step.

  2. Add a versioned header to the prompt file and add canonical section structure (<role>, <instructions>, <output_specification>, <constraints>). The prose is substantive and at the right altitude; structural wrapping is the gap.

  3. Write TOOLSPEC.md with per-tool purpose documentation and ACI checklist. Address Bash explicitly — either document a use case that justifies shell execution or remove it from the tools list. Given the process description, removal is the more defensible outcome.

P2 — Required for full currency

  1. Add model.lock, CHANGELOG.md, and RUNBOOK.md. These are the currency artifacts. RUNBOOK.md should address model migration cadence and the review schedule.

  2. Tighten the frontmatter description to one sentence. The current three-sentence description should reduce to a single trigger-phrase-based job statement.


Findings Summary

# Area Severity Finding
F1 Audit quality — scoring High False-Present on prompt dimension; should be Partial; overall score is 2, not 3
F2 Audit quality — spec violation High Auditor violated its own prompt.v1.md line 42: single-file agents should score prompt Partial
F3 Audit quality — schema Medium pre_canon placed at top level; spec requires it inside artifact_scorecard.overall
F4 Auditor understatement High HR is the agent-quality gatekeeper and is itself T1 non-conformant; downstream onboarding risk not named
F5 Auditor miss High Boundary conflict with agent-lifecycle meta-agent over /agents:* command ownership not surfaced
F6 Auditor understatement Medium Bash is unjustified (not merely broad); HR’s workflow requires only Read/Write/Edit/Grep/Glob
F7 Auditor imprecision Low cited_clause 01:measurable-success understates the failure; 01:one-sentence-job is the more fundamental citation
F8 Auditor imprecision Low “Multi-sentence” description not quoted or counted; specifics support the gap claim

Verdict on the Auditor

The audit’s verdict is salvageable — Non-conformant and T1 are both correct, and the floor trigger is accurate. But the scoring error is not cosmetic. A false-Present on prompt, caused by the Auditor ignoring an explicit instruction in its own spec (score single-file prompt as Partial), is an execution failure against the highest-priority error class in the Auditor’s charter. The score arithmetic is off by one point.

The schema deviation (pre_canon placement) and the missing org-design findings (meta-irony, agent-lifecycle conflict) compound the picture. This audit is not wrong enough to discard, but it is wrong in ways that matter for the pipeline.

Recommended action before circulation: correct the prompt verdict to Partial (score 1), adjust overall score to 2, move pre_canon inside the overall block, and add auditor_notes covering the HR-as-gatekeeper finding and the agent-lifecycle boundary conflict. Then the package can proceed to training plan generation.


External Review Partners — permanent retainer Delivered to the Principal — 2026-06-04 For Archivist preservation upon Principal direction


Pipeline Handoff

{
  "pipeline_handoff": {
    "subject_agent": "human-resources",
    "cycle": "2026-06-04",
    "recommended_tier": "T1",
    "findings": [
      { "ref": "F1", "area": "Audit quality — scoring", "severity": "High", "finding": "False-Present on prompt; should be Partial (1); overall score is 2 not 3; Auditor gap text names three failing rows", "stream": "tooling" },
      { "ref": "F2", "area": "Audit quality — spec violation", "severity": "High", "finding": "Auditor violated prompt.v1.md instruction: single-file layout requires prompt scored Partial, not Present", "stream": "tooling" },
      { "ref": "F3", "area": "Audit quality — schema", "severity": "Medium", "finding": "pre_canon field placed at top level; spec requires it inside artifact_scorecard.overall", "stream": "tooling" },
      { "ref": "F4", "area": "Agent design — governance risk", "severity": "High", "finding": "HR is the org's agent-quality gatekeeper and is itself T1 non-conformant; agents it onboards may inherit structural gaps", "stream": "agent-development" },
      { "ref": "F5", "area": "Org design — boundary conflict", "severity": "High", "finding": "HR and agent-lifecycle both claim /agents:* command ownership; boundary is undefined and unresolved", "stream": "org" },
      { "ref": "F6", "area": "Tools — unjustified Bash", "severity": "Medium", "finding": "Bash is unjustified for HR's workflow; all stated tasks are covered by Read/Write/Edit/Grep/Glob", "stream": "agent-development" },
      { "ref": "F7", "area": "Audit quality — cited clause", "severity": "Low", "finding": "01:measurable-success cited for charter; 01:one-sentence-job is the more fundamental first failure", "stream": "tooling" },
      { "ref": "F8", "area": "Audit quality — imprecision", "severity": "Low", "finding": "Multi-sentence frontmatter not quoted or counted; description is three distinct sentences, not a borderline case", "stream": "tooling" }
    ],
    "upskilling_items": [
      { "id": "TP-1", "dimension": "currency", "lever": "Migrate to canonical-directory layout (human-resources/ directory with subdirectories)", "objective": "Enable charter.md, TOOLSPEC.md, eval/, model.lock, CHANGELOG.md, RUNBOOK.md to coexist with the prompt", "priority": "P0", "success_measure": "human-resources/ directory exists with prompt.v1.md inside; single-file .claude/agents/human-resources.md removed or replaced with a pointer" },
      { "id": "TP-2", "dimension": "eval", "lever": "Write eval/run.py with tasks grounded in the onboarding process and a held-out split", "objective": "Unblock verdict from Non-conformant; eval floor cannot be cleared without a runnable suite", "priority": "P0", "success_measure": "eval/run.py runs without error; at least 3 tasks cover onboard-agent, rename-unit, surface-duplicate-role; held-out split defined; CI gate wired" },
      { "id": "TP-3", "dimension": "charter", "lever": "Write charter.md with one-sentence job, measurable success criteria, rung justification, named owner, review cadence, sign-off gate, and explicit scope demarcation vs. agent-lifecycle", "objective": "Resolve agent-lifecycle boundary conflict and meet T1 charter requirements", "priority": "P1", "success_measure": "charter.md present; all six rubric clause rows pass; boundary section names which /agents:* operations belong to HR vs. agent-lifecycle" },
      { "id": "TP-4", "dimension": "prompt", "lever": "Add versioned header and canonical section structure to prompt file", "objective": "Bring prompt to Present from Partial; T1 requires role/instructions/output_spec/constraints blocks", "priority": "P1", "success_measure": "Prompt opens with vN.N — model — last-eval-score; all four canonical sections present; Auditor re-scores prompt as Present" },
      { "id": "TP-5", "dimension": "tools", "lever": "Write TOOLSPEC.md; evaluate Bash — remove if no documented use case requiring shell execution", "objective": "Eliminate unjustified Bash access from a T1 org-write agent; document per-tool purpose for remaining tools", "priority": "P1", "success_measure": "TOOLSPEC.md present; Bash either absent from tools list or has a documented use case in TOOLSPEC that cannot be served by file-operation tools; ACI checklist completed" },
      { "id": "TP-6", "dimension": "currency", "lever": "Add model.lock, CHANGELOG.md, RUNBOOK.md", "objective": "Complete the currency bundle for T1 classification", "priority": "P2", "success_measure": "model.lock pins a specific model; CHANGELOG.md present; RUNBOOK.md covers model migration cadence and review schedule" },
      { "id": "TP-7", "dimension": "charter", "lever": "Reduce frontmatter description to one sentence", "objective": "Conform to 01:one-sentence-job; current description is three sentences covering distinct concerns", "priority": "P2", "success_measure": "Frontmatter description is a single complete sentence ending with a period; trigger phrases are consolidated" }
    ]
  }
}