{
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
  "title": "Perps release visible consistency",
  "description": "Proves bounded visible market-list row changes and containment of recent Perps activity across every activity filter on packaged Extension builds; it does not assert other market-detail surfaces.",
  "paramsSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "sample_count": { "type": "integer", "minimum": 2, "default": 3 },
      "sample_interval_ms": { "type": "integer", "minimum": 100, "default": 1000 },
      "minimum_changed_count": { "type": "integer", "minimum": 1, "default": 1 },
      "minimum_recent_activity_count": { "type": "integer", "minimum": 1, "default": 1 },
      "timeout_ms": { "type": "integer", "minimum": 1000, "default": 30000 }
    }
  },
  "workflow": {
    "entry": "market-stream",
    "nodes": {
      "market-stream": {
        "action": "metamask.perps.assert_visible_consistency",
        "mode": "market-stream",
        "sample_count": "{{params.sample_count}}",
        "sample_interval_ms": "{{params.sample_interval_ms}}",
        "minimum_changed_count": "{{params.minimum_changed_count}}",
        "timeout_ms": "{{params.timeout_ms}}",
        "intent": "Prove bounded changes in rendered market-row facts",
        "next": "activity-containment"
      },
      "activity-containment": {
        "action": "metamask.perps.assert_visible_consistency",
        "mode": "activity-containment",
        "minimum_recent_activity_count": "{{params.minimum_recent_activity_count}}",
        "timeout_ms": "{{params.timeout_ms}}",
        "intent": "Prove recent visible activity identities are contained in full activity",
        "next": "capture"
      },
      "capture": {
        "action": "ui.screenshot",
        "path": "screenshots/perps-visible-consistency.png",
        "label": "Perps visible activity consistency",
        "intent": "Preserve reviewer-visible proof of the full activity surface",
        "next": "done"
      },
      "done": { "action": "end", "status": "pass" }
    }
  }
}
