{
  "schemaVersion": 1,
  "kitVersion": "1.0",
  "updated": "2026-10-02",
  "purpose": "A finite review template for the Little Landing first-party starter and future proposed adaptations; this file is not a completed review or a submission channel.",
  "state": "preparation",
  "example": {
    "title": "Little Landing",
    "credit": "PointCast, led by Michael Hoydich",
    "configurationFile": "makers/starter/game.mjs",
    "configurationExport": "CONFIG",
    "stopCount": 7,
    "startIndex": 3,
    "targetIndices": [5, 1, 6, 2, 4],
    "indexing": "Configuration is zero-based; visible stop numbers are one-based",
    "actions": {
      "left": "Move one stop left",
      "previous": "Move one stop left",
      "right": "Move one stop right",
      "next": "Move one stop right",
      "action": "Start / land / resume / play again",
      "pause": "Pause or explicitly resume"
    },
    "reservedUnusedActions": ["up", "down", "pad1", "pad2", "pad3", "pad4"]
  },
  "reviewRecord": {
    "reviewer": null,
    "reviewedAt": null,
    "sourceVersionOrHash": null,
    "browserAndVersion": null,
    "operatingSystem": null,
    "inputMethod": null,
    "viewport": null,
    "evidence": null,
    "note": "Record expected and observed results. Pending or untested is not passing. Do not infer physical-device results from emulation."
  },
  "checks": [
    {
      "id": "journey",
      "status": "pending",
      "acceptance": "Start, reach all five destinations, observe wrong-stop feedback, pause, explicitly resume, finish and restart. Repeat for each edited CONFIG route.",
      "evidence": null
    },
    {
      "id": "semantic-input",
      "status": "pending",
      "acceptance": "Default/custom keyboard mappings and touch/pointer controls reach the same semantic handler. Left/previous and right/next are aliases; reserved actions do nothing. Labels match getMappings(). No binding or mapping reset occurs.",
      "evidence": null
    },
    {
      "id": "focus-and-pause",
      "status": "pending",
      "acceptance": "Input is scoped to the playfield. Tab, forms, composition, modifiers and repeated keys remain safe. Outside focus and hidden/blurred tabs pause; returning requires explicit resume. A touch focus transition does not swallow its first action.",
      "evidence": null
    },
    {
      "id": "accessibility",
      "status": "pending",
      "acceptance": "Visible focus, text/symbol alternatives to color, readable contrast, clearly named large touch controls, meaningful status announcements and reduced-motion behavior work. Play requires no audio and includes no flashing effect.",
      "evidence": null
    },
    {
      "id": "privacy",
      "status": "pending",
      "acceptance": "No accounts, telemetry, API requests, hardware permissions, mapping writes or saved play history. Complete a round with browser storage blocked. Do not attach the optional play pilot to starter actions.",
      "evidence": null
    },
    {
      "id": "package-and-budget",
      "status": "pending",
      "acceptance": "Extract the ZIP and run it over local HTTP from its root. Verify relative imports and links, the measured file bytes/hashes against the optional live kit manifest and the 102400-byte uncompressed budget scope. Local preview play needs no internet connection. No external fonts, dependencies or media are required; size is not a speed guarantee.",
      "evidence": null
    },
    {
      "id": "test-matrix",
      "status": "pending",
      "acceptance": "Record desktop, 390px and 320px browser checks, keyboard and emulated touch, reduced motion, blocked storage and exact browser/OS. Identify physical Micro, physical phone, sound and visible-light paths as untested unless separately qualified.",
      "evidence": null
    },
    {
      "id": "rights-and-credit",
      "status": "pending",
      "acceptance": "Inventory each original or third-party asset, author, source, proposed credit and permission evidence. Agree code, asset and brand rights before public redistribution or third-party hosting. Do not infer permission from submission or grant a new license through this checklist.",
      "evidence": null
    },
    {
      "id": "removal-readiness",
      "status": "pending",
      "acceptance": "Before invitations or third-party hosting, agree the receiving channel, operator and response terms. Record request/version; pause promotion, disable affected entry when needed, preserve review evidence privately, remove assets through a verified release, check public links and record resolution.",
      "evidence": null
    }
  ],
  "assetBudget": {
    "maximumUncompressedBytes": 102400,
    "measuredManifest": "https://pointcast-micro-club.mhoydich.workers.dev/makers/kit-manifest.json",
    "measurementClaim": "A package-size review limit, not a performance or download-speed guarantee",
    "externalDependenciesRequired": false,
    "externalFontsRequired": false,
    "mediaRequired": false
  },
  "futureContributionReadiness": {
    "threeInvitedPrototypes": "pending",
    "invitations": "pending explicit authorization",
    "publicSubmissionsOpen": false,
    "projectLicense": null,
    "reuseTerms": null,
    "removalContact": null,
    "operator": null,
    "responseTerms": null,
    "note": "Source is available for preview and inspection. No rights grant, contact address, prototype approval or invitation is created by this kit."
  },
  "links": {
    "guide": "https://pointcast-micro-club.mhoydich.workers.dev/makers/",
    "club": "https://pointcast-micro-club.mhoydich.workers.dev/club/",
    "support": "https://pointcast-micro-club.mhoydich.workers.dev/support/"
  }
}
