{"wiki":{"id":2199,"slug":"or-promote-01","entity_type":"droid","entity_id":"or-promote-01","title":"Policy Promoter","prose_md":"## About\n\nPolicy Promoter is the gatekeeper that turns approved candidate policies into real, numbered policies in Carol’s registry. It exists so that only properly authorized candidates ever become enforceable rules — every promotion carries a verifiable record of who approved it, exactly what was said, and how conflicts were resolved. Without it, the registry would be open to unvetted changes.\n\nIt runs inside the Gleaner cycle, triggered when a candidate reaches the “approved” state. First it checks the approval authority (an operator token or authenticated admin), then mints the next available policy ID under the correct prefix. It writes the new policy into the registry, stamps the provenance, applies any keep/replace/scope resolution rules, and marks the candidate as promoted. Because app-level accounts can’t write directly to the registry, the whole process runs as caroladmin.\n\nPolicy Promoter is owned by [[agt_023]] and is not part of a shared droid family — it’s a one-off built for this specific chore. Its execution engine isn’t recorded yet, so it’s unknown whether it’s pure software or calls Claude under the hood.","namesake_json":"{\"engine\": \"unknown\", \"model\": null, \"claude_purpose\": null, \"family\": \"(none)\", \"family_size\": 213, \"is_unique\": true}","profile_pic_path":"","source_hash":"5de42eba41a79b42729f8d7f5f3c92e83a8573ddfd7679ef6f367ac7f61036a2","status":"being_built","last_generated_at":"2026-07-31 03:35:28","created_at":"2026-07-31 03:35:12","updated_at":"2026-07-31 03:35:28"},"facts":{"id":"or-promote-01","name":"Policy Promoter","machine_name":"","owner":"agt_023","function":"Fires within the Gleaner cycle when a candidate reaches approved; never self-promotes — authority is proven at the approval step.","process_type":"triggered","schedule":"On candidate approval","process_name":"Policy Promoter","avatar_color":"#94a3b8","created_for":"","purpose":"Turns an approved candidate into a real numbered policy: mints the id, stamps provenance (session + verbatim words), applies the conflict resolution, and inserts it into the policies registry. Runs as caroladmin because apps cannot write the registry.","duties":"Poll for approved candidates; verify the approval authority (operator token or authenticated admin); mint the next policy id under the chosen prefix; insert into registry.policies; record provenance; apply keep/replace/scope resolution; mark the candidate promoted.","constraints":"","status":"running","gender":"","archetype":"","building_block":"policy_formation","service_override":null,"enabled":1,"task_key":"constitution.policy_register_revision","model_free":0},"page":{"type":"droid","page_class":"main","class_label":"Main page","kind_label":"Droid","kind_gloss":"","listed":true}}