{
  "version": "2.0.0",
  "description": "The gallery index of the 36 example recipes the 2.0.0 example gallery ships: every entry names its plan file, its category, its difficulty, its fixture page, its local origin, its expected dry run duration, the optional capabilities it needs, the sensitive class consents its review demands, the action kinds it exercises and the category field its family requires (the export format of the scraping recipes, the schedule of the monitoring recipes and the topology of the agent recipes). The recipes themselves stay pure plan files the schemastrict plan grammar owns; this index carries the gallery metadata so the recipe documents never widen the frozen plan schema.",
  "fixturepages": [
    {
      "name": "product-grid.html",
      "origin": "https://productgrid.test",
      "features": [
        "product grid",
        "pagination controls",
        "lazy images",
        "price table",
        "review list",
        "image gallery",
        "filter form",
        "typeahead search"
      ]
    },
    {
      "name": "checkout.html",
      "origin": "https://checkout.test",
      "features": [
        "login form",
        "checkout wizard",
        "registration form",
        "dependent dropdowns",
        "delivery calendar",
        "validation errors"
      ]
    },
    {
      "name": "dashboard.html",
      "origin": "https://dashboard.test",
      "features": [
        "price ticker",
        "timers",
        "toasts",
        "console noise",
        "availability badge",
        "deep links",
        "network quiet"
      ]
    },
    {
      "name": "feed.html",
      "origin": "https://feed.test",
      "features": [
        "infinite scroll",
        "delayed loads",
        "search results",
        "nested comment tree"
      ]
    }
  ],
  "entries": [
    {
      "id": "scrapeproductgrid",
      "category": "scraping",
      "difficulty": "starter",
      "description": "Count and read the product cards of the fixture store, then export the grid inventory as json.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 1600,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "countelements",
        "readtext",
        "exportjson"
      ],
      "exportformat": "json"
    },
    {
      "id": "scrapetablepagination",
      "category": "scraping",
      "difficulty": "starter",
      "description": "Scrape the paginated price table and export its rows as csv beside the page count.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 1800,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "scrapetable",
        "countpages",
        "exportcsv"
      ],
      "exportformat": "csv"
    },
    {
      "id": "scrapereviews",
      "category": "scraping",
      "difficulty": "intermediate",
      "description": "Count and read the fixture reviews, then export the review digest as json.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 3200,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "countelements",
        "readtext",
        "exportjson"
      ],
      "exportformat": "json"
    },
    {
      "id": "scrapesearchresults",
      "category": "scraping",
      "difficulty": "starter",
      "description": "Read the fixture search result links and metadata, then export the result set as json.",
      "fixture": "feed.html",
      "origin": "https://feed.test",
      "expecteddurationms": 1700,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readlinks",
        "readmeta",
        "exportjson"
      ],
      "exportformat": "json"
    },
    {
      "id": "scrapenestedlists",
      "category": "scraping",
      "difficulty": "intermediate",
      "description": "Detect and read the nested comment tree, then export the tree outline as an excel sheet.",
      "fixture": "feed.html",
      "origin": "https://feed.test",
      "expecteddurationms": 3400,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "detectlists",
        "readhtml",
        "exportexcel"
      ],
      "exportformat": "excel"
    },
    {
      "id": "scrapeinfinitefeed",
      "category": "scraping",
      "difficulty": "advanced",
      "description": "Detect the infinite scroll sentinel, read the feed cards and export the feed capture as json.",
      "fixture": "feed.html",
      "origin": "https://feed.test",
      "expecteddurationms": 6500,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "detectinfinitescroll",
        "readscrollpos",
        "readtext",
        "exportjson"
      ],
      "exportformat": "json"
    },
    {
      "id": "scrapedynamicprices",
      "category": "scraping",
      "difficulty": "intermediate",
      "description": "Wait for the live price ticker, read the prices, watch the mutations and export the series as csv.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 3800,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "waitelement",
        "readtext",
        "watchmutate",
        "exportcsv"
      ],
      "exportformat": "csv"
    },
    {
      "id": "scrapeimagegallery",
      "category": "scraping",
      "difficulty": "intermediate",
      "description": "Read the fixture image gallery inventory, verify the images render and export the asset manifest as csv.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 3000,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readimages",
        "verifyvisible",
        "exportcsv"
      ],
      "exportformat": "csv"
    },
    {
      "id": "fillloginform",
      "category": "forms",
      "difficulty": "intermediate",
      "description": "The consented login form recipe: the credential class consent the review demands before the login fill runs.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 3600,
      "capabilities": [],
      "consentclasses": [
        "credential"
      ],
      "kinds": [
        "observe",
        "readforms",
        "fillform",
        "submit"
      ]
    },
    {
      "id": "fillcheckout",
      "category": "forms",
      "difficulty": "advanced",
      "description": "Walk the checkout wizard, fill the payment details behind the payment class consent and submit the form.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 7000,
      "capabilities": [],
      "consentclasses": [
        "payment"
      ],
      "kinds": [
        "observe",
        "readforms",
        "runwizard",
        "fillform",
        "submit"
      ]
    },
    {
      "id": "fillregistration",
      "category": "forms",
      "difficulty": "starter",
      "description": "Read and fill the fixture registration form, then submit it behind its reviewed gates.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 2000,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readforms",
        "fillform",
        "submit"
      ]
    },
    {
      "id": "fillsearchfilters",
      "category": "forms",
      "difficulty": "starter",
      "description": "Detect the store filter fields, fill the reviewed values and apply the filters.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 2200,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "detectfields",
        "fillform",
        "click"
      ]
    },
    {
      "id": "fillmultistepwizard",
      "category": "forms",
      "difficulty": "advanced",
      "description": "Walk the three step delivery wizard, fill the delivery details and submit the wizard.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 6200,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readforms",
        "runwizard",
        "fillform",
        "submit"
      ]
    },
    {
      "id": "filldependentdropdowns",
      "category": "forms",
      "difficulty": "advanced",
      "description": "Select the region and the dependent city through the reviewed select chain, then submit the form.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 5800,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readforms",
        "selectchain",
        "submit"
      ]
    },
    {
      "id": "filltypeahead",
      "category": "forms",
      "difficulty": "intermediate",
      "description": "Wait for the typeahead search input and pick the suggested product from the reviewed options.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 3300,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "waitelement",
        "picktypeahead"
      ]
    },
    {
      "id": "fillcalendar",
      "category": "forms",
      "difficulty": "intermediate",
      "description": "Read the delivery calendar control, pick the reviewed delivery date and submit the form.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 3100,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readforms",
        "pickdate",
        "submit"
      ]
    },
    {
      "id": "fillfromcsv",
      "category": "forms",
      "difficulty": "advanced",
      "description": "Import the address csv rows, iterate them and fill the registration form from each reviewed row.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 6800,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "importcsv",
        "looprows",
        "readforms",
        "fillform",
        "submit"
      ]
    },
    {
      "id": "testlinkcheck",
      "category": "testing",
      "difficulty": "starter",
      "description": "Read the fixture links, count the anchors and check their protocols for the broken link report.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 1800,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readlinks",
        "countelements",
        "detecthttp"
      ]
    },
    {
      "id": "testconsoleerrors",
      "category": "testing",
      "difficulty": "starter",
      "description": "Watch the fixture console output and runtime errors, then read the error report.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 1900,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "watchconsole",
        "watcherrors",
        "readerrors"
      ]
    },
    {
      "id": "testformvalidation",
      "category": "testing",
      "difficulty": "intermediate",
      "description": "Read the fixture form shapes and validation errors, then verify the error banner renders.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 3500,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readforms",
        "detectfields",
        "readerrors",
        "verifyvisible"
      ]
    },
    {
      "id": "testlayoutshift",
      "category": "testing",
      "difficulty": "advanced",
      "description": "Watch the dashboard layout shifts, trace the load timeline and measure the render flow.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 6400,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "watchshifts",
        "traceload",
        "measureflow"
      ]
    },
    {
      "id": "testvisualdiff",
      "category": "testing",
      "difficulty": "intermediate",
      "description": "Capture the viewport and gallery element snapshots, then diff them for the regression report.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 3700,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "shotview",
        "shotelement",
        "diffsnapshots"
      ]
    },
    {
      "id": "testloadtiming",
      "category": "testing",
      "difficulty": "intermediate",
      "description": "Trace the dashboard load timeline, measure the render flow and watch the page requests.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 3900,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "traceload",
        "measureflow",
        "watchrequests"
      ]
    },
    {
      "id": "testaccessibility",
      "category": "testing",
      "difficulty": "starter",
      "description": "Read the reader tree, the heading outline and the metadata, then verify the gallery labels render.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 2100,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "readertree",
        "readoutline",
        "readmeta",
        "verifyvisible"
      ]
    },
    {
      "id": "testdeeplinks",
      "category": "testing",
      "difficulty": "intermediate",
      "description": "Read the deep link anchors, resolve their final urls and count the covered pages.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 3300,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readlinks",
        "readfinalurl",
        "countpages"
      ]
    },
    {
      "id": "monitorpricechange",
      "category": "monitoring",
      "difficulty": "intermediate",
      "description": "Monitor the fixture price ticker: read the current prices and watch the mutations on the reviewed schedule.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 3400,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readtext",
        "watchmutate"
      ],
      "schedule": "*/5 * * * *"
    },
    {
      "id": "monitoravailability",
      "category": "monitoring",
      "difficulty": "starter",
      "description": "Monitor the availability badge and the status banners on the reviewed schedule.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 2000,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "verifyvisible",
        "watchbanner"
      ],
      "schedule": "*/10 * * * *"
    },
    {
      "id": "monitornetworkquiet",
      "category": "monitoring",
      "difficulty": "intermediate",
      "description": "Watch the page requests, wait for the network quiet and read the error report on the reviewed schedule.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 3800,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "watchrequests",
        "waitquiet",
        "readerrors"
      ],
      "schedule": "*/15 * * * *"
    },
    {
      "id": "monitorpagechanges",
      "category": "monitoring",
      "difficulty": "advanced",
      "description": "Watch the feed mutations and diff the changing snapshots on the hourly schedule.",
      "fixture": "feed.html",
      "origin": "https://feed.test",
      "expecteddurationms": 6100,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "watchmutate",
        "diffsnapshots"
      ],
      "schedule": "0 * * * *"
    },
    {
      "id": "monitorschedule",
      "category": "monitoring",
      "difficulty": "intermediate",
      "description": "Run the reviewed monitoring interval, read the prices and watch the mutations on the declared cadence.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 3600,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "intervalrule",
        "readtext",
        "watchmutate"
      ],
      "schedule": "*/5 * * * *"
    },
    {
      "id": "monitoralerts",
      "category": "monitoring",
      "difficulty": "advanced",
      "description": "Watch the console alerts and the alert banners, then read the alert report on the tight reviewed schedule.",
      "fixture": "dashboard.html",
      "origin": "https://dashboard.test",
      "expecteddurationms": 5900,
      "capabilities": [],
      "consentclasses": [],
      "kinds": [
        "observe",
        "watchconsole",
        "watchbanner",
        "readerrors"
      ],
      "schedule": "*/2 * * * *"
    },
    {
      "id": "agentswarm",
      "category": "agents",
      "difficulty": "advanced",
      "description": "The multi agent scrape swarm: the scout reads the grid copy while the ledger counts the cards, joined first, then the findings export.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 7200,
      "capabilities": [
        "tabs"
      ],
      "consentclasses": [],
      "kinds": [
        "observe",
        "parallel",
        "readtext",
        "countelements",
        "exportjson"
      ],
      "topology": "swarm"
    },
    {
      "id": "agentsreview",
      "category": "agents",
      "difficulty": "intermediate",
      "description": "The planner critic review: the critic reads the extraction table and grades the verdict through the reviewed condition.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 3500,
      "capabilities": [
        "tabs"
      ],
      "consentclasses": [],
      "kinds": [
        "observe",
        "readtable",
        "condition"
      ],
      "topology": "review"
    },
    {
      "id": "agentsforms",
      "category": "agents",
      "difficulty": "advanced",
      "description": "The parallel form fill: the login lane and the register lane fill their forms concurrently, joined last, then the submit.",
      "fixture": "checkout.html",
      "origin": "https://checkout.test",
      "expecteddurationms": 7500,
      "capabilities": [
        "tabs"
      ],
      "consentclasses": [],
      "kinds": [
        "observe",
        "parallel",
        "fillform",
        "submit"
      ],
      "topology": "parallel"
    },
    {
      "id": "agentsmonitor",
      "category": "agents",
      "difficulty": "advanced",
      "description": "The monitoring swarm: the text lane and the scroll lane watch the feed concurrently while the mutations stream.",
      "fixture": "feed.html",
      "origin": "https://feed.test",
      "expecteddurationms": 6900,
      "capabilities": [
        "tabs"
      ],
      "consentclasses": [],
      "kinds": [
        "observe",
        "watchmutate",
        "parallel",
        "readtext",
        "readscrollpos"
      ],
      "topology": "monitor"
    },
    {
      "id": "agentscompete",
      "category": "agents",
      "difficulty": "advanced",
      "description": "The competing extraction: the text agent races the table agent over the same store page, joined first, then the winning export.",
      "fixture": "product-grid.html",
      "origin": "https://productgrid.test",
      "expecteddurationms": 7800,
      "capabilities": [
        "tabs"
      ],
      "consentclasses": [],
      "kinds": [
        "observe",
        "parallel",
        "readtext",
        "scrapetable",
        "exportjson"
      ],
      "topology": "compete"
    }
  ]
}
