{
  "catalog": "um-sandbox-scenarios/v1",
  "generatedAt": "2026-03-15",
  "baseUrl": "https://universalmanifest.net",
  "routePattern": "https://universalmanifest.net/sandbox/{scenarioId}/",
  "description": "Machine-readable inventory of public implementation sandbox scenarios published on universalmanifest.net.",
  "counts": {
    "total": 50,
    "byCategory": {
      "advanced": 8,
      "edge-case": 8,
      "getting-started": 8,
      "integration-lane": 16,
      "trust-verification": 10
    },
    "byVariant": {
      "classic": 25,
      "v2": 25
    }
  },
  "items": [
    {
      "id": "ad-01-cross-system-projection",
      "title": "Cross-System Projection",
      "description": "One manifest, three consumers. A social platform, smart glasses headset, and metaverse engine each project different views from the same Universal Manifest.",
      "category": "advanced",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/ad-01-cross-system-projection/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/cross-system-projection-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-01-cross-system-projection.ts"
    },
    {
      "id": "ad-01-cross-system-projection-v2",
      "title": "Cross-System Projection (V2)",
      "description": "One manifest, three consumers: social, smart glasses, and metaverse each project different views.",
      "category": "advanced",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/ad-01-cross-system-projection-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/cross-system-projection-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-01-cross-system-projection-v2.ts"
    },
    {
      "id": "ad-02-pointers-signed",
      "title": "Manifest with Pointers (Signed)",
      "description": "A lightweight v0.2 manifest that uses pointers to reference external resources instead of embedding data in facets. Signed with Ed25519 for authenticity.",
      "category": "advanced",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/ad-02-pointers-signed/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/manifest-with-pointers-signed.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-02-pointers-signed.ts"
    },
    {
      "id": "ad-02-pointers-signed-v2",
      "title": "Manifest with Pointers (Signed) (V2)",
      "description": "A lightweight v0.2 manifest using pointers, signed with Ed25519 for authenticity.",
      "category": "advanced",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/ad-02-pointers-signed-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/manifest-with-pointers-signed.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-02-pointers-signed-v2.ts"
    },
    {
      "id": "ad-03-revocation-aware",
      "title": "Revocation-Aware Verification",
      "description": "Extended v0.2 verification that includes a simulated revocation status check. After cryptographic verification, the consumer checks whether the manifest has been revoked.",
      "category": "advanced",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/ad-03-revocation-aware/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/manifest-with-revocation-metadata.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-03-revocation-aware.ts"
    },
    {
      "id": "ad-03-revocation-aware-v2",
      "title": "Revocation-Aware Verification (V2)",
      "description": "Extended v0.2 verification with simulated revocation status check.",
      "category": "advanced",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/ad-03-revocation-aware-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/manifest-with-revocation-metadata.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-03-revocation-aware-v2.ts"
    },
    {
      "id": "ad-04-full-v02-integration",
      "title": "Full v0.2 Integration",
      "description": "Four-layer validation: structure, facets, signature block, and real Ed25519 cryptographic verification. Demonstrates the complete v0.2 verification pipeline.",
      "category": "advanced",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/ad-04-full-v02-integration/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/manifest-with-facets-signed.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-04-full-v02-integration.ts"
    },
    {
      "id": "ad-04-full-v02-integration-v2",
      "title": "Full v0.2 Integration (V2)",
      "description": "Four-layer validation: structure, facets, signature block, and real Ed25519 verification.",
      "category": "advanced",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/ad-04-full-v02-integration-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/manifest-with-facets-signed.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/advanced/ad-04-full-v02-integration-v2.ts"
    },
    {
      "id": "ec-01-issued-after-expires",
      "title": "Issued After Expires",
      "description": "A manifest where issuedAt is later than expiresAt. This temporal inconsistency is caught by validation, preventing consumers from accepting logically impossible validity windows.",
      "category": "edge-case",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/ec-01-issued-after-expires/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/issued-after-expires.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-01-issued-after-expires.ts"
    },
    {
      "id": "ec-01-issued-after-expires-v2",
      "title": "Issued After Expires (V2)",
      "description": "A manifest where issuedAt is later than expiresAt. Two entities: a publisher sends and a consumer detects the inconsistency.",
      "category": "edge-case",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/ec-01-issued-after-expires-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/issued-after-expires.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-01-issued-after-expires-v2.ts"
    },
    {
      "id": "ec-02-missing-signature",
      "title": "Missing Signature (v0.2)",
      "description": "A v0.2 manifest with no signature block. Version 0.2 requires cryptographic signing -- stripping the signature must cause immediate rejection.",
      "category": "edge-case",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/ec-02-missing-signature/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/missing-signature.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-02-missing-signature.ts"
    },
    {
      "id": "ec-02-missing-signature-v2",
      "title": "Missing Signature v0.2 (V2)",
      "description": "A v0.2 manifest with no signature block. Two entities: an attacker sends and a verifier detects the stripping attack.",
      "category": "edge-case",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/ec-02-missing-signature-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/missing-signature.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-02-missing-signature-v2.ts"
    },
    {
      "id": "ec-03-clock-skew",
      "title": "Clock Skew Detection",
      "description": "A manifest with issuedAt set to the year 2099. Consumers SHOULD flag future issuedAt values as potential clock skew or intentional manipulation.",
      "category": "edge-case",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/ec-03-clock-skew/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/clock-skew-future-issuedAt.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-03-clock-skew.ts"
    },
    {
      "id": "ec-03-clock-skew-v2",
      "title": "Clock Skew Detection (V2)",
      "description": "A manifest with issuedAt set to year 2099. Two entities: a publisher sends and a verifier flags the skew.",
      "category": "edge-case",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/ec-03-clock-skew-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/clock-skew-future-issuedAt.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-03-clock-skew-v2.ts"
    },
    {
      "id": "ec-04-facet-type-violation",
      "title": "Shard Type Violation",
      "description": "A manifest with a shard that uses @type \"um:NotAShard\" instead of \"um:Shard\". Every shard must declare um:Shard in its type to be recognized by consumers.",
      "category": "edge-case",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/ec-04-facet-type-violation/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/facet-wrong-type.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-04-facet-type-violation.ts"
    },
    {
      "id": "ec-04-facet-type-violation-v2",
      "title": "Shard Type Violation (V2)",
      "description": "A manifest with a shard using @type \"um:NotAShard\". Two entities: a publisher sends and a consumer detects.",
      "category": "edge-case",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/ec-04-facet-type-violation-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/facet-wrong-type.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/edge-cases/ec-04-facet-type-violation-v2.ts"
    },
    {
      "id": "gs-01-first-manifest",
      "title": "Your First Manifest",
      "description": "Parse and validate a minimal Universal Manifest step by step. Learn what each required field means and why it matters.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/gs-01-first-manifest/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/minimal-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-01-first-manifest.ts"
    },
    {
      "id": "gs-01-first-manifest-v2",
      "title": "Your First Manifest (V2)",
      "description": "Parse and validate a minimal Universal Manifest step by step. Learn what each required field means and why it matters.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/gs-01-first-manifest-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/minimal-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-01-first-manifest-v2.ts"
    },
    {
      "id": "gs-02-manifest-with-facets",
      "title": "Manifest with Shards",
      "description": "Explore a manifest that contains data shards -- named sections that carry profile, device, or other entity information.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/gs-02-manifest-with-facets/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/manifest-with-facets.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-02-manifest-with-facets.ts"
    },
    {
      "id": "gs-02-manifest-with-facets-v2",
      "title": "Manifest with Shards (V2)",
      "description": "Explore a manifest that contains data shards -- named sections that carry profile, device, or other entity information.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/gs-02-manifest-with-facets-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/manifest-with-facets.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-02-manifest-with-facets-v2.ts"
    },
    {
      "id": "gs-03-forward-compatibility",
      "title": "Forward Compatibility",
      "description": "See how a manifest with unknown fields still passes validation. Learn why forward compatibility matters for ecosystem evolution.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/gs-03-forward-compatibility/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/unknown-fields-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-03-forward-compatibility.ts"
    },
    {
      "id": "gs-03-forward-compatibility-v2",
      "title": "Forward Compatibility (V2)",
      "description": "See how a manifest with unknown fields still passes validation. Learn why forward compatibility matters for ecosystem evolution.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/gs-03-forward-compatibility-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/unknown-fields-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-03-forward-compatibility-v2.ts"
    },
    {
      "id": "gs-04-resolver-lookup",
      "title": "Resolver Lookup",
      "description": "See how a consumer resolves a UMID into a full manifest using a resolver service, then validates and checks freshness.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/gs-04-resolver-lookup/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/minimal-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-04-resolver-lookup.ts"
    },
    {
      "id": "gs-04-resolver-lookup-v2",
      "title": "Resolver Lookup (V2)",
      "description": "See how a consumer resolves a UMID into a full manifest using a resolver service, then validates and checks freshness.",
      "category": "getting-started",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/gs-04-resolver-lookup-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/minimal-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/getting-started/gs-04-resolver-lookup-v2.ts"
    },
    {
      "id": "il-01-social-profile",
      "title": "Social Profile Projection",
      "description": "A social rendering service receives a manifest, checks consent, extracts the publicProfile facet, and renders a schema:Person profile card.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-01-social-profile/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/social-profile-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-01-social-profile.ts"
    },
    {
      "id": "il-01-social-profile-v2",
      "title": "Social Profile Projection (V2)",
      "description": "A social rendering service receives a manifest, checks consent, extracts the publicProfile facet, and renders a profile card.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-01-social-profile-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/social-profile-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-01-social-profile-v2.ts"
    },
    {
      "id": "il-02-smart-glasses-consent",
      "title": "Smart Glasses Consent Check",
      "description": "A smart glasses runtime receives a manifest, evaluates per-capability consent entries, and builds a permission matrix controlling what the glasses are allowed to do.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-02-smart-glasses-consent/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/smart-glasses-consent-allowed-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-02-smart-glasses-consent.ts"
    },
    {
      "id": "il-02-smart-glasses-consent-v2",
      "title": "Smart Glasses Consent Check (V2)",
      "description": "A smart glasses runtime evaluates per-capability consent entries and builds a permission matrix.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-02-smart-glasses-consent-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/smart-glasses-consent-allowed-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-02-smart-glasses-consent-v2.ts"
    },
    {
      "id": "il-03-metaverse-crossworld",
      "title": "Metaverse Portaling and Cross-World Identity",
      "description": "A subject portals between different virtual worlds using the same manifest. Consent controls which features each destination can access.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-03-metaverse-crossworld/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/metaverse-crossworld-profile-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-03-metaverse-crossworld.ts"
    },
    {
      "id": "il-03-metaverse-crossworld-v2",
      "title": "Metaverse Portaling and Cross-World Identity (V2)",
      "description": "Two virtual worlds receive the same manifest and project cross-world identity with per-feature consent after portaling.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-03-metaverse-crossworld-v2/",
      "fixtureUrl": null,
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-03-metaverse-crossworld-v2.ts"
    },
    {
      "id": "il-04-rp1-spatial-fabric",
      "title": "RP1 Spatial Fabric Anchoring",
      "description": "An RP1 spatial fabric node receives a manifest with spatial anchors, attachment freshness hints, and place membership data. Consent controls whether cross-world linking is permitted.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-04-rp1-spatial-fabric/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/rp1-spatial-fabric-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-04-rp1-spatial-fabric.ts"
    },
    {
      "id": "il-04-rp1-spatial-fabric-v2",
      "title": "RP1 Spatial Fabric Anchoring (V2)",
      "description": "An RP1 spatial fabric node processes spatial anchors and place membership with consent control.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-04-rp1-spatial-fabric-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/rp1-spatial-fabric-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-04-rp1-spatial-fabric-v2.ts"
    },
    {
      "id": "il-05-oma-trust-attestation",
      "title": "OMATrust Attestation Lifecycle",
      "description": "An OMATrust-aware consumer portal processes attestation lifecycle events (active, revoked, superseded) and evaluates trust mode claims from the manifest.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-05-oma-trust-attestation/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/oma-trust-lifecycle-edge-service-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-05-oma-trust-attestation.ts"
    },
    {
      "id": "il-05-oma-trust-attestation-v2",
      "title": "OMATrust Attestation Lifecycle (V2)",
      "description": "An OMATrust portal processes attestation lifecycle events and trust mode claims.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-05-oma-trust-attestation-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/oma-trust-lifecycle-edge-service-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-05-oma-trust-attestation-v2.ts"
    },
    {
      "id": "il-06-did-vc-credential",
      "title": "DID + VC Credential Binding",
      "description": "A credential verification service processes a manifest with DID + VC binding. Consent controls whether credential data can be shared and validated.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-06-did-vc-credential/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/did-vc-credential-lane-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-06-did-vc-credential.ts"
    },
    {
      "id": "il-06-did-vc-credential-v2",
      "title": "DID + VC Credential Binding (V2)",
      "description": "A credential verification service processes a manifest with DID + VC binding.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-06-did-vc-credential-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/did-vc-credential-lane-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-06-did-vc-credential-v2.ts"
    },
    {
      "id": "il-07-proof-of-personhood",
      "title": "Proof-of-Personhood Multi-Provider",
      "description": "A social platform evaluates Sybil resistance by reading multiple proof-of-personhood claims from independent providers. Trust grows with the number of verified providers.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-07-proof-of-personhood/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/bluesky-personhood-multi-credential-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-07-proof-of-personhood.ts"
    },
    {
      "id": "il-07-proof-of-personhood-v2",
      "title": "Proof-of-Personhood Multi-Provider (V2)",
      "description": "A social platform evaluates Sybil resistance using multi-provider personhood claims.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-07-proof-of-personhood-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/bluesky-personhood-multi-credential-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-07-proof-of-personhood-v2.ts"
    },
    {
      "id": "il-08-venue-edge-node",
      "title": "Venue Edge Node Manifest",
      "description": "An edge node and enrolled display device process a venue manifest with identity, content policy, and device enrollment data. Content rendering follows the venue's policy facets.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/il-08-venue-edge-node/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/venue-edge-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-08-venue-edge-node.ts"
    },
    {
      "id": "il-08-venue-edge-node-v2",
      "title": "Venue Edge Node Manifest (V2)",
      "description": "An edge node processes a venue manifest with identity, policy, devices, and discovery.",
      "category": "integration-lane",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/il-08-venue-edge-node-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/stubs/venue-edge-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/integration-lanes/il-08-venue-edge-node-v2.ts"
    },
    {
      "id": "tv-01-signed-manifest",
      "title": "Signed Manifest (Ed25519 Verification)",
      "description": "Verify a v0.2 signed manifest end-to-end using real Ed25519 cryptography in the browser. Change any field to see verification fail.",
      "category": "trust-verification",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/tv-01-signed-manifest/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/minimal-signed-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-01-signed-manifest.ts"
    },
    {
      "id": "tv-01-signed-v2",
      "title": "Signed Manifest (Ed25519 Verification) (V2)",
      "description": "Verify a v0.2 signed manifest end-to-end using real Ed25519 cryptography. Two entities interact: an issuer publishes and a verifier validates.",
      "category": "trust-verification",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/tv-01-signed-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/minimal-signed-manifest.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-01-signed-v2.ts"
    },
    {
      "id": "tv-02-tampered-manifest",
      "title": "Tampered Manifest Detection",
      "description": "See how Ed25519 verification catches a manifest that was modified after signing. The signature no longer matches the data.",
      "category": "trust-verification",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/tv-02-tampered-manifest/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/tampering-modified-after-signing.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-02-tampered-manifest.ts"
    },
    {
      "id": "tv-02-tampered-v2",
      "title": "Tampered Manifest Detection (V2)",
      "description": "See how Ed25519 verification catches a manifest modified after signing. Two entities interact: an attacker sends and a verifier detects.",
      "category": "trust-verification",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/tv-02-tampered-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/tampering-modified-after-signing.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-02-tampered-v2.ts"
    },
    {
      "id": "tv-03-expired-manifest",
      "title": "Expired Manifest Rejection",
      "description": "See how consumers reject a manifest whose TTL has expired. Structural validation passes, but the freshness check catches the stale data.",
      "category": "trust-verification",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/tv-03-expired-manifest/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/expired-for-use.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-03-expired-manifest.ts"
    },
    {
      "id": "tv-03-expired-v2",
      "title": "Expired Manifest Rejection (V2)",
      "description": "See how consumers reject a manifest whose TTL has expired. Two entities: a publisher sends and a consumer enforces freshness.",
      "category": "trust-verification",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/tv-03-expired-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/expired-for-use.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-03-expired-v2.ts"
    },
    {
      "id": "tv-04-missing-fields",
      "title": "Missing Required Fields",
      "description": "Watch validation catch a manifest missing @context. Structural checks reject it before any deeper processing.",
      "category": "trust-verification",
      "specVersion": "v0.1",
      "variant": "classic",
      "route": "/sandbox/tv-04-missing-fields/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/missing-context.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-04-missing-fields.ts"
    },
    {
      "id": "tv-04-missing-fields-v2",
      "title": "Missing Required Fields (V2)",
      "description": "Watch validation catch a manifest missing @context. Two entities: a publisher sends and a consumer rejects.",
      "category": "trust-verification",
      "specVersion": "v0.1",
      "variant": "v2",
      "route": "/sandbox/tv-04-missing-fields-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.1/invalid/missing-context.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-04-missing-fields-v2.ts"
    },
    {
      "id": "tv-05-invalid-algorithm",
      "title": "Invalid Signature Algorithm",
      "description": "See how v0.2 validation rejects a manifest with a non-Ed25519 signature algorithm. Only Ed25519 is permitted.",
      "category": "trust-verification",
      "specVersion": "v0.2",
      "variant": "classic",
      "route": "/sandbox/tv-05-invalid-algorithm/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/invalid-signature-algorithm.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-05-invalid-algorithm.ts"
    },
    {
      "id": "tv-05-invalid-algorithm-v2",
      "title": "Invalid Signature Algorithm (V2)",
      "description": "See how v0.2 validation rejects a manifest with a non-Ed25519 signature algorithm. Two entities: a publisher sends and a verifier rejects.",
      "category": "trust-verification",
      "specVersion": "v0.2",
      "variant": "v2",
      "route": "/sandbox/tv-05-invalid-algorithm-v2/",
      "fixtureUrl": "/sandbox/fixtures/v0.2/invalid/invalid-signature-algorithm.jsonld",
      "sourceFile": "src/scripts/sandbox/scenarios/trust-verification/tv-05-invalid-algorithm-v2.ts"
    }
  ]
}
