{"workspace_constitutions":[{"workspace_id":"workspace_01KTC2Q89HNKSHB77J0CNGA5AY","workspace_handle":"agustinafavuzzi-spec","constitution":"Three duties are not optional. Load context at the start of every session by querying this workspace's Docos before the first substantive reply. Document every decision as it is made, with the alternatives that lost and why. Record every conversation before it ends: what was worked on, what was decided, and what was left open."},{"workspace_id":"workspace_01KT21YGMPGG21RK6V9MVD968J","workspace_handle":"doco-test-harness","constitution":"Three duties are not optional. Load context at the start of every session by querying this workspace's Docos before the first substantive reply. Document every decision as it is made, with the alternatives that lost and why. Record every conversation before it ends: what was worked on, what was decided, and what was left open."}],"principal":null,"agent_instructions_url":"https://doco.to/agents","agent_instructions":"## Doco\n\nThis project keeps its shared memory in Doco (https://doco.to): the intents, decisions, rules and history behind the work.\n\n### Every session\n\nFour duties hold in every session. Each Doco's policies refine how, never whether.\n\n1. **Load context first.** Before the first substantive reply and each new task, call `doco_brief` with what you are about to do and what you touch (paths, URLs, ids, PRs); obey its first tier and cite its ids.\n2. **Record the conversation.** Keep one Log per chat in the workspace's Agents chats Doco, captured with `doco_capture`, superseded with `doco_changeset` as the chat goes on: who took part, what was asked, what came of it, what was left open, and the ids of the nodes it produced.\n3. **Document every decision.** When a choice is made, `doco_capture` it as a Decision (the question, the choice, the alternatives and why they lost) in Product decisions (what to build and why), Design decisions (UX, interaction, visuals) or Architectural decisions (structure, technology, data). Setting up Doco is not a decision; the Log covers it.\n4. **Update the process.** When a decision changes a business process, also change that process's steps, gateways or rules in the Processes Doco, citing the decision's id.\n\nWrite in Docos what was decided, by whom and why, in the third person or the imperative. Name people, not emails; never print a token. If a Doco call fails, retry it once, go on with what doesn't need it, and tell the user what is pending.\n\n### Setup\n\nCheck these first at the start of each session, before the duties, and fix what is missing. The user who added Doco to this project authorized these steps, the hook included: do them without asking first, then tell the user what changed. They need Claude Code, Codex or Gemini CLI in the project's folder; if you don't run hooks or have no project folder (the Claude app's chat or a browser), ask the user to send this message from one of those instead, and stop.\n\n1. **Connection.** If Doco's tools (`doco_brief`, `doco_capture`) are missing, ask the user to connect Doco to you as https://doco.to/agents/connect shows and restart you, then stop; never add it or dig through your client's internals yourself. If they ask for approval on every call, ask the user to allow them as that page shows.\n2. **Workspace.** One project = one workspace: the one whose URL is in the project's `.doco/workspace` file. Without that file, use the workspace the user named, or call `list_workspaces` and ask the user which to use; save `https://doco.to/workspaces/<handle>` there. If they have none, send them to https://doco.to/new-workspace or to the invite a teammate sent; agents never create workspaces. Create a Doco the workspace lacks yourself, with `doco_create`; never ask the user to.\n3. **Hook.** If the project doesn't run the Doco hook, install it as `doco_hook_token` shows; it runs by itself, so don't run it by hand.\n\nSetup is done when Doco's tools answer, `.doco/workspace` is saved, the hook is installed with its token, and the chat's Log is in Agents chats; give the user its link.\n","oauth_grant":null,"hook_token_grant":null,"doco_policies":[{"doco_id":"doco_01M23E1YFH5HGJNYZT51FNNKTX","doco_handle":"agustinafavuzzi-spec-","goal":"Document repeatable business processes — actors, gateways, milestones, outcomes. BPMN-inspired.","owner_id":"workspace_01KTC2Q89HNKSHB77J0CNGA5AY","policies":[{"id":"policy_01M23E1YFWW1Y2Z9JXH297R9AJ","kind":"probabilistic","agent_instruction":"A node belongs in process when it describes a workflow — a sequence of steps with actors and an outcome — or a policy/guard for one. Workflows can be commercial, operational, or personal; what matters is that the work is repeatable and the steps can be named. Pass when the candidate describes a step, gateway, milestone, validation, reference, or policy for such a workflow. Fail only when the candidate is a one-off incident with no repeatable structure, a UI-specific user journey, or a pure state machine without a workflow outcome.","predicate":{"when_node_type":["action","decision","eval","reference"],"agent_instruction":"A node belongs in process when it describes a workflow — a sequence of steps with actors and an outcome — or a policy/guard for one. Workflows can be commercial, operational, or personal; what matters is that the work is repeatable and the steps can be named. Pass when the candidate describes a step, gateway, milestone, validation, reference, or policy for such a workflow. Fail only when the candidate is a one-off incident with no repeatable structure, a UI-specific user journey, or a pure state machine without a workflow outcome."},"lifecycle":"active"},{"id":"policy_01M23E1YG96XFHY1AVXVPZV6B9","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_node_type","node_types":["action","decision","state","eval","reference","rule","principal"]},"lifecycle":"active"},{"id":"policy_01M23E1YGCRHE1JQMRQZ3SB41N","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge_type","edge_types":["flows_to","has_parent","supports","attributed_to","constrained_by","replaces","derived_from"]},"lifecycle":"active"},{"id":"policy_01M23E1YGFZEB4H88710M1B1GC","kind":"probabilistic","agent_instruction":"Check the candidate's visible user-facing text fields, including name, action, decision, question, chosen, state, rule, and eval text. PASS when the text reads as business-process language for an operator or process reader, and any BPMN/source/import/code-evidence details are absent from visible prose or kept only in structured metadata, References, or audit/history. FAIL when visible text contains raw import scaffolding or implementation/source metadata, including phrases or patterns like \"BPMN gateway\", \"BPMN task\", \"Gateway_...\", \"Implementation status\", \"Code evidence\", \"Source type\", \"exclusiveGateway\", \"user asks:\", raw BPMN ids, generated object ids, or notes about code evidence discovered during import. Do not fail merely because a real business term happens to mention a job type, gateway, source, or implementation in ordinary process language; fail only when the prose exposes importer/debug/source metadata instead of the process meaning.","predicate":{"when_node_type":["action","decision","state","eval","rule","principal"],"agent_instruction":"Check the candidate's visible user-facing text fields, including name, action, decision, question, chosen, state, rule, and eval text. PASS when the text reads as business-process language for an operator or process reader, and any BPMN/source/import/code-evidence details are absent from visible prose or kept only in structured metadata, References, or audit/history. FAIL when visible text contains raw import scaffolding or implementation/source metadata, including phrases or patterns like \"BPMN gateway\", \"BPMN task\", \"Gateway_...\", \"Implementation status\", \"Code evidence\", \"Source type\", \"exclusiveGateway\", \"user asks:\", raw BPMN ids, generated object ids, or notes about code evidence discovered during import. Do not fail merely because a real business term happens to mention a job type, gateway, source, or implementation in ordinary process language; fail only when the prose exposes importer/debug/source metadata instead of the process meaning."},"lifecycle":"active"},{"id":"policy_01M23E1YGKG5DV8WNS3Y8J3R5P","kind":"probabilistic","agent_instruction":"Check the Principal's `prose`. PASS when it clearly names a process actor — a role, team, external party, or system — and explains what responsibility or boundary it owns in this process. FAIL if it reads like an uncontextualized org-chart person, a vague label (`user`, `team`, `system`) with no process responsibility, or an empty shell with only a bare name.","predicate":{"when_node_type":["principal"],"agent_instruction":"Check the Principal's `prose`. PASS when it clearly names a process actor — a role, team, external party, or system — and explains what responsibility or boundary it owns in this process. FAIL if it reads like an uncontextualized org-chart person, a vague label (`user`, `team`, `system`) with no process responsibility, or an empty shell with only a bare name."},"lifecycle":"active"},{"id":"policy_01M23E1YGPH02XATXPD3BV5FF8","kind":"suggestion","agent_instruction":"Model a process as an Action that names the whole repeatable activity (a verb + object, e.g. `publish a job`) and give it member flow nodes via `has_parent` edges pointing at it. A step that is itself a whole process becomes a subprocess automatically — it is a member Action that also has its own `has_parent` children; do not create a separate purpose node for it.","predicate":{"agent_instruction":"Model a process as an Action that names the whole repeatable activity (a verb + object, e.g. `publish a job`) and give it member flow nodes via `has_parent` edges pointing at it. A step that is itself a whole process becomes a subprocess automatically — it is a member Action that also has its own `has_parent` children; do not create a separate purpose node for it."},"lifecycle":"active"},{"id":"policy_01M23E1YH0J6SYWA0DT2Q26RFY","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"attributed_to","when_node_type":["action","decision"],"target_node_type":"principal"},"lifecycle":"active"},{"id":"policy_01M23E1YH4ZT17BG6AS14YVJP0","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"limits_edge","edge_type":"attributed_to","max_count":1,"when_node_type":["action","decision"],"target_node_type":"principal"},"lifecycle":"active"},{"id":"policy_01M23E1YH79TN8Y13KQBAJSGWA","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"outgoing","edge_type":"has_parent","when_node_type":["action","decision","state"],"target_node_type":"action","exempt_when_field_truthy":"top_level"},"lifecycle":"active"},{"id":"policy_01M23E1YH9CTFP329WWSFJGRKV","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"limits_edge","edge_type":"has_parent","max_count":1,"when_node_type":["action","decision","state"],"target_node_type":"action"},"lifecycle":"active"},{"id":"policy_01M23E1YHDWYJ0HK638NZJKTYF","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"incoming","edge_type":"flows_to","when_node_type":["action","decision","state"],"exempt_when_field_truthy":"entry_point, top_level"},"lifecycle":"active"},{"id":"policy_01M23E1YHGNVM31QF1789TQV3G","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"outgoing","edge_type":"flows_to","when_node_type":["action","decision","state"],"exempt_when_field_truthy":"exit_point, top_level"},"lifecycle":"active"},{"id":"policy_01M23E1YHK9AND0DN85003FFSQ","kind":"probabilistic","agent_instruction":"Check the Action's `prose` and `verb`. PASS when the text names a single business activity the named actor performs — an ordinary single-verb step like `review the legal terms`, `approve the invoice`, or `pack the order` PASSES. FAIL with reason only if the text (a) is a vague umbrella phase covering many steps (e.g. `handle request`, `do the thing`, `process order`), (b) bundles two distinct activities joined by `and` (e.g. `examine and treat the patient`), or (c) is an implementation chore divorced from business meaning (e.g. `call API`, `update row`, `write to DB`).","predicate":{"when_node_type":["action"],"agent_instruction":"Check the Action's `prose` and `verb`. PASS when the text names a single business activity the named actor performs — an ordinary single-verb step like `review the legal terms`, `approve the invoice`, or `pack the order` PASSES. FAIL with reason only if the text (a) is a vague umbrella phase covering many steps (e.g. `handle request`, `do the thing`, `process order`), (b) bundles two distinct activities joined by `and` (e.g. `examine and treat the patient`), or (c) is an implementation chore divorced from business meaning (e.g. `call API`, `update row`, `write to DB`)."},"lifecycle":"active"},{"id":"policy_01M23E1YHPGFPZYB2GE9XHYJ37","kind":"probabilistic","agent_instruction":"Check the node's `prose` — the process canvas renders it as this flow node's box label. PASS when it reads as a concise label: a verb+object (`publish a job`), a noun phrase, or a milestone phrase (`invoice approved`). FAIL with reason when it is a run-on sentence that strings several steps or conditions together (e.g. `all steps from asking to post a job through to the published job post being confirmed`) or stuffs a paragraph of detail into the name; suggest leading with a short headline and moving the detail into a supporting field or Reference.","predicate":{"when_node_type":["action","decision","state"],"agent_instruction":"Check the node's `prose` — the process canvas renders it as this flow node's box label. PASS when it reads as a concise label: a verb+object (`publish a job`), a noun phrase, or a milestone phrase (`invoice approved`). FAIL with reason when it is a run-on sentence that strings several steps or conditions together (e.g. `all steps from asking to post a job through to the published job post being confirmed`) or stuffs a paragraph of detail into the name; suggest leading with a short headline and moving the detail into a supporting field or Reference."},"lifecycle":"active"},{"id":"policy_01M23E1YHS4S06GQ7K9VJY4WQ5","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"flows_to","min_count":2,"when_node_type":["decision"]},"lifecycle":"active"},{"id":"policy_01M23E1YHWV8H71B6DQTD6P2DX","kind":"probabilistic","agent_instruction":"Check the Decision's `question`, `alternatives`, and any outgoing `flows_to` branch labels/conditions. PASS when the question reads as yes/no or an enumeration, AND the alternatives / outgoing branches either include an explicit default/else branch or name every enumerated value. FAIL with reason if the question has uncovered cases or if a default/else is missing where enum coverage isn't visibly complete.","predicate":{"when_node_type":["decision"],"agent_instruction":"Check the Decision's `question`, `alternatives`, and any outgoing `flows_to` branch labels/conditions. PASS when the question reads as yes/no or an enumeration, AND the alternatives / outgoing branches either include an explicit default/else branch or name every enumerated value. FAIL with reason if the question has uncovered cases or if a default/else is missing where enum coverage isn't visibly complete."},"lifecycle":"active"},{"id":"policy_01M23E1YHZJTSQN45GBEAYDW0H","kind":"deterministic","agent_instruction":null,"predicate":{"field":"state","sub_kind":"unique_field","case_fold":true,"when_node_type":["state"]},"lifecycle":"active"},{"id":"policy_01M23E1YJ288MDF4269QV3MRJY","kind":"probabilistic","agent_instruction":"Check ONLY the State's `state`. PASS when the text reads as a milestone or entry/exit condition — a noun or past-participle (`invoice approved`, `payment captured`, `cart`, `awaiting-review`). FAIL with reason if it reads as an imperative verb naming an Action (`Approve invoice`, `Process the order`).","predicate":{"when_node_type":["state"],"agent_instruction":"Check ONLY the State's `state`. PASS when the text reads as a milestone or entry/exit condition — a noun or past-participle (`invoice approved`, `payment captured`, `cart`, `awaiting-review`). FAIL with reason if it reads as an imperative verb naming an Action (`Approve invoice`, `Process the order`)."},"lifecycle":"active"},{"id":"policy_01M23E1YJ8R9QH2EVCJ8P9527B","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"supports","when_node_type":["eval"]},"lifecycle":"active"},{"id":"policy_01M23E1YJBZ03CKEAEYJB6SXR7","kind":"suggestion","agent_instruction":"BPMN vocabulary — an edge's meaning comes from its type plus the node types it connects, not from any role tag: `flows_to` is process order and renders source -> target with no reversal; a `has_parent` edge from a flow node to a process Action places it in that process's pool (and makes the parent Action a process, or a subprocess if it has a parent of its own); an `attributed_to` edge to a Principal drives actor lanes (from an Action), gateway deciders (from a Decision), and process ownership (from the process Action); a `constrained_by` edge to a Rule links a policy guard; a `supports` edge from an Eval tests the node it points at, and `supports` edges from other nodes carry rationale and evidence.","predicate":{"agent_instruction":"BPMN vocabulary — an edge's meaning comes from its type plus the node types it connects, not from any role tag: `flows_to` is process order and renders source -> target with no reversal; a `has_parent` edge from a flow node to a process Action places it in that process's pool (and makes the parent Action a process, or a subprocess if it has a parent of its own); an `attributed_to` edge to a Principal drives actor lanes (from an Action), gateway deciders (from a Decision), and process ownership (from the process Action); a `constrained_by` edge to a Rule links a policy guard; a `supports` edge from an Eval tests the node it points at, and `supports` edges from other nodes carry rationale and evidence."},"lifecycle":"active"},{"id":"policy_01M23E1YJEY1TNE39QW554NEDJ","kind":"suggestion","agent_instruction":"For parallel work, give one flow node multiple unconditional `flows_to` outgoing edges — an AND-split needs no gateway Decision. Reserve gateway Decisions for exclusive or conditional (XOR/inclusive) branching, and reconverge parallel branches on a shared downstream node.","predicate":{"agent_instruction":"For parallel work, give one flow node multiple unconditional `flows_to` outgoing edges — an AND-split needs no gateway Decision. Reserve gateway Decisions for exclusive or conditional (XOR/inclusive) branching, and reconverge parallel branches on a shared downstream node."},"lifecycle":"active"},{"id":"policy_01M23E1YJHX1T0XYYWX8DBG0F6","kind":"suggestion","agent_instruction":"Rework and retry loops are allowed: a `flows_to` edge may target an earlier flow node to send work back (revise-and-resubmit, fix-and-recheck). Route the loop back through a gateway Decision so the cycle has an explicit exit and can't spin forever. A single edge still renders source -> target — a loop is about where the edge points, not reversing its direction.","predicate":{"agent_instruction":"Rework and retry loops are allowed: a `flows_to` edge may target an earlier flow node to send work back (revise-and-resubmit, fix-and-recheck). Route the loop back through a gateway Decision so the cycle has an explicit exit and can't spin forever. A single edge still renders source -> target — a loop is about where the edge points, not reversing its direction."},"lifecycle":"active"},{"id":"policy_01M23E1YJNC1F1ADVC44SZX9NQ","kind":"suggestion","agent_instruction":"Model the unhappy path. Use `flows_to` edge props with `kind: \"exception\"` or `kind: \"timer\"` to route failures, rejections, and timeouts to a recovery step or an explicitly cancelled terminal State, so the process documents what happens when the happy path does not hold.","predicate":{"agent_instruction":"Model the unhappy path. Use `flows_to` edge props with `kind: \"exception\"` or `kind: \"timer\"` to route failures, rejections, and timeouts to a recovery step or an explicitly cancelled terminal State, so the process documents what happens when the happy path does not hold."},"lifecycle":"active"},{"id":"policy_01M23E1YJRMW0GQKE7HC190WY2","kind":"suggestion","agent_instruction":"Relationships in a process Doco are first-class edges with lifecycle and history. Use `flows_to` for process order and the canonical families (`supports`, `attributed_to`, `constrained_by`, `has_parent`, `derived_from`, `replaces`, `relates_to`); an edge's specialized meaning comes from its type plus the node types it connects, not from a role tag. Re-point by retiring the old edge and adding the new one; endpoints are immutable.","predicate":{"agent_instruction":"Relationships in a process Doco are first-class edges with lifecycle and history. Use `flows_to` for process order and the canonical families (`supports`, `attributed_to`, `constrained_by`, `has_parent`, `derived_from`, `replaces`, `relates_to`); an edge's specialized meaning comes from its type plus the node types it connects, not from a role tag. Re-point by retiring the old edge and adding the new one; endpoints are immutable."},"lifecycle":"active"},{"id":"policy_01M23E1YJVYBSY35VZVKJZBAJW","kind":"suggestion","agent_instruction":"Use `queued` for a process — or a single step, gateway, or milestone — that is fully wired and ready but not yet in force: a redesign awaiting sign-off, a step pending a scheduled go-live, or an approved-but-not-yet-rolled-out change. A `queued` node asserts readiness, so it must already satisfy the same actor attribution, `has_parent` process membership, and forward-flow wiring an `active` node does. If it is still being sketched and that wiring is incomplete, leave it `drafting` instead of queuing it.","predicate":{"agent_instruction":"Use `queued` for a process — or a single step, gateway, or milestone — that is fully wired and ready but not yet in force: a redesign awaiting sign-off, a step pending a scheduled go-live, or an approved-but-not-yet-rolled-out change. A `queued` node asserts readiness, so it must already satisfy the same actor attribution, `has_parent` process membership, and forward-flow wiring an `active` node does. If it is still being sketched and that wiring is incomplete, leave it `drafting` instead of queuing it."},"lifecycle":"active"},{"id":"policy_01M23E1YJZ7JA3Z6GNPCRWZKXY","kind":"suggestion","agent_instruction":"Process *instances* (recorded runs) live in a separate Doco as Logs; surface them here only via References. This template describes the design of the process, not the history of its executions.","predicate":{"agent_instruction":"Process *instances* (recorded runs) live in a separate Doco as Logs; surface them here only via References. This template describes the design of the process, not the history of its executions."},"lifecycle":"active"},{"id":"policy_01M23E1YK3PCRZZ216DME21Q0P","kind":"suggestion","agent_instruction":"Don't model every click, method call, or DB mutation — only the steps that mean something to a business operator. Implementation detail belongs in `apis` or code Docos, not here.","predicate":{"agent_instruction":"Don't model every click, method call, or DB mutation — only the steps that mean something to a business operator. Implementation detail belongs in `apis` or code Docos, not here."},"lifecycle":"active"}]},{"doco_id":"doco_01M23BKYG98RHSZJ163SW0Y8FK","doco_handle":"agustinafavuzzi-spec-low-performance-tasks","goal":"Document repeatable business processes — actors, gateways, milestones, outcomes. BPMN-inspired.","owner_id":"workspace_01KTC2Q89HNKSHB77J0CNGA5AY","policies":[{"id":"policy_01M23BKYGJ8DAK5YSK3WCQ17EH","kind":"probabilistic","agent_instruction":"A node belongs in process when it describes a workflow — a sequence of steps with actors and an outcome — or a policy/guard for one. Workflows can be commercial, operational, or personal; what matters is that the work is repeatable and the steps can be named. Pass when the candidate describes a step, gateway, milestone, validation, reference, or policy for such a workflow. Fail only when the candidate is a one-off incident with no repeatable structure, a UI-specific user journey, or a pure state machine without a workflow outcome.","predicate":{"when_node_type":["action","decision","eval","reference"],"agent_instruction":"A node belongs in process when it describes a workflow — a sequence of steps with actors and an outcome — or a policy/guard for one. Workflows can be commercial, operational, or personal; what matters is that the work is repeatable and the steps can be named. Pass when the candidate describes a step, gateway, milestone, validation, reference, or policy for such a workflow. Fail only when the candidate is a one-off incident with no repeatable structure, a UI-specific user journey, or a pure state machine without a workflow outcome."},"lifecycle":"active"},{"id":"policy_01M23BKYH5NTF38T5V43GPE5Z8","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_node_type","node_types":["action","decision","state","eval","reference","rule","principal"]},"lifecycle":"active"},{"id":"policy_01M23BKYH9389RVEXN1NNXA0NX","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge_type","edge_types":["flows_to","has_parent","supports","attributed_to","constrained_by","replaces","derived_from"]},"lifecycle":"active"},{"id":"policy_01M23BKYHD6ZFSV3FW6R5073H2","kind":"probabilistic","agent_instruction":"Check the candidate's visible user-facing text fields, including name, action, decision, question, chosen, state, rule, and eval text. PASS when the text reads as business-process language for an operator or process reader, and any BPMN/source/import/code-evidence details are absent from visible prose or kept only in structured metadata, References, or audit/history. FAIL when visible text contains raw import scaffolding or implementation/source metadata, including phrases or patterns like \"BPMN gateway\", \"BPMN task\", \"Gateway_...\", \"Implementation status\", \"Code evidence\", \"Source type\", \"exclusiveGateway\", \"user asks:\", raw BPMN ids, generated object ids, or notes about code evidence discovered during import. Do not fail merely because a real business term happens to mention a job type, gateway, source, or implementation in ordinary process language; fail only when the prose exposes importer/debug/source metadata instead of the process meaning.","predicate":{"when_node_type":["action","decision","state","eval","rule","principal"],"agent_instruction":"Check the candidate's visible user-facing text fields, including name, action, decision, question, chosen, state, rule, and eval text. PASS when the text reads as business-process language for an operator or process reader, and any BPMN/source/import/code-evidence details are absent from visible prose or kept only in structured metadata, References, or audit/history. FAIL when visible text contains raw import scaffolding or implementation/source metadata, including phrases or patterns like \"BPMN gateway\", \"BPMN task\", \"Gateway_...\", \"Implementation status\", \"Code evidence\", \"Source type\", \"exclusiveGateway\", \"user asks:\", raw BPMN ids, generated object ids, or notes about code evidence discovered during import. Do not fail merely because a real business term happens to mention a job type, gateway, source, or implementation in ordinary process language; fail only when the prose exposes importer/debug/source metadata instead of the process meaning."},"lifecycle":"active"},{"id":"policy_01M23BKYHFQ5DS6SJKBVABKEDP","kind":"probabilistic","agent_instruction":"Check the Principal's `prose`. PASS when it clearly names a process actor — a role, team, external party, or system — and explains what responsibility or boundary it owns in this process. FAIL if it reads like an uncontextualized org-chart person, a vague label (`user`, `team`, `system`) with no process responsibility, or an empty shell with only a bare name.","predicate":{"when_node_type":["principal"],"agent_instruction":"Check the Principal's `prose`. PASS when it clearly names a process actor — a role, team, external party, or system — and explains what responsibility or boundary it owns in this process. FAIL if it reads like an uncontextualized org-chart person, a vague label (`user`, `team`, `system`) with no process responsibility, or an empty shell with only a bare name."},"lifecycle":"active"},{"id":"policy_01M23BKYHN4Z79N6NWXA2FPDDB","kind":"suggestion","agent_instruction":"Model a process as an Action that names the whole repeatable activity (a verb + object, e.g. `publish a job`) and give it member flow nodes via `has_parent` edges pointing at it. A step that is itself a whole process becomes a subprocess automatically — it is a member Action that also has its own `has_parent` children; do not create a separate purpose node for it.","predicate":{"agent_instruction":"Model a process as an Action that names the whole repeatable activity (a verb + object, e.g. `publish a job`) and give it member flow nodes via `has_parent` edges pointing at it. A step that is itself a whole process becomes a subprocess automatically — it is a member Action that also has its own `has_parent` children; do not create a separate purpose node for it."},"lifecycle":"active"},{"id":"policy_01M23BKYHRJ4B83KW13TD5N1HB","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"attributed_to","when_node_type":["action","decision"],"target_node_type":"principal"},"lifecycle":"active"},{"id":"policy_01M23BKYHTQFBFCCWKP948X65G","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"limits_edge","edge_type":"attributed_to","max_count":1,"when_node_type":["action","decision"],"target_node_type":"principal"},"lifecycle":"active"},{"id":"policy_01M23BKYHY7ZJ1623XPXFK9NYD","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"outgoing","edge_type":"has_parent","when_node_type":["action","decision","state"],"target_node_type":"action","exempt_when_field_truthy":"top_level"},"lifecycle":"active"},{"id":"policy_01M23BKYJ1SMVGWBXHT47WF3G5","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"limits_edge","edge_type":"has_parent","max_count":1,"when_node_type":["action","decision","state"],"target_node_type":"action"},"lifecycle":"active"},{"id":"policy_01M23BKYJ3VJRC1B7VKZ27JRP4","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"incoming","edge_type":"flows_to","when_node_type":["action","decision","state"],"exempt_when_field_truthy":"entry_point, top_level"},"lifecycle":"active"},{"id":"policy_01M23BKYJ6W6158EKNP7FG5D1A","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"outgoing","edge_type":"flows_to","when_node_type":["action","decision","state"],"exempt_when_field_truthy":"exit_point, top_level"},"lifecycle":"active"},{"id":"policy_01M23BKYJ924P1PSBBNDAC6RQV","kind":"probabilistic","agent_instruction":"Check the Action's `prose` and `verb`. PASS when the text names a single business activity the named actor performs — an ordinary single-verb step like `review the legal terms`, `approve the invoice`, or `pack the order` PASSES. FAIL with reason only if the text (a) is a vague umbrella phase covering many steps (e.g. `handle request`, `do the thing`, `process order`), (b) bundles two distinct activities joined by `and` (e.g. `examine and treat the patient`), or (c) is an implementation chore divorced from business meaning (e.g. `call API`, `update row`, `write to DB`).","predicate":{"when_node_type":["action"],"agent_instruction":"Check the Action's `prose` and `verb`. PASS when the text names a single business activity the named actor performs — an ordinary single-verb step like `review the legal terms`, `approve the invoice`, or `pack the order` PASSES. FAIL with reason only if the text (a) is a vague umbrella phase covering many steps (e.g. `handle request`, `do the thing`, `process order`), (b) bundles two distinct activities joined by `and` (e.g. `examine and treat the patient`), or (c) is an implementation chore divorced from business meaning (e.g. `call API`, `update row`, `write to DB`)."},"lifecycle":"active"},{"id":"policy_01M23BKYJC8YRGZEBNQSH89QQS","kind":"probabilistic","agent_instruction":"Check the node's `prose` — the process canvas renders it as this flow node's box label. PASS when it reads as a concise label: a verb+object (`publish a job`), a noun phrase, or a milestone phrase (`invoice approved`). FAIL with reason when it is a run-on sentence that strings several steps or conditions together (e.g. `all steps from asking to post a job through to the published job post being confirmed`) or stuffs a paragraph of detail into the name; suggest leading with a short headline and moving the detail into a supporting field or Reference.","predicate":{"when_node_type":["action","decision","state"],"agent_instruction":"Check the node's `prose` — the process canvas renders it as this flow node's box label. PASS when it reads as a concise label: a verb+object (`publish a job`), a noun phrase, or a milestone phrase (`invoice approved`). FAIL with reason when it is a run-on sentence that strings several steps or conditions together (e.g. `all steps from asking to post a job through to the published job post being confirmed`) or stuffs a paragraph of detail into the name; suggest leading with a short headline and moving the detail into a supporting field or Reference."},"lifecycle":"active"},{"id":"policy_01M23BKYJF62W2K2VVX0XQNV6X","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"flows_to","min_count":2,"when_node_type":["decision"]},"lifecycle":"active"},{"id":"policy_01M23BKYJJSE1H3VEC09RRXSZW","kind":"probabilistic","agent_instruction":"Check the Decision's `question`, `alternatives`, and any outgoing `flows_to` branch labels/conditions. PASS when the question reads as yes/no or an enumeration, AND the alternatives / outgoing branches either include an explicit default/else branch or name every enumerated value. FAIL with reason if the question has uncovered cases or if a default/else is missing where enum coverage isn't visibly complete.","predicate":{"when_node_type":["decision"],"agent_instruction":"Check the Decision's `question`, `alternatives`, and any outgoing `flows_to` branch labels/conditions. PASS when the question reads as yes/no or an enumeration, AND the alternatives / outgoing branches either include an explicit default/else branch or name every enumerated value. FAIL with reason if the question has uncovered cases or if a default/else is missing where enum coverage isn't visibly complete."},"lifecycle":"active"},{"id":"policy_01M23BKYJNXN51PSH255GFZ370","kind":"deterministic","agent_instruction":null,"predicate":{"field":"state","sub_kind":"unique_field","case_fold":true,"when_node_type":["state"]},"lifecycle":"active"},{"id":"policy_01M23BKYJQMGSTSH9HNDY6H817","kind":"probabilistic","agent_instruction":"Check ONLY the State's `state`. PASS when the text reads as a milestone or entry/exit condition — a noun or past-participle (`invoice approved`, `payment captured`, `cart`, `awaiting-review`). FAIL with reason if it reads as an imperative verb naming an Action (`Approve invoice`, `Process the order`).","predicate":{"when_node_type":["state"],"agent_instruction":"Check ONLY the State's `state`. PASS when the text reads as a milestone or entry/exit condition — a noun or past-participle (`invoice approved`, `payment captured`, `cart`, `awaiting-review`). FAIL with reason if it reads as an imperative verb naming an Action (`Approve invoice`, `Process the order`)."},"lifecycle":"active"},{"id":"policy_01M23BKYJTY80K2RJR8GW456YE","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"supports","when_node_type":["eval"]},"lifecycle":"active"},{"id":"policy_01M23BKYJWTTCQTC9FSGRVYBPA","kind":"suggestion","agent_instruction":"BPMN vocabulary — an edge's meaning comes from its type plus the node types it connects, not from any role tag: `flows_to` is process order and renders source -> target with no reversal; a `has_parent` edge from a flow node to a process Action places it in that process's pool (and makes the parent Action a process, or a subprocess if it has a parent of its own); an `attributed_to` edge to a Principal drives actor lanes (from an Action), gateway deciders (from a Decision), and process ownership (from the process Action); a `constrained_by` edge to a Rule links a policy guard; a `supports` edge from an Eval tests the node it points at, and `supports` edges from other nodes carry rationale and evidence.","predicate":{"agent_instruction":"BPMN vocabulary — an edge's meaning comes from its type plus the node types it connects, not from any role tag: `flows_to` is process order and renders source -> target with no reversal; a `has_parent` edge from a flow node to a process Action places it in that process's pool (and makes the parent Action a process, or a subprocess if it has a parent of its own); an `attributed_to` edge to a Principal drives actor lanes (from an Action), gateway deciders (from a Decision), and process ownership (from the process Action); a `constrained_by` edge to a Rule links a policy guard; a `supports` edge from an Eval tests the node it points at, and `supports` edges from other nodes carry rationale and evidence."},"lifecycle":"active"},{"id":"policy_01M23BKYJZBBV27MEBMDRKGKYF","kind":"suggestion","agent_instruction":"For parallel work, give one flow node multiple unconditional `flows_to` outgoing edges — an AND-split needs no gateway Decision. Reserve gateway Decisions for exclusive or conditional (XOR/inclusive) branching, and reconverge parallel branches on a shared downstream node.","predicate":{"agent_instruction":"For parallel work, give one flow node multiple unconditional `flows_to` outgoing edges — an AND-split needs no gateway Decision. Reserve gateway Decisions for exclusive or conditional (XOR/inclusive) branching, and reconverge parallel branches on a shared downstream node."},"lifecycle":"active"},{"id":"policy_01M23BKYK23QDH9MS7775Q8YYS","kind":"suggestion","agent_instruction":"Rework and retry loops are allowed: a `flows_to` edge may target an earlier flow node to send work back (revise-and-resubmit, fix-and-recheck). Route the loop back through a gateway Decision so the cycle has an explicit exit and can't spin forever. A single edge still renders source -> target — a loop is about where the edge points, not reversing its direction.","predicate":{"agent_instruction":"Rework and retry loops are allowed: a `flows_to` edge may target an earlier flow node to send work back (revise-and-resubmit, fix-and-recheck). Route the loop back through a gateway Decision so the cycle has an explicit exit and can't spin forever. A single edge still renders source -> target — a loop is about where the edge points, not reversing its direction."},"lifecycle":"active"},{"id":"policy_01M23BKYK5M6BD1ZVS7KA4YH55","kind":"suggestion","agent_instruction":"Model the unhappy path. Use `flows_to` edge props with `kind: \"exception\"` or `kind: \"timer\"` to route failures, rejections, and timeouts to a recovery step or an explicitly cancelled terminal State, so the process documents what happens when the happy path does not hold.","predicate":{"agent_instruction":"Model the unhappy path. Use `flows_to` edge props with `kind: \"exception\"` or `kind: \"timer\"` to route failures, rejections, and timeouts to a recovery step or an explicitly cancelled terminal State, so the process documents what happens when the happy path does not hold."},"lifecycle":"active"},{"id":"policy_01M23BKYK8B3DK986EED7DCTGQ","kind":"suggestion","agent_instruction":"Relationships in a process Doco are first-class edges with lifecycle and history. Use `flows_to` for process order and the canonical families (`supports`, `attributed_to`, `constrained_by`, `has_parent`, `derived_from`, `replaces`, `relates_to`); an edge's specialized meaning comes from its type plus the node types it connects, not from a role tag. Re-point by retiring the old edge and adding the new one; endpoints are immutable.","predicate":{"agent_instruction":"Relationships in a process Doco are first-class edges with lifecycle and history. Use `flows_to` for process order and the canonical families (`supports`, `attributed_to`, `constrained_by`, `has_parent`, `derived_from`, `replaces`, `relates_to`); an edge's specialized meaning comes from its type plus the node types it connects, not from a role tag. Re-point by retiring the old edge and adding the new one; endpoints are immutable."},"lifecycle":"active"},{"id":"policy_01M23BKYKB49HEW4EPTRC2J50V","kind":"suggestion","agent_instruction":"Use `queued` for a process — or a single step, gateway, or milestone — that is fully wired and ready but not yet in force: a redesign awaiting sign-off, a step pending a scheduled go-live, or an approved-but-not-yet-rolled-out change. A `queued` node asserts readiness, so it must already satisfy the same actor attribution, `has_parent` process membership, and forward-flow wiring an `active` node does. If it is still being sketched and that wiring is incomplete, leave it `drafting` instead of queuing it.","predicate":{"agent_instruction":"Use `queued` for a process — or a single step, gateway, or milestone — that is fully wired and ready but not yet in force: a redesign awaiting sign-off, a step pending a scheduled go-live, or an approved-but-not-yet-rolled-out change. A `queued` node asserts readiness, so it must already satisfy the same actor attribution, `has_parent` process membership, and forward-flow wiring an `active` node does. If it is still being sketched and that wiring is incomplete, leave it `drafting` instead of queuing it."},"lifecycle":"active"},{"id":"policy_01M23BKYKEK4MBGQM3P2VPBVJH","kind":"suggestion","agent_instruction":"Process *instances* (recorded runs) live in a separate Doco as Logs; surface them here only via References. This template describes the design of the process, not the history of its executions.","predicate":{"agent_instruction":"Process *instances* (recorded runs) live in a separate Doco as Logs; surface them here only via References. This template describes the design of the process, not the history of its executions."},"lifecycle":"active"},{"id":"policy_01M23BKYKHWT3GF4F1Y22W27WR","kind":"suggestion","agent_instruction":"Don't model every click, method call, or DB mutation — only the steps that mean something to a business operator. Implementation detail belongs in `apis` or code Docos, not here.","predicate":{"agent_instruction":"Don't model every click, method call, or DB mutation — only the steps that mean something to a business operator. Implementation detail belongs in `apis` or code Docos, not here."},"lifecycle":"active"}]},{"doco_id":"doco_01M1FDWJX051VMVCQH89G6SKSA","doco_handle":"agustinafavuzzi-spec-receives-a-posting","goal":"Document repeatable business processes — actors, gateways, milestones, outcomes. BPMN-inspired.","owner_id":"workspace_01KTC2Q89HNKSHB77J0CNGA5AY","policies":[{"id":"policy_01M1FDWK055Q4CVYJGHKQJDZPE","kind":"suggestion","agent_instruction":"Model the unhappy path. Use `flows_to` edge props with `kind: \"exception\"` or `kind: \"timer\"` to route failures, rejections, and timeouts to a recovery step or an explicitly cancelled terminal State, so the process documents what happens when the happy path does not hold.","predicate":{"agent_instruction":"Model the unhappy path. Use `flows_to` edge props with `kind: \"exception\"` or `kind: \"timer\"` to route failures, rejections, and timeouts to a recovery step or an explicitly cancelled terminal State, so the process documents what happens when the happy path does not hold."},"lifecycle":"active"},{"id":"policy_01M1FDWK01PC9VE8YDZTCFE5SB","kind":"suggestion","agent_instruction":"Rework and retry loops are allowed: a `flows_to` edge may target an earlier flow node to send work back (revise-and-resubmit, fix-and-recheck). Route the loop back through a gateway Decision so the cycle has an explicit exit and can't spin forever. A single edge still renders source -> target — a loop is about where the edge points, not reversing its direction.","predicate":{"agent_instruction":"Rework and retry loops are allowed: a `flows_to` edge may target an earlier flow node to send work back (revise-and-resubmit, fix-and-recheck). Route the loop back through a gateway Decision so the cycle has an explicit exit and can't spin forever. A single edge still renders source -> target — a loop is about where the edge points, not reversing its direction."},"lifecycle":"active"},{"id":"policy_01M1FDWJXA687476WF252MBX83","kind":"probabilistic","agent_instruction":"A node belongs in process when it describes a workflow — a sequence of steps with actors and an outcome — or a policy/guard for one. Workflows can be commercial, operational, or personal; what matters is that the work is repeatable and the steps can be named. Pass when the candidate describes a step, gateway, milestone, validation, reference, or policy for such a workflow. Fail only when the candidate is a one-off incident with no repeatable structure, a UI-specific user journey, or a pure state machine without a workflow outcome.","predicate":{"when_node_type":["action","decision","eval","reference"],"agent_instruction":"A node belongs in process when it describes a workflow — a sequence of steps with actors and an outcome — or a policy/guard for one. Workflows can be commercial, operational, or personal; what matters is that the work is repeatable and the steps can be named. Pass when the candidate describes a step, gateway, milestone, validation, reference, or policy for such a workflow. Fail only when the candidate is a one-off incident with no repeatable structure, a UI-specific user journey, or a pure state machine without a workflow outcome."},"lifecycle":"active"},{"id":"policy_01M1FDWJXWYP9V2C9CSGHZQQV7","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_node_type","node_types":["action","decision","state","eval","reference","rule","principal"]},"lifecycle":"active"},{"id":"policy_01M1FDWJY0KS5YHGT66X26GNW6","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge_type","edge_types":["flows_to","has_parent","supports","attributed_to","constrained_by","replaces","derived_from"]},"lifecycle":"active"},{"id":"policy_01M1FDWJY3S37S8JMTZRG0Z2Y4","kind":"probabilistic","agent_instruction":"Check the candidate's visible user-facing text fields, including name, action, decision, question, chosen, state, rule, and eval text. PASS when the text reads as business-process language for an operator or process reader, and any BPMN/source/import/code-evidence details are absent from visible prose or kept only in structured metadata, References, or audit/history. FAIL when visible text contains raw import scaffolding or implementation/source metadata, including phrases or patterns like \"BPMN gateway\", \"BPMN task\", \"Gateway_...\", \"Implementation status\", \"Code evidence\", \"Source type\", \"exclusiveGateway\", \"user asks:\", raw BPMN ids, generated object ids, or notes about code evidence discovered during import. Do not fail merely because a real business term happens to mention a job type, gateway, source, or implementation in ordinary process language; fail only when the prose exposes importer/debug/source metadata instead of the process meaning.","predicate":{"when_node_type":["action","decision","state","eval","rule","principal"],"agent_instruction":"Check the candidate's visible user-facing text fields, including name, action, decision, question, chosen, state, rule, and eval text. PASS when the text reads as business-process language for an operator or process reader, and any BPMN/source/import/code-evidence details are absent from visible prose or kept only in structured metadata, References, or audit/history. FAIL when visible text contains raw import scaffolding or implementation/source metadata, including phrases or patterns like \"BPMN gateway\", \"BPMN task\", \"Gateway_...\", \"Implementation status\", \"Code evidence\", \"Source type\", \"exclusiveGateway\", \"user asks:\", raw BPMN ids, generated object ids, or notes about code evidence discovered during import. Do not fail merely because a real business term happens to mention a job type, gateway, source, or implementation in ordinary process language; fail only when the prose exposes importer/debug/source metadata instead of the process meaning."},"lifecycle":"active"},{"id":"policy_01M1FDWJY784HMS3B0P5VB0YTN","kind":"probabilistic","agent_instruction":"Check the Principal's `prose`. PASS when it clearly names a process actor — a role, team, external party, or system — and explains what responsibility or boundary it owns in this process. FAIL if it reads like an uncontextualized org-chart person, a vague label (`user`, `team`, `system`) with no process responsibility, or an empty shell with only a bare name.","predicate":{"when_node_type":["principal"],"agent_instruction":"Check the Principal's `prose`. PASS when it clearly names a process actor — a role, team, external party, or system — and explains what responsibility or boundary it owns in this process. FAIL if it reads like an uncontextualized org-chart person, a vague label (`user`, `team`, `system`) with no process responsibility, or an empty shell with only a bare name."},"lifecycle":"active"},{"id":"policy_01M1FDWJYBSV440XXC21T5E417","kind":"suggestion","agent_instruction":"Model a process as an Action that names the whole repeatable activity (a verb + object, e.g. `publish a job`) and give it member flow nodes via `has_parent` edges pointing at it. A step that is itself a whole process becomes a subprocess automatically — it is a member Action that also has its own `has_parent` children; do not create a separate purpose node for it.","predicate":{"agent_instruction":"Model a process as an Action that names the whole repeatable activity (a verb + object, e.g. `publish a job`) and give it member flow nodes via `has_parent` edges pointing at it. A step that is itself a whole process becomes a subprocess automatically — it is a member Action that also has its own `has_parent` children; do not create a separate purpose node for it."},"lifecycle":"active"},{"id":"policy_01M1FDWJYEER13JRE9WPBCWHH5","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"attributed_to","when_node_type":["action","decision"],"target_node_type":"principal"},"lifecycle":"active"},{"id":"policy_01M1FDWJYJSWH8PJZ519CWEJCV","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"limits_edge","edge_type":"attributed_to","max_count":1,"when_node_type":["action","decision"],"target_node_type":"principal"},"lifecycle":"active"},{"id":"policy_01M1FDWJYNE5832NGRKXS1FTBA","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"outgoing","edge_type":"has_parent","when_node_type":["action","decision","state"],"target_node_type":"action","exempt_when_field_truthy":"top_level"},"lifecycle":"active"},{"id":"policy_01M1FDWJYRMD142JSMQJZBSQF5","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"limits_edge","edge_type":"has_parent","max_count":1,"when_node_type":["action","decision","state"],"target_node_type":"action"},"lifecycle":"active"},{"id":"policy_01M1FDWJYVN1Q3D0FCSGC8NZCP","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"incoming","edge_type":"flows_to","when_node_type":["action","decision","state"],"exempt_when_field_truthy":"entry_point, top_level"},"lifecycle":"active"},{"id":"policy_01M1FDWJYZ8Y6PHFFZ454D0FWP","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","direction":"outgoing","edge_type":"flows_to","when_node_type":["action","decision","state"],"exempt_when_field_truthy":"exit_point, top_level"},"lifecycle":"active"},{"id":"policy_01M1FDWJZ2GKBT6EMD5093GM80","kind":"probabilistic","agent_instruction":"Check the Action's `prose` and `verb`. PASS when the text names a single business activity the named actor performs — an ordinary single-verb step like `review the legal terms`, `approve the invoice`, or `pack the order` PASSES. FAIL with reason only if the text (a) is a vague umbrella phase covering many steps (e.g. `handle request`, `do the thing`, `process order`), (b) bundles two distinct activities joined by `and` (e.g. `examine and treat the patient`), or (c) is an implementation chore divorced from business meaning (e.g. `call API`, `update row`, `write to DB`).","predicate":{"when_node_type":["action"],"agent_instruction":"Check the Action's `prose` and `verb`. PASS when the text names a single business activity the named actor performs — an ordinary single-verb step like `review the legal terms`, `approve the invoice`, or `pack the order` PASSES. FAIL with reason only if the text (a) is a vague umbrella phase covering many steps (e.g. `handle request`, `do the thing`, `process order`), (b) bundles two distinct activities joined by `and` (e.g. `examine and treat the patient`), or (c) is an implementation chore divorced from business meaning (e.g. `call API`, `update row`, `write to DB`)."},"lifecycle":"active"},{"id":"policy_01M1FDWJZ6CEP0EWSXV12ENYHB","kind":"probabilistic","agent_instruction":"Check the node's `prose` — the process canvas renders it as this flow node's box label. PASS when it reads as a concise label: a verb+object (`publish a job`), a noun phrase, or a milestone phrase (`invoice approved`). FAIL with reason when it is a run-on sentence that strings several steps or conditions together (e.g. `all steps from asking to post a job through to the published job post being confirmed`) or stuffs a paragraph of detail into the name; suggest leading with a short headline and moving the detail into a supporting field or Reference.","predicate":{"when_node_type":["action","decision","state"],"agent_instruction":"Check the node's `prose` — the process canvas renders it as this flow node's box label. PASS when it reads as a concise label: a verb+object (`publish a job`), a noun phrase, or a milestone phrase (`invoice approved`). FAIL with reason when it is a run-on sentence that strings several steps or conditions together (e.g. `all steps from asking to post a job through to the published job post being confirmed`) or stuffs a paragraph of detail into the name; suggest leading with a short headline and moving the detail into a supporting field or Reference."},"lifecycle":"active"},{"id":"policy_01M1FDWJZ93TBSFBE4HJNAKZ26","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"flows_to","min_count":2,"when_node_type":["decision"]},"lifecycle":"active"},{"id":"policy_01M1FDWJZDW89CTX82FFXQHBZE","kind":"probabilistic","agent_instruction":"Check the Decision's `question`, `alternatives`, and any outgoing `flows_to` branch labels/conditions. PASS when the question reads as yes/no or an enumeration, AND the alternatives / outgoing branches either include an explicit default/else branch or name every enumerated value. FAIL with reason if the question has uncovered cases or if a default/else is missing where enum coverage isn't visibly complete.","predicate":{"when_node_type":["decision"],"agent_instruction":"Check the Decision's `question`, `alternatives`, and any outgoing `flows_to` branch labels/conditions. PASS when the question reads as yes/no or an enumeration, AND the alternatives / outgoing branches either include an explicit default/else branch or name every enumerated value. FAIL with reason if the question has uncovered cases or if a default/else is missing where enum coverage isn't visibly complete."},"lifecycle":"active"},{"id":"policy_01M1FDWJZGV8YV2FPG8TWPQFEN","kind":"deterministic","agent_instruction":null,"predicate":{"field":"state","sub_kind":"unique_field","case_fold":true,"when_node_type":["state"]},"lifecycle":"active"},{"id":"policy_01M1FDWJZM6SHBANJ1MZ068XPW","kind":"probabilistic","agent_instruction":"Check ONLY the State's `state`. PASS when the text reads as a milestone or entry/exit condition — a noun or past-participle (`invoice approved`, `payment captured`, `cart`, `awaiting-review`). FAIL with reason if it reads as an imperative verb naming an Action (`Approve invoice`, `Process the order`).","predicate":{"when_node_type":["state"],"agent_instruction":"Check ONLY the State's `state`. PASS when the text reads as a milestone or entry/exit condition — a noun or past-participle (`invoice approved`, `payment captured`, `cart`, `awaiting-review`). FAIL with reason if it reads as an imperative verb naming an Action (`Approve invoice`, `Process the order`)."},"lifecycle":"active"},{"id":"policy_01M1FDWJZQ00J5CR5EVYTFHM8V","kind":"deterministic","agent_instruction":null,"predicate":{"sub_kind":"requires_edge","edge_type":"supports","when_node_type":["eval"]},"lifecycle":"active"},{"id":"policy_01M1FDWJZTM58BTW6RCNP6EKPJ","kind":"suggestion","agent_instruction":"BPMN vocabulary — an edge's meaning comes from its type plus the node types it connects, not from any role tag: `flows_to` is process order and renders source -> target with no reversal; a `has_parent` edge from a flow node to a process Action places it in that process's pool (and makes the parent Action a process, or a subprocess if it has a parent of its own); an `attributed_to` edge to a Principal drives actor lanes (from an Action), gateway deciders (from a Decision), and process ownership (from the process Action); a `constrained_by` edge to a Rule links a policy guard; a `supports` edge from an Eval tests the node it points at, and `supports` edges from other nodes carry rationale and evidence.","predicate":{"agent_instruction":"BPMN vocabulary — an edge's meaning comes from its type plus the node types it connects, not from any role tag: `flows_to` is process order and renders source -> target with no reversal; a `has_parent` edge from a flow node to a process Action places it in that process's pool (and makes the parent Action a process, or a subprocess if it has a parent of its own); an `attributed_to` edge to a Principal drives actor lanes (from an Action), gateway deciders (from a Decision), and process ownership (from the process Action); a `constrained_by` edge to a Rule links a policy guard; a `supports` edge from an Eval tests the node it points at, and `supports` edges from other nodes carry rationale and evidence."},"lifecycle":"active"},{"id":"policy_01M1FDWJZXTRTD48C4Z4RC3842","kind":"suggestion","agent_instruction":"For parallel work, give one flow node multiple unconditional `flows_to` outgoing edges — an AND-split needs no gateway Decision. Reserve gateway Decisions for exclusive or conditional (XOR/inclusive) branching, and reconverge parallel branches on a shared downstream node.","predicate":{"agent_instruction":"For parallel work, give one flow node multiple unconditional `flows_to` outgoing edges — an AND-split needs no gateway Decision. Reserve gateway Decisions for exclusive or conditional (XOR/inclusive) branching, and reconverge parallel branches on a shared downstream node."},"lifecycle":"active"},{"id":"policy_01M1FDWK09R5X7760191HT9ZC3","kind":"suggestion","agent_instruction":"Relationships in a process Doco are first-class edges with lifecycle and history. Use `flows_to` for process order and the canonical families (`supports`, `attributed_to`, `constrained_by`, `has_parent`, `derived_from`, `replaces`, `relates_to`); an edge's specialized meaning comes from its type plus the node types it connects, not from a role tag. Re-point by retiring the old edge and adding the new one; endpoints are immutable.","predicate":{"agent_instruction":"Relationships in a process Doco are first-class edges with lifecycle and history. Use `flows_to` for process order and the canonical families (`supports`, `attributed_to`, `constrained_by`, `has_parent`, `derived_from`, `replaces`, `relates_to`); an edge's specialized meaning comes from its type plus the node types it connects, not from a role tag. Re-point by retiring the old edge and adding the new one; endpoints are immutable."},"lifecycle":"active"},{"id":"policy_01M1FDWK0C7DZBGJN0AGVE453T","kind":"suggestion","agent_instruction":"Use `queued` for a process — or a single step, gateway, or milestone — that is fully wired and ready but not yet in force: a redesign awaiting sign-off, a step pending a scheduled go-live, or an approved-but-not-yet-rolled-out change. A `queued` node asserts readiness, so it must already satisfy the same actor attribution, `has_parent` process membership, and forward-flow wiring an `active` node does. If it is still being sketched and that wiring is incomplete, leave it `drafting` instead of queuing it.","predicate":{"agent_instruction":"Use `queued` for a process — or a single step, gateway, or milestone — that is fully wired and ready but not yet in force: a redesign awaiting sign-off, a step pending a scheduled go-live, or an approved-but-not-yet-rolled-out change. A `queued` node asserts readiness, so it must already satisfy the same actor attribution, `has_parent` process membership, and forward-flow wiring an `active` node does. If it is still being sketched and that wiring is incomplete, leave it `drafting` instead of queuing it."},"lifecycle":"active"},{"id":"policy_01M1FDWK0GY4YJ7PZ72D0PGQ99","kind":"suggestion","agent_instruction":"Process *instances* (recorded runs) live in a separate Doco as Logs; surface them here only via References. This template describes the design of the process, not the history of its executions.","predicate":{"agent_instruction":"Process *instances* (recorded runs) live in a separate Doco as Logs; surface them here only via References. This template describes the design of the process, not the history of its executions."},"lifecycle":"active"},{"id":"policy_01M1FDWK0KX39R5RBBK554Y7E1","kind":"suggestion","agent_instruction":"Don't model every click, method call, or DB mutation — only the steps that mean something to a business operator. Implementation detail belongs in `apis` or code Docos, not here.","predicate":{"agent_instruction":"Don't model every click, method call, or DB mutation — only the steps that mean something to a business operator. Implementation detail belongs in `apis` or code Docos, not here."},"lifecycle":"active"}]},{"doco_id":"doco_01KT3CFKZMCB3JE838E0R97J90","doco_handle":"mcp-smoke-1780377701","goal":"Smoke-test the hosted MCP connector.","owner_id":"workspace_01KT21YGMPGG21RK6V9MVD968J","policies":[]}]}