diff --git a/crates/runx-cli/src/official_skills.rs b/crates/runx-cli/src/official_skills.rs index a3c4ff239..eb3994e68 100644 --- a/crates/runx-cli/src/official_skills.rs +++ b/crates/runx-cli/src/official_skills.rs @@ -75,6 +75,11 @@ pub(crate) const OFFICIAL_SKILLS: &[OfficialSkillLockEntry] = &[ version: "sha-ae2d9968ada2", digest: "4ef19f394dd9c905518e5e1be1afe98cf361c0adc27d6255153d194020b5e890", }, + OfficialSkillLockEntry { + skill_id: "runx/escalation-judge", + version: "sha-148cbc3e2a05", + digest: "cccc9758c94f0599648aa2ab8a8b807cae590952f768e937b5c1878360346908", + }, OfficialSkillLockEntry { skill_id: "runx/evolve", version: "sha-e0e2b933e8a7", diff --git a/dist/packets/support.escalation-judge.v1.schema.json b/dist/packets/support.escalation-judge.v1.schema.json new file mode 100644 index 000000000..498ee8df1 --- /dev/null +++ b/dist/packets/support.escalation-judge.v1.schema.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://schemas.runx.ai/runx/support/escalation-judge/v1.json", + "x-runx-packet-id": "runx.support.escalation_judge.v1", + "type": "object", + "properties": { + "decision": { + "type": "object", + "properties": { + "escalate": { "type": "boolean" }, + "lane": { "type": ["string", "null"] }, + "reason": { "type": "string" } + }, + "required": ["escalate", "lane", "reason"], + "additionalProperties": true + }, + "case_id": { + "type": "string" + }, + "escalation_packet": { + "type": "object", + "properties": { + "case_id": { "type": "string" }, + "aggregate_id": { "type": "string" }, + "lane": { "type": "string" }, + "target_rail": { "type": "string" }, + "dispatch_by_name_only": { "type": "boolean" }, + "rail_effect": { "const": "none" } + }, + "additionalProperties": true + }, + "case_event": { + "type": "object", + "properties": { + "type": { "const": "support_case.escalation_opened" }, + "payload": { + "type": "object", + "additionalProperties": true + } + }, + "required": ["type", "payload"], + "additionalProperties": true + }, + "stop_state": { + "type": "object", + "properties": { + "status": { "type": "string" }, + "reason": { "type": "string" }, + "no_case_opened": { "type": "boolean" }, + "no_escalation_packet_emitted": { "type": "boolean" } + }, + "additionalProperties": true + }, + "observations": { + "type": "object", + "additionalProperties": true + } + }, + "required": ["decision", "observations"], + "additionalProperties": true +} diff --git a/packages/cli/src/official-skills.lock.json b/packages/cli/src/official-skills.lock.json index aa39784c0..402ceb0bb 100644 --- a/packages/cli/src/official-skills.lock.json +++ b/packages/cli/src/official-skills.lock.json @@ -90,6 +90,13 @@ "catalog_visibility": "public", "catalog_role": "context" }, + { + "skill_id": "runx/escalation-judge", + "version": "sha-148cbc3e2a05", + "digest": "cccc9758c94f0599648aa2ab8a8b807cae590952f768e937b5c1878360346908", + "catalog_visibility": "public", + "catalog_role": "canonical" + }, { "skill_id": "runx/evolve", "version": "sha-e0e2b933e8a7", diff --git a/skills/escalation-judge/SKILL.md b/skills/escalation-judge/SKILL.md new file mode 100644 index 000000000..16dff1181 --- /dev/null +++ b/skills/escalation-judge/SKILL.md @@ -0,0 +1,113 @@ +--- +name: escalation-judge +description: Decide whether a support thread should open an escalation case, append that case to data-store, and name the downstream rail without dispatching it. +runx: + category: support +--- + +# Escalation Judge + +Judge whether a support thread crosses a named escalation policy threshold. The +skill reads a triage packet, the thread body, escalation policy rules, and prior +case state. It appends a durable case record only when escalation is warranted +and emits a typed escalation packet that names the downstream rail. It never +posts to Slack, sends customer email, pages an executive lane, or proposes a +live operational action. + +The case append is a guarded compare-and-set write through `data-store` +(`read_projection -> append_event`); the egress consequence is gated elsewhere. +A downstream operator can consume the named target rail and issue a separate +governed `slack-notify` or `send-as` run. + +## Inputs + +- `triage_packet`: `classification`, `severity`, and `confidence`, normally from + `support-triage-reply` or an equivalent bounded triage source. +- `thread_body`: support thread text used only to ground severity and churn + signal checks. +- `policy_rules`: `severity_thresholds`, `churn_risk_signals`, and + `escalation_lanes`. Missing policy rules produce `needs_input`. +- `data_source_ref` and `store_id`: the pinned data-store binding. +- `aggregate_id`: the thread id. It is the data-store aggregate id. +- `expected_version` and `idempotency_key`: optimistic concurrency and retry + safety for the case append. + +## Output Contract + +The output packet is `runx.support.escalation_judge.v1` data: + +- `decision{escalate,lane,reason}` always appears. +- `case_id`, `case_event`, and `escalation_packet` appear only when escalation is + warranted. +- `escalation_packet` names `target_rail` and keeps `rail_effect: none`. +- `stop_state` appears when the thread does not escalate, when required input is + missing, when policy is ambiguous, or when a policy threshold names an + undeclared lane. +- `observations` cite the matched threshold, severity, churn signals, prior-case + projection, case id, stop reason, target rail, harness cases, and data-store + append controls. + +The packet must not contain an `operational_proposal`. It is a judgment and +state append, not a live notification or send. + +## State Model + +The default graph follows the github-sync-style shape: + +1. `read_projection` loads the prior escalation-case projection for the thread. +2. `decide` evaluates severity thresholds and churn signals against declared + policy lanes. +3. `append_event` records `support_case.escalation_opened` with + `expected_version` and `idempotency_key` only when + `decision.escalate == true`. +4. `read_projection` reads back the durable case state for receipt evidence. + +If a prior case projection already exists, the skill stops with no new case so +the same thread is not re-escalated. + +## Escalation Boundary + +The policy must declare every lane under `policy_rules.escalation_lanes`. +Severity thresholds and churn-risk signals can only route to those lanes. If a +threshold names an undeclared lane, the result is `needs_human` and no case is +opened. + +Internal lanes should name a downstream rail such as +`downstream.slack-notify.priority-support`. Cross-provider lanes can name a +separate `send-as` rail. This skill only names the rail; the downstream operator +or driver performs the governed action in a separate run. + +## Local Harness + +Run: + +```bash +runx harness ./skills/escalation-judge --json +``` + +Harness cases: + +- `high-severity-churn-opens-priority-case`: critical support thread and renewal + risk match named policy thresholds, append a case, and emit a priority-support + escalation packet. +- `low-confidence-howto-stops-no-change`: low-severity how-to thread matches no + threshold, so the graph stops with `decision.escalate=false`, no case, and no + escalation packet. +- `missing-policy-needs-input`: policy rules are absent, so the skill refuses to + escalate and reports `needs_input`. +- `undeclared-lane-needs-human`: a threshold matches but names an undeclared + lane, so the skill refuses to route and reports `needs_human`. + +## Example Invocation + +```bash +runx skill escalation-judge --json \ + --input-json triage_packet='{"classification":"bug","severity":"critical","confidence":0.93}' \ + -i thread_body='Enterprise tenant says production webhooks are down, renewal is blocked, and the sponsor may cancel.' \ + --input-json policy_rules='{"severity_thresholds":[{"name":"severity-high-or-critical","lane":"priority_support","min_severity":"high","classifications":["bug"]}],"churn_risk_signals":[{"name":"renewal_blocked","lane":"priority_support","terms":["renewal is blocked","cancel"]}],"escalation_lanes":{"priority_support":{"target_rail":"downstream.slack-notify.priority-support","consequence":"internal_lane"}}}' \ + -i data_source_ref=local://runx-escalation-judge/example \ + -i store_id=escalation-judge-example-v2 \ + -i aggregate_id=thread:acct-4242:case-1001 \ + --input-json expected_version=0 \ + -i idempotency_key=thread:acct-4242:case-1001:escalation:v1 +``` diff --git a/skills/escalation-judge/X.yaml b/skills/escalation-judge/X.yaml new file mode 100644 index 000000000..d04630a01 --- /dev/null +++ b/skills/escalation-judge/X.yaml @@ -0,0 +1,308 @@ +skill: escalation-judge +version: "0.1.0" + +catalog: + kind: graph + audience: public + visibility: public + role: canonical + runtime_path: data-adapter + +emits: + - name: escalation_judgment + packet: runx.support.escalation_judge.v1 + +harness: + cases: + - name: high-severity-churn-opens-priority-case + runner: judge + inputs: + triage_packet: + classification: bug + severity: critical + confidence: 0.93 + thread_body: "Enterprise tenant says production webhooks are down, their renewal is blocked, and the VP sponsor will cancel if there is no priority support response today." + policy_rules: + severity_thresholds: + - name: severity-high-or-critical + lane: priority_support + min_severity: high + classifications: + - bug + - account_access + - name: legal-or-exec-critical + lane: legal_review + min_severity: critical + classifications: + - legal + - abuse + churn_risk_signals: + - name: renewal_blocked + lane: priority_support + terms: + - renewal is blocked + - cancel + - sponsor + escalation_lanes: + priority_support: + target_rail: downstream.slack-notify.priority-support + consequence: internal_lane + legal_review: + target_rail: downstream.slack-notify.legal-review + consequence: internal_lane + data_source_ref: local://runx-escalation-judge/harness + store_id: escalation-judge-harness-v2 + aggregate_id: thread:acct-4242:case-1001 + expected_version: 0 + idempotency_key: thread:acct-4242:case-1001:escalation:v1 + expect: + status: sealed + receipt: + schema: runx.receipt.v1 + - name: low-confidence-howto-stops-no-change + runner: judge + inputs: + triage_packet: + classification: how_to + severity: low + confidence: 0.82 + thread_body: "Customer asks where to find the webhook setup docs. No outage, renewal, legal, executive, or churn language is present." + policy_rules: + severity_thresholds: + - name: severity-high-or-critical + lane: priority_support + min_severity: high + classifications: + - bug + - account_access + churn_risk_signals: + - name: renewal_blocked + lane: priority_support + terms: + - renewal is blocked + - cancel + escalation_lanes: + priority_support: + target_rail: downstream.slack-notify.priority-support + consequence: internal_lane + data_source_ref: local://runx-escalation-judge/harness + store_id: escalation-judge-harness-v2 + aggregate_id: thread:acct-4242:case-1002 + expected_version: 0 + idempotency_key: thread:acct-4242:case-1002:escalation:v1 + expect: + status: policy_denied + receipt: + schema: runx.receipt.v1 + state: sealed + disposition: blocked + reason_code: graph_blocked + - name: missing-policy-needs-input + runner: judge + inputs: + triage_packet: + classification: bug + severity: high + confidence: 0.88 + thread_body: "Production issue is urgent, but the caller did not provide policy_rules." + data_source_ref: local://runx-escalation-judge/harness + store_id: escalation-judge-harness-v2 + aggregate_id: thread:acct-4242:case-1003 + expected_version: 0 + idempotency_key: thread:acct-4242:case-1003:escalation:v1 + expect: + status: policy_denied + receipt: + schema: runx.receipt.v1 + state: sealed + disposition: blocked + reason_code: graph_blocked + - name: undeclared-lane-needs-human + runner: judge + inputs: + triage_packet: + classification: bug + severity: critical + confidence: 0.91 + thread_body: "Critical outage with executive visibility, but the matching policy threshold names an undeclared lane." + policy_rules: + severity_thresholds: + - name: exec-critical + lane: exec_visibility + min_severity: critical + classifications: + - bug + churn_risk_signals: [] + escalation_lanes: + priority_support: + target_rail: downstream.slack-notify.priority-support + consequence: internal_lane + data_source_ref: local://runx-escalation-judge/harness + store_id: escalation-judge-harness-v2 + aggregate_id: thread:acct-4242:case-1004 + expected_version: 0 + idempotency_key: thread:acct-4242:case-1004:escalation:v1 + expect: + status: policy_denied + receipt: + schema: runx.receipt.v1 + state: sealed + disposition: blocked + reason_code: graph_blocked + +policy: + allow: + - provider: data-source + method: READ + scope: runx:data:read + - provider: data-source + method: APPEND + scope: runx:data:append + deny: + - direct_slack_post + - direct_customer_send + - unlisted_escalation_lane + - invented_severity + - invented_churn_signal + - operational_proposal + +runners: + decide: + type: cli-tool + command: node + args: + - run.mjs + outputs: + decision: object + case_id: string + escalation_packet: object + case_event: object + stop_state: object + observations: object + artifacts: + wrap_as: escalation_judgment + packet: runx.support.escalation_judge.v1 + inputs: + triage_packet: + type: json + required: true + description: triage_packet{classification,severity,confidence}; severity must be one of low, medium, high, critical. + thread_body: + type: string + required: true + description: Support thread body used for grounded churn and severity evidence. + policy_rules: + type: json + required: false + description: policy_rules{severity_thresholds,churn_risk_signals,escalation_lanes}; missing rules produce needs_input. + aggregate_id: + type: string + required: true + description: Thread id used as the escalation case aggregate. + expected_version: + type: number + required: true + description: Current stream version required by the CAS append_event that records the case. + idempotency_key: + type: string + required: true + description: Stable case append key. + prior_case: + type: json + required: false + description: Prior case projection read from data-store before judging escalation. + + judge: + default: true + type: graph + inputs: + triage_packet: + type: json + required: true + description: triage_packet{classification,severity,confidence} from support-triage-reply or an equivalent bounded triage source. + thread_body: + type: string + required: true + description: Support thread body used only for grounded severity and churn signal matching. + policy_rules: + type: json + required: false + description: policy_rules{severity_thresholds,churn_risk_signals,escalation_lanes}; missing rules produce a needs_input stop. + data_source_ref: + type: string + required: true + description: Logical data-store binding for the escalation case event stream. + store_id: + type: string + required: true + description: Pinned data-store id for deterministic harness and dogfood receipts. + aggregate_id: + type: string + required: true + description: Thread id used as the data-store aggregate id. + expected_version: + type: number + required: true + description: Current stream version required by the CAS append_event that records the case. + idempotency_key: + type: string + required: true + description: Stable case append key so retries do not open duplicate escalation cases. + graph: + name: escalation-judge + steps: + - id: read-prior-case + tool: data.source + scopes: + - runx:data:read + inputs: + operation: read_projection + data_source_ref: "$input.data_source_ref" + store_id: "$input.store_id" + resource: escalation_cases + aggregate_id: "$input.aggregate_id" + - id: decide + label: judge escalation policy without dispatching the target rail + skill: . + runner: decide + inputs: + triage_packet: "$input.triage_packet" + thread_body: "$input.thread_body" + policy_rules: "$input.policy_rules" + aggregate_id: "$input.aggregate_id" + expected_version: "$input.expected_version" + idempotency_key: "$input.idempotency_key" + context: + prior_case: read-prior-case.data_operation_result.data.projection + - id: append-case + tool: data.source + scopes: + - runx:data:append + inputs: + operation: append_event + data_source_ref: "$input.data_source_ref" + store_id: "$input.store_id" + resource: escalation_cases + aggregate_id: "$input.aggregate_id" + expected_version: "$input.expected_version" + idempotency_key: "$input.idempotency_key" + context: + event: decide.escalation_judgment.data.case_event + - id: readback + tool: data.source + scopes: + - runx:data:read + inputs: + operation: read_projection + data_source_ref: "$input.data_source_ref" + store_id: "$input.store_id" + resource: escalation_cases + aggregate_id: "$input.aggregate_id" + policy: + guards: + - step: append-case + field: decide.escalation_judgment.data.decision.escalate + equals: true + - step: readback + field: decide.escalation_judgment.data.decision.escalate + equals: true diff --git a/skills/escalation-judge/artifacts/clean-install-runx-add-0.6.14.json b/skills/escalation-judge/artifacts/clean-install-runx-add-0.6.14.json new file mode 100644 index 000000000..f79889d97 --- /dev/null +++ b/skills/escalation-judge/artifacts/clean-install-runx-add-0.6.14.json @@ -0,0 +1,44 @@ +{ + "status": "success", + "registry": { + "action": "install", + "source": "remote", + "ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "install": { + "status": "installed", + "destination": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/SKILL.md", + "skill_name": "escalation-judge", + "source": "runx-registry", + "source_label": "runx registry", + "skill_id": "fengyangxxx/escalation-judge", + "version": "sha-5b6e5530679f", + "digest": "sha256:9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "sha256:2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "profile_state_path": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/.runx/profile.json", + "runner_names": [ + "decide", + "judge" + ], + "trust_tier": "community" + }, + "receipt_metadata": { + "destination": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/SKILL.md", + "digest": "sha256:9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "install_count": 2, + "package_digest": "1b70ecd145da7b8da1f5569f22cba10d8da19065831fd0f9973b620842d1f5a4", + "profile_digest": "sha256:2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "publisher": { + "display_name": "fy", + "handle": "fengyangxxx", + "id": "user_69446dfb22822d5fdc22562d", + "kind": "user" + }, + "ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "skill_id": "fengyangxxx/escalation-judge", + "source_label": "runx registry", + "status": "installed", + "trust_tier": "community", + "version": "sha-5b6e5530679f" + } + } +} diff --git a/skills/escalation-judge/artifacts/commands.md b/skills/escalation-judge/artifacts/commands.md new file mode 100644 index 000000000..af74af843 --- /dev/null +++ b/skills/escalation-judge/artifacts/commands.md @@ -0,0 +1,21 @@ +# Escalation Judge Command Evidence + +Generated: 2026-07-01T22:41:06.580Z + +- runx version: runx-cli 0.6.14 +- doctor: pnpm --silent exec tsx packages/cli/src/index.ts doctor --json > skills/escalation-judge/artifacts/doctor-final-prepublish.json +- official lock: node scripts/generate-official-lock.mjs +- build: pnpm build +- package contract: docker run ... node scripts/check-authoring-package-contract.mjs +- local harness: docker run ... npx -y @runxhq/cli@0.6.14 harness ./skills/escalation-judge --json --receipt-dir .runx-test-receipts-escalation-judge-harness-final +- publish: docker run ... npx -y @runxhq/cli@0.6.14 registry publish ./skills/escalation-judge/SKILL.md --registry https://api.runx.ai --profile ./skills/escalation-judge/X.yaml --json +- registry read: docker run ... npx -y @runxhq/cli@0.6.14 registry read fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json +- clean install: docker run ... npx -y @runxhq/cli@0.6.14 add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --to /tmp/escalation-judge-install --json +- dogfood command: + +```bash +npx -y @runxhq/cli@0.6.14 skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json -R .runx-test-receipts-escalation-judge-dogfood-final --input-json triage_packet={"classification":"bug","severity":"critical","confidence":0.94} --input-json policy_rules={"severity_thresholds":[{"name":"severity-high-or-critical","lane":"priority_support","min_severity":"high","classifications":["bug","account_access"]}],"churn_risk_signals":[{"name":"renewal_blocked","lane":"priority_support","terms":["renewal is blocked","cancel","executive sponsor"]}],"escalation_lanes":{"priority_support":{"target_rail":"downstream.slack-notify.priority-support","consequence":"internal_lane"}}} -i thread_body=Enterprise customer reports production webhook delivery is down. Their renewal is blocked and the executive sponsor says they will cancel unless priority support owns the incident today. -i data_source_ref=local://runx-escalation-judge/dogfood -i store_id=escalation-judge-dogfood-v2 -i aggregate_id=thread:acct-9001:case-dogfood-001 -i idempotency_key=thread:acct-9001:case-dogfood-001:escalation:v1 --input-json expected_version=0 +``` + +- verify tree: docker run ... npx -y @runxhq/cli@0.6.14 verify --receipt-dir .runx-test-receipts-escalation-judge-dogfood-final --json +- verify root: docker run ... npx -y @runxhq/cli@0.6.14 verify --receipt skills/escalation-judge/artifacts/postpublish-dogfood-root-receipt-runx-0.6.14-linux.json --json diff --git a/skills/escalation-judge/artifacts/doctor-final-prepublish.json b/skills/escalation-judge/artifacts/doctor-final-prepublish.json new file mode 100644 index 000000000..3cf0eb0f4 --- /dev/null +++ b/skills/escalation-judge/artifacts/doctor-final-prepublish.json @@ -0,0 +1,388 @@ +{ + "schema": "runx.doctor.v1", + "status": "success", + "summary": { + "errors": 0, + "warnings": 13, + "infos": 0 + }, + "diagnostics": [ + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "reduce.reduction has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "agency-advance", + "step": "decide" + }, + "location": { + "path": "skills/agency/X.yaml", + "json_pointer": "/runners/advance/graph/steps/decide/context/mandate" + }, + "evidence": { + "reference": "reduce.reduction.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/agency/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:d12777c81d29a6523f4c0434e56a33677e3343cb1ad89bfd7227215508881775" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "classify.lane_packet has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "business-ops-route-and-append", + "step": "persist-route" + }, + "location": { + "path": "skills/business-ops/X.yaml", + "json_pointer": "/runners/route_and_append/graph/steps/persist-route/context/event" + }, + "evidence": { + "reference": "classify.lane_packet.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/business-ops/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:b17bfabbf667f82639df465245a5d2ef66ba197aaa8ec46bb1f010dad1b0c9a0" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "fetch-source.fetch_result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "governed-outbound", + "step": "scrub-content" + }, + "location": { + "path": "skills/governed-outbound/X.yaml", + "json_pointer": "/runners/governed-outbound/graph/steps/scrub-content/context/content" + }, + "evidence": { + "reference": "fetch-source.fetch_result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/governed-outbound/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:9e9110ee85fde6d55831173a6cbdbb6444efaacaf9ff416f7ca226cdacbd3d37" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scrub-content.redaction_report has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "governed-outbound", + "step": "approve-send" + }, + "location": { + "path": "skills/governed-outbound/X.yaml", + "json_pointer": "/runners/governed-outbound/graph/steps/approve-send/context/decision" + }, + "evidence": { + "reference": "scrub-content.redaction_report.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/governed-outbound/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:2581bfb8a05ddcfe4f6e4b6a4ff6730039cdce7489c91836ef0dfee66023c82f" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "post-notice.send_plan has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "governed-outbound", + "step": "seal-run" + }, + "location": { + "path": "skills/governed-outbound/X.yaml", + "json_pointer": "/runners/governed-outbound/graph/steps/seal-run/context/evidence" + }, + "evidence": { + "reference": "post-notice.send_plan.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/governed-outbound/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:f8c6506822d63f3515a4d72ef4419fa6ce969cf543b8e4b6bf14652c0e3a107c" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-plan.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "author-spec" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/author-spec/context/spec_path" + }, + "evidence": { + "reference": "scafld-plan.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:bfb1f1d11b26557340e7fa5db396685852833913b3f049687ab04ea82979cf6e" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-approve.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "read-approved-spec" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/read-approved-spec/context/path" + }, + "evidence": { + "reference": "scafld-approve.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:2fa6c050644b9d3d16589bf2c91c8e5ec64de38125a41e82aa076b6a5745cc8b" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "capture-harness-context.harness_context has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "package-pull-request" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/package-pull-request/context/harness_context" + }, + "evidence": { + "reference": "capture-harness-context.harness_context.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:e13d6575601f25ba750ec6eec1e02d004d1c885d9462fd69b807eb1c407641e9" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-handoff.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "package-pull-request" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/package-pull-request/context/handoff_markdown" + }, + "evidence": { + "reference": "scafld-handoff.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:7aba22826433b263377889f0d3474bb1a2b24aad6197d2e0c9238a74ffb0af5a" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-build.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "package-pull-request" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/package-pull-request/context/build_result" + }, + "evidence": { + "reference": "scafld-build.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:edf46f58c4c6348d3f06557e53a4588c19fdd6183c30ed86dd7df10a3a376a72" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-review.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "package-pull-request" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/package-pull-request/context/review_result" + }, + "evidence": { + "reference": "scafld-review.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:d746c69b4d878a0ef1adfde6f1a1b05b6b3e136344d3fbef9862fd87ddbbc342" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-complete.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "package-pull-request" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/package-pull-request/context/completion_result" + }, + "evidence": { + "reference": "scafld-complete.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:3f7eedbcb025f41c6cb18250c272e191b65c98b113ce951d123663dca8b955fa" + }, + { + "id": "runx.graph.context.schema_missing", + "severity": "warning", + "title": "Graph context producer has no packet schema", + "message": "scafld-final-status.result has no packet metadata, so doctor cannot verify packet paths.", + "target": { + "kind": "graph", + "ref": "issue-to-pr", + "step": "package-pull-request" + }, + "location": { + "path": "skills/issue-to-pr/X.yaml", + "json_pointer": "/runners/issue-to-pr/graph/steps/package-pull-request/context/status_snapshot" + }, + "evidence": { + "reference": "scafld-final-status.result.data" + }, + "repairs": [ + { + "id": "add_output_packet", + "kind": "edit_yaml", + "confidence": "medium", + "risk": "low", + "path": "skills/issue-to-pr/X.yaml", + "requires_human_review": false + } + ], + "instance_id": "sha256:fa05dbed91992d045cae60fbc6ae42ba171c258010cacca8808a3c4e6da42d6d" + } + ] +} diff --git a/skills/escalation-judge/artifacts/evidence.json b/skills/escalation-judge/artifacts/evidence.json new file mode 100644 index 000000000..589821b45 --- /dev/null +++ b/skills/escalation-judge/artifacts/evidence.json @@ -0,0 +1,355 @@ +{ + "schema": "frantic.runx_skill_evidence.v1", + "generated_at": "2026-07-01T22:41:06.580Z", + "package": { + "owner": "fengyangxxx", + "name": "escalation-judge", + "version": "sha-5b6e5530679f", + "registry_ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "public_url": "https://runx.ai/x/fengyangxxx/escalation-judge@sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "install_command": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "run_command": "runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai" + }, + "source_binding": { + "pr_url": "https://github.com/runxhq/runx/pull/209", + "source_path": "skills/escalation-judge", + "x_yaml_path": "skills/escalation-judge/X.yaml", + "skill_md_path": "skills/escalation-judge/SKILL.md", + "x_yaml_sha256": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "skill_md_sha256": "cccc9758c94f0599648aa2ab8a8b807cae590952f768e937b5c1878360346908", + "immutable_urls": "submitted as commit-SHA artifact_refs in the Frantic payload and QA log after final commit" + }, + "observations": [ + { + "id": "runx_version", + "value": "runx-cli 0.6.14" + }, + { + "id": "publisher_owner", + "value": "fengyangxxx" + }, + { + "id": "package_name", + "value": "escalation-judge" + }, + { + "id": "package_version", + "value": "sha-5b6e5530679f" + }, + { + "id": "registry_ref", + "value": "fengyangxxx/escalation-judge@sha-5b6e5530679f" + }, + { + "id": "public_url", + "value": "https://runx.ai/x/fengyangxxx/escalation-judge@sha-5b6e5530679f" + }, + { + "id": "pr_url", + "value": "https://github.com/runxhq/runx/pull/209" + }, + { + "id": "source_url", + "value": "final immutable commit-SHA source_url submitted in payload for skills/escalation-judge" + }, + { + "id": "raw_x_yaml", + "value": "final immutable commit-SHA raw X.yaml submitted in payload", + "sha256": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6" + }, + { + "id": "raw_skill_md", + "value": "final immutable commit-SHA raw SKILL.md submitted in payload", + "sha256": "cccc9758c94f0599648aa2ab8a8b807cae590952f768e937b5c1878360346908" + }, + { + "id": "verification_json", + "value": "final immutable commit-SHA verification_json submitted in payload" + }, + { + "id": "publish_method", + "value": "runx registry publish ./skills/escalation-judge/SKILL.md --registry https://api.runx.ai --profile ./skills/escalation-judge/X.yaml --json with runx-cli 0.6.14 and purpose-scoped publish credential" + }, + { + "id": "install_command", + "value": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai" + }, + { + "id": "local_harness_status", + "value": "passed", + "cases": [ + { + "name": "high-severity-churn-opens-priority-case", + "status": "sealed" + }, + { + "name": "low-confidence-howto-stops-no-change", + "status": "sealed" + }, + { + "name": "missing-policy-needs-input", + "status": "refused" + }, + { + "name": "undeclared-lane-needs-human", + "status": "refused" + } + ] + }, + { + "id": "hosted_harness_status", + "value": "passed during registry publish" + }, + { + "id": "dogfood_command", + "value": "npx -y @runxhq/cli@0.6.14 skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json -R .runx-test-receipts-escalation-judge-dogfood-final --input-json triage_packet={\"classification\":\"bug\",\"severity\":\"critical\",\"confidence\":0.94} --input-json policy_rules={\"severity_thresholds\":[{\"name\":\"severity-high-or-critical\",\"lane\":\"priority_support\",\"min_severity\":\"high\",\"classifications\":[\"bug\",\"account_access\"]}],\"churn_risk_signals\":[{\"name\":\"renewal_blocked\",\"lane\":\"priority_support\",\"terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]}],\"escalation_lanes\":{\"priority_support\":{\"target_rail\":\"downstream.slack-notify.priority-support\",\"consequence\":\"internal_lane\"}}} -i thread_body=Enterprise customer reports production webhook delivery is down. Their renewal is blocked and the executive sponsor says they will cancel unless priority support owns the incident today. -i data_source_ref=local://runx-escalation-judge/dogfood -i store_id=escalation-judge-dogfood-v2 -i aggregate_id=thread:acct-9001:case-dogfood-001 -i idempotency_key=thread:acct-9001:case-dogfood-001:escalation:v1 --input-json expected_version=0" + }, + { + "id": "receipt_ref", + "value": "runx:receipt:sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2" + }, + { + "id": "runx_verify_verdict", + "value": "valid", + "signature_mode": "production" + }, + { + "id": "escalation_decision", + "value": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + { + "id": "named_policy_threshold_matched", + "value": "renewal_blocked" + }, + { + "id": "severity_and_churn_signals", + "severity": "critical", + "severity_thresholds": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "churn_signals": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ] + }, + { + "id": "prior_case_projection_read", + "value": true, + "projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + } + }, + { + "id": "case_id_appended_to_data_store", + "value": "case_efd0ad8f11b130a3", + "append_status": "committed", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "store_id": "escalation-judge-dogfood-v2" + }, + { + "id": "readback_projection", + "value": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + } + }, + { + "id": "refused_or_stop_reason", + "value": "harness includes low-confidence no_change, missing policy needs_input, and undeclared lane needs_human cases" + }, + { + "id": "named_target_rail", + "value": "downstream.slack-notify.priority-support", + "rail_effect": "none" + }, + { + "id": "harness_case_names", + "value": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ] + }, + { + "id": "receipt_id", + "value": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2" + } + ], + "dogfood": { + "package": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "input": "skills/escalation-judge/fixtures/dogfood-critical-input.json", + "command": "npx -y @runxhq/cli@0.6.14 skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json -R .runx-test-receipts-escalation-judge-dogfood-final --input-json triage_packet={\"classification\":\"bug\",\"severity\":\"critical\",\"confidence\":0.94} --input-json policy_rules={\"severity_thresholds\":[{\"name\":\"severity-high-or-critical\",\"lane\":\"priority_support\",\"min_severity\":\"high\",\"classifications\":[\"bug\",\"account_access\"]}],\"churn_risk_signals\":[{\"name\":\"renewal_blocked\",\"lane\":\"priority_support\",\"terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]}],\"escalation_lanes\":{\"priority_support\":{\"target_rail\":\"downstream.slack-notify.priority-support\",\"consequence\":\"internal_lane\"}}} -i thread_body=Enterprise customer reports production webhook delivery is down. Their renewal is blocked and the executive sponsor says they will cancel unless priority support owns the incident today. -i data_source_ref=local://runx-escalation-judge/dogfood -i store_id=escalation-judge-dogfood-v2 -i aggregate_id=thread:acct-9001:case-dogfood-001 -i idempotency_key=thread:acct-9001:case-dogfood-001:escalation:v1 --input-json expected_version=0", + "receipt_ref": "runx:receipt:sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "verify_verdict": { + "valid": true, + "signature": { + "mode": "production", + "status": "valid", + "kid": "frantic-69-postpublish-key" + }, + "content_address": { + "status": "valid", + "expected": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "actual": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2" + } + }, + "harness_cases": [ + { + "name": "high-severity-churn-opens-priority-case", + "status": "sealed" + }, + { + "name": "low-confidence-howto-stops-no-change", + "status": "sealed" + }, + { + "name": "missing-policy-needs-input", + "status": "refused" + }, + { + "name": "undeclared-lane-needs-human", + "status": "refused" + } + ] + }, + "machine_outputs": { + "doctor": { + "status": "success", + "summary": { + "errors": 0, + "warnings": 13, + "infos": 0 + } + }, + "local_harness": { + "status": "passed", + "case_count": 4, + "assertion_error_count": 0 + }, + "publish": { + "target": "hosted", + "status": "published", + "skill_id": "fengyangxxx/escalation-judge", + "owner": "fengyangxxx", + "name": "escalation-judge", + "version": "sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "trust_tier": "community", + "install_command": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "run_command": "runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "public_url": "https://runx.ai/x/fengyangxxx/escalation-judge" + }, + "registry_read": { + "status": "success", + "ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "version": "sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "runner_names": [ + "decide", + "judge" + ] + }, + "clean_install": { + "status": "installed", + "destination": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/SKILL.md", + "skill_name": "escalation-judge", + "source": "runx-registry", + "source_label": "runx registry", + "skill_id": "fengyangxxx/escalation-judge", + "version": "sha-5b6e5530679f", + "digest": "sha256:9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "sha256:2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "profile_state_path": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/.runx/profile.json", + "runner_names": [ + "decide", + "judge" + ], + "trust_tier": "community" + }, + "dogfood": { + "closure": { + "closed_at": "2026-07-01T22:34:15.237Z", + "disposition": "closed", + "reason_code": "graph_closed", + "summary": "graph escalation-judge completed" + }, + "exit_code": 0, + "graph_status": "Succeeded" + }, + "verify_tree": { + "receipt_dir": "/repo/.runx-test-receipts-escalation-judge-dogfood-final", + "signature_mode": "production", + "trees": [ + { + "root_receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "receipt_count": 5, + "parent_missing": null, + "valid": true, + "findings": [] + } + ], + "unreadable_files": [], + "valid": true + }, + "verify_root": { + "schema": "runx.verify_verdict.v1", + "receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "valid": true, + "digest": { + "status": "valid", + "expected": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020", + "actual": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020" + }, + "content_address": { + "status": "valid", + "expected": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "actual": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2" + }, + "signature": { + "mode": "production", + "status": "valid", + "kid": "frantic-69-postpublish-key" + }, + "lineage": { + "status": "unverified", + "message": "single receipt verification cannot prove receipt-tree lineage" + }, + "findings": [] + } + }, + "summary": "Published runx escalation-judge skill fengyangxxx/escalation-judge@sha-5b6e5530679f with green hosted publish, clean install, post-publish dogfood run, production-mode verified receipt, and immutable PR evidence for the escalation policy judgment workflow." +} diff --git a/skills/escalation-judge/artifacts/local-harness-runx-0.6.14-linux.json b/skills/escalation-judge/artifacts/local-harness-runx-0.6.14-linux.json new file mode 100644 index 000000000..5f180b879 --- /dev/null +++ b/skills/escalation-judge/artifacts/local-harness-runx-0.6.14-linux.json @@ -0,0 +1,19 @@ +{ + "status": "passed", + "case_count": 4, + "assertion_error_count": 0, + "assertion_errors": [], + "case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "receipt_ids": [ + "sha256:5a0051a30d9b0f9cadc8f74b4bd062e649445b11508d2b0f9c50f032d625a8d1", + "sha256:1663c3b1b88cc47798b96892caea7cdf10f4c1f00ba77478b04ed9fc04d2676e", + "sha256:538807be0e06808aad15a103f8154980fd7a7aae9763a6871a194c1d13dafaea", + "sha256:6c2eec9fcefb7d0454e1a120b05bcbe7b243746e502dea1209b3f8e82570d322" + ], + "graph_case_count": 4 +} diff --git a/skills/escalation-judge/artifacts/postpublish-dogfood-command.txt b/skills/escalation-judge/artifacts/postpublish-dogfood-command.txt new file mode 100644 index 000000000..62b2a8de3 --- /dev/null +++ b/skills/escalation-judge/artifacts/postpublish-dogfood-command.txt @@ -0,0 +1 @@ +npx -y @runxhq/cli@0.6.14 skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json -R .runx-test-receipts-escalation-judge-dogfood-final --input-json triage_packet={"classification":"bug","severity":"critical","confidence":0.94} --input-json policy_rules={"severity_thresholds":[{"name":"severity-high-or-critical","lane":"priority_support","min_severity":"high","classifications":["bug","account_access"]}],"churn_risk_signals":[{"name":"renewal_blocked","lane":"priority_support","terms":["renewal is blocked","cancel","executive sponsor"]}],"escalation_lanes":{"priority_support":{"target_rail":"downstream.slack-notify.priority-support","consequence":"internal_lane"}}} -i thread_body=Enterprise customer reports production webhook delivery is down. Their renewal is blocked and the executive sponsor says they will cancel unless priority support owns the incident today. -i data_source_ref=local://runx-escalation-judge/dogfood -i store_id=escalation-judge-dogfood-v2 -i aggregate_id=thread:acct-9001:case-dogfood-001 -i idempotency_key=thread:acct-9001:case-dogfood-001:escalation:v1 --input-json expected_version=0 \ No newline at end of file diff --git a/skills/escalation-judge/artifacts/postpublish-dogfood-root-receipt-runx-0.6.14-linux.json b/skills/escalation-judge/artifacts/postpublish-dogfood-root-receipt-runx-0.6.14-linux.json new file mode 100644 index 000000000..4c61c5826 --- /dev/null +++ b/skills/escalation-judge/artifacts/postpublish-dogfood-root-receipt-runx-0.6.14-linux.json @@ -0,0 +1 @@ +{"schema":"runx.receipt.v1","id":"sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2","created_at":"2026-07-01T22:34:15.237Z","canonicalization":"runx.receipt.c14n.v1","issuer":{"type":"hosted","kid":"frantic-69-postpublish-key","public_key_sha256":"sha256:3097e2dee2cb4a34b53840cdb705aed71067c36f68db0e0f559c3f3fa043315f"},"signature":{"alg":"Ed25519","value":"base64:cpn2c5p0qihh4EJHfTks92vmiKyWYcACvHQiR6jaMOUKCawMVskgcYpPucVmR_pusrR9bIgEj0yTIPGNOMw7Aw"},"digest":"sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020","idempotency":{"intent_key":"sha256:escalation-judge-graph-intent","trigger_fingerprint":"sha256:escalation-judge-graph-trigger","content_hash":"sha256:escalation-judge-graph-content"},"subject":{"kind":"graph","ref":{"type":"harness","uri":"hrn_escalation-judge_graph"},"commitments":[]},"authority":{"actor_ref":{"type":"principal","uri":"runx:principal:local_runtime"},"grant_refs":[],"scope_refs":[],"authority_proof_refs":[],"attenuation":{"parent_authority_ref":null,"subset_proof":null},"terms":[],"enforcement":{"profile_hash":"sha256:635fdb0a7eef93911e3c6bd0b25b5e635edba32e0259133042b3a5f1fb19394e","redaction_refs":[],"setup_refs":[],"teardown_refs":[]}},"signals":[],"decisions":[],"acts":[],"seal":{"disposition":"closed","reason_code":"graph_closed","summary":"graph escalation-judge completed","closed_at":"2026-07-01T22:34:15.237Z","last_observed_at":"2026-07-01T22:34:15.237Z","criteria":[]},"lineage":{"children":[{"type":"receipt","uri":"runx:receipt:sha256:9710c12175bca49f5a156e4851be61f195ae0dcd417b53cfb6404bde65c61bd5","locator":"sha256:f39523aafc720ac474ed8eb6adbf9d85d57c45a01019f7ef8cf9c59e5521f1a6"},{"type":"receipt","uri":"runx:receipt:sha256:be12274e234405ef34b4c44a9c91bd97646b646b886f775274d04877580d5b3c","locator":"sha256:4ceb991a9ce7062afe44dcca4e16e913204ae4a303a7701d9970c7bdf3359497"},{"type":"receipt","uri":"runx:receipt:sha256:a159d2658c096ad33c8959ba0ed9996ca084355a9dac2b611ea93ce42df973fa","locator":"sha256:2db308490c8b0ef1e8867cfd99aa81408b6e25745d3c11be663b6bf4c9cb49a1"},{"type":"receipt","uri":"runx:receipt:sha256:0569a414f7789cb0c381f2fa20da63894e98873131671ea34e1e61a7463ef556","locator":"sha256:1520416515c202bc21b31191a7ece7649406041b882479a6f82b681eecfc06e7"}],"sync":[]}} \ No newline at end of file diff --git a/skills/escalation-judge/artifacts/postpublish-dogfood-root-verify-runx-0.6.14-linux.json b/skills/escalation-judge/artifacts/postpublish-dogfood-root-verify-runx-0.6.14-linux.json new file mode 100644 index 000000000..7017ef6cc --- /dev/null +++ b/skills/escalation-judge/artifacts/postpublish-dogfood-root-verify-runx-0.6.14-linux.json @@ -0,0 +1,25 @@ +{ + "schema": "runx.verify_verdict.v1", + "receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "valid": true, + "digest": { + "status": "valid", + "expected": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020", + "actual": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020" + }, + "content_address": { + "status": "valid", + "expected": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "actual": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2" + }, + "signature": { + "mode": "production", + "status": "valid", + "kid": "frantic-69-postpublish-key" + }, + "lineage": { + "status": "unverified", + "message": "single receipt verification cannot prove receipt-tree lineage" + }, + "findings": [] +} diff --git a/skills/escalation-judge/artifacts/postpublish-dogfood-runx-0.6.14-linux.json b/skills/escalation-judge/artifacts/postpublish-dogfood-runx-0.6.14-linux.json new file mode 100644 index 000000000..f00757cfe --- /dev/null +++ b/skills/escalation-judge/artifacts/postpublish-dogfood-runx-0.6.14-linux.json @@ -0,0 +1,2169 @@ +{ + "closure": { + "closed_at": "2026-07-01T22:34:15.237Z", + "disposition": "closed", + "reason_code": "graph_closed", + "summary": "graph escalation-judge completed" + }, + "execution": { + "exit_code": 0, + "skill_claim": { + "graph": "escalation-judge", + "graph_status": "Succeeded", + "step_outputs": { + "append-case": { + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}" + }, + "decide": { + "escalation_judgment": { + "data": { + "case_event": { + "payload": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "data_store": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "packet": "runx.support.escalation_judge.v1", + "policy_match": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "lane": "priority_support", + "name": "renewal_blocked", + "target_rail": "downstream.slack-notify.priority-support" + }, + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "type": "support_case.escalation_opened" + }, + "case_id": "case_efd0ad8f11b130a3", + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "observations": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id_appended": "case_efd0ad8f11b130a3", + "churn_signals_cited": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_decision": true, + "escalation_lane": "priority_support", + "expected_version": 0, + "harness_case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "named_policy_threshold_matched": "renewal_blocked", + "named_target_rail": "downstream.slack-notify.priority-support", + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "prior_case_projection_read": true, + "receipt_id": "assigned by runx receipt after execution", + "refused_or_stop_reason": null, + "severity": "critical", + "severity_thresholds_cited": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "stop_state": null, + "target_rail_effect": "none" + } + } + }, + "raw": "{\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"observations\": {\n \"escalation_decision\": true,\n \"escalation_lane\": \"priority_support\",\n \"named_policy_threshold_matched\": \"renewal_blocked\",\n \"severity\": \"critical\",\n \"severity_thresholds_cited\": [\n {\n \"name\": \"severity-high-or-critical\",\n \"lane\": \"priority_support\",\n \"lane_declared\": true,\n \"evidence\": {\n \"classification\": \"bug\",\n \"observed_severity\": \"critical\",\n \"min_severity\": \"high\"\n }\n }\n ],\n \"churn_signals_cited\": [\n {\n \"name\": \"renewal_blocked\",\n \"terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ],\n \"lane\": \"priority_support\",\n \"lane_declared\": true\n }\n ],\n \"prior_case_projection_read\": true,\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"case_id_appended\": \"case_efd0ad8f11b130a3\",\n \"refused_or_stop_reason\": null,\n \"stop_state\": null,\n \"named_target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_effect\": \"none\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\",\n \"harness_case_names\": [\n \"high-severity-churn-opens-priority-case\",\n \"low-confidence-howto-stops-no-change\",\n \"missing-policy-needs-input\",\n \"undeclared-lane-needs-human\"\n ],\n \"receipt_id\": \"assigned by runx receipt after execution\"\n },\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"case_event\": {\n \"type\": \"support_case.escalation_opened\",\n \"payload\": {\n \"packet\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n },\n \"policy_match\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"data_store\": {\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\"\n }\n }\n }\n}\n", + "skill_claim": { + "case_event": { + "payload": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "data_store": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "packet": "runx.support.escalation_judge.v1", + "policy_match": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "lane": "priority_support", + "name": "renewal_blocked", + "target_rail": "downstream.slack-notify.priority-support" + }, + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "type": "support_case.escalation_opened" + }, + "case_id": "case_efd0ad8f11b130a3", + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "observations": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id_appended": "case_efd0ad8f11b130a3", + "churn_signals_cited": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_decision": true, + "escalation_lane": "priority_support", + "expected_version": 0, + "harness_case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "named_policy_threshold_matched": "renewal_blocked", + "named_target_rail": "downstream.slack-notify.priority-support", + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "prior_case_projection_read": true, + "receipt_id": "assigned by runx receipt after execution", + "refused_or_stop_reason": null, + "severity": "critical", + "severity_thresholds_cited": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "stop_state": null, + "target_rail_effect": "none" + } + }, + "status": "success", + "stderr": "", + "stdout": "{\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"observations\": {\n \"escalation_decision\": true,\n \"escalation_lane\": \"priority_support\",\n \"named_policy_threshold_matched\": \"renewal_blocked\",\n \"severity\": \"critical\",\n \"severity_thresholds_cited\": [\n {\n \"name\": \"severity-high-or-critical\",\n \"lane\": \"priority_support\",\n \"lane_declared\": true,\n \"evidence\": {\n \"classification\": \"bug\",\n \"observed_severity\": \"critical\",\n \"min_severity\": \"high\"\n }\n }\n ],\n \"churn_signals_cited\": [\n {\n \"name\": \"renewal_blocked\",\n \"terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ],\n \"lane\": \"priority_support\",\n \"lane_declared\": true\n }\n ],\n \"prior_case_projection_read\": true,\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"case_id_appended\": \"case_efd0ad8f11b130a3\",\n \"refused_or_stop_reason\": null,\n \"stop_state\": null,\n \"named_target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_effect\": \"none\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\",\n \"harness_case_names\": [\n \"high-severity-churn-opens-priority-case\",\n \"low-confidence-howto-stops-no-change\",\n \"missing-policy-needs-input\",\n \"undeclared-lane-needs-human\"\n ],\n \"receipt_id\": \"assigned by runx receipt after execution\"\n },\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"case_event\": {\n \"type\": \"support_case.escalation_opened\",\n \"payload\": {\n \"packet\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n },\n \"policy_match\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"data_store\": {\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\"\n }\n }\n }\n}\n" + }, + "read-prior-case": { + "data_operation_result": { + "data": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_operation_result": { + "data": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}" + }, + "readback": { + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}" + } + }, + "steps": [ + { + "receipt_id": "sha256:9710c12175bca49f5a156e4851be61f195ae0dcd417b53cfb6404bde65c61bd5", + "skill": "tool:data.source", + "status": "success", + "step_id": "read-prior-case" + }, + { + "receipt_id": "sha256:be12274e234405ef34b4c44a9c91bd97646b646b886f775274d04877580d5b3c", + "skill": "decide", + "status": "success", + "step_id": "decide" + }, + { + "receipt_id": "sha256:a159d2658c096ad33c8959ba0ed9996ca084355a9dac2b611ea93ce42df973fa", + "skill": "tool:data.source", + "status": "success", + "step_id": "append-case" + }, + { + "receipt_id": "sha256:0569a414f7789cb0c381f2fa20da63894e98873131671ea34e1e61a7463ef556", + "skill": "tool:data.source", + "status": "success", + "step_id": "readback" + } + ] + }, + "stderr": "", + "stdout": "{\"graph\":\"escalation-judge\",\"graph_status\":\"Succeeded\",\"step_outputs\":{\"append-case\":{\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"raw\":\"{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_operation_result\\\":{\\\"data\\\":{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\",\\\"event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"events\\\":[],\\\"idempotency_key\\\":\\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\",\\\"operation\\\":\\\"append_event\\\",\\\"projection_digest\\\":\\\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"committed\\\",\\\"stop_conditions\\\":[]}},\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\",\\\"event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"events\\\":[],\\\"idempotency_key\\\":\\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\",\\\"operation\\\":\\\"append_event\\\",\\\"projection_digest\\\":\\\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"committed\\\",\\\"stop_conditions\\\":[]}\",\"skill_claim\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]},\"status\":\"success\",\"stderr\":\"\",\"stdout\":\"{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_operation_result\\\":{\\\"data\\\":{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\",\\\"event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"events\\\":[],\\\"idempotency_key\\\":\\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\",\\\"operation\\\":\\\"append_event\\\",\\\"projection_digest\\\":\\\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"committed\\\",\\\"stop_conditions\\\":[]}},\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\",\\\"event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"events\\\":[],\\\"idempotency_key\\\":\\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\",\\\"operation\\\":\\\"append_event\\\",\\\"projection_digest\\\":\\\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"committed\\\",\\\"stop_conditions\\\":[]}\"},\"decide\":{\"escalation_judgment\":{\"data\":{\"case_event\":{\"payload\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id\":\"case_efd0ad8f11b130a3\",\"data_store\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"expected_version\":0,\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\"},\"decision\":{\"escalate\":true,\"lane\":\"priority_support\",\"reason\":\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"},\"escalation_packet\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id\":\"case_efd0ad8f11b130a3\",\"dispatch_by_name_only\":true,\"lane\":\"priority_support\",\"matched_policy\":{\"evidence\":{\"matched_terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]},\"kind\":\"churn_risk_signal\",\"name\":\"renewal_blocked\"},\"rail_effect\":\"none\",\"schema\":\"runx.support.escalation_judge.v1\",\"target_rail\":\"downstream.slack-notify.priority-support\",\"target_rail_kind\":\"internal_lane\",\"triage\":{\"classification\":\"bug\",\"confidence\":0.94,\"severity\":\"critical\"}},\"packet\":\"runx.support.escalation_judge.v1\",\"policy_match\":{\"evidence\":{\"matched_terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]},\"kind\":\"churn_risk_signal\",\"lane\":\"priority_support\",\"name\":\"renewal_blocked\",\"target_rail\":\"downstream.slack-notify.priority-support\"},\"prior_case_projection\":{\"event_count\":0,\"last_event_ref\":null,\"last_event_type\":null,\"seen\":true,\"version\":0},\"triage\":{\"classification\":\"bug\",\"confidence\":0.94,\"severity\":\"critical\"}},\"type\":\"support_case.escalation_opened\"},\"case_id\":\"case_efd0ad8f11b130a3\",\"decision\":{\"escalate\":true,\"lane\":\"priority_support\",\"reason\":\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"},\"escalation_packet\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id\":\"case_efd0ad8f11b130a3\",\"dispatch_by_name_only\":true,\"lane\":\"priority_support\",\"matched_policy\":{\"evidence\":{\"matched_terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]},\"kind\":\"churn_risk_signal\",\"name\":\"renewal_blocked\"},\"rail_effect\":\"none\",\"schema\":\"runx.support.escalation_judge.v1\",\"target_rail\":\"downstream.slack-notify.priority-support\",\"target_rail_kind\":\"internal_lane\",\"triage\":{\"classification\":\"bug\",\"confidence\":0.94,\"severity\":\"critical\"}},\"observations\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id_appended\":\"case_efd0ad8f11b130a3\",\"churn_signals_cited\":[{\"lane\":\"priority_support\",\"lane_declared\":true,\"name\":\"renewal_blocked\",\"terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]}],\"escalation_decision\":true,\"escalation_lane\":\"priority_support\",\"expected_version\":0,\"harness_case_names\":[\"high-severity-churn-opens-priority-case\",\"low-confidence-howto-stops-no-change\",\"missing-policy-needs-input\",\"undeclared-lane-needs-human\"],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"named_policy_threshold_matched\":\"renewal_blocked\",\"named_target_rail\":\"downstream.slack-notify.priority-support\",\"prior_case_projection\":{\"event_count\":0,\"last_event_ref\":null,\"last_event_type\":null,\"seen\":true,\"version\":0},\"prior_case_projection_read\":true,\"receipt_id\":\"assigned by runx receipt after execution\",\"refused_or_stop_reason\":null,\"severity\":\"critical\",\"severity_thresholds_cited\":[{\"evidence\":{\"classification\":\"bug\",\"min_severity\":\"high\",\"observed_severity\":\"critical\"},\"lane\":\"priority_support\",\"lane_declared\":true,\"name\":\"severity-high-or-critical\"}],\"stop_state\":null,\"target_rail_effect\":\"none\"}}},\"raw\":\"{\\n \\\"decision\\\": {\\n \\\"escalate\\\": true,\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"reason\\\": \\\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\\\"\\n },\\n \\\"observations\\\": {\\n \\\"escalation_decision\\\": true,\\n \\\"escalation_lane\\\": \\\"priority_support\\\",\\n \\\"named_policy_threshold_matched\\\": \\\"renewal_blocked\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"severity_thresholds_cited\\\": [\\n {\\n \\\"name\\\": \\\"severity-high-or-critical\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"lane_declared\\\": true,\\n \\\"evidence\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"observed_severity\\\": \\\"critical\\\",\\n \\\"min_severity\\\": \\\"high\\\"\\n }\\n }\\n ],\\n \\\"churn_signals_cited\\\": [\\n {\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ],\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"lane_declared\\\": true\\n }\\n ],\\n \\\"prior_case_projection_read\\\": true,\\n \\\"prior_case_projection\\\": {\\n \\\"seen\\\": true,\\n \\\"version\\\": 0,\\n \\\"event_count\\\": 0,\\n \\\"last_event_type\\\": null,\\n \\\"last_event_ref\\\": null\\n },\\n \\\"case_id_appended\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"refused_or_stop_reason\\\": null,\\n \\\"stop_state\\\": null,\\n \\\"named_target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"target_rail_effect\\\": \\\"none\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"expected_version\\\": 0,\\n \\\"idempotency_key\\\": \\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\",\\n \\\"harness_case_names\\\": [\\n \\\"high-severity-churn-opens-priority-case\\\",\\n \\\"low-confidence-howto-stops-no-change\\\",\\n \\\"missing-policy-needs-input\\\",\\n \\\"undeclared-lane-needs-human\\\"\\n ],\\n \\\"receipt_id\\\": \\\"assigned by runx receipt after execution\\\"\\n },\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"escalation_packet\\\": {\\n \\\"schema\\\": \\\"runx.support.escalation_judge.v1\\\",\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"target_rail_kind\\\": \\\"internal_lane\\\",\\n \\\"dispatch_by_name_only\\\": true,\\n \\\"rail_effect\\\": \\\"none\\\",\\n \\\"matched_policy\\\": {\\n \\\"kind\\\": \\\"churn_risk_signal\\\",\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"evidence\\\": {\\n \\\"matched_terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ]\\n }\\n },\\n \\\"triage\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"confidence\\\": 0.94\\n }\\n },\\n \\\"case_event\\\": {\\n \\\"type\\\": \\\"support_case.escalation_opened\\\",\\n \\\"payload\\\": {\\n \\\"packet\\\": \\\"runx.support.escalation_judge.v1\\\",\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"decision\\\": {\\n \\\"escalate\\\": true,\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"reason\\\": \\\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\\\"\\n },\\n \\\"escalation_packet\\\": {\\n \\\"schema\\\": \\\"runx.support.escalation_judge.v1\\\",\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"target_rail_kind\\\": \\\"internal_lane\\\",\\n \\\"dispatch_by_name_only\\\": true,\\n \\\"rail_effect\\\": \\\"none\\\",\\n \\\"matched_policy\\\": {\\n \\\"kind\\\": \\\"churn_risk_signal\\\",\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"evidence\\\": {\\n \\\"matched_terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ]\\n }\\n },\\n \\\"triage\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"confidence\\\": 0.94\\n }\\n },\\n \\\"triage\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"confidence\\\": 0.94\\n },\\n \\\"policy_match\\\": {\\n \\\"kind\\\": \\\"churn_risk_signal\\\",\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"evidence\\\": {\\n \\\"matched_terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ]\\n }\\n },\\n \\\"prior_case_projection\\\": {\\n \\\"seen\\\": true,\\n \\\"version\\\": 0,\\n \\\"event_count\\\": 0,\\n \\\"last_event_type\\\": null,\\n \\\"last_event_ref\\\": null\\n },\\n \\\"data_store\\\": {\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"expected_version\\\": 0,\\n \\\"idempotency_key\\\": \\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\"\\n }\\n }\\n }\\n}\\n\",\"skill_claim\":{\"case_event\":{\"payload\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id\":\"case_efd0ad8f11b130a3\",\"data_store\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"expected_version\":0,\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\"},\"decision\":{\"escalate\":true,\"lane\":\"priority_support\",\"reason\":\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"},\"escalation_packet\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id\":\"case_efd0ad8f11b130a3\",\"dispatch_by_name_only\":true,\"lane\":\"priority_support\",\"matched_policy\":{\"evidence\":{\"matched_terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]},\"kind\":\"churn_risk_signal\",\"name\":\"renewal_blocked\"},\"rail_effect\":\"none\",\"schema\":\"runx.support.escalation_judge.v1\",\"target_rail\":\"downstream.slack-notify.priority-support\",\"target_rail_kind\":\"internal_lane\",\"triage\":{\"classification\":\"bug\",\"confidence\":0.94,\"severity\":\"critical\"}},\"packet\":\"runx.support.escalation_judge.v1\",\"policy_match\":{\"evidence\":{\"matched_terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]},\"kind\":\"churn_risk_signal\",\"lane\":\"priority_support\",\"name\":\"renewal_blocked\",\"target_rail\":\"downstream.slack-notify.priority-support\"},\"prior_case_projection\":{\"event_count\":0,\"last_event_ref\":null,\"last_event_type\":null,\"seen\":true,\"version\":0},\"triage\":{\"classification\":\"bug\",\"confidence\":0.94,\"severity\":\"critical\"}},\"type\":\"support_case.escalation_opened\"},\"case_id\":\"case_efd0ad8f11b130a3\",\"decision\":{\"escalate\":true,\"lane\":\"priority_support\",\"reason\":\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"},\"escalation_packet\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id\":\"case_efd0ad8f11b130a3\",\"dispatch_by_name_only\":true,\"lane\":\"priority_support\",\"matched_policy\":{\"evidence\":{\"matched_terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]},\"kind\":\"churn_risk_signal\",\"name\":\"renewal_blocked\"},\"rail_effect\":\"none\",\"schema\":\"runx.support.escalation_judge.v1\",\"target_rail\":\"downstream.slack-notify.priority-support\",\"target_rail_kind\":\"internal_lane\",\"triage\":{\"classification\":\"bug\",\"confidence\":0.94,\"severity\":\"critical\"}},\"observations\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"case_id_appended\":\"case_efd0ad8f11b130a3\",\"churn_signals_cited\":[{\"lane\":\"priority_support\",\"lane_declared\":true,\"name\":\"renewal_blocked\",\"terms\":[\"renewal is blocked\",\"cancel\",\"executive sponsor\"]}],\"escalation_decision\":true,\"escalation_lane\":\"priority_support\",\"expected_version\":0,\"harness_case_names\":[\"high-severity-churn-opens-priority-case\",\"low-confidence-howto-stops-no-change\",\"missing-policy-needs-input\",\"undeclared-lane-needs-human\"],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"named_policy_threshold_matched\":\"renewal_blocked\",\"named_target_rail\":\"downstream.slack-notify.priority-support\",\"prior_case_projection\":{\"event_count\":0,\"last_event_ref\":null,\"last_event_type\":null,\"seen\":true,\"version\":0},\"prior_case_projection_read\":true,\"receipt_id\":\"assigned by runx receipt after execution\",\"refused_or_stop_reason\":null,\"severity\":\"critical\",\"severity_thresholds_cited\":[{\"evidence\":{\"classification\":\"bug\",\"min_severity\":\"high\",\"observed_severity\":\"critical\"},\"lane\":\"priority_support\",\"lane_declared\":true,\"name\":\"severity-high-or-critical\"}],\"stop_state\":null,\"target_rail_effect\":\"none\"}},\"status\":\"success\",\"stderr\":\"\",\"stdout\":\"{\\n \\\"decision\\\": {\\n \\\"escalate\\\": true,\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"reason\\\": \\\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\\\"\\n },\\n \\\"observations\\\": {\\n \\\"escalation_decision\\\": true,\\n \\\"escalation_lane\\\": \\\"priority_support\\\",\\n \\\"named_policy_threshold_matched\\\": \\\"renewal_blocked\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"severity_thresholds_cited\\\": [\\n {\\n \\\"name\\\": \\\"severity-high-or-critical\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"lane_declared\\\": true,\\n \\\"evidence\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"observed_severity\\\": \\\"critical\\\",\\n \\\"min_severity\\\": \\\"high\\\"\\n }\\n }\\n ],\\n \\\"churn_signals_cited\\\": [\\n {\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ],\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"lane_declared\\\": true\\n }\\n ],\\n \\\"prior_case_projection_read\\\": true,\\n \\\"prior_case_projection\\\": {\\n \\\"seen\\\": true,\\n \\\"version\\\": 0,\\n \\\"event_count\\\": 0,\\n \\\"last_event_type\\\": null,\\n \\\"last_event_ref\\\": null\\n },\\n \\\"case_id_appended\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"refused_or_stop_reason\\\": null,\\n \\\"stop_state\\\": null,\\n \\\"named_target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"target_rail_effect\\\": \\\"none\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"expected_version\\\": 0,\\n \\\"idempotency_key\\\": \\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\",\\n \\\"harness_case_names\\\": [\\n \\\"high-severity-churn-opens-priority-case\\\",\\n \\\"low-confidence-howto-stops-no-change\\\",\\n \\\"missing-policy-needs-input\\\",\\n \\\"undeclared-lane-needs-human\\\"\\n ],\\n \\\"receipt_id\\\": \\\"assigned by runx receipt after execution\\\"\\n },\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"escalation_packet\\\": {\\n \\\"schema\\\": \\\"runx.support.escalation_judge.v1\\\",\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"target_rail_kind\\\": \\\"internal_lane\\\",\\n \\\"dispatch_by_name_only\\\": true,\\n \\\"rail_effect\\\": \\\"none\\\",\\n \\\"matched_policy\\\": {\\n \\\"kind\\\": \\\"churn_risk_signal\\\",\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"evidence\\\": {\\n \\\"matched_terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ]\\n }\\n },\\n \\\"triage\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"confidence\\\": 0.94\\n }\\n },\\n \\\"case_event\\\": {\\n \\\"type\\\": \\\"support_case.escalation_opened\\\",\\n \\\"payload\\\": {\\n \\\"packet\\\": \\\"runx.support.escalation_judge.v1\\\",\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"decision\\\": {\\n \\\"escalate\\\": true,\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"reason\\\": \\\"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\\\"\\n },\\n \\\"escalation_packet\\\": {\\n \\\"schema\\\": \\\"runx.support.escalation_judge.v1\\\",\\n \\\"case_id\\\": \\\"case_efd0ad8f11b130a3\\\",\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"target_rail_kind\\\": \\\"internal_lane\\\",\\n \\\"dispatch_by_name_only\\\": true,\\n \\\"rail_effect\\\": \\\"none\\\",\\n \\\"matched_policy\\\": {\\n \\\"kind\\\": \\\"churn_risk_signal\\\",\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"evidence\\\": {\\n \\\"matched_terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ]\\n }\\n },\\n \\\"triage\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"confidence\\\": 0.94\\n }\\n },\\n \\\"triage\\\": {\\n \\\"classification\\\": \\\"bug\\\",\\n \\\"severity\\\": \\\"critical\\\",\\n \\\"confidence\\\": 0.94\\n },\\n \\\"policy_match\\\": {\\n \\\"kind\\\": \\\"churn_risk_signal\\\",\\n \\\"name\\\": \\\"renewal_blocked\\\",\\n \\\"lane\\\": \\\"priority_support\\\",\\n \\\"target_rail\\\": \\\"downstream.slack-notify.priority-support\\\",\\n \\\"evidence\\\": {\\n \\\"matched_terms\\\": [\\n \\\"renewal is blocked\\\",\\n \\\"cancel\\\",\\n \\\"executive sponsor\\\"\\n ]\\n }\\n },\\n \\\"prior_case_projection\\\": {\\n \\\"seen\\\": true,\\n \\\"version\\\": 0,\\n \\\"event_count\\\": 0,\\n \\\"last_event_type\\\": null,\\n \\\"last_event_ref\\\": null\\n },\\n \\\"data_store\\\": {\\n \\\"aggregate_id\\\": \\\"thread:acct-9001:case-dogfood-001\\\",\\n \\\"expected_version\\\": 0,\\n \\\"idempotency_key\\\": \\\"thread:acct-9001:case-dogfood-001:escalation:v1\\\"\\n }\\n }\\n }\\n}\\n\"},\"read-prior-case\":{\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"raw\":\"{\\\"after_version\\\":0,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_operation_result\\\":{\\\"data\\\":{\\\"after_version\\\":0,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":0,\\\"event_digests\\\":[],\\\"last_event_ref\\\":null,\\\"last_event_type\\\":null,\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":0},\\\"projection_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}},\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":0,\\\"event_digests\\\":[],\\\"last_event_ref\\\":null,\\\"last_event_type\\\":null,\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":0},\\\"projection_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}\",\"skill_claim\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]},\"status\":\"success\",\"stderr\":\"\",\"stdout\":\"{\\\"after_version\\\":0,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_operation_result\\\":{\\\"data\\\":{\\\"after_version\\\":0,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":0,\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":0,\\\"event_digests\\\":[],\\\"last_event_ref\\\":null,\\\"last_event_type\\\":null,\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":0},\\\"projection_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}},\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":0,\\\"event_digests\\\":[],\\\"last_event_ref\\\":null,\\\"last_event_type\\\":null,\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":0},\\\"projection_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}\"},\"readback\":{\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"raw\":\"{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":1,\\\"data_operation_result\\\":{\\\"data\\\":{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":1,\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":1,\\\"event_digests\\\":[\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\"],\\\"last_event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"last_event_type\\\":\\\"support_case.escalation_opened\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":1},\\\"projection_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}},\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":1,\\\"event_digests\\\":[\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\"],\\\"last_event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"last_event_type\\\":\\\"support_case.escalation_opened\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":1},\\\"projection_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}\",\"skill_claim\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]},\"status\":\"success\",\"stderr\":\"\",\"stdout\":\"{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":1,\\\"data_operation_result\\\":{\\\"data\\\":{\\\"after_version\\\":1,\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"before_version\\\":1,\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":1,\\\"event_digests\\\":[\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\"],\\\"last_event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"last_event_type\\\":\\\"support_case.escalation_opened\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":1},\\\"projection_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}},\\\"data_source_ref\\\":\\\"local://runx-escalation-judge/dogfood\\\",\\\"event_digest\\\":null,\\\"event_ref\\\":null,\\\"events\\\":[],\\\"idempotency_key\\\":null,\\\"operation\\\":\\\"read_projection\\\",\\\"projection\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"event_count\\\":1,\\\"event_digests\\\":[\\\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\\\"],\\\"last_event_ref\\\":\\\"escalation_cases:thread:acct-9001:case-dogfood-001:1\\\",\\\"last_event_type\\\":\\\"support_case.escalation_opened\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"version\\\":1},\\\"projection_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"provider_evidence\\\":{\\\"aggregate_id\\\":\\\"thread:acct-9001:case-dogfood-001\\\",\\\"provider\\\":\\\"local-json-event-store\\\",\\\"resource\\\":\\\"escalation_cases\\\",\\\"storage_class\\\":\\\"local-fixture\\\",\\\"store_id\\\":\\\"escalation-judge-dogfood-v2\\\"},\\\"redactions\\\":[],\\\"resource\\\":\\\"escalation_cases\\\",\\\"result_digest\\\":\\\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\\\",\\\"rows\\\":[],\\\"schema\\\":\\\"runx.data.operation_result.v1\\\",\\\"status\\\":\\\"read\\\",\\\"stop_conditions\\\":[]}\"}},\"steps\":[{\"receipt_id\":\"sha256:9710c12175bca49f5a156e4851be61f195ae0dcd417b53cfb6404bde65c61bd5\",\"skill\":\"tool:data.source\",\"status\":\"success\",\"step_id\":\"read-prior-case\"},{\"receipt_id\":\"sha256:be12274e234405ef34b4c44a9c91bd97646b646b886f775274d04877580d5b3c\",\"skill\":\"decide\",\"status\":\"success\",\"step_id\":\"decide\"},{\"receipt_id\":\"sha256:a159d2658c096ad33c8959ba0ed9996ca084355a9dac2b611ea93ce42df973fa\",\"skill\":\"tool:data.source\",\"status\":\"success\",\"step_id\":\"append-case\"},{\"receipt_id\":\"sha256:0569a414f7789cb0c381f2fa20da63894e98873131671ea34e1e61a7463ef556\",\"skill\":\"tool:data.source\",\"status\":\"success\",\"step_id\":\"readback\"}]}", + "structured_output": { + "graph": "escalation-judge", + "graph_status": "Succeeded", + "step_outputs": { + "append-case": { + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}" + }, + "decide": { + "escalation_judgment": { + "data": { + "case_event": { + "payload": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "data_store": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "packet": "runx.support.escalation_judge.v1", + "policy_match": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "lane": "priority_support", + "name": "renewal_blocked", + "target_rail": "downstream.slack-notify.priority-support" + }, + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "type": "support_case.escalation_opened" + }, + "case_id": "case_efd0ad8f11b130a3", + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "observations": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id_appended": "case_efd0ad8f11b130a3", + "churn_signals_cited": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_decision": true, + "escalation_lane": "priority_support", + "expected_version": 0, + "harness_case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "named_policy_threshold_matched": "renewal_blocked", + "named_target_rail": "downstream.slack-notify.priority-support", + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "prior_case_projection_read": true, + "receipt_id": "assigned by runx receipt after execution", + "refused_or_stop_reason": null, + "severity": "critical", + "severity_thresholds_cited": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "stop_state": null, + "target_rail_effect": "none" + } + } + }, + "raw": "{\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"observations\": {\n \"escalation_decision\": true,\n \"escalation_lane\": \"priority_support\",\n \"named_policy_threshold_matched\": \"renewal_blocked\",\n \"severity\": \"critical\",\n \"severity_thresholds_cited\": [\n {\n \"name\": \"severity-high-or-critical\",\n \"lane\": \"priority_support\",\n \"lane_declared\": true,\n \"evidence\": {\n \"classification\": \"bug\",\n \"observed_severity\": \"critical\",\n \"min_severity\": \"high\"\n }\n }\n ],\n \"churn_signals_cited\": [\n {\n \"name\": \"renewal_blocked\",\n \"terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ],\n \"lane\": \"priority_support\",\n \"lane_declared\": true\n }\n ],\n \"prior_case_projection_read\": true,\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"case_id_appended\": \"case_efd0ad8f11b130a3\",\n \"refused_or_stop_reason\": null,\n \"stop_state\": null,\n \"named_target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_effect\": \"none\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\",\n \"harness_case_names\": [\n \"high-severity-churn-opens-priority-case\",\n \"low-confidence-howto-stops-no-change\",\n \"missing-policy-needs-input\",\n \"undeclared-lane-needs-human\"\n ],\n \"receipt_id\": \"assigned by runx receipt after execution\"\n },\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"case_event\": {\n \"type\": \"support_case.escalation_opened\",\n \"payload\": {\n \"packet\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n },\n \"policy_match\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"data_store\": {\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\"\n }\n }\n }\n}\n", + "skill_claim": { + "case_event": { + "payload": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "data_store": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "packet": "runx.support.escalation_judge.v1", + "policy_match": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "lane": "priority_support", + "name": "renewal_blocked", + "target_rail": "downstream.slack-notify.priority-support" + }, + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "type": "support_case.escalation_opened" + }, + "case_id": "case_efd0ad8f11b130a3", + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "observations": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id_appended": "case_efd0ad8f11b130a3", + "churn_signals_cited": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_decision": true, + "escalation_lane": "priority_support", + "expected_version": 0, + "harness_case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "named_policy_threshold_matched": "renewal_blocked", + "named_target_rail": "downstream.slack-notify.priority-support", + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "prior_case_projection_read": true, + "receipt_id": "assigned by runx receipt after execution", + "refused_or_stop_reason": null, + "severity": "critical", + "severity_thresholds_cited": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "stop_state": null, + "target_rail_effect": "none" + } + }, + "status": "success", + "stderr": "", + "stdout": "{\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"observations\": {\n \"escalation_decision\": true,\n \"escalation_lane\": \"priority_support\",\n \"named_policy_threshold_matched\": \"renewal_blocked\",\n \"severity\": \"critical\",\n \"severity_thresholds_cited\": [\n {\n \"name\": \"severity-high-or-critical\",\n \"lane\": \"priority_support\",\n \"lane_declared\": true,\n \"evidence\": {\n \"classification\": \"bug\",\n \"observed_severity\": \"critical\",\n \"min_severity\": \"high\"\n }\n }\n ],\n \"churn_signals_cited\": [\n {\n \"name\": \"renewal_blocked\",\n \"terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ],\n \"lane\": \"priority_support\",\n \"lane_declared\": true\n }\n ],\n \"prior_case_projection_read\": true,\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"case_id_appended\": \"case_efd0ad8f11b130a3\",\n \"refused_or_stop_reason\": null,\n \"stop_state\": null,\n \"named_target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_effect\": \"none\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\",\n \"harness_case_names\": [\n \"high-severity-churn-opens-priority-case\",\n \"low-confidence-howto-stops-no-change\",\n \"missing-policy-needs-input\",\n \"undeclared-lane-needs-human\"\n ],\n \"receipt_id\": \"assigned by runx receipt after execution\"\n },\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"case_event\": {\n \"type\": \"support_case.escalation_opened\",\n \"payload\": {\n \"packet\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n },\n \"policy_match\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"data_store\": {\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\"\n }\n }\n }\n}\n" + }, + "read-prior-case": { + "data_operation_result": { + "data": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_operation_result": { + "data": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}" + }, + "readback": { + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}" + } + }, + "steps": [ + { + "receipt_id": "sha256:9710c12175bca49f5a156e4851be61f195ae0dcd417b53cfb6404bde65c61bd5", + "skill": "tool:data.source", + "status": "success", + "step_id": "read-prior-case" + }, + { + "receipt_id": "sha256:be12274e234405ef34b4c44a9c91bd97646b646b886f775274d04877580d5b3c", + "skill": "decide", + "status": "success", + "step_id": "decide" + }, + { + "receipt_id": "sha256:a159d2658c096ad33c8959ba0ed9996ca084355a9dac2b611ea93ce42df973fa", + "skill": "tool:data.source", + "status": "success", + "step_id": "append-case" + }, + { + "receipt_id": "sha256:0569a414f7789cb0c381f2fa20da63894e98873131671ea34e1e61a7463ef556", + "skill": "tool:data.source", + "status": "success", + "step_id": "readback" + } + ] + } + }, + "payload": { + "graph": "escalation-judge", + "graph_status": "Succeeded", + "step_outputs": { + "append-case": { + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7", + "event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "events": [], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "operation": "append_event", + "projection_digest": "sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "committed", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\",\"event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"events\":[],\"idempotency_key\":\"thread:acct-9001:case-dogfood-001:escalation:v1\",\"operation\":\"append_event\",\"projection_digest\":\"sha256:829150a4f1324883f7a50f6d774d980db0fc23b84245ad499bd0206358dcdd67\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:bfe2218624361d3a1c63905bf2b547813dc2596afe5b1b44a6f417da3a4df652\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"committed\",\"stop_conditions\":[]}" + }, + "decide": { + "escalation_judgment": { + "data": { + "case_event": { + "payload": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "data_store": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "packet": "runx.support.escalation_judge.v1", + "policy_match": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "lane": "priority_support", + "name": "renewal_blocked", + "target_rail": "downstream.slack-notify.priority-support" + }, + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "type": "support_case.escalation_opened" + }, + "case_id": "case_efd0ad8f11b130a3", + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "observations": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id_appended": "case_efd0ad8f11b130a3", + "churn_signals_cited": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_decision": true, + "escalation_lane": "priority_support", + "expected_version": 0, + "harness_case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "named_policy_threshold_matched": "renewal_blocked", + "named_target_rail": "downstream.slack-notify.priority-support", + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "prior_case_projection_read": true, + "receipt_id": "assigned by runx receipt after execution", + "refused_or_stop_reason": null, + "severity": "critical", + "severity_thresholds_cited": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "stop_state": null, + "target_rail_effect": "none" + } + } + }, + "raw": "{\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"observations\": {\n \"escalation_decision\": true,\n \"escalation_lane\": \"priority_support\",\n \"named_policy_threshold_matched\": \"renewal_blocked\",\n \"severity\": \"critical\",\n \"severity_thresholds_cited\": [\n {\n \"name\": \"severity-high-or-critical\",\n \"lane\": \"priority_support\",\n \"lane_declared\": true,\n \"evidence\": {\n \"classification\": \"bug\",\n \"observed_severity\": \"critical\",\n \"min_severity\": \"high\"\n }\n }\n ],\n \"churn_signals_cited\": [\n {\n \"name\": \"renewal_blocked\",\n \"terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ],\n \"lane\": \"priority_support\",\n \"lane_declared\": true\n }\n ],\n \"prior_case_projection_read\": true,\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"case_id_appended\": \"case_efd0ad8f11b130a3\",\n \"refused_or_stop_reason\": null,\n \"stop_state\": null,\n \"named_target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_effect\": \"none\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\",\n \"harness_case_names\": [\n \"high-severity-churn-opens-priority-case\",\n \"low-confidence-howto-stops-no-change\",\n \"missing-policy-needs-input\",\n \"undeclared-lane-needs-human\"\n ],\n \"receipt_id\": \"assigned by runx receipt after execution\"\n },\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"case_event\": {\n \"type\": \"support_case.escalation_opened\",\n \"payload\": {\n \"packet\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n },\n \"policy_match\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"data_store\": {\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\"\n }\n }\n }\n}\n", + "skill_claim": { + "case_event": { + "payload": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "data_store": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "packet": "runx.support.escalation_judge.v1", + "policy_match": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "lane": "priority_support", + "name": "renewal_blocked", + "target_rail": "downstream.slack-notify.priority-support" + }, + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "type": "support_case.escalation_opened" + }, + "case_id": "case_efd0ad8f11b130a3", + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "escalation_packet": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id": "case_efd0ad8f11b130a3", + "dispatch_by_name_only": true, + "lane": "priority_support", + "matched_policy": { + "evidence": { + "matched_terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + }, + "kind": "churn_risk_signal", + "name": "renewal_blocked" + }, + "rail_effect": "none", + "schema": "runx.support.escalation_judge.v1", + "target_rail": "downstream.slack-notify.priority-support", + "target_rail_kind": "internal_lane", + "triage": { + "classification": "bug", + "confidence": 0.94, + "severity": "critical" + } + }, + "observations": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "case_id_appended": "case_efd0ad8f11b130a3", + "churn_signals_cited": [ + { + "lane": "priority_support", + "lane_declared": true, + "name": "renewal_blocked", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_decision": true, + "escalation_lane": "priority_support", + "expected_version": 0, + "harness_case_names": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ], + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1", + "named_policy_threshold_matched": "renewal_blocked", + "named_target_rail": "downstream.slack-notify.priority-support", + "prior_case_projection": { + "event_count": 0, + "last_event_ref": null, + "last_event_type": null, + "seen": true, + "version": 0 + }, + "prior_case_projection_read": true, + "receipt_id": "assigned by runx receipt after execution", + "refused_or_stop_reason": null, + "severity": "critical", + "severity_thresholds_cited": [ + { + "evidence": { + "classification": "bug", + "min_severity": "high", + "observed_severity": "critical" + }, + "lane": "priority_support", + "lane_declared": true, + "name": "severity-high-or-critical" + } + ], + "stop_state": null, + "target_rail_effect": "none" + } + }, + "status": "success", + "stderr": "", + "stdout": "{\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"observations\": {\n \"escalation_decision\": true,\n \"escalation_lane\": \"priority_support\",\n \"named_policy_threshold_matched\": \"renewal_blocked\",\n \"severity\": \"critical\",\n \"severity_thresholds_cited\": [\n {\n \"name\": \"severity-high-or-critical\",\n \"lane\": \"priority_support\",\n \"lane_declared\": true,\n \"evidence\": {\n \"classification\": \"bug\",\n \"observed_severity\": \"critical\",\n \"min_severity\": \"high\"\n }\n }\n ],\n \"churn_signals_cited\": [\n {\n \"name\": \"renewal_blocked\",\n \"terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ],\n \"lane\": \"priority_support\",\n \"lane_declared\": true\n }\n ],\n \"prior_case_projection_read\": true,\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"case_id_appended\": \"case_efd0ad8f11b130a3\",\n \"refused_or_stop_reason\": null,\n \"stop_state\": null,\n \"named_target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_effect\": \"none\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\",\n \"harness_case_names\": [\n \"high-severity-churn-opens-priority-case\",\n \"low-confidence-howto-stops-no-change\",\n \"missing-policy-needs-input\",\n \"undeclared-lane-needs-human\"\n ],\n \"receipt_id\": \"assigned by runx receipt after execution\"\n },\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"case_event\": {\n \"type\": \"support_case.escalation_opened\",\n \"payload\": {\n \"packet\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"decision\": {\n \"escalate\": true,\n \"lane\": \"priority_support\",\n \"reason\": \"churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support.\"\n },\n \"escalation_packet\": {\n \"schema\": \"runx.support.escalation_judge.v1\",\n \"case_id\": \"case_efd0ad8f11b130a3\",\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"target_rail_kind\": \"internal_lane\",\n \"dispatch_by_name_only\": true,\n \"rail_effect\": \"none\",\n \"matched_policy\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n }\n },\n \"triage\": {\n \"classification\": \"bug\",\n \"severity\": \"critical\",\n \"confidence\": 0.94\n },\n \"policy_match\": {\n \"kind\": \"churn_risk_signal\",\n \"name\": \"renewal_blocked\",\n \"lane\": \"priority_support\",\n \"target_rail\": \"downstream.slack-notify.priority-support\",\n \"evidence\": {\n \"matched_terms\": [\n \"renewal is blocked\",\n \"cancel\",\n \"executive sponsor\"\n ]\n }\n },\n \"prior_case_projection\": {\n \"seen\": true,\n \"version\": 0,\n \"event_count\": 0,\n \"last_event_type\": null,\n \"last_event_ref\": null\n },\n \"data_store\": {\n \"aggregate_id\": \"thread:acct-9001:case-dogfood-001\",\n \"expected_version\": 0,\n \"idempotency_key\": \"thread:acct-9001:case-dogfood-001:escalation:v1\"\n }\n }\n }\n}\n" + }, + "read-prior-case": { + "data_operation_result": { + "data": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_operation_result": { + "data": { + "after_version": 0, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 0, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 0, + "event_digests": [], + "last_event_ref": null, + "last_event_type": null, + "resource": "escalation_cases", + "version": 0 + }, + "projection_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_operation_result\":{\"data\":{\"after_version\":0,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":0,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":0,\"event_digests\":[],\"last_event_ref\":null,\"last_event_type\":null,\"resource\":\"escalation_cases\",\"version\":0},\"projection_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:c020690b94d945fdec8dcdb2b940ede7a5659be14249d2d5dc5e9c5b3d35abcf\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}" + }, + "readback": { + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "raw": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}", + "skill_claim": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_operation_result": { + "data": { + "after_version": 1, + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "before_version": 1, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "event_digest": null, + "event_ref": null, + "events": [], + "idempotency_key": null, + "operation": "read_projection", + "projection": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "event_count": 1, + "event_digests": [ + "sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7" + ], + "last_event_ref": "escalation_cases:thread:acct-9001:case-dogfood-001:1", + "last_event_type": "support_case.escalation_opened", + "resource": "escalation_cases", + "version": 1 + }, + "projection_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "provider": "local-json-event-store", + "provider_evidence": { + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "provider": "local-json-event-store", + "resource": "escalation_cases", + "storage_class": "local-fixture", + "store_id": "escalation-judge-dogfood-v2" + }, + "redactions": [], + "resource": "escalation_cases", + "result_digest": "sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3", + "rows": [], + "schema": "runx.data.operation_result.v1", + "status": "read", + "stop_conditions": [] + }, + "status": "success", + "stderr": "", + "stdout": "{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_operation_result\":{\"data\":{\"after_version\":1,\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"before_version\":1,\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}},\"data_source_ref\":\"local://runx-escalation-judge/dogfood\",\"event_digest\":null,\"event_ref\":null,\"events\":[],\"idempotency_key\":null,\"operation\":\"read_projection\",\"projection\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"event_count\":1,\"event_digests\":[\"sha256:657125ae82b16e350eb13b96918d41b8fa4fe0bd8773037cc565dec2e9e71cf7\"],\"last_event_ref\":\"escalation_cases:thread:acct-9001:case-dogfood-001:1\",\"last_event_type\":\"support_case.escalation_opened\",\"resource\":\"escalation_cases\",\"version\":1},\"projection_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"provider\":\"local-json-event-store\",\"provider_evidence\":{\"aggregate_id\":\"thread:acct-9001:case-dogfood-001\",\"provider\":\"local-json-event-store\",\"resource\":\"escalation_cases\",\"storage_class\":\"local-fixture\",\"store_id\":\"escalation-judge-dogfood-v2\"},\"redactions\":[],\"resource\":\"escalation_cases\",\"result_digest\":\"sha256:b9b9feead5db9f26a9a9fdf47374aaf46b473f86f0b6841384bac1604e531be3\",\"rows\":[],\"schema\":\"runx.data.operation_result.v1\",\"status\":\"read\",\"stop_conditions\":[]}" + } + }, + "steps": [ + { + "receipt_id": "sha256:9710c12175bca49f5a156e4851be61f195ae0dcd417b53cfb6404bde65c61bd5", + "skill": "tool:data.source", + "status": "success", + "step_id": "read-prior-case" + }, + { + "receipt_id": "sha256:be12274e234405ef34b4c44a9c91bd97646b646b886f775274d04877580d5b3c", + "skill": "decide", + "status": "success", + "step_id": "decide" + }, + { + "receipt_id": "sha256:a159d2658c096ad33c8959ba0ed9996ca084355a9dac2b611ea93ce42df973fa", + "skill": "tool:data.source", + "status": "success", + "step_id": "append-case" + }, + { + "receipt_id": "sha256:0569a414f7789cb0c381f2fa20da63894e98873131671ea34e1e61a7463ef556", + "skill": "tool:data.source", + "status": "success", + "step_id": "readback" + } + ] + }, + "receipt": { + "acts": [], + "authority": { + "actor_ref": { + "type": "principal", + "uri": "runx:principal:local_runtime" + }, + "attenuation": { + "parent_authority_ref": null, + "subset_proof": null + }, + "authority_proof_refs": [], + "enforcement": { + "profile_hash": "sha256:635fdb0a7eef93911e3c6bd0b25b5e635edba32e0259133042b3a5f1fb19394e", + "redaction_refs": [], + "setup_refs": [], + "teardown_refs": [] + }, + "grant_refs": [], + "scope_refs": [], + "terms": [] + }, + "canonicalization": "runx.receipt.c14n.v1", + "created_at": "2026-07-01T22:34:15.237Z", + "decisions": [], + "digest": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020", + "id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "idempotency": { + "content_hash": "sha256:escalation-judge-graph-content", + "intent_key": "sha256:escalation-judge-graph-intent", + "trigger_fingerprint": "sha256:escalation-judge-graph-trigger" + }, + "issuer": { + "kid": "frantic-69-postpublish-key", + "public_key_sha256": "sha256:3097e2dee2cb4a34b53840cdb705aed71067c36f68db0e0f559c3f3fa043315f", + "type": "hosted" + }, + "lineage": { + "children": [ + { + "locator": "sha256:f39523aafc720ac474ed8eb6adbf9d85d57c45a01019f7ef8cf9c59e5521f1a6", + "type": "receipt", + "uri": "runx:receipt:sha256:9710c12175bca49f5a156e4851be61f195ae0dcd417b53cfb6404bde65c61bd5" + }, + { + "locator": "sha256:4ceb991a9ce7062afe44dcca4e16e913204ae4a303a7701d9970c7bdf3359497", + "type": "receipt", + "uri": "runx:receipt:sha256:be12274e234405ef34b4c44a9c91bd97646b646b886f775274d04877580d5b3c" + }, + { + "locator": "sha256:2db308490c8b0ef1e8867cfd99aa81408b6e25745d3c11be663b6bf4c9cb49a1", + "type": "receipt", + "uri": "runx:receipt:sha256:a159d2658c096ad33c8959ba0ed9996ca084355a9dac2b611ea93ce42df973fa" + }, + { + "locator": "sha256:1520416515c202bc21b31191a7ece7649406041b882479a6f82b681eecfc06e7", + "type": "receipt", + "uri": "runx:receipt:sha256:0569a414f7789cb0c381f2fa20da63894e98873131671ea34e1e61a7463ef556" + } + ], + "sync": [] + }, + "schema": "runx.receipt.v1", + "seal": { + "closed_at": "2026-07-01T22:34:15.237Z", + "criteria": [], + "disposition": "closed", + "last_observed_at": "2026-07-01T22:34:15.237Z", + "reason_code": "graph_closed", + "summary": "graph escalation-judge completed" + }, + "signals": [], + "signature": { + "alg": "Ed25519", + "value": "base64:cpn2c5p0qihh4EJHfTks92vmiKyWYcACvHQiR6jaMOUKCawMVskgcYpPucVmR_pusrR9bIgEj0yTIPGNOMw7Aw" + }, + "subject": { + "commitments": [], + "kind": "graph", + "ref": { + "type": "harness", + "uri": "hrn_escalation-judge_graph" + } + } + }, + "receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "registry_provenance": { + "digest": "sha256:9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "sha256:2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "registry_key_id": "runx-registry-ed25519-v1", + "registry_source": "remote https://api.runx.ai", + "registry_source_fingerprint": "ba1ac16b631195fd", + "skill_id": "fengyangxxx/escalation-judge", + "trust_state": "trusted", + "trust_tier": "community", + "version": "sha-5b6e5530679f" + }, + "run_id": "run_judge_4dd914707f4b", + "schema": "runx.skill_run.v1", + "skill_name": "escalation-judge", + "status": "sealed" +} diff --git a/skills/escalation-judge/artifacts/postpublish-dogfood-runx-0.6.14-linux.stderr.txt b/skills/escalation-judge/artifacts/postpublish-dogfood-runx-0.6.14-linux.stderr.txt new file mode 100644 index 000000000..e69de29bb diff --git a/skills/escalation-judge/artifacts/postpublish-dogfood-verify-runx-0.6.14-linux.json b/skills/escalation-judge/artifacts/postpublish-dogfood-verify-runx-0.6.14-linux.json new file mode 100644 index 000000000..eed929e80 --- /dev/null +++ b/skills/escalation-judge/artifacts/postpublish-dogfood-verify-runx-0.6.14-linux.json @@ -0,0 +1,15 @@ +{ + "receipt_dir": "/repo/.runx-test-receipts-escalation-judge-dogfood-final", + "signature_mode": "production", + "trees": [ + { + "root_receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "receipt_count": 5, + "parent_missing": null, + "valid": true, + "findings": [] + } + ], + "unreadable_files": [], + "valid": true +} diff --git a/skills/escalation-judge/artifacts/registry-publish-runx-0.6.14.json b/skills/escalation-judge/artifacts/registry-publish-runx-0.6.14.json new file mode 100644 index 000000000..6350e010c --- /dev/null +++ b/skills/escalation-judge/artifacts/registry-publish-runx-0.6.14.json @@ -0,0 +1,20 @@ +{ + "status": "success", + "registry": { + "action": "publish", + "publish": { + "target": "hosted", + "status": "published", + "skill_id": "fengyangxxx/escalation-judge", + "owner": "fengyangxxx", + "name": "escalation-judge", + "version": "sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "trust_tier": "community", + "install_command": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "run_command": "runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "public_url": "https://runx.ai/x/fengyangxxx/escalation-judge" + } + } +} diff --git a/skills/escalation-judge/artifacts/registry-publish-runx-0.6.14.stderr.txt b/skills/escalation-judge/artifacts/registry-publish-runx-0.6.14.stderr.txt new file mode 100644 index 000000000..e69de29bb diff --git a/skills/escalation-judge/artifacts/registry-read-runx-0.6.14.json b/skills/escalation-judge/artifacts/registry-read-runx-0.6.14.json new file mode 100644 index 000000000..e33be60ba --- /dev/null +++ b/skills/escalation-judge/artifacts/registry-read-runx-0.6.14.json @@ -0,0 +1,51 @@ +{ + "status": "success", + "registry": { + "action": "read", + "source": "remote", + "ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "skill": { + "skill_id": "fengyangxxx/escalation-judge", + "owner": "fengyangxxx", + "name": "escalation-judge", + "description": "Decide whether a support thread should open an escalation case, append that case to data-store, and name the downstream rail without dispatching it.", + "category": "payments", + "version": "sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "markdown": "---\nname: escalation-judge\ndescription: Decide whether a support thread should open an escalation case, append that case to data-store, and name the downstream rail without dispatching it.\nrunx:\n category: support\n---\n\n# Escalation Judge\n\nJudge whether a support thread crosses a named escalation policy threshold. The\nskill reads a triage packet, the thread body, escalation policy rules, and prior\ncase state. It appends a durable case record only when escalation is warranted\nand emits a typed escalation packet that names the downstream rail. It never\nposts to Slack, sends customer email, pages an executive lane, or proposes a\nlive operational action.\n\nThe case append is a guarded compare-and-set write through `data-store`\n(`read_projection -> append_event`); the egress consequence is gated elsewhere.\nA downstream operator can consume the named target rail and issue a separate\ngoverned `slack-notify` or `send-as` run.\n\n## Inputs\n\n- `triage_packet`: `classification`, `severity`, and `confidence`, normally from\n `support-triage-reply` or an equivalent bounded triage source.\n- `thread_body`: support thread text used only to ground severity and churn\n signal checks.\n- `policy_rules`: `severity_thresholds`, `churn_risk_signals`, and\n `escalation_lanes`. Missing policy rules produce `needs_input`.\n- `data_source_ref` and `store_id`: the pinned data-store binding.\n- `aggregate_id`: the thread id. It is the data-store aggregate id.\n- `expected_version` and `idempotency_key`: optimistic concurrency and retry\n safety for the case append.\n\n## Output Contract\n\nThe output packet is `runx.support.escalation_judge.v1` data:\n\n- `decision{escalate,lane,reason}` always appears.\n- `case_id`, `case_event`, and `escalation_packet` appear only when escalation is\n warranted.\n- `escalation_packet` names `target_rail` and keeps `rail_effect: none`.\n- `stop_state` appears when the thread does not escalate, when required input is\n missing, when policy is ambiguous, or when a policy threshold names an\n undeclared lane.\n- `observations` cite the matched threshold, severity, churn signals, prior-case\n projection, case id, stop reason, target rail, harness cases, and data-store\n append controls.\n\nThe packet must not contain an `operational_proposal`. It is a judgment and\nstate append, not a live notification or send.\n\n## State Model\n\nThe default graph follows the github-sync-style shape:\n\n1. `read_projection` loads the prior escalation-case projection for the thread.\n2. `decide` evaluates severity thresholds and churn signals against declared\n policy lanes.\n3. `append_event` records `support_case.escalation_opened` with\n `expected_version` and `idempotency_key` only when\n `decision.escalate == true`.\n4. `read_projection` reads back the durable case state for receipt evidence.\n\nIf a prior case projection already exists, the skill stops with no new case so\nthe same thread is not re-escalated.\n\n## Escalation Boundary\n\nThe policy must declare every lane under `policy_rules.escalation_lanes`.\nSeverity thresholds and churn-risk signals can only route to those lanes. If a\nthreshold names an undeclared lane, the result is `needs_human` and no case is\nopened.\n\nInternal lanes should name a downstream rail such as\n`downstream.slack-notify.priority-support`. Cross-provider lanes can name a\nseparate `send-as` rail. This skill only names the rail; the downstream operator\nor driver performs the governed action in a separate run.\n\n## Local Harness\n\nRun:\n\n```bash\nrunx harness ./skills/escalation-judge --json\n```\n\nHarness cases:\n\n- `high-severity-churn-opens-priority-case`: critical support thread and renewal\n risk match named policy thresholds, append a case, and emit a priority-support\n escalation packet.\n- `low-confidence-howto-stops-no-change`: low-severity how-to thread matches no\n threshold, so the graph stops with `decision.escalate=false`, no case, and no\n escalation packet.\n- `missing-policy-needs-input`: policy rules are absent, so the skill refuses to\n escalate and reports `needs_input`.\n- `undeclared-lane-needs-human`: a threshold matches but names an undeclared\n lane, so the skill refuses to route and reports `needs_human`.\n\n## Example Invocation\n\n```bash\nrunx skill escalation-judge --json \\\n --input-json triage_packet='{\"classification\":\"bug\",\"severity\":\"critical\",\"confidence\":0.93}' \\\n -i thread_body='Enterprise tenant says production webhooks are down, renewal is blocked, and the sponsor may cancel.' \\\n --input-json policy_rules='{\"severity_thresholds\":[{\"name\":\"severity-high-or-critical\",\"lane\":\"priority_support\",\"min_severity\":\"high\",\"classifications\":[\"bug\"]}],\"churn_risk_signals\":[{\"name\":\"renewal_blocked\",\"lane\":\"priority_support\",\"terms\":[\"renewal is blocked\",\"cancel\"]}],\"escalation_lanes\":{\"priority_support\":{\"target_rail\":\"downstream.slack-notify.priority-support\",\"consequence\":\"internal_lane\"}}}' \\\n -i data_source_ref=local://runx-escalation-judge/example \\\n -i store_id=escalation-judge-example-v2 \\\n -i aggregate_id=thread:acct-4242:case-1001 \\\n --input-json expected_version=0 \\\n -i idempotency_key=thread:acct-4242:case-1001:escalation:v1\n```", + "profile_digest": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "runner_names": [ + "decide", + "judge" + ], + "source_type": "agent", + "trust_tier": "community", + "required_scopes": [], + "tags": [], + "publisher": { + "kind": "user", + "id": "user_69446dfb22822d5fdc22562d", + "handle": "fengyangxxx", + "display_name": "fy" + }, + "attestations": [ + { + "kind": "publisher", + "id": "publisher:user_69446dfb22822d5fdc22562d", + "status": "declared", + "summary": "fy", + "issued_at": "2026-07-01T22:33:08.471Z", + "metadata": { + "publisher_display_name": "fy", + "publisher_handle": "fengyangxxx", + "publisher_id": "user_69446dfb22822d5fdc22562d", + "publisher_kind": "user", + "trust_tier": "community" + } + } + ], + "install_command": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "run_command": "runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai" + } + } +} diff --git a/skills/escalation-judge/artifacts/report.md b/skills/escalation-judge/artifacts/report.md new file mode 100644 index 000000000..e14fcf91b --- /dev/null +++ b/skills/escalation-judge/artifacts/report.md @@ -0,0 +1,64 @@ +# Escalation Judge runx Skill Delivery Report + +## Package + +- Owner/package: fengyangxxx/escalation-judge@sha-5b6e5530679f +- Public registry page: https://runx.ai/x/fengyangxxx/escalation-judge@sha-5b6e5530679f +- PR: https://github.com/runxhq/runx/pull/209 +- Package digest: 9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa +- Profile digest: 2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6 +- CLI used for publish, install, dogfood, and verify: runx-cli 0.6.14 + +## Verification Summary + +- Local harness: passed, 4 cases, 0 assertion errors. +- Hosted registry publish: published; hosted harness passed before version sha-5b6e5530679f was published. +- Registry read: fengyangxxx/escalation-judge@sha-5b6e5530679f resolved with digest 9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa. +- Clean install: installed at /tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/SKILL.md. +- Post-publish dogfood: graph Succeeded, exit code 0. +- Receipt verify: root runx:receipt:sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2, valid=true, signature=valid, mode=production. + +## Operator Value + +The skill decides whether a support thread should open an escalation case without dispatching the downstream consequence itself. It reads prior case state, evaluates named policy thresholds and churn signals, appends a durable case record through data-store, and emits a typed escalation packet that names the downstream rail. This lets an operator audit why a priority lane was selected while keeping Slack/email/page actions in a separate governed run. + +## Acceptance Coverage + +- Exact package name is `escalation-judge`; published as fengyangxxx/escalation-judge@sha-5b6e5530679f. +- Typed inputs include `triage_packet`, `thread_body`, `policy_rules`, `data_source_ref`, `store_id`, `aggregate_id`, `expected_version`, and `idempotency_key`. +- State path follows `read_projection -> decide -> append_event -> readback` with pinned store ids and ungated CAS append. +- High severity / churn dogfood escalated to `priority_support`, matched `renewal_blocked`, appended `case_efd0ad8f11b130a3`, and named `downstream.slack-notify.priority-support` with `rail_effect=none`. +- Harness cases cover sealed escalation, deterministic no-change stop, missing-policy refusal, and undeclared-lane human approval routing. +- The skill refuses to invent policy lanes and does not post, send, or page directly. + +## Commands + +```bash +runx --version +runx harness ./skills/escalation-judge --json --receipt-dir .runx-test-receipts-escalation-judge-harness-final +runx registry publish ./skills/escalation-judge/SKILL.md --registry https://api.runx.ai --profile ./skills/escalation-judge/X.yaml --json +runx registry read fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json +runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --to /tmp/escalation-judge-install --json +runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json -R .runx-test-receipts-escalation-judge-dogfood-final ... +runx verify --receipt skills/escalation-judge/artifacts/postpublish-dogfood-root-receipt-runx-0.6.14-linux.json --json +``` + +## Install, Run, Verify + +```bash +runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai +runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai --json -R .runx-receipts \ + --input-json triage_packet='{"classification":"bug","severity":"critical","confidence":0.94}' \ + -i thread_body='Enterprise tenant says production webhooks are down, renewal is blocked, and the executive sponsor may cancel.' \ + --input-json policy_rules='{"severity_thresholds":[{"name":"severity-high-or-critical","lane":"priority_support","min_severity":"high","classifications":["bug"]}],"churn_risk_signals":[{"name":"renewal_blocked","lane":"priority_support","terms":["renewal is blocked","cancel","executive sponsor"]}],"escalation_lanes":{"priority_support":{"target_rail":"downstream.slack-notify.priority-support","consequence":"internal_lane"}}}' \ + -i data_source_ref=local://runx-escalation-judge/dogfood \ + -i store_id=escalation-judge-dogfood-v2 \ + -i aggregate_id=thread:acct-9001:case-dogfood-001 \ + --input-json expected_version=0 \ + -i idempotency_key=thread:acct-9001:case-dogfood-001:escalation:v1 +runx verify --receipt --json +``` + +## Artifact Notes + +Final Frantic delivery uses commit-SHA URLs for `source_url`, raw `x_yaml`, raw `skill_md`, `evidence_json`, `verification_json`, and this report. The evidence file records source file SHA256 values and the QA log records byte identity for the exact final payload. No tokens, cookies, browser storage, or private credentials are included. diff --git a/skills/escalation-judge/artifacts/runx-version-0.6.14.txt b/skills/escalation-judge/artifacts/runx-version-0.6.14.txt new file mode 100644 index 000000000..9edad5f0e --- /dev/null +++ b/skills/escalation-judge/artifacts/runx-version-0.6.14.txt @@ -0,0 +1 @@ +runx-cli 0.6.14 diff --git a/skills/escalation-judge/artifacts/verification.json b/skills/escalation-judge/artifacts/verification.json new file mode 100644 index 000000000..992a368c0 --- /dev/null +++ b/skills/escalation-judge/artifacts/verification.json @@ -0,0 +1,185 @@ +{ + "schema": "frantic.runx_skill_verification.v1", + "generated_at": "2026-07-01T22:41:06.580Z", + "package": { + "owner": "fengyangxxx", + "name": "escalation-judge", + "version": "sha-5b6e5530679f", + "registry_ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "public_url": "https://runx.ai/x/fengyangxxx/escalation-judge@sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "install_command": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "run_command": "runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai" + }, + "receipt_ref": "runx:receipt:sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "status": "PASS", + "checks": [ + { + "id": "runx_cli_version", + "decision": "PASS", + "observed": "runx-cli 0.6.14", + "evidence": "skills/escalation-judge/artifacts/runx-version-0.6.14.txt" + }, + { + "id": "doctor", + "decision": "PASS", + "observed": { + "errors": 0, + "warnings": 13, + "infos": 0 + }, + "evidence": "skills/escalation-judge/artifacts/doctor-final-prepublish.json" + }, + { + "id": "local_harness", + "decision": "PASS", + "observed": { + "status": "passed", + "cases": [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human" + ] + }, + "evidence": "skills/escalation-judge/artifacts/local-harness-runx-0.6.14-linux.json" + }, + { + "id": "hosted_publish_harness", + "decision": "PASS", + "observed": { + "target": "hosted", + "status": "published", + "skill_id": "fengyangxxx/escalation-judge", + "owner": "fengyangxxx", + "name": "escalation-judge", + "version": "sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "trust_tier": "community", + "install_command": "runx add fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "run_command": "runx skill fengyangxxx/escalation-judge@sha-5b6e5530679f --registry https://api.runx.ai", + "public_url": "https://runx.ai/x/fengyangxxx/escalation-judge" + }, + "evidence": "skills/escalation-judge/artifacts/registry-publish-runx-0.6.14.json" + }, + { + "id": "registry_read", + "decision": "PASS", + "observed": { + "ref": "fengyangxxx/escalation-judge@sha-5b6e5530679f", + "digest": "9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa" + }, + "evidence": "skills/escalation-judge/artifacts/registry-read-runx-0.6.14.json" + }, + { + "id": "clean_install", + "decision": "PASS", + "observed": { + "status": "installed", + "destination": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/SKILL.md", + "skill_name": "escalation-judge", + "source": "runx-registry", + "source_label": "runx registry", + "skill_id": "fengyangxxx/escalation-judge", + "version": "sha-5b6e5530679f", + "digest": "sha256:9561d10f0bb728cbb1ff3f316476c1bec46b48688a935b3f37d1b2b3f9e281aa", + "profile_digest": "sha256:2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "profile_state_path": "/tmp/escalation-judge-install/fengyangxxx/escalation-judge/sha-5b6e5530679f/.runx/profile.json", + "runner_names": [ + "decide", + "judge" + ], + "trust_tier": "community" + }, + "evidence": "skills/escalation-judge/artifacts/clean-install-runx-add-0.6.14.json" + }, + { + "id": "postpublish_dogfood", + "decision": "PASS", + "observed": { + "closure": { + "closed_at": "2026-07-01T22:34:15.237Z", + "disposition": "closed", + "reason_code": "graph_closed", + "summary": "graph escalation-judge completed" + }, + "decision": { + "escalate": true, + "lane": "priority_support", + "reason": "churn_risk_signal matched renewal_blocked; route to priority_support via downstream.slack-notify.priority-support." + }, + "case_id": "case_efd0ad8f11b130a3" + }, + "evidence": "skills/escalation-judge/artifacts/postpublish-dogfood-runx-0.6.14-linux.json" + }, + { + "id": "receipt_verify_tree", + "decision": "PASS", + "observed": { + "receipt_dir": "/repo/.runx-test-receipts-escalation-judge-dogfood-final", + "signature_mode": "production", + "trees": [ + { + "root_receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "receipt_count": 5, + "parent_missing": null, + "valid": true, + "findings": [] + } + ], + "unreadable_files": [], + "valid": true + }, + "evidence": "skills/escalation-judge/artifacts/postpublish-dogfood-verify-runx-0.6.14-linux.json" + }, + { + "id": "receipt_verify_root", + "decision": "PASS", + "observed": { + "schema": "runx.verify_verdict.v1", + "receipt_id": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "valid": true, + "digest": { + "status": "valid", + "expected": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020", + "actual": "sha256:6a1edde55acb51ee43211ce1cc12df006948d552baedf6ced75b7a86f48a4020" + }, + "content_address": { + "status": "valid", + "expected": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2", + "actual": "sha256:ae9cc8cf24ded9e5e12ceac7b2765440ae2e228f476b7306543371224f9420b2" + }, + "signature": { + "mode": "production", + "status": "valid", + "kid": "frantic-69-postpublish-key" + }, + "lineage": { + "status": "unverified", + "message": "single receipt verification cannot prove receipt-tree lineage" + }, + "findings": [] + }, + "evidence": "skills/escalation-judge/artifacts/postpublish-dogfood-root-verify-runx-0.6.14-linux.json" + }, + { + "id": "source_files", + "decision": "PASS", + "observed": { + "pr_url": "https://github.com/runxhq/runx/pull/209", + "source_path": "skills/escalation-judge", + "x_yaml_path": "skills/escalation-judge/X.yaml", + "skill_md_path": "skills/escalation-judge/SKILL.md", + "x_yaml_sha256": "2ec50b7b22d5f5fd8217b710f52466f3564fc386ea8fbaa7be5d365bdd007da6", + "skill_md_sha256": "cccc9758c94f0599648aa2ab8a8b807cae590952f768e937b5c1878360346908", + "immutable_urls": "submitted as commit-SHA artifact_refs in the Frantic payload and QA log after final commit" + }, + "evidence": [ + "skills/escalation-judge/X.yaml", + "skills/escalation-judge/SKILL.md" + ] + } + ] +} diff --git a/skills/escalation-judge/fixtures/dogfood-critical-input.json b/skills/escalation-judge/fixtures/dogfood-critical-input.json new file mode 100644 index 000000000..8645e58d2 --- /dev/null +++ b/skills/escalation-judge/fixtures/dogfood-critical-input.json @@ -0,0 +1,43 @@ +{ + "triage_packet": { + "classification": "bug", + "severity": "critical", + "confidence": 0.94 + }, + "thread_body": "Enterprise customer reports production webhook delivery is down. Their renewal is blocked and the executive sponsor says they will cancel unless priority support owns the incident today.", + "policy_rules": { + "severity_thresholds": [ + { + "name": "severity-high-or-critical", + "lane": "priority_support", + "min_severity": "high", + "classifications": [ + "bug", + "account_access" + ] + } + ], + "churn_risk_signals": [ + { + "name": "renewal_blocked", + "lane": "priority_support", + "terms": [ + "renewal is blocked", + "cancel", + "executive sponsor" + ] + } + ], + "escalation_lanes": { + "priority_support": { + "target_rail": "downstream.slack-notify.priority-support", + "consequence": "internal_lane" + } + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "store_id": "escalation-judge-dogfood-v2", + "aggregate_id": "thread:acct-9001:case-dogfood-001", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-001:escalation:v1" +} diff --git a/skills/escalation-judge/fixtures/no-change-input.json b/skills/escalation-judge/fixtures/no-change-input.json new file mode 100644 index 000000000..24a919fa8 --- /dev/null +++ b/skills/escalation-judge/fixtures/no-change-input.json @@ -0,0 +1,42 @@ +{ + "triage_packet": { + "classification": "how_to", + "severity": "low", + "confidence": 0.81 + }, + "thread_body": "Customer asks how to configure the webhook endpoint and does not mention outage, renewal, cancellation, legal, or executive visibility.", + "policy_rules": { + "severity_thresholds": [ + { + "name": "severity-high-or-critical", + "lane": "priority_support", + "min_severity": "high", + "classifications": [ + "bug", + "account_access" + ] + } + ], + "churn_risk_signals": [ + { + "name": "renewal_blocked", + "lane": "priority_support", + "terms": [ + "renewal is blocked", + "cancel" + ] + } + ], + "escalation_lanes": { + "priority_support": { + "target_rail": "downstream.slack-notify.priority-support", + "consequence": "internal_lane" + } + } + }, + "data_source_ref": "local://runx-escalation-judge/dogfood", + "store_id": "escalation-judge-dogfood-v2", + "aggregate_id": "thread:acct-9001:case-dogfood-002", + "expected_version": 0, + "idempotency_key": "thread:acct-9001:case-dogfood-002:escalation:v1" +} diff --git a/skills/escalation-judge/run.mjs b/skills/escalation-judge/run.mjs new file mode 100644 index 000000000..bd796f9cd --- /dev/null +++ b/skills/escalation-judge/run.mjs @@ -0,0 +1,348 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; + +const severityRank = new Map([ + ["low", 1], + ["medium", 2], + ["high", 3], + ["critical", 4], +]); + +const inputs = readInputs(); +const triagePacket = objectValue(inputs.triage_packet, "triage_packet"); +const threadBody = stringValue(inputs.thread_body); +const policyRules = maybeObject(inputs.policy_rules); +const aggregateId = stringValue(inputs.aggregate_id); +const expectedVersion = numberValue(inputs.expected_version); +const idempotencyKey = stringValue(inputs.idempotency_key); +const priorCase = maybeObject(inputs.prior_case); + +if (!threadBody) fail("thread_body is required"); +if (!aggregateId) fail("aggregate_id is required"); +if (expectedVersion === undefined) fail("expected_version is required"); +if (!idempotencyKey) fail("idempotency_key is required"); + +const classification = stringValue(triagePacket.classification); +const severity = normalizeSeverity(triagePacket.severity); +const confidence = numberValue(triagePacket.confidence); +const normalizedThread = normalize(threadBody); +const harnessCaseNames = [ + "high-severity-churn-opens-priority-case", + "low-confidence-howto-stops-no-change", + "missing-policy-needs-input", + "undeclared-lane-needs-human", +]; +const priorProjection = summarizeProjection(priorCase); + +const stopReasons = []; +if (!classification) stopReasons.push("triage_packet.classification is missing"); +if (!severity) stopReasons.push("triage_packet.severity is missing or not one of low, medium, high, critical"); +if (confidence === undefined) stopReasons.push("triage_packet.confidence is missing"); +if (!policyRules) stopReasons.push("policy_rules is required before escalation"); + +let laneMap = {}; +let severityThresholds = []; +let churnRules = []; +if (policyRules) { + laneMap = objectEntries(policyRules.escalation_lanes); + severityThresholds = arrayValue(policyRules.severity_thresholds); + churnRules = arrayValue(policyRules.churn_risk_signals); + if (Object.keys(laneMap).length === 0) stopReasons.push("policy_rules.escalation_lanes is empty"); + if (severityThresholds.length === 0 && churnRules.length === 0) { + stopReasons.push("policy_rules has no severity thresholds or churn risk signals"); + } +} + +if (priorProjection.version > 0 || priorProjection.event_count > 0) { + stopReasons.push(`prior escalation projection already exists for ${aggregateId}`); +} + +const thresholdMatches = stopReasons.length === 0 + ? matchSeverityThresholds({ severityThresholds, classification, severity, laneMap }) + : []; +const churnMatches = stopReasons.length === 0 + ? matchChurnSignals({ churnRules, normalizedThread, laneMap }) + : []; +const undeclaredCandidates = [...thresholdMatches, ...churnMatches].filter((match) => !match.lane_declared); +if (undeclaredCandidates.length > 0) { + stopReasons.push(`policy matched undeclared lane ${undeclaredCandidates[0].lane}`); +} + +const declaredMatches = [...thresholdMatches, ...churnMatches].filter((match) => match.lane_declared); +const selected = stopReasons.length === 0 ? chooseMatch(declaredMatches) : null; +const shouldEscalate = Boolean(selected); +const stopStatus = stopReasons.length > 0 + ? stopStatusFor(stopReasons) + : "no_change"; +const stopReason = stopReasons.length > 0 + ? stopReasons.join("; ") + : "no_change: severity and churn signals do not meet any named policy threshold"; +const caseId = shouldEscalate ? `case_${sha256(`${aggregateId}:${idempotencyKey}`).slice(0, 16)}` : null; +const lanePolicy = shouldEscalate ? laneMap[selected.lane] : null; +const targetRail = shouldEscalate ? stringValue(lanePolicy.target_rail) : null; +const decision = shouldEscalate + ? { + escalate: true, + lane: selected.lane, + reason: `${selected.kind} matched ${selected.name}; route to ${selected.lane} via ${targetRail}.`, + } + : { + escalate: false, + lane: null, + reason: stopReason, + }; + +const observations = { + escalation_decision: decision.escalate, + escalation_lane: decision.lane, + named_policy_threshold_matched: shouldEscalate ? selected.name : null, + severity: severity ?? stringValue(triagePacket.severity), + severity_thresholds_cited: thresholdMatches.map((match) => ({ + name: match.name, + lane: match.lane, + lane_declared: match.lane_declared, + evidence: match.evidence, + })), + churn_signals_cited: churnMatches.map((match) => ({ + name: match.name, + terms: match.terms, + lane: match.lane, + lane_declared: match.lane_declared, + })), + prior_case_projection_read: true, + prior_case_projection: priorProjection, + case_id_appended: caseId, + refused_or_stop_reason: shouldEscalate ? null : stopReason, + stop_state: shouldEscalate ? null : stopStatus, + named_target_rail: targetRail, + target_rail_effect: "none", + aggregate_id: aggregateId, + expected_version: expectedVersion, + idempotency_key: idempotencyKey, + harness_case_names: harnessCaseNames, + receipt_id: "assigned by runx receipt after execution", +}; + +const result = { + decision, + observations, +}; + +if (shouldEscalate) { + const escalationPacket = { + schema: "runx.support.escalation_judge.v1", + case_id: caseId, + aggregate_id: aggregateId, + lane: selected.lane, + target_rail: targetRail, + target_rail_kind: stringValue(lanePolicy.consequence) ?? "internal_lane", + dispatch_by_name_only: true, + rail_effect: "none", + matched_policy: { + kind: selected.kind, + name: selected.name, + evidence: selected.evidence, + }, + triage: { + classification, + severity, + confidence, + }, + }; + const caseEvent = { + type: "support_case.escalation_opened", + payload: { + packet: "runx.support.escalation_judge.v1", + case_id: caseId, + aggregate_id: aggregateId, + decision, + escalation_packet: escalationPacket, + triage: { + classification, + severity, + confidence, + }, + policy_match: { + kind: selected.kind, + name: selected.name, + lane: selected.lane, + target_rail: targetRail, + evidence: selected.evidence, + }, + prior_case_projection: priorProjection, + data_store: { + aggregate_id: aggregateId, + expected_version: expectedVersion, + idempotency_key: idempotencyKey, + }, + }, + }; + result.case_id = caseId; + result.escalation_packet = escalationPacket; + result.case_event = caseEvent; +} else { + result.stop_state = { + status: stopStatus, + reason: stopReason, + no_case_opened: true, + no_escalation_packet_emitted: true, + }; +} + +process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); + +function matchSeverityThresholds({ severityThresholds, classification, severity, laneMap }) { + const rank = severityRank.get(severity); + return severityThresholds + .map((rule) => { + const name = stringValue(rule.name) ?? "unnamed_severity_threshold"; + const lane = stringValue(rule.lane); + const minSeverity = normalizeSeverity(rule.min_severity); + const allowedClassifications = uniqueStrings(rule.classifications); + if (!lane || !minSeverity || rank < severityRank.get(minSeverity)) return null; + if (allowedClassifications.length > 0 && !allowedClassifications.includes(classification)) return null; + return { + kind: "severity_threshold", + name, + lane, + lane_declared: Boolean(laneMap[lane]), + rank: severityRank.get(minSeverity), + evidence: { + classification, + observed_severity: severity, + min_severity: minSeverity, + }, + }; + }) + .filter(Boolean); +} + +function matchChurnSignals({ churnRules, normalizedThread, laneMap }) { + return churnRules + .map((rule) => { + const terms = uniqueStrings(rule.terms).filter((term) => normalizedThread.includes(normalize(term))); + if (terms.length === 0) return null; + const lane = stringValue(rule.lane); + if (!lane) return null; + return { + kind: "churn_risk_signal", + name: stringValue(rule.name) ?? terms[0], + lane, + lane_declared: Boolean(laneMap[lane]), + rank: 5, + terms, + evidence: { + matched_terms: terms, + }, + }; + }) + .filter(Boolean); +} + +function chooseMatch(matches) { + if (matches.length === 0) return null; + return [...matches].sort((left, right) => { + if (right.rank !== left.rank) return right.rank - left.rank; + return left.name.localeCompare(right.name); + })[0]; +} + +function stopStatusFor(reasons) { + if (reasons.some((reason) => reason.includes("policy_rules") || reason.includes("missing"))) return "needs_input"; + return "needs_human"; +} + +function summarizeProjection(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return { + seen: false, + version: 0, + event_count: 0, + last_event_type: null, + }; + } + return { + seen: true, + version: numberValue(value.version) ?? 0, + event_count: numberValue(value.event_count) ?? 0, + last_event_type: stringValue(value.last_event_type), + last_event_ref: stringValue(value.last_event_ref), + }; +} + +function readInputs() { + if (process.env.RUNX_INPUTS_PATH) { + return JSON.parse(fs.readFileSync(process.env.RUNX_INPUTS_PATH, "utf8")); + } + if (process.env.RUNX_INPUTS_JSON) { + return JSON.parse(process.env.RUNX_INPUTS_JSON); + } + return { + triage_packet: parseInputValue(process.env.RUNX_INPUT_TRIAGE_PACKET), + thread_body: parseInputValue(process.env.RUNX_INPUT_THREAD_BODY), + policy_rules: parseInputValue(process.env.RUNX_INPUT_POLICY_RULES), + aggregate_id: parseInputValue(process.env.RUNX_INPUT_AGGREGATE_ID), + expected_version: parseInputValue(process.env.RUNX_INPUT_EXPECTED_VERSION), + idempotency_key: parseInputValue(process.env.RUNX_INPUT_IDEMPOTENCY_KEY), + prior_case: parseInputValue(process.env.RUNX_INPUT_PRIOR_CASE), + }; +} + +function parseInputValue(raw) { + if (raw === undefined || raw === "") return undefined; + try { + return JSON.parse(raw); + } catch { + return raw; + } +} + +function objectValue(value, name) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + fail(`${name} must be an object`); + } + return value; +} + +function maybeObject(value) { + return value && typeof value === "object" && !Array.isArray(value) ? value : null; +} + +function objectEntries(value) { + return maybeObject(value) ?? {}; +} + +function arrayValue(value) { + return Array.isArray(value) ? value.filter((entry) => entry && typeof entry === "object" && !Array.isArray(entry)) : []; +} + +function uniqueStrings(value) { + if (!Array.isArray(value)) return []; + return [...new Set(value.filter((entry) => typeof entry === "string" && entry.trim().length > 0).map((entry) => entry.trim()))]; +} + +function normalizeSeverity(value) { + const candidate = stringValue(value)?.toLowerCase(); + return severityRank.has(candidate) ? candidate : null; +} + +function numberValue(value) { + return typeof value === "number" && Number.isFinite(value) ? value : undefined; +} + +function stringValue(value) { + return typeof value === "string" && value.trim().length > 0 ? value.trim() : null; +} + +function normalize(value) { + return String(value ?? "").toLowerCase().replace(/\s+/g, " ").trim(); +} + +function sha256(value) { + return crypto.createHash("sha256").update(value, "utf8").digest("hex"); +} + +function fail(message) { + process.stderr.write(`${message}\n`); + process.exit(64); +} diff --git a/skills/escalation-judge/tools/data/local/manifest.json b/skills/escalation-judge/tools/data/local/manifest.json new file mode 100644 index 000000000..ebf37ea0f --- /dev/null +++ b/skills/escalation-judge/tools/data/local/manifest.json @@ -0,0 +1,77 @@ +{ + "schema": "runx.tool.manifest.v1", + "name": "data.local", + "version": "0.1.0", + "description": "Local JSON event-store adapter for the provider-agnostic runx data operation envelope.", + "source": { + "type": "cli-tool", + "command": "node", + "args": ["./run.mjs"] + }, + "inputs": { + "operation": { + "type": "string", + "required": true, + "description": "append_event, read_events, or read_projection." + }, + "data_source_ref": { + "type": "string", + "required": true, + "description": "Stable logical data-source reference." + }, + "store_id": { + "type": "string", + "required": false, + "description": "Local fixture store id. Provider adapters may ignore this." + }, + "resource": { + "type": "string", + "required": true, + "description": "Declared resource, stream, table, keyspace, or projection name." + }, + "aggregate_id": { + "type": "string", + "required": true, + "description": "Stream or partition key." + }, + "expected_version": { + "type": "number", + "required": false, + "description": "Required current stream version for append_event." + }, + "idempotency_key": { + "type": "string", + "required": false, + "description": "Stable retry key for append_event." + }, + "event": { + "type": "json", + "required": false, + "description": "Domain event or transition packet for append_event." + }, + "limit": { + "type": "number", + "required": false, + "default": 50, + "description": "Maximum events returned by read_events." + } + }, + "scopes": ["runx:data:read", "runx:data:append"], + "runx": { + "artifacts": { + "named_emits": { + "data_operation_result": "runx.data.operation_result.v1" + }, + "wrap_as": "data_operation_result" + } + }, + "runtime": { + "command": "node", + "args": ["./run.mjs"] + }, + "output": { + "packet": "runx.data.operation_result.v1", + "wrap_as": "data_operation_result" + }, + "toolkit_version": "0.1.4" +} diff --git a/skills/escalation-judge/tools/data/local/run.mjs b/skills/escalation-judge/tools/data/local/run.mjs new file mode 100644 index 000000000..659c9702b --- /dev/null +++ b/skills/escalation-judge/tools/data/local/run.mjs @@ -0,0 +1,335 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; + +const SCHEMA = "runx.data.operation_result.v1"; +const PROVIDER = "local-json-event-store"; + +const inputs = readInputs(); +const operation = stringInput("operation"); + +let result; +if (operation === "append_event") { + result = appendEvent(inputs); +} else if (operation === "read_events") { + result = readEvents(inputs); +} else if (operation === "read_projection") { + result = readProjection(inputs); +} else { + throw new Error("operation must be append_event, read_events, or read_projection"); +} + +process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); + +function readInputs() { + const raw = process.env.RUNX_INPUTS_PATH + ? fs.readFileSync(process.env.RUNX_INPUTS_PATH, "utf8") + : process.env.RUNX_INPUTS_JSON || "{}"; + return JSON.parse(raw); +} + +function appendEvent(rawInputs) { + const envelope = baseEnvelope(rawInputs, "append_event"); + const expectedVersion = numberInput("expected_version"); + const idempotencyKey = stringInput("idempotency_key"); + const event = objectInput("event"); + const store = readStore(rawInputs); + const stream = streamFor(store, envelope.resource, envelope.aggregate_id); + const eventDigest = sha256Json(event); + const existing = stream.events.find((entry) => entry.idempotency_key === idempotencyKey); + + if (existing) { + if (existing.event_digest !== eventDigest) { + return conflictResult(envelope, stream, { + idempotency_key: idempotencyKey, + event_digest: eventDigest, + reason: "idempotency key was reused with different event content", + provider_evidence: providerEvidence(store, envelope), + }); + } + return { + ...envelope, + status: "idempotent_replay", + before_version: stream.version, + after_version: stream.version, + idempotency_key: idempotencyKey, + event_ref: existing.event_ref, + event_digest: existing.event_digest, + result_digest: sha256Json(existing), + projection_digest: projectionDigest(stream), + events: [], + rows: [], + redactions: [], + stop_conditions: [], + provider_evidence: providerEvidence(store, envelope), + }; + } + + if (stream.version !== expectedVersion) { + return conflictResult(envelope, stream, { + idempotency_key: idempotencyKey, + event_digest: eventDigest, + reason: `expected version ${expectedVersion}, got ${stream.version}`, + provider_evidence: providerEvidence(store, envelope), + }); + } + + const nextVersion = stream.version + 1; + const eventRef = `${envelope.resource}:${envelope.aggregate_id}:${nextVersion}`; + const record = { + event_ref: eventRef, + version: nextVersion, + event_type: eventType(event), + event, + event_digest: eventDigest, + idempotency_key: idempotencyKey, + committed_at: typeof rawInputs.observed_at === "string" ? rawInputs.observed_at : "1970-01-01T00:00:00.000Z", + }; + stream.events.push(record); + stream.version = nextVersion; + writeStore(rawInputs, store); + + return { + ...envelope, + status: "committed", + before_version: expectedVersion, + after_version: nextVersion, + idempotency_key: idempotencyKey, + event_ref: eventRef, + event_digest: eventDigest, + result_digest: sha256Json(record), + projection_digest: projectionDigest(stream), + events: [], + rows: [], + redactions: [], + stop_conditions: [], + provider_evidence: providerEvidence(store, envelope), + }; +} + +function conflictResult(envelope, stream, { idempotency_key, event_digest, reason, provider_evidence }) { + const stop = { + code: "conflict", + message: reason, + }; + return { + ...envelope, + status: "conflict", + before_version: stream.version, + after_version: stream.version, + idempotency_key, + event_ref: null, + event_digest, + result_digest: sha256Json(stop), + projection_digest: projectionDigest(stream), + events: [], + rows: [], + redactions: [], + stop_conditions: [stop], + provider_evidence, + }; +} + +function readEvents(rawInputs) { + const envelope = baseEnvelope(rawInputs, "read_events"); + const limit = boundedLimit(rawInputs.limit); + const store = readStore(rawInputs); + const stream = streamFor(store, envelope.resource, envelope.aggregate_id); + const events = stream.events.slice(Math.max(0, stream.events.length - limit)); + return { + ...envelope, + status: "read", + before_version: stream.version, + after_version: stream.version, + idempotency_key: null, + event_ref: null, + event_digest: null, + result_digest: sha256Json(events), + projection_digest: projectionDigest(stream), + events, + rows: events, + redactions: [], + stop_conditions: [], + provider_evidence: providerEvidence(store, envelope), + }; +} + +function readProjection(rawInputs) { + const envelope = baseEnvelope(rawInputs, "read_projection"); + const store = readStore(rawInputs); + const stream = streamFor(store, envelope.resource, envelope.aggregate_id); + const projection = { + aggregate_id: envelope.aggregate_id, + resource: envelope.resource, + version: stream.version, + event_count: stream.events.length, + last_event_ref: stream.events.at(-1)?.event_ref ?? null, + last_event_type: stream.events.at(-1)?.event_type ?? null, + event_digests: stream.events.map((entry) => entry.event_digest), + }; + return { + ...envelope, + status: "read", + before_version: stream.version, + after_version: stream.version, + idempotency_key: null, + event_ref: null, + event_digest: null, + result_digest: sha256Json(projection), + projection_digest: sha256Json(projection), + projection, + events: [], + rows: [], + redactions: [], + stop_conditions: [], + provider_evidence: providerEvidence(store, envelope), + }; +} + +function baseEnvelope(rawInputs, operation) { + return { + schema: SCHEMA, + data_source_ref: stringInput("data_source_ref"), + provider: PROVIDER, + operation, + resource: safeName(stringInput("resource"), "resource"), + aggregate_id: safeName(stringInput("aggregate_id"), "aggregate_id"), + }; +} + +function streamFor(store, resource, aggregateId) { + store.resources[resource] ??= { streams: {} }; + store.resources[resource].streams[aggregateId] ??= { version: 0, events: [] }; + return store.resources[resource].streams[aggregateId]; +} + +function readStore(rawInputs) { + const file = storePath(rawInputs); + if (!fs.existsSync(file)) { + return { + schema: "runx.local_data_store.v1", + store_id: localStoreId(rawInputs), + resources: {}, + }; + } + const parsed = JSON.parse(fs.readFileSync(file, "utf8")); + if (!parsed || typeof parsed !== "object" || parsed.schema !== "runx.local_data_store.v1") { + throw new Error("local data store file has an invalid schema"); + } + parsed.resources ??= {}; + return parsed; +} + +function writeStore(rawInputs, store) { + const file = storePath(rawInputs); + fs.mkdirSync(path.dirname(file), { recursive: true }); + const tmp = `${file}.${process.pid}.tmp`; + fs.writeFileSync(tmp, `${JSON.stringify(store, null, 2)}\n`); + fs.renameSync(tmp, file); +} + +function storePath(rawInputs) { + const storeId = localStoreId(rawInputs); + return path.join(os.tmpdir(), "runx-data-store", `${storeId}.json`); +} + +function localStoreId(rawInputs) { + if (typeof rawInputs.store_id === "string" && rawInputs.store_id.trim().length > 0) { + return safeName(rawInputs.store_id, "store_id"); + } + const ref = typeof rawInputs.data_source_ref === "string" && rawInputs.data_source_ref.length > 0 + ? rawInputs.data_source_ref + : "default"; + return `source-${crypto.createHash("sha256").update(ref).digest("hex").slice(0, 24)}`; +} + +function providerEvidence(store, envelope) { + return { + provider: PROVIDER, + store_id: store.store_id, + resource: envelope.resource, + aggregate_id: envelope.aggregate_id, + storage_class: "local-fixture", + }; +} + +function projectionDigest(stream) { + return sha256Json({ + version: stream.version, + event_digests: stream.events.map((entry) => entry.event_digest), + }); +} + +function readValue(name) { + return inputs[name]; +} + +function stringInput(name) { + const value = readValue(name); + if (typeof value !== "string" || value.trim().length === 0) { + throw new Error(`${name} is required`); + } + return value.trim(); +} + +function numberInput(name) { + const value = readValue(name); + if (!Number.isInteger(value) || value < 0) { + throw new Error(`${name} must be a non-negative integer`); + } + return value; +} + +function objectInput(name) { + const value = readValue(name); + if (!value || typeof value !== "object" || Array.isArray(value)) { + throw new Error(`${name} must be an object`); + } + return value; +} + +function eventType(event) { + const explicit = safeEventToken(event.type) ?? safeEventToken(event.event_type); + if (explicit) return explicit; + const family = safeEventToken(event.effect_family); + const operation = safeEventToken(event.operation); + if (family && operation) return `${family}.${operation}`; + if (operation) return operation; + return "data.event"; +} + +function safeEventToken(value) { + if (typeof value !== "string") return undefined; + const text = value.trim(); + return /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(text) ? text : undefined; +} + +function boundedLimit(value) { + if (value === undefined || value === null) return 50; + if (!Number.isInteger(value) || value < 1 || value > 500) { + throw new Error("limit must be an integer from 1 to 500"); + } + return value; +} + +function safeName(value, field) { + const text = String(value || "").trim(); + const pattern = field === "aggregate_id" + ? /^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,191}$/ + : /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/; + if (!pattern.test(text)) { + throw new Error(`${field} must be a safe identifier`); + } + return text; +} + +function sha256Json(value) { + return `sha256:${crypto.createHash("sha256").update(canonicalJson(value)).digest("hex")}`; +} + +function canonicalJson(value) { + if (value === null || typeof value !== "object") return JSON.stringify(value); + if (Array.isArray(value)) return `[${value.map(canonicalJson).join(",")}]`; + return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`).join(",")}}`; +}