# Blank Facebook ad funnel route plan

Fill in this plan from approved facts to choose **Direct**, **Sequenced** or **Hold** for one buyer. Keep missing facts as `Unknown`; do not replace them with no, zero or a guess.

Give the completed plan to the person reviewing the route. Verify audiences, events, pages, CRM delivery and exclusions in the live account before launch; the plan alone cannot establish that they work.

## Record control

| Field | Value |
| --- | --- |
| Contract | `maestro.facebook_ad_funnel.route.v1` |
| Contract version | `1.0.0` |
| Record ID | Unknown |
| Route version | `1` |
| Fictional example | `false` |
| Record owner | Unknown |
| Last checked | Unknown |

## Route decision inputs

| Input | Exact supplied value | Evidence status | Owner | Source ID or location | Boundary |
| --- | --- | --- | --- | --- | --- |
| Buyer | Unknown | Unknown | Unknown | Unknown | Unknown |
| Business decision | Unknown | Unknown | Unknown | Unknown | Unknown |
| Current buyer question | Unknown | Unknown | Unknown | Unknown | Unknown |
| Approved offer | Unknown | Unknown | Unknown | Unknown | Unknown |
| Matching destination | Unknown | Unknown | Unknown | Unknown | Unknown |
| Requested action | Unknown | Unknown | Unknown | Unknown | Unknown |
| Audience-use permission | Unknown | Unknown | Unknown | Unknown | A signal does not prove permission. |
| Required proof | Unknown | Unknown | Unknown | Unknown | Unknown |

## Decision

| Decision | Value |
| --- | --- |
| Route decision | Hold |
| Reason | Required inputs are still Unknown. |
| Draft status | Draft Hold |
| Launch status | Launch Hold |
| Next action | Replace each draft-critical Unknown with a supplied or verified fact, or remove the field from the route with a reason. A derived planning value must name its supplied or verified basis. |

Choose **Direct** only when one message and destination answer the current question and support a proportionate action. Choose **Sequenced** only when another distinct buyer question requires another message and an observable transition. Choose **Hold** for missing, denied, contradictory, stale or unverified required inputs.

## Route states

Copy the table for each message state. Give each distinct buyer question its own state.

### State 1: Unknown

| Required field | Value | Evidence status | Owner | Source ID | Evidence boundary |
| --- | --- | --- | --- | --- | --- |
| State ID | Unknown | Unknown | Unknown | Unknown | Must be stable and unique. |
| Lifecycle state | candidate | supplied | Unknown | this record | One of candidate, eligible, active, completed, suppressed or expired. |
| Entry signal | Unknown | Unknown | Unknown | Unknown | State exactly what the signal proves. |
| Buyer question | Unknown | Unknown | Unknown | Unknown | Do not replace with a funnel-stage label. |
| Message job | Unknown | Unknown | Unknown | Unknown | One explanation or proof job. |
| Offer | Unknown | Unknown | Unknown | Unknown | Exact approved offer. |
| Destination | Unknown | Unknown | Unknown | Unknown | Exact page, form, event or asset. |
| Next eligible state | Unknown | Unknown | Unknown | Unknown | Exact observed transition or terminal state. |
| Exclusions | Unknown | Unknown | Unknown | Unknown | Include completed, customer, sales-owned and opted-out states where relevant. |
| Stop condition | Unknown | Unknown | Unknown | Unknown | Exact event, decision, expiry or suppression. |
| Platform event | Unknown | Unknown | Unknown | Unknown | Name and local trigger. |
| Site event | Unknown | Unknown | Unknown | Unknown | Name and local trigger. |
| CRM outcome | Unknown | Unknown | Unknown | Unknown | Name and acceptance rule. |
| Owner | Unknown | Unknown | Unknown | Unknown | Role that resolves the state. |
| Evidence boundary | Unknown | Unknown | Unknown | Unknown | What the evidence cannot establish. |

## Overlap and suppression

1. **Suppression sources:** Unknown
2. **Source freshness rule:** Unknown
3. **Completion rule:** Unknown
4. **Route priority:** Unknown
5. **Tie behavior:** Hold. Never send both next actions by default.
6. **Opt-out behavior:** Unknown
7. **Changed-offer behavior:** Create a new route version, invalidate approval and return Launch Hold.

Suppression and completion win before route priority. If two active states still match and no priority resolves the tie, the route is on Hold.

## Measurement handoff

Open [the blank measurement contract](facebook-ad-funnel-measurement-blank.md), fill in the platform, site, CRM and commercial rows, and link the finished record here.

- **Measurement contract:** Unknown
- **Join key name:** Unknown
- **Reporting window:** Unknown
- **Attribution limit:** Unknown
- **Deduplication rule:** Unknown

## Evidence and permission ledger

| Source ID | Exact location | Status | Owner | Used for | Permission | What it establishes | What it does not establish |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |

Allowed statuses are `supplied`, `verified`, `derived`, `Unknown`, `planned`, `pending`, `denied`, `stale` and `invalid`. A derived planning value must name a supplied or verified basis and cannot supply permission or native proof. Launch also requires current native receipts.

## Open requests

| Request ID | Field | Reason | Owner | Requested evidence | Next action | Completion observation |
| --- | --- | --- | --- | --- | --- | --- |
| req-buyer-question | buyer question | The route cannot choose a message job without it. | Unknown | Approved buyer question | Ask the offer owner to name the question. | Exact question is recorded with source and boundary. |

## Draft and launch check

### Draft Complete requires

- Direct or Sequenced decision with a reason.
- Every state contains every required field.
- Permission and overlap are resolved.
- Platform, site and CRM definitions stay separate.
- Open requests are explicit.
- No invented facts, proof, permissions, owners or results.

### Launch Ready requires

- Current native audience and exclusion receipts.
- Current destination behavior.
- Current platform and site trigger evidence.
- CRM receipt and acceptance evidence.
- Deduplication evidence.
- Current suppression-source evidence.
- Approval for the current meaning-bearing hash.

A route can be **Draft Complete** and **Launch Hold** while the required live account, destination and CRM receipts are still missing.

## Import and change control

Export an envelope containing `contract_id`, `contract_version`, `record_id`, `route_version`, `payload` and `payload_sha256`. Calculate the hash from UTF-8 JSON with sorted keys and compact separators. Reject malformed JSON, wrong contract IDs, missing fields and hash mismatches. Do not repair imported facts silently.

Any change to buyer, business decision, offer, route decision, route states, overlap, permission or measurement creates a new route version and invalidates the prior approval.

## Machine-readable record

The JSON block preserves supplied facts for lossless re-import.

```json
{
  "contract_id": "maestro.facebook_ad_funnel.route.v1",
  "contract_version": "1.0.0",
  "record_id": "route-2026-10-01",
  "route_version": 1,
  "payload": {
    "contract_id": "maestro.facebook_ad_funnel.route.v1",
    "contract_version": "1.0.0",
    "record_id": "route-2026-10-01",
    "route_version": 1,
    "fictional": false,
    "buyer": {
      "value": "Unknown",
      "status": "Unknown",
      "owner": "Unknown",
      "source_id": "Unknown",
      "boundary": "Unknown"
    },
    "business_decision": {
      "value": "Unknown",
      "status": "Unknown",
      "owner": "Unknown",
      "source_id": "Unknown",
      "boundary": "Unknown"
    },
    "offer": {
      "value": "Unknown",
      "status": "Unknown",
      "owner": "Unknown",
      "source_id": "Unknown",
      "boundary": "Unknown"
    },
    "route_decision": "Hold",
    "decision_reason": "Hold until buyer is resolved.",
    "draft_status": "Draft Hold",
    "launch_status": "Launch Hold",
    "route_states": [
      {
        "state_id": "state-1",
        "state_label": "First message",
        "lifecycle_state": "candidate",
        "entry_signal": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "buyer_question": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "message_job": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "offer": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "destination": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "next_eligible_state": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "exclusions": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "stop_condition": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "platform_event": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "site_event": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "crm_outcome": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "owner": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "evidence_boundary": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        }
      }
    ],
    "overlap_precedence": {
      "value": "Unknown",
      "status": "Unknown",
      "owner": "Unknown",
      "source_id": "Unknown",
      "boundary": "Unknown"
    },
    "permission": {
      "status": "Unknown",
      "owner": "Unknown",
      "source_id": "Unknown",
      "boundary": "Unknown"
    },
    "measurement_contract": {
      "layers": {
        "platform": {
          "event_name": "Unknown",
          "exact_trigger": "Unknown",
          "event_id_key": "Unknown",
          "owner": "Unknown",
          "evidence_status": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "site": {
          "event_name": "Unknown",
          "exact_trigger": "Unknown",
          "event_id_key": "Unknown",
          "owner": "Unknown",
          "evidence_status": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "crm": {
          "outcome_name": "Unknown",
          "acceptance_rule": "Unknown",
          "join_key_name": "Unknown",
          "owner": "Unknown",
          "evidence_status": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "commercial": {
          "outcome_name": "Unknown",
          "definition": "Unknown",
          "owner": "Unknown",
          "evidence_status": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        }
      },
      "reporting_window": {
        "value": "Unknown",
        "status": "Unknown",
        "owner": "Unknown",
        "source_id": "Unknown",
        "boundary": "Unknown"
      },
      "attribution_limit": {
        "value": "Unknown",
        "status": "Unknown",
        "owner": "Unknown",
        "source_id": "Unknown",
        "boundary": "Unknown"
      },
      "deduplication_rule": {
        "value": "Unknown",
        "status": "Unknown",
        "owner": "Unknown",
        "source_id": "Unknown",
        "boundary": "Unknown"
      },
      "verification_queries": {
        "platform": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "site": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "crm": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "commercial": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        }
      },
      "native_delivery_receipts": {
        "audience": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "platform": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "site": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "crm": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "deduplication": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        },
        "suppression": {
          "value": "Unknown",
          "status": "Unknown",
          "owner": "Unknown",
          "source_id": "Unknown",
          "boundary": "Unknown"
        }
      }
    },
    "source_ledger": [],
    "open_requests": [
      {
        "request_id": "req-buyer",
        "field": "buyer",
        "reason": "The value is missing or Unknown.",
        "owner": "Offer owner",
        "requested_evidence": "A supplied or verified buyer with source and boundary.",
        "next_action": "Record the exact buyer, owner, source and boundary.",
        "completion_observation": "buyer is present with supplied or verified evidence."
      },
      {
        "request_id": "req-business-decision",
        "field": "business decision",
        "reason": "The value is missing or Unknown.",
        "owner": "Offer owner",
        "requested_evidence": "A supplied or verified business decision with source and boundary.",
        "next_action": "Record the exact business decision, owner, source and boundary.",
        "completion_observation": "business decision is present with supplied or verified evidence."
      },
      {
        "request_id": "req-offer",
        "field": "offer",
        "reason": "The value is missing or Unknown.",
        "owner": "Offer owner",
        "requested_evidence": "A supplied or verified offer with source and boundary.",
        "next_action": "Record the exact offer, owner, source and boundary.",
        "completion_observation": "offer is present with supplied or verified evidence."
      },
      {
        "request_id": "req-permission",
        "field": "audience-use permission",
        "reason": "An observed signal does not grant permission.",
        "owner": "Unknown",
        "requested_evidence": "An allowed-use decision and current source.",
        "next_action": "Record the exact allowed use and source boundary.",
        "completion_observation": "Permission is allowed and its source is identified."
      },
      {
        "request_id": "req-permission-evidence",
        "field": "permission evidence",
        "reason": "Permission needs an owner, source and boundary.",
        "owner": "Unknown",
        "requested_evidence": "Current permission source, owner and limit.",
        "next_action": "Link the permission source and state what it does not prove.",
        "completion_observation": "Owner, source ID and boundary are present."
      },
      {
        "request_id": "req-1-entry-signal",
        "field": "state 1 entry signal",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 entry signal with source and boundary.",
        "next_action": "Record the exact state 1 entry signal, owner, source and boundary.",
        "completion_observation": "state 1 entry signal is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-buyer-question",
        "field": "state 1 buyer question",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 buyer question with source and boundary.",
        "next_action": "Record the exact state 1 buyer question, owner, source and boundary.",
        "completion_observation": "state 1 buyer question is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-message-job",
        "field": "state 1 message job",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 message job with source and boundary.",
        "next_action": "Record the exact state 1 message job, owner, source and boundary.",
        "completion_observation": "state 1 message job is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-offer",
        "field": "state 1 offer",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 offer with source and boundary.",
        "next_action": "Record the exact state 1 offer, owner, source and boundary.",
        "completion_observation": "state 1 offer is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-destination",
        "field": "state 1 destination",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 destination with source and boundary.",
        "next_action": "Record the exact state 1 destination, owner, source and boundary.",
        "completion_observation": "state 1 destination is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-next-eligible-state",
        "field": "state 1 next eligible state",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 next eligible state with source and boundary.",
        "next_action": "Record the exact state 1 next eligible state, owner, source and boundary.",
        "completion_observation": "state 1 next eligible state is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-exclusions",
        "field": "state 1 exclusions",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 exclusions with source and boundary.",
        "next_action": "Record the exact state 1 exclusions, owner, source and boundary.",
        "completion_observation": "state 1 exclusions is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-stop-condition",
        "field": "state 1 stop condition",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 stop condition with source and boundary.",
        "next_action": "Record the exact state 1 stop condition, owner, source and boundary.",
        "completion_observation": "state 1 stop condition is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-platform-event",
        "field": "state 1 platform event",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 platform event with source and boundary.",
        "next_action": "Record the exact state 1 platform event, owner, source and boundary.",
        "completion_observation": "state 1 platform event is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-site-event",
        "field": "state 1 site event",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 site event with source and boundary.",
        "next_action": "Record the exact state 1 site event, owner, source and boundary.",
        "completion_observation": "state 1 site event is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-crm-outcome",
        "field": "state 1 crm outcome",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 crm outcome with source and boundary.",
        "next_action": "Record the exact state 1 crm outcome, owner, source and boundary.",
        "completion_observation": "state 1 crm outcome is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-owner",
        "field": "state 1 owner",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 owner with source and boundary.",
        "next_action": "Record the exact state 1 owner, owner, source and boundary.",
        "completion_observation": "state 1 owner is present with supplied or verified evidence."
      },
      {
        "request_id": "req-1-evidence-boundary",
        "field": "state 1 evidence boundary",
        "reason": "The value is missing or Unknown.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified state 1 evidence boundary with source and boundary.",
        "next_action": "Record the exact state 1 evidence boundary, owner, source and boundary.",
        "completion_observation": "state 1 evidence boundary is present with supplied or verified evidence."
      },
      {
        "request_id": "req-overlap",
        "field": "overlap precedence",
        "reason": "Every route needs an explicit rule for suppression and unexpected overlap.",
        "owner": "Unknown",
        "requested_evidence": "An explicit priority or mutually exclusive rule.",
        "next_action": "Define priority after suppression and completion.",
        "completion_observation": "A dual-match fixture resolves to one state."
      },
      {
        "request_id": "req-coherence-review",
        "field": "route coherence review",
        "reason": "Field presence cannot establish distinct buyer questions, source linkage, safe suppression or executable acceptance rules.",
        "owner": "Route reviewer",
        "requested_evidence": "An explicit review of this exact route meaning covering all four coherence checks.",
        "next_action": "Review the current route, resolve each semantic check and bind the review to the unchanged route meaning.",
        "completion_observation": "The reviewed meaning matches exactly and all four coherence checks pass."
      },
      {
        "request_id": "req-measurement-platform-event-name",
        "field": "platform event name",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified event name with its boundary.",
        "next_action": "Record the exact event name for the platform layer.",
        "completion_observation": "The platform event name is present."
      },
      {
        "request_id": "req-measurement-platform-exact-trigger",
        "field": "platform exact trigger",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified exact trigger with its boundary.",
        "next_action": "Record the exact exact trigger for the platform layer.",
        "completion_observation": "The platform exact trigger is present."
      },
      {
        "request_id": "req-measurement-platform-event-id-key",
        "field": "platform event id key",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified event id key with its boundary.",
        "next_action": "Record the exact event id key for the platform layer.",
        "completion_observation": "The platform event id key is present."
      },
      {
        "request_id": "req-measurement-platform-owner",
        "field": "platform owner",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified owner with its boundary.",
        "next_action": "Record the exact owner for the platform layer.",
        "completion_observation": "The platform owner is present."
      },
      {
        "request_id": "req-measurement-platform-source-id",
        "field": "platform source id",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source id with its boundary.",
        "next_action": "Record the exact source id for the platform layer.",
        "completion_observation": "The platform source id is present."
      },
      {
        "request_id": "req-measurement-platform-boundary",
        "field": "platform boundary",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified boundary with its boundary.",
        "next_action": "Record the exact boundary for the platform layer.",
        "completion_observation": "The platform boundary is present."
      },
      {
        "request_id": "req-measurement-platform-status",
        "field": "platform evidence status",
        "reason": "The measurement definition lacks positive evidence.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source for the platform definition.",
        "next_action": "Set the evidence status only after recording its source.",
        "completion_observation": "The platform evidence status is supplied or verified."
      },
      {
        "request_id": "req-measurement-site-event-name",
        "field": "site event name",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified event name with its boundary.",
        "next_action": "Record the exact event name for the site layer.",
        "completion_observation": "The site event name is present."
      },
      {
        "request_id": "req-measurement-site-exact-trigger",
        "field": "site exact trigger",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified exact trigger with its boundary.",
        "next_action": "Record the exact exact trigger for the site layer.",
        "completion_observation": "The site exact trigger is present."
      },
      {
        "request_id": "req-measurement-site-event-id-key",
        "field": "site event id key",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified event id key with its boundary.",
        "next_action": "Record the exact event id key for the site layer.",
        "completion_observation": "The site event id key is present."
      },
      {
        "request_id": "req-measurement-site-owner",
        "field": "site owner",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified owner with its boundary.",
        "next_action": "Record the exact owner for the site layer.",
        "completion_observation": "The site owner is present."
      },
      {
        "request_id": "req-measurement-site-source-id",
        "field": "site source id",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source id with its boundary.",
        "next_action": "Record the exact source id for the site layer.",
        "completion_observation": "The site source id is present."
      },
      {
        "request_id": "req-measurement-site-boundary",
        "field": "site boundary",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified boundary with its boundary.",
        "next_action": "Record the exact boundary for the site layer.",
        "completion_observation": "The site boundary is present."
      },
      {
        "request_id": "req-measurement-site-status",
        "field": "site evidence status",
        "reason": "The measurement definition lacks positive evidence.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source for the site definition.",
        "next_action": "Set the evidence status only after recording its source.",
        "completion_observation": "The site evidence status is supplied or verified."
      },
      {
        "request_id": "req-measurement-crm-outcome-name",
        "field": "crm outcome name",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified outcome name with its boundary.",
        "next_action": "Record the exact outcome name for the crm layer.",
        "completion_observation": "The crm outcome name is present."
      },
      {
        "request_id": "req-measurement-crm-acceptance-rule",
        "field": "crm acceptance rule",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified acceptance rule with its boundary.",
        "next_action": "Record the exact acceptance rule for the crm layer.",
        "completion_observation": "The crm acceptance rule is present."
      },
      {
        "request_id": "req-measurement-crm-join-key-name",
        "field": "crm join key name",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified join key name with its boundary.",
        "next_action": "Record the exact join key name for the crm layer.",
        "completion_observation": "The crm join key name is present."
      },
      {
        "request_id": "req-measurement-crm-owner",
        "field": "crm owner",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified owner with its boundary.",
        "next_action": "Record the exact owner for the crm layer.",
        "completion_observation": "The crm owner is present."
      },
      {
        "request_id": "req-measurement-crm-source-id",
        "field": "crm source id",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source id with its boundary.",
        "next_action": "Record the exact source id for the crm layer.",
        "completion_observation": "The crm source id is present."
      },
      {
        "request_id": "req-measurement-crm-boundary",
        "field": "crm boundary",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified boundary with its boundary.",
        "next_action": "Record the exact boundary for the crm layer.",
        "completion_observation": "The crm boundary is present."
      },
      {
        "request_id": "req-measurement-crm-status",
        "field": "crm evidence status",
        "reason": "The measurement definition lacks positive evidence.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source for the crm definition.",
        "next_action": "Set the evidence status only after recording its source.",
        "completion_observation": "The crm evidence status is supplied or verified."
      },
      {
        "request_id": "req-measurement-commercial-outcome-name",
        "field": "commercial outcome name",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified outcome name with its boundary.",
        "next_action": "Record the exact outcome name for the commercial layer.",
        "completion_observation": "The commercial outcome name is present."
      },
      {
        "request_id": "req-measurement-commercial-definition",
        "field": "commercial definition",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified definition with its boundary.",
        "next_action": "Record the exact definition for the commercial layer.",
        "completion_observation": "The commercial definition is present."
      },
      {
        "request_id": "req-measurement-commercial-owner",
        "field": "commercial owner",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified owner with its boundary.",
        "next_action": "Record the exact owner for the commercial layer.",
        "completion_observation": "The commercial owner is present."
      },
      {
        "request_id": "req-measurement-commercial-source-id",
        "field": "commercial source id",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source id with its boundary.",
        "next_action": "Record the exact source id for the commercial layer.",
        "completion_observation": "The commercial source id is present."
      },
      {
        "request_id": "req-measurement-commercial-boundary",
        "field": "commercial boundary",
        "reason": "The measurement layer is missing a required fact.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified boundary with its boundary.",
        "next_action": "Record the exact boundary for the commercial layer.",
        "completion_observation": "The commercial boundary is present."
      },
      {
        "request_id": "req-measurement-commercial-status",
        "field": "commercial evidence status",
        "reason": "The measurement definition lacks positive evidence.",
        "owner": "Unknown",
        "requested_evidence": "A supplied or verified source for the commercial definition.",
        "next_action": "Set the evidence status only after recording its source.",
        "completion_observation": "The commercial evidence status is supplied or verified."
      },
      {
        "request_id": "req-reporting-window",
        "field": "reporting window",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified reporting window with source and boundary.",
        "next_action": "Record the exact reporting window, owner, source and boundary.",
        "completion_observation": "reporting window is present with supplied or verified evidence."
      },
      {
        "request_id": "req-attribution-limit",
        "field": "attribution limit",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified attribution limit with source and boundary.",
        "next_action": "Record the exact attribution limit, owner, source and boundary.",
        "completion_observation": "attribution limit is present with supplied or verified evidence."
      },
      {
        "request_id": "req-deduplication-rule",
        "field": "deduplication rule",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified deduplication rule with source and boundary.",
        "next_action": "Record the exact deduplication rule, owner, source and boundary.",
        "completion_observation": "deduplication rule is present with supplied or verified evidence."
      },
      {
        "request_id": "req-query-platform",
        "field": "platform verification query",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified platform verification query with source and boundary.",
        "next_action": "Record the exact platform verification query, owner, source and boundary.",
        "completion_observation": "platform verification query is present with supplied or verified evidence."
      },
      {
        "request_id": "req-query-site",
        "field": "site verification query",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified site verification query with source and boundary.",
        "next_action": "Record the exact site verification query, owner, source and boundary.",
        "completion_observation": "site verification query is present with supplied or verified evidence."
      },
      {
        "request_id": "req-query-crm",
        "field": "crm verification query",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified crm verification query with source and boundary.",
        "next_action": "Record the exact crm verification query, owner, source and boundary.",
        "completion_observation": "crm verification query is present with supplied or verified evidence."
      },
      {
        "request_id": "req-query-commercial",
        "field": "commercial verification query",
        "reason": "The value is missing or Unknown.",
        "owner": "Measurement owner",
        "requested_evidence": "A supplied or verified commercial verification query with source and boundary.",
        "next_action": "Record the exact commercial verification query, owner, source and boundary.",
        "completion_observation": "commercial verification query is present with supplied or verified evidence."
      },
      {
        "request_id": "req-native-audience",
        "field": "audience native receipt",
        "reason": "A planning definition does not prove current native behavior.",
        "owner": "Unknown",
        "requested_evidence": "A current audience receipt tied to this route version.",
        "next_action": "Run and save the audience readback.",
        "completion_observation": "The receipt has a verified value, owner, source and boundary."
      },
      {
        "request_id": "req-native-platform",
        "field": "platform native receipt",
        "reason": "A planning definition does not prove current native behavior.",
        "owner": "Unknown",
        "requested_evidence": "A current platform receipt tied to this route version.",
        "next_action": "Run and save the platform readback.",
        "completion_observation": "The receipt has a verified value, owner, source and boundary."
      },
      {
        "request_id": "req-native-site",
        "field": "site native receipt",
        "reason": "A planning definition does not prove current native behavior.",
        "owner": "Unknown",
        "requested_evidence": "A current site receipt tied to this route version.",
        "next_action": "Run and save the site readback.",
        "completion_observation": "The receipt has a verified value, owner, source and boundary."
      },
      {
        "request_id": "req-native-crm",
        "field": "crm native receipt",
        "reason": "A planning definition does not prove current native behavior.",
        "owner": "Unknown",
        "requested_evidence": "A current crm receipt tied to this route version.",
        "next_action": "Run and save the crm readback.",
        "completion_observation": "The receipt has a verified value, owner, source and boundary."
      },
      {
        "request_id": "req-native-deduplication",
        "field": "deduplication native receipt",
        "reason": "A planning definition does not prove current native behavior.",
        "owner": "Unknown",
        "requested_evidence": "A current deduplication receipt tied to this route version.",
        "next_action": "Run and save the deduplication readback.",
        "completion_observation": "The receipt has a verified value, owner, source and boundary."
      },
      {
        "request_id": "req-native-suppression",
        "field": "suppression native receipt",
        "reason": "A planning definition does not prove current native behavior.",
        "owner": "Unknown",
        "requested_evidence": "A current suppression receipt tied to this route version.",
        "next_action": "Run and save the suppression readback.",
        "completion_observation": "The receipt has a verified value, owner, source and boundary."
      },
      {
        "request_id": "req-current-approval",
        "field": "current approval",
        "reason": "Approval does not match this route version and meaning hash.",
        "owner": "Approval owner",
        "requested_evidence": "A current approval snapshot for this exact meaning hash.",
        "next_action": "Review and approve the current route.",
        "completion_observation": "Snapshot route version and meaning hash match."
      }
    ],
    "coherence_review": {
      "status": "pending",
      "reviewed_meaning": null,
      "reviewed_by": "Unknown",
      "reviewed_at": null,
      "evidence_location": "Unknown",
      "checks": {
        "distinct_questions": false,
        "source_basis": false,
        "suppression_and_stop": false,
        "acceptance_rules": false
      }
    },
    "approval_snapshot": {
      "status": "pending",
      "approved_route_version": null,
      "meaning_hash_sha256": null,
      "approved_by": "Unknown",
      "approved_at": null,
      "evidence_location": "Unknown"
    },
    "import_integrity": {
      "status": "unreceipted",
      "payload_sha256": null,
      "checked_at": null
    }
  },
  "payload_sha256": "027cae4af82d20f1d3b854bdf054cd2ceedd37f3ae8e362615308847620cb2bf"
}
```
