# State Schema: `state/people/.json` Owned by: `claw-people-observer` (write); read by `claw-report-writer`. ## Hard rule **This schema NEVER contains a verdict.** Atlas writes only data; the boss writes any verdict (e.g., 9-Box potential dimension, A/B/C label). Fields that would imply a verdict (`潜力`, `Topgrading_等级`) exist with `null` defaults and are written by the boss via override only — never by Atlas. ## Identifier convention `.json` where canonical_name is the merged identity (after alias resolution). Aliases are stored in `state/people/aliases.json`. Examples: `张三.json`, `lisi.json`, `Wang_Wu.json` ## Top-level shape ```jsonc { "name": "张三", // string, canonical identity "aliases": ["zhang san", "Z.San"], // array "internal": true, // bool — true if email domain ∈ company_domains "primary_email": "zhangsan@us.com", // string "产出指标": { // object — pure metrics, no verdicts "active_projects": 8, // int, projects where person is Responsible AND status=Active "completed_30d": 2, // int, completed in last 30 days "stalled_ratio": 0.375, // float, stalled / (active + stalled) "avg_response_hours": 27, // float, median, only when person is Responsible "客户主动催办次数_30d": 4, // int "computed_at": "2026-05-09T07:30:00Z" }, "行为标签_BARS": [ // array, behavior-anchored ratings { "维度": "主动性", // string, BARS dimension "锚点": "客户首次催才回应", // string, the matched anchor phrase "评分": 2, // int 1..5 "依据邮件": ["msg-abc@..."], // array, source email IDs "rule_ref": "BARS-proactivity-3", // string, which rule produced this tag "asserted_at": "2026-05-09T07:30:00Z" } ], "关键事件_CCAR_30d": [ // array, critical incidents { "date": "2026-04-22", "事件": "PRJ-001 客户投诉,未升级", "性质": "负向", // enum: 正向 | 负向 "source_email_ids": ["msg-xyz@..."], "rule_ref": "R-CCAR-escalation-missed" } ], "网络中心度_ONA": { // object, refreshed weekly "信息中介度": 0.42, // float [0,1], betweenness centrality "孤立指数": 0.18, // float [0,1], 1 / unique_correspondents (normalized) "解读": "中等枢纽,未被孤立", // string, machine-generated brief "computed_at": "2026-05-06T08:00:00Z" }, "9_box_自动估": { // object "performance": "中下", // enum: 高 | 中 | 中下 | 低 — auto-estimated "潜力": null, // enum or null — NEVER auto-set; boss-only "建议象限": "Solid Performer 或 Underperformer,看潜力定", // string, prose suggestion "boss_to_confirm": true // bool, true until boss writes 潜力 }, "Topgrading_等级": null, // enum: A | B+ | B | B- | C | null — boss-only "data_sparse": false, // bool, true when person has < 3 active projects "_meta": { "created_at": "2025-08-12T10:00:00Z", "updated_at": "2026-05-09T07:30:12Z", "atlas_version": "v0.4", "merge_history": [] // append when aliases get merged in } } ``` ## What Atlas IS allowed to write - Activity metrics (项目数 / 卡点率 / 响应时长 etc.) - Behavior tags from boss-confirmed BARS anchors - Critical incidents matched by rules - ONA centrality - 9-Box performance dimension (auto-estimate, with `boss_to_confirm: true`) ## What Atlas is NEVER allowed to write - `9_box_自动估.潜力` — boss-only - `Topgrading_等级` — boss-only - Any field that says "应该" / "建议解雇" / "不胜任" — language guard - BARS tags using anchors not in `boss_skill.md > Decision Heuristics` ## Boss override format Boss replies to Brief or weekly rollup: ``` OVERRIDE PEOPLE 张三 9_box_自动估.潜力="高" OVERRIDE PEOPLE 张三 Topgrading_等级="B+" OVERRIDE PEOPLE 张三 行为标签 retire BARS-proactivity-3 reason="不公平" ``` Logged to `state/audit/boss_overrides.csv`. Retired BARS tags increment a counter in the rule's audit; if any rule is retired ≥ 2 times, it surfaces in next quarterly distillation review. ## Display rule for `claw-report-writer` When rendering people sections in Brief / Rollup: - Always lead with metric ("张三 项目密度 8, 卡点率 37.5%") - Never lead with a verdict ("张三表现下滑") - BARS tags shown only with their anchor + email ID hint - Topgrading_等级 shown only if boss has filled it - ONA centrality used as supplementary context, not headline ## Privacy - This file lives inside the client's network. Never leaves. - Right-to-delete: a single CLI command (`atlas-people-purge --name "张三"`) wipes all related state and writes a tombstone to `audit/`.