{
  "route": "AC15",
  "kind": "Standalone scientific tutorial materials; no website Engine or compiled executable",
  "basePath": "/stories/planet-migration/",
  "basicCommand": "python3 reproduce-migration.py --directory . --output my-results.json",
  "python": "Standard library only for basic reproduction; original-PDF extraction optionally uses pypdf; full long integration optionally uses separately installed REBOUND5.2.2.",
  "hashPolicy": "Source/input hashes identify frozen exact bytes. Compare calculated outputs with numerical tolerances across Python versions. The manifest excludes its own hash.",
  "files": [
    {
      "name": "migration-timescale-map.py",
      "url": "/stories/planet-migration/migration-timescale-map.py",
      "bytes": 6726,
      "sha256": "da4f189a935910a46e620361821c1c3681da327736ec8dfe0f293fdb225ce95e",
      "role": "source"
    },
    {
      "name": "reproduce-migration.py",
      "url": "/stories/planet-migration/reproduce-migration.py",
      "bytes": 9395,
      "sha256": "fe2c1a866cddb3876e7f671be2ee551e27d3d47b718ab782ade602de9c245ddb",
      "role": "source"
    },
    {
      "name": "analyze-kepler223.py",
      "url": "/stories/planet-migration/analyze-kepler223.py",
      "bytes": 5959,
      "sha256": "7124b178406b8b3cb5bf1fdd13773617975074a6027c3faa4dcefa9aaf04b888",
      "role": "source"
    },
    {
      "name": "disk_torques.py",
      "url": "/stories/planet-migration/disk_torques.py",
      "bytes": 6408,
      "sha256": "a38f0ee07864e887c335b026d24290267e09171ce7d7c5a78bb94e1a1922ed0e",
      "role": "source"
    },
    {
      "name": "migration_orbits.py",
      "url": "/stories/planet-migration/migration_orbits.py",
      "bytes": 3498,
      "sha256": "c52ebf79231d23b9ae4221df1ae8c7c8dccccedfd83720776924e12aeb8d7678",
      "role": "source"
    },
    {
      "name": "generate-reference.py",
      "url": "/stories/planet-migration/generate-reference.py",
      "bytes": 13711,
      "sha256": "7b0276f97ffe47920e603bcd9c96e211d4668180a10425fed7b0ac1ff1c034ac",
      "role": "source"
    },
    {
      "name": "pack-reference.py",
      "url": "/stories/planet-migration/pack-reference.py",
      "bytes": 5617,
      "sha256": "a36d872b83ebb3a5f2775be570f1ebe9e36cb01f9d861617e37457a84e9f0033",
      "role": "source"
    },
    {
      "name": "freeze-kepler223.py",
      "url": "/stories/planet-migration/freeze-kepler223.py",
      "bytes": 3387,
      "sha256": "6b37c86e4f3c6ece9004b56c10caf227a67c82e2ea2afc8e1361523fa9e91c0f",
      "role": "source"
    },
    {
      "name": "timing-figure.py",
      "url": "/stories/planet-migration/timing-figure.py",
      "bytes": 3640,
      "sha256": "2df879e30827ff612fc43a1e865553809db94a6b02e9e1f79eb1f11f0f53e149",
      "role": "source"
    },
    {
      "name": "migration-force.c",
      "url": "/stories/planet-migration/migration-force.c",
      "bytes": 5499,
      "sha256": "07023b6bd7a550c4a3191f55aa25fec7f7530df49cb825875ff249349be029fe",
      "role": "source"
    },
    {
      "name": "kepler223-quarterly-ttv.csv",
      "url": "/stories/planet-migration/kepler223-quarterly-ttv.csv",
      "bytes": 2441,
      "sha256": "32298a1e7484c86b189cfd06a00674e237042bfebf1a062e8f3d00f2f75b381f",
      "role": "input"
    },
    {
      "name": "kepler223-source.json",
      "url": "/stories/planet-migration/kepler223-source.json",
      "bytes": 1431,
      "sha256": "efcaa35136cb11fd08d68505ec38c9a6764c101d3a9711f2704097c7dd5bc5d7",
      "role": "input"
    },
    {
      "name": "capture-trajectory.json",
      "url": "/stories/planet-migration/capture-trajectory.json",
      "bytes": 635065,
      "sha256": "cbac98cd183c646e5cb735724738838d6684aeea4bf31442fd61872b03dd1545",
      "role": "input"
    },
    {
      "name": "fast-trajectory.json",
      "url": "/stories/planet-migration/fast-trajectory.json",
      "bytes": 421938,
      "sha256": "91b902b5c8847295597c8fc218181e13a387cde05fa50290389d0483fc13a8f7",
      "role": "input"
    },
    {
      "name": "outward-trajectory.json",
      "url": "/stories/planet-migration/outward-trajectory.json",
      "bytes": 420857,
      "sha256": "501e2baffe55c714e2cc9e53d6e92ffde62a445de871b8644ec7b5499413c859",
      "role": "input"
    },
    {
      "name": "saturated-trajectory.json",
      "url": "/stories/planet-migration/saturated-trajectory.json",
      "bytes": 339555,
      "sha256": "d665b8610c9911eca888129ddd404ee7a654b45e9af25fe80228435389d1d343",
      "role": "input"
    },
    {
      "name": "trap-trajectory.json",
      "url": "/stories/planet-migration/trap-trajectory.json",
      "bytes": 421209,
      "sha256": "d5589b83f0d093547043c83658949764ecc18fc1340095064fd20c5d3256e373",
      "role": "input"
    },
    {
      "name": "gravity-trajectory.json",
      "url": "/stories/planet-migration/gravity-trajectory.json",
      "bytes": 423916,
      "sha256": "38ee5c47fbb6ceacffe05bd0b549df9354d1c9f7c22b6fe6f780bc1b1983e693",
      "role": "input"
    },
    {
      "name": "migration-timescale-map.json",
      "url": "/stories/planet-migration/migration-timescale-map.json",
      "bytes": 339031,
      "sha256": "e6b02cca915dc87041545be82ab1e03e63aeacbd4fdd3e7727e9bbd999e35cf8",
      "role": "expected-output"
    },
    {
      "name": "migration-timescale-map.svg",
      "url": "/stories/planet-migration/migration-timescale-map.svg",
      "bytes": 73774,
      "sha256": "42c4f637c8ba613e83c6cad8687fde35ae5f1e781dc1f240b66bba7e98baf402",
      "role": "expected-output"
    },
    {
      "name": "migration-results.json",
      "url": "/stories/planet-migration/migration-results.json",
      "bytes": 3853,
      "sha256": "fd8add50ac3b347eb9906e9f6097eccd1c72954d7d47a0954d52e47f407bb321",
      "role": "expected-output"
    },
    {
      "name": "kepler223-angles.json",
      "url": "/stories/planet-migration/kepler223-angles.json",
      "bytes": 19176,
      "sha256": "8840e745e0636bbb32c99f6e9424816f13a4745008ea40bc8cae540f04706a42",
      "role": "expected-output"
    },
    {
      "name": "numerical-checks.json",
      "url": "/stories/planet-migration/numerical-checks.json",
      "bytes": 5323,
      "sha256": "d32ae3663d8a4a75b6e611770b7fa0d9e76f0981c57aef354d845f8863113300",
      "role": "expected-output"
    },
    {
      "name": "kepler223-angles.svg",
      "url": "/stories/planet-migration/kepler223-angles.svg",
      "bytes": 6474,
      "sha256": "8ce5dcc1da3f6426086f7ce195da216b91a2ce1febb6692a91e53d5a2e1f0b88",
      "role": "expected-output"
    },
    {
      "name": "provenance.json",
      "url": "/stories/planet-migration/provenance.json",
      "bytes": 1199,
      "sha256": "602792565f538ce0947ea2adf924ebb1f3ef8a2fab309d0aa17722b17d24d60d",
      "role": "input"
    },
    {
      "name": "numerical-attribution.txt",
      "url": "/stories/planet-migration/numerical-attribution.txt",
      "bytes": 2083,
      "sha256": "cb1b980da7540733a16c4d3873c0678c20c59897698fa86591575977dba32312",
      "role": "attribution"
    }
  ]
}
