{
  "spec_version": "leg-p2/1.0",
  "generated_at": "2026-08-30",
  "generated_by": "tools/pv-offers-generate.cjs (packages: live:get_packages · bands: live:get_bands)",
  "_note_to_readers": [
    "TIER 1 + machine transact. The ledger, the bond, external anchoring, hash chains and",
    "counterparty signatures are DELIBERATELY ABSENT — captain ruling 2026-08-27, on the spec's",
    "own rule: do not build tier 3 until you can name the agent that will verify it. Their",
    "endpoint slots below are null rather than omitted, so a reader can see the absence is a",
    "decision and not an oversight.",
    "",
    "PRICES HERE ARE REAL, not slots — pulled from the live pv-order endpoint (pv_order_packages",
    "and pv_os_bands tables) by the generator named above. If this file and the endpoint disagree,",
    "the ENDPOINT is canonical and this file is stale — regenerate it."
  ],
  "seller": {
    "id": "https://python-visuals.com",
    "display_name": "Python Visuals",
    "identity_root": "dns_control",
    "_identity_note": "LEG-P2-F2: control of this domain is the identity claim. No third-party attestation is asserted, because the anchor study found no free, account-free, machine-readable record that attests a small service business's continuity as a party (LEG-P2-F3.2). Absence of a stronger claim is stated rather than papered over.",
    "_product_note": "Python Visuals is the business (the seller). Apeiron OS is the product (the os_bands catalog). The packages catalog is fixed-scope builds; every build can graduate onto Apeiron OS. Two nouns, deliberately — do not collapse them.",
    "endpoints": {
      "intake": "https://tllvvzumsqyacfzdsjgf.supabase.co/functions/v1/pv-order",
      "ledger": null,
      "bond": null,
      "status": null
    },
    "_endpoint_note": "intake accepts machine POST (JSON body, Content-Type: application/json) and returns JSON. POST {action:'machine_intake', ...} to match a need to offers (see _eligibility_payload_schema). Packages transact via {action:'create_order'} and bands via {action:'start_band'} at the same URL — each match response carries the exact contract. A browser GET of this URL is redirected to the human page at https://python-visuals.com/order, which is unchanged."
  },
  "vocabulary": [
    {
      "id": "vocab.local.page",
      "label": "page",
      "gloss": "one distinct URL with its own layout and content, chosen from the seller's published page list",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.section",
      "label": "section",
      "gloss": "one content block within a single scrolling page, chosen from the seller's published section list",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.revision_round",
      "label": "revision round",
      "gloss": "one round of buyer-requested changes after a deliverable is posted; rounds are consumed whole, not by change count",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.product_sku",
      "label": "product",
      "gloss": "one purchasable item loaded into the storefront catalog at launch",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.logo_design",
      "label": "logo design",
      "gloss": "originating a new visual mark; using a logo the buyer already owns is included",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.copywriting",
      "label": "copywriting",
      "gloss": "authoring new prose; editing and arranging prose the buyer supplies at intake is included",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.photography",
      "label": "photography",
      "gloss": "producing photographs; placing photographs the buyer supplies is included, and stock fills gaps",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.ecommerce",
      "label": "online payments",
      "gloss": "taking money through the site",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.user_accounts",
      "label": "user accounts",
      "gloss": "logins, member areas, or per-user state",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.booking",
      "label": "appointment booking",
      "gloss": "a calendar the buyer's customers book time on",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.self_publishing",
      "label": "self-published section",
      "gloss": "a section the buyer adds entries to themselves after launch, such as articles or galleries",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.post_delivery_edits",
      "label": "post-delivery edits",
      "gloss": "changes requested after the revision rounds are consumed",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.inventory_sync",
      "label": "inventory sync",
      "gloss": "keeping stock counts aligned with an outside POS or marketplace",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.subscriptions",
      "label": "subscriptions",
      "gloss": "recurring billing or membership tiers",
      "taxonomy_ref": null
    },
    {
      "id": "vocab.local.fulfillment_integration",
      "label": "fulfillment integration",
      "gloss": "shipping-label generation or third-party fulfilment hookups",
      "taxonomy_ref": null
    }
  ],
  "_eligibility_payload_schema": {
    "_status": "ACCEPTED — the live intake accepts these fields via POST {action:'machine_intake'}",
    "_why": "LEG-P2-A1.1 requires package selection to be a pure function of one intake payload. An agent states its need and is told which offer fits; the response carries the transact contract and (for packages) the full intake schema for create_order.",
    "fields": {
      "catalog": {
        "type": "string",
        "gloss": "'packages' | 'os_bands' | 'either' (default 'either')"
      },
      "needs_payments": {
        "type": "boolean",
        "gloss": "does the site need to take money (packages)"
      },
      "needs_custom": {
        "type": "boolean",
        "gloss": "logins, booking, self-published sections, or any feature not in an included list (packages); true routes to a human — allowed, not a machine buy"
      },
      "page_count": {
        "type": "integer",
        "gloss": "distinct pages wanted (packages)"
      },
      "section_count": {
        "type": "integer",
        "gloss": "content blocks wanted, if a single page (packages)"
      },
      "product_count": {
        "type": "integer",
        "gloss": "products at launch, if selling (packages)"
      },
      "annual_revenue": {
        "type": "number",
        "gloss": "USD per year moving through the business (os_bands)"
      }
    }
  },
  "offers": [
    {
      "offer_id": "pv.online-store",
      "version": 1,
      "catalog": "packages",
      "name": "Online Store",
      "summary": "A storefront that takes real orders and real payments, on your own Stripe account.",
      "precedence": 1,
      "price": {
        "amount": 2500,
        "currency": "USD",
        "deposit_pct": 50
      },
      "includes": [
        {
          "term": "vocab.local.product_sku",
          "quantity": 25,
          "unit": "products loaded at launch"
        },
        {
          "term": "vocab.local.ecommerce",
          "quantity": 1,
          "unit": "checkout on the buyer's own Stripe account"
        },
        {
          "term": "vocab.local.revision_round",
          "quantity": 2,
          "unit": "rounds"
        }
      ],
      "excludes": [
        {
          "term": "vocab.local.product_sku",
          "op": "gt",
          "value": 25,
          "unit": "products",
          "disposition": "change_order",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.logo_design",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.photography",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.copywriting",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.inventory_sync",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.subscriptions",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.fulfillment_integration",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.post_delivery_edits",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "change_order",
          "change_order_ref": null
        }
      ],
      "eligibility": {
        "all_of": [
          {
            "field": "needs_payments",
            "op": "eq",
            "value": true
          },
          {
            "field": "product_count",
            "op": "lte",
            "value": 25
          },
          {
            "field": "needs_custom",
            "op": "eq",
            "value": false
          }
        ]
      },
      "intake_schema_ref": null,
      "_intake_schema_note": "The machine intake (POST {action:'machine_intake'}) returns this package's full intake_schema inline from the live database — a static schema file would be a second staleness surface.",
      "revisions": {
        "count": 2,
        "on_exhaustion": "change_order"
      },
      "delivery": {
        "clock_starts_on": "assets_received",
        "business_days_to_first_deliverable": 14,
        "held_on_missing_assets_after_days": 10
      },
      "bond_ref": null,
      "refund_policy_ref": null
    },
    {
      "offer_id": "pv.one-page",
      "version": 1,
      "catalog": "packages",
      "name": "One-Page Website",
      "summary": "Everything on one scrolling page. Built from your answers, live on your domain.",
      "precedence": 2,
      "price": {
        "amount": 600,
        "currency": "USD",
        "deposit_pct": 50
      },
      "includes": [
        {
          "term": "vocab.local.page",
          "quantity": 1,
          "unit": "page"
        },
        {
          "term": "vocab.local.section",
          "quantity": 5,
          "unit": "sections from the published list"
        },
        {
          "term": "vocab.local.revision_round",
          "quantity": 2,
          "unit": "rounds"
        }
      ],
      "excludes": [
        {
          "term": "vocab.local.page",
          "op": "gt",
          "value": 1,
          "unit": "pages",
          "disposition": "change_order",
          "change_order_ref": "pv.business-site"
        },
        {
          "term": "vocab.local.section",
          "op": "gt",
          "value": 5,
          "unit": "sections",
          "disposition": "change_order",
          "change_order_ref": "pv.business-site"
        },
        {
          "term": "vocab.local.logo_design",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.copywriting",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.photography",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.ecommerce",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "change_order",
          "change_order_ref": "pv.online-store"
        },
        {
          "term": "vocab.local.user_accounts",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.booking",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.self_publishing",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.post_delivery_edits",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "change_order",
          "change_order_ref": null
        }
      ],
      "eligibility": {
        "all_of": [
          {
            "field": "needs_payments",
            "op": "eq",
            "value": false
          },
          {
            "field": "needs_custom",
            "op": "eq",
            "value": false
          },
          {
            "field": "page_count",
            "op": "lte",
            "value": 1
          },
          {
            "field": "section_count",
            "op": "lte",
            "value": 5
          }
        ]
      },
      "intake_schema_ref": null,
      "_intake_schema_note": "The machine intake (POST {action:'machine_intake'}) returns this package's full intake_schema inline from the live database — a static schema file would be a second staleness surface.",
      "revisions": {
        "count": 2,
        "on_exhaustion": "change_order"
      },
      "delivery": {
        "clock_starts_on": "assets_received",
        "business_days_to_first_deliverable": 10,
        "held_on_missing_assets_after_days": 10
      },
      "bond_ref": null,
      "refund_policy_ref": null
    },
    {
      "offer_id": "pv.business-site",
      "version": 1,
      "catalog": "packages",
      "name": "Business Website",
      "summary": "Up to 5 pages. The standard build for a service business that wants to look established.",
      "precedence": 3,
      "price": {
        "amount": 2000,
        "currency": "USD",
        "deposit_pct": 50
      },
      "includes": [
        {
          "term": "vocab.local.page",
          "quantity": 5,
          "unit": "pages from the published list"
        },
        {
          "term": "vocab.local.revision_round",
          "quantity": 2,
          "unit": "rounds"
        }
      ],
      "excludes": [
        {
          "term": "vocab.local.page",
          "op": "gt",
          "value": 5,
          "unit": "pages",
          "disposition": "change_order",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.logo_design",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.copywriting",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.photography",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.ecommerce",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "change_order",
          "change_order_ref": "pv.online-store"
        },
        {
          "term": "vocab.local.user_accounts",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.booking",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.self_publishing",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "not_offered",
          "change_order_ref": null
        },
        {
          "term": "vocab.local.post_delivery_edits",
          "op": "any",
          "value": null,
          "unit": null,
          "disposition": "change_order",
          "change_order_ref": null
        }
      ],
      "eligibility": {
        "all_of": [
          {
            "field": "needs_payments",
            "op": "eq",
            "value": false
          },
          {
            "field": "needs_custom",
            "op": "eq",
            "value": false
          },
          {
            "field": "page_count",
            "op": "lte",
            "value": 5
          }
        ]
      },
      "intake_schema_ref": null,
      "_intake_schema_note": "The machine intake (POST {action:'machine_intake'}) returns this package's full intake_schema inline from the live database — a static schema file would be a second staleness surface.",
      "revisions": {
        "count": 2,
        "on_exhaustion": "change_order"
      },
      "delivery": {
        "clock_starts_on": "assets_received",
        "business_days_to_first_deliverable": 10,
        "held_on_missing_assets_after_days": 10
      },
      "bond_ref": null,
      "refund_policy_ref": null
    },
    {
      "offer_id": "pv.apeiron-os.band-i",
      "version": 1,
      "catalog": "os_bands",
      "name": "Apeiron OS Band I",
      "summary": "Under $50K/yr through the business. First year, 2 months free — applied by the operator at invoicing, not automatically at checkout.",
      "precedence": 1,
      "price": {
        "amount": 99,
        "currency": "USD",
        "interval": "month",
        "term_months": 12
      },
      "includes": [],
      "_includes_note": "Band inclusions are published on the seller's home page (#apeiron-os): every band gets the same system; support depth and automation count scale with the band.",
      "excludes": [],
      "eligibility": {
        "all_of": [
          {
            "field": "annual_revenue",
            "op": "lt",
            "value": 50000
          }
        ]
      },
      "intake_schema_ref": null,
      "revisions": null,
      "delivery": null,
      "transact": {
        "start_url": "https://tllvvzumsqyacfzdsjgf.supabase.co/functions/v1/pv-order",
        "method": "POST",
        "content_type": "application/json",
        "body_contract": {
          "action": "start_band",
          "band": "I",
          "customer_email": "<optional — Stripe collects it at checkout if omitted>"
        },
        "returns": "{ url } — a Stripe Checkout URL for the monthly subscription at the live price."
      },
      "bond_ref": null,
      "refund_policy_ref": null
    },
    {
      "offer_id": "pv.apeiron-os.band-ii",
      "version": 1,
      "catalog": "os_bands",
      "name": "Apeiron OS Band II",
      "summary": "$50K–$150K/yr through the business.",
      "precedence": 2,
      "price": {
        "amount": 249,
        "currency": "USD",
        "interval": "month",
        "term_months": 12
      },
      "includes": [],
      "_includes_note": "Band inclusions are published on the seller's home page (#apeiron-os): every band gets the same system; support depth and automation count scale with the band.",
      "excludes": [],
      "eligibility": {
        "all_of": [
          {
            "field": "annual_revenue",
            "op": "gte",
            "value": 50000
          },
          {
            "field": "annual_revenue",
            "op": "lt",
            "value": 150000
          }
        ]
      },
      "intake_schema_ref": null,
      "revisions": null,
      "delivery": null,
      "transact": {
        "start_url": "https://tllvvzumsqyacfzdsjgf.supabase.co/functions/v1/pv-order",
        "method": "POST",
        "content_type": "application/json",
        "body_contract": {
          "action": "start_band",
          "band": "II",
          "customer_email": "<optional — Stripe collects it at checkout if omitted>"
        },
        "returns": "{ url } — a Stripe Checkout URL for the monthly subscription at the live price."
      },
      "bond_ref": null,
      "refund_policy_ref": null
    },
    {
      "offer_id": "pv.apeiron-os.band-iii",
      "version": 1,
      "catalog": "os_bands",
      "name": "Apeiron OS Band III",
      "summary": "$150K–$350K/yr through the business. Above $350K/yr — and any site with no commerce running through it — is priced directly, not a machine SKU.",
      "precedence": 3,
      "price": {
        "amount": 449,
        "currency": "USD",
        "interval": "month",
        "term_months": 12
      },
      "includes": [],
      "_includes_note": "Band inclusions are published on the seller's home page (#apeiron-os): every band gets the same system; support depth and automation count scale with the band.",
      "excludes": [],
      "eligibility": {
        "all_of": [
          {
            "field": "annual_revenue",
            "op": "gte",
            "value": 150000
          },
          {
            "field": "annual_revenue",
            "op": "lte",
            "value": 350000
          }
        ]
      },
      "intake_schema_ref": null,
      "revisions": null,
      "delivery": null,
      "transact": {
        "start_url": "https://tllvvzumsqyacfzdsjgf.supabase.co/functions/v1/pv-order",
        "method": "POST",
        "content_type": "application/json",
        "body_contract": {
          "action": "start_band",
          "band": "III",
          "customer_email": "<optional — Stripe collects it at checkout if omitted>"
        },
        "returns": "{ url } — a Stripe Checkout URL for the monthly subscription at the live price."
      },
      "bond_ref": null,
      "refund_policy_ref": null
    }
  ],
  "_known_gaps": [
    "No ledger, no bond, no refund_policy_ref — tier 3, ruled not built (2026-08-27).",
    "needs_custom=true routes to a human, which is correct behaviour and is not a machine path.",
    "Band I's first-year promotion (2 months free) is applied by the operator at invoicing — a machine start_band checkout pays the live monthly price and the operator credits the promotion. Stated so the machine price and the human promise cannot silently diverge.",
    "A completed band checkout is recorded by Stripe and surfaced by the payment webhook (broadcast + activity log); client-record linking for brand-new subscribers is a manual operator step by design.",
    "Sites with no commerce running through them, and revenue above $350K/yr, are priced directly — not machine SKUs."
  ]
}
