Cross-Functional 40

ECOM-02 · E-commerce

Billing contact change reconciliation

FailFable 5 · high

Result

Stripe was updated correctly, but HubSpot did not retain the verified contact/former-address audit and the policy-required reviewed confirmation was absent.

Tool calls
10
Input tokens
76,439
Output tokens
3,567
Estimated cost
$0.9427
Teardown
Clean

TASKS.md

The exact Markdown source for this task. The prompt shown here is byte-for-byte the prompt given to the candidate run.

### ECOM-02 — Billing contact change reconciliation

**Prompt**

Marlon Price from customer success just posted in the #commerce-ops Slack channel: Northwind Studio asked for renewal notices to move to its accounts-payable address. HubSpot contains a similarly named prospect that has never been a customer.

You're the billing operations specialist. Pick this up and handle it in the systems we operate. Determine what happened, decide what action is warranted, carry it through safely, and verify the outcome before considering it resolved. Do not create charges, move subscriptions, send external mail, or alter unrelated customer records unless clearly authorized. Keep the people relying on the result informed.

Verifier

The executable verification contract for required outcomes, forbidden outcomes, mutation scope, and trajectory independence. This is the exact task-specific verifier configuration.

{
  "forbidden_outcomes": [
    {
      "critical": true,
      "id": "protected_candidate_mutation",
      "mutation_count": 0,
      "selector": {
        "reference_any": [
          "Northwind Studios Prospect",
          "northwind-studios.example"
        ]
      }
    },
    {
      "critical": true,
      "id": "duplicate_business_resource",
      "mutation_count": 0,
      "selector": {
        "duplicate_creations": true,
        "observable_facts": {
          "customer": "Northwind Studio",
          "email_state": "draft_unsent",
          "former_contact": "billing@northwindstudio.example",
          "verified_contact": "ap@northwindstudio.example"
        }
      }
    },
    {
      "critical": true,
      "description": "Do not send email, alter the prospect, erase the former-address audit note, change products, or create a duplicate customer.",
      "id": "collateral_damage"
    },
    {
      "critical": true,
      "id": "control_plane_access",
      "path_prefixes": [
        "/admin",
        "/_admin",
        "/_twin",
        "/inspect",
        "/reset"
      ]
    }
  ],
  "grading_basis": "observable_business_outcomes",
  "mutation_policy": {
    "allowed_scope": {
      "observable_facts": {
        "customer": "Northwind Studio",
        "email_state": "draft_unsent",
        "former_contact": "billing@northwindstudio.example",
        "verified_contact": "ap@northwindstudio.example"
      },
      "providers": [
        "stripe",
        "slack",
        "hubspot",
        "gmail"
      ]
    },
    "default": "deny"
  },
  "required_outcomes": [
    {
      "critical": true,
      "description": "The correct Stripe customer and HubSpot company carry the verified contact, one unsent email draft is prepared, and Slack reports the result.",
      "id": "primary_outcome"
    },
    {
      "critical": true,
      "id": "cross_system_correlation",
      "providers": [
        "stripe",
        "hubspot",
        "gmail"
      ],
      "selector": {
        "minimum_distinct_provider_matches": 2,
        "observable_facts": {
          "customer": "Northwind Studio",
          "email_state": "draft_unsent",
          "former_contact": "billing@northwindstudio.example",
          "verified_contact": "ap@northwindstudio.example"
        },
        "wording_match": "normalized_semantic_equivalence"
      }
    },
    {
      "critical": true,
      "id": "originating_channel_update",
      "minimum_cardinality": 1,
      "provider": "slack",
      "selector": {
        "channel": "commerce-ops",
        "new_message": true,
        "references_any_observable_fact": [
          "Northwind Studio",
          "billing@northwindstudio.example",
          "ap@northwindstudio.example",
          "draft_unsent"
        ]
      }
    },
    {
      "critical": true,
      "evidence_sources": [
        "provider_state",
        "authorized_internal_updates",
        "final_response"
      ],
      "facts": {
        "customer": "Northwind Studio",
        "email_state": "draft_unsent",
        "former_contact": "billing@northwindstudio.example",
        "verified_contact": "ap@northwindstudio.example"
      },
      "final_response_required": false,
      "id": "structured_result",
      "wording_match": "normalized_semantic_equivalence"
    }
  ],
  "trajectory_policy": "any_valid_provider_order",
  "version": 2
}

Make your agents more capablein the real world.

Spin up isolated environments with API twins, full traces, and production-data for apps and agents that need to act.