{
  "schema_id": "harpy-website-figure-provenance-v1",
  "inputs": {
    "outputs/spectrum-preservation-study/experiment.json": "69db356439daf33f320d7a596d236584c8053f55b1954927c452dbda8679be8f",
    "outputs/v1-respec-qualification/spectrum-failure-case.json": "d40f74c8a9b84c8e38c8e6775062c08f2133a4b1a4241754817f5c08ff92fca6"
  },
  "source_files": {
    "src/harpy/__init__.py": "27e8febb48ada44153ea2add9969a2c50a9831a74d9755fdd53c549a888b1cc2",
    "src/harpy/__main__.py": "ac5c1a07fafcf9abae015e9f0b8f4cfa2575106df2bfc212429209fc5a4d6649",
    "src/harpy/analysis.py": "a2093ba958bb700ff74c597268409e5f8623e197021d9f3ba70593429581ff2e",
    "src/harpy/cli.py": "323c8c9555f9a21d2c81c648e1e44513495b47d8628b3cbffa2848e82f2356c9",
    "src/harpy/envs/__init__.py": "e6b444ab9af4deeace3a7cd7c9608af18bc405af74b0f0a9e2afcb91235749d5",
    "src/harpy/envs/baselines.py": "f1801492386d56140301b24a75aa02856d1fbb28c0d0fd255aa2cde58721c77b",
    "src/harpy/envs/checkpoint.py": "d9c0035ca9de4fb011d2f8a8f52117af77ced55733678ed20f6b0c17f93f1688",
    "src/harpy/envs/models.py": "501b314847eaefcb00e628b694f01819e8aa2eb665c2fe305c34725f977e8b38",
    "src/harpy/envs/observations.py": "0b94a42ed42f817e75dcd04aedac5ca1159f41d65f916355c65fd17569de6174",
    "src/harpy/envs/planning.py": "b24faa7484663b314ce4906cafb6668cb2ffd62c6cfbb501baa6dc06db0cc846",
    "src/harpy/envs/robustness.py": "b65a2b9eadc957241d0f2f4af4ad94f58681ed662af0ea8abab7be60747f11c6",
    "src/harpy/envs/sine_pitch.py": "39c3bb4016cc242ead5b535147a09fbf7f21ffba95c2b1111fe07589d514fd9f",
    "src/harpy/envs/spectrum.py": "eab3f0fde8cd51f3a70823983281d1725968a1b36decb953dd6ac85898c975fd",
    "src/harpy/experiments/__init__.py": "6c4b3b3bc959eb49aae33ef1deff6bda3074a3cb3f53f1f251c73cd1325a0c7e",
    "src/harpy/experiments/actors.py": "b7224ce7f2701c00c3c2ebcdbd4ce80315cd87ef7e4ad26f4e9c98d644ea5529",
    "src/harpy/experiments/artifacts.py": "a7008494d646fde340848db354703b99c0512ba12c992d19283df48dffac2595",
    "src/harpy/experiments/models.py": "a27741a6448abcbc9bec9acc1a289a3eb095bac857c1d4f2ae3e2f6bf21d8a67",
    "src/harpy/experiments/protocols.py": "c3a2ccce04fd342d91a593354f26c76ca473276797b237c930a958085e741361",
    "src/harpy/experiments/qualification.py": "faf49de308b543f3f91d6fa787a6365aeb3c355dbaaef6cf3c21542fc89122ff",
    "src/harpy/experiments/results.py": "ae6e5bf925793517929cc1bf5bb77073e041d41aeb312a8b40beb17033972161",
    "src/harpy/experiments/runner.py": "76a341378f4d1299f93ae47a3c45fd9e6a0855db4e32049fcd622f69f76f9075",
    "src/harpy/experiments/training.py": "d97a619fe6c5fa4b1fb7e31494ee5e6845d65c972735f8ee4927252980be308a",
    "src/harpy/learning/__init__.py": "28cc72f3fcfbd36091e64e851176535c9b3f4cd6bd5ce84b60bb8eaf4ae53303",
    "src/harpy/learning/action_masks.py": "d9626edf5e70b1e156f39eef71533e289c8119e78077d448908eab7c005f8730",
    "src/harpy/learning/actors.py": "7cb80a017ccb7aa96ef21672ea4a61a71d57a8c9ef2860ae89cbec20eb2f8fee",
    "src/harpy/learning/artifacts.py": "c466d7d494e69e8312e4fb2e4e4a5ef4c5d6fe6361dbbb4f2e0f392c145f3d06",
    "src/harpy/learning/bc.py": "27496fe66c77f320ea25e55f5fbb3fdb2b633c8d14f32f8d0e72e2d7b9d3f27c",
    "src/harpy/learning/cache.py": "caab8599ea62c31ed7cfca6aa9f07e3f4a24a2121cd1f702f7cbcdd9db1a7cbd",
    "src/harpy/learning/cli.py": "94c695088524f7ca7f828e82d14e3e33626b1480827d0aa80182f855abaf41f4",
    "src/harpy/learning/dependencies.py": "83eb7a72be7b6171511e43b47ac2cf2f2d689b784536ec5d3c9cc6f86e639a89",
    "src/harpy/learning/diagnostic_codecs.py": "467fc508625c40ddcf395c990ff722d253720a35467a4eeec75e59b2d24e0264",
    "src/harpy/learning/diagnostics.py": "02dcb21520a45da93c274e09f1e910d964f1b4b37c3d5e6ca15a7c0367af5a3c",
    "src/harpy/learning/envs.py": "c31936552ca7acc6f20f4a3a64f16a8a45a014dedbc239bd7414e42a0d6ac5cc",
    "src/harpy/learning/errors.py": "dba8ce99a838a1355f440f2beb7eea04809f94537f472a52bf17e6affdec2502",
    "src/harpy/learning/evaluation.py": "c2a53e5119bc3f5aafc273a63bd8654206c723e3ce8609c684c972ebce8f524e",
    "src/harpy/learning/experiment_results.py": "b553bbeaaffd0abab391a91f180528fbd10152398e0383669b06df5718b36569",
    "src/harpy/learning/models.py": "33527918cd2070aa9ac59fabde811f039efe6f8e8ed56bdba51eca9aaa6e4b53",
    "src/harpy/learning/network.py": "d52ce66c5a908f31f4a53867faf32a55eb3364e453377909ae1ecd71d6189e04",
    "src/harpy/learning/observations.py": "d1bb00aba10a67dc22d28fc7c4d2575d1a9cd73a8c24d2b3bd3b8a8572e99745",
    "src/harpy/learning/pitch.py": "287ef633045fc9e9ef19b7f753e1165bd0bec22f289613ab9ae91e7132bc2042",
    "src/harpy/learning/pitch_actor.py": "c4e9093b53570ac28cc013bfc2ed0c12368e069f9de1bd30a33eb36ec222c09e",
    "src/harpy/learning/pitch_artifacts.py": "0d0049e1d47528c8218f57cb6fe1549fed3179af895de641ab2553f3fb7b1660",
    "src/harpy/learning/pitch_comparison.py": "f7e18ca66b27fced4cb70dc1d3d9fb9ba8a5191054ea4c1e2c39d66ed203fa06",
    "src/harpy/learning/pitch_data.py": "b6b183c73d9326695ecaab52faff0dc9472034588b90be6343835f89336719c5",
    "src/harpy/learning/pitch_e1.py": "8505d252e5c4d2d6ca9c0a51f2ab4f119076cd76d5f792e77d91a8772b2253df",
    "src/harpy/learning/pitch_evaluation.py": "a70badd5c61ea100d18c99d44a7cae230d88ef71373f4c72f8c8e1e1ffd0e5e5",
    "src/harpy/learning/pitch_network.py": "f256e4e372f0d1bf7fae82398accb76c1a2cfd9e90c66e1264e4460b6d0a8033",
    "src/harpy/learning/pitch_reports.py": "836547e51f3749cd230c99dfc888edfeef1ec0b83458b997853f09e99a395924",
    "src/harpy/learning/ppo.py": "78844747ae70aad373afc3450caff3a3f4890503c869389410d3d0c70a35c5e4",
    "src/harpy/learning/readout.py": "4f37a9a131d2d46869bf1fda22a6f97edc50e0b68f4f179e0935bff2b42c638c",
    "src/harpy/learning/suites.py": "49a0ab6143653f3272a01223021df2493de7805574e71b3b091bed5a8698a2c5",
    "src/harpy/learning/trace.py": "ff441b7dd08909f14df0e5b8a63893efbed55b6f1acef08cb0fca2803ed7d1be",
    "src/harpy/learning/workflows.py": "5e3c3858455269d143def519b478656397d13401d4416063fc666d86d90e889b",
    "src/harpy/synth/__init__.py": "9e4b839dcf090a0a2096eed6c265c150992128d3f6951ff74fa4313f2bd16524",
    "src/harpy/synth/curves.py": "630718ee45e99d9c50b82a570c1f4e4c955ed2437be2c9044d1e104406f881c6",
    "src/harpy/synth/engine.py": "ac8d1f186279926b797d47058224e8514600e75651ea6bbe81b4013e410dac8c",
    "src/harpy/synth/envelope.py": "fc51d3f03d656b700bca9ef42fd2bdda3078ac90f5a21c2a7ca57a8f1bcb0cfe",
    "src/harpy/synth/models.py": "e01393db76b7c07d8511f146f3c24b56c1de4aab4da540dd54d48fff3834a01d",
    "src/harpy/synth/patch_json.py": "34bf9e52f6d548a797c1b305c7312a12810eacd0e15c0675f6f3921d7ae83cdf",
    "src/harpy/tuning.py": "13cf0eeeedffcc923477f6577c6b7c77855dab71a0db03dc6092ada9beae1c1e"
  },
  "exporter_sha256": "0ce272a5d9265630c1a0cc5b06f7d1733e04f8d55408028088c0ea634b510f81",
  "python": "3.12.3",
  "numpy": "2.5.1",
  "data_sha256": "c560f5eb98c6d666526a04808a73c4ba8b152e9dae3afec7fa9b0b41a323a60b",
  "study_protocol_identity": {
    "id": "harpy-spectrum-preservation-membership-v1",
    "digest_sha256": "7ec38d3af9e0a30baba4437e00350b1fdfe77166b50f72b92fe0c1ed185c9c48",
    "partition_counts": {
      "iid": 200,
      "lower": 200,
      "upper": 200
    },
    "episode_count": 600,
    "digest_scope": "Original frozen protocol including full episode membership; retained in the hashed study input. Membership is not duplicated here."
  },
  "actor_components": [
    {
      "artifact_files": [
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/PLAN.md",
          "sha256": "9d8b89f9187564c1143b314f97fcd441ce2aa80e58347834bae08fe4f72644be",
          "size_bytes": 6862
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/encoders.py",
          "sha256": "c295d1ed726ec71010d2a9f66ee441fed92b49ce986eb3fb21cf69e2dfafc23b",
          "size_bytes": 6637
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.json",
          "sha256": "90ccc0be6b70dd14577557861b1fd5a492cdb3b2497a5981b69a81b7cd5faa18",
          "size_bytes": 94991
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.py",
          "sha256": "fa17b7de1d10baeb9b0e0061588e89589bd562b4d50222586e53e16612cfc4bf",
          "size_bytes": 7599
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/study.py",
          "sha256": "d0a2af4a0285fd2d0876f625e680b30c09d1c18e45e5dc4380b723a78fd3f0b3",
          "size_bytes": 13518
        }
      ],
      "artifact_provenance": {
        "capture_frames": 262144,
        "encoder": "harpy-legacy-log-point-dbfs-v1",
        "grid_size": 1961,
        "grid_step_cents": 5,
        "qualified_v1_encoder_changed": false,
        "reference_decoding": "FFT reference also quantized to five cents",
        "sample_rate_hz": 48000,
        "status": "research",
        "study": {
          "artifact_paths": [
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/study.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/encoders.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.json",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/PLAN.md"
          ],
          "protocol_digest_sha256": "7ec38d3af9e0a30baba4437e00350b1fdfe77166b50f72b92fe0c1ed185c9c48",
          "protocol_id": "harpy-spectrum-preservation-membership-v1"
        },
        "weights": "none"
      },
      "controller": "harpy-committed-zero-tolerance-plan-v1",
      "decoder": "harpy-public-source-feasible-five-cent-argmax-v1",
      "device": "cpu",
      "estimator": "harpy-legacy-log-point-dbfs-v1",
      "name": "legacy-point",
      "observation_mode": "waveform",
      "seed": null
    },
    {
      "artifact_files": [
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/PLAN.md",
          "sha256": "9d8b89f9187564c1143b314f97fcd441ce2aa80e58347834bae08fe4f72644be",
          "size_bytes": 6862
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/encoders.py",
          "sha256": "c295d1ed726ec71010d2a9f66ee441fed92b49ce986eb3fb21cf69e2dfafc23b",
          "size_bytes": 6637
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.json",
          "sha256": "90ccc0be6b70dd14577557861b1fd5a492cdb3b2497a5981b69a81b7cd5faa18",
          "size_bytes": 94991
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.py",
          "sha256": "fa17b7de1d10baeb9b0e0061588e89589bd562b4d50222586e53e16612cfc4bf",
          "size_bytes": 7599
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/study.py",
          "sha256": "d0a2af4a0285fd2d0876f625e680b30c09d1c18e45e5dc4380b723a78fd3f0b3",
          "size_bytes": 13518
        }
      ],
      "artifact_provenance": {
        "capture_frames": 262144,
        "encoder": "harpy-research-log-cell-max-dbfs-v1",
        "grid_size": 1961,
        "grid_step_cents": 5,
        "qualified_v1_encoder_changed": false,
        "reference_decoding": "FFT reference also quantized to five cents",
        "sample_rate_hz": 48000,
        "status": "research",
        "study": {
          "artifact_paths": [
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/study.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/encoders.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.json",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/PLAN.md"
          ],
          "protocol_digest_sha256": "7ec38d3af9e0a30baba4437e00350b1fdfe77166b50f72b92fe0c1ed185c9c48",
          "protocol_id": "harpy-spectrum-preservation-membership-v1"
        },
        "weights": "none"
      },
      "controller": "harpy-committed-zero-tolerance-plan-v1",
      "decoder": "harpy-public-source-feasible-five-cent-argmax-v1",
      "device": "cpu",
      "estimator": "harpy-research-log-cell-max-dbfs-v1",
      "name": "cell-max",
      "observation_mode": "waveform",
      "seed": null
    },
    {
      "artifact_files": [
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/PLAN.md",
          "sha256": "9d8b89f9187564c1143b314f97fcd441ce2aa80e58347834bae08fe4f72644be",
          "size_bytes": 6862
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/encoders.py",
          "sha256": "c295d1ed726ec71010d2a9f66ee441fed92b49ce986eb3fb21cf69e2dfafc23b",
          "size_bytes": 6637
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.json",
          "sha256": "90ccc0be6b70dd14577557861b1fd5a492cdb3b2497a5981b69a81b7cd5faa18",
          "size_bytes": 94991
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.py",
          "sha256": "fa17b7de1d10baeb9b0e0061588e89589bd562b4d50222586e53e16612cfc4bf",
          "size_bytes": 7599
        },
        {
          "path": "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/study.py",
          "sha256": "d0a2af4a0285fd2d0876f625e680b30c09d1c18e45e5dc4380b723a78fd3f0b3",
          "size_bytes": 13518
        }
      ],
      "artifact_provenance": {
        "capture_frames": 262144,
        "encoder": "harpy-research-hann-quadratic-fft-v1",
        "grid_size": 1961,
        "grid_step_cents": 5,
        "qualified_v1_encoder_changed": false,
        "reference_decoding": "FFT reference also quantized to five cents",
        "sample_rate_hz": 48000,
        "status": "research",
        "study": {
          "artifact_paths": [
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/study.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/encoders.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.py",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/membership.json",
            "/home/haydenw/Projects/Harpy/.worktrees/pitch-decoding-v1/research/spectrum_preservation/PLAN.md"
          ],
          "protocol_digest_sha256": "7ec38d3af9e0a30baba4437e00350b1fdfe77166b50f72b92fe0c1ed185c9c48",
          "protocol_id": "harpy-spectrum-preservation-membership-v1"
        },
        "weights": "none"
      },
      "controller": "harpy-committed-zero-tolerance-plan-v1",
      "decoder": "harpy-feasible-fft-peak-nearest-five-cent-v1",
      "device": "cpu",
      "estimator": "harpy-research-hann-quadratic-fft-v1",
      "name": "quadratic-fft",
      "observation_mode": "waveform",
      "seed": null
    }
  ],
  "verification": {
    "strict_report_read": true,
    "terminal_records": 14400,
    "matched_initial_groups": 4800,
    "reconstructed_captures": 3,
    "waveform_and_spectrum_hashes_match": true,
    "derived_replay_endpoints_match": true
  },
  "scope": "Existing study and diagnostic only; no new actor evaluation or training. FFT curves reconstructed from hash-matched initial captures. Line segments join FFT bins; no smoothing. Seeds exported as decimal strings. Completion record; a directory without this file is incomplete."
}
