{
  "record": {
    "schema": "flowrs.registry.record/1",
    "package": {
      "name": "neuroviz",
      "version": "0.1.0",
      "kind": "widget"
    },
    "hash": "sha256:62380e9e9d1fc37a328bd0d269e0375f4c94f540ef77a09d92b27c155b8f4fb8",
    "manifest": {
      "schema": "flowrs.package/1",
      "name": "neuroviz",
      "version": "0.1.0",
      "kind": "widget",
      "licence": "Apache-2.0",
      "description": "The neuro views: topomaps, butterfly plots with global field power, ERP images, Morlet time-frequency maps and compressed spectral arrays, one kernel at both tiers, checked against MNE's arrays.",
      "provides": [
        "neuro.cdsa",
        "neuro.erpimage",
        "neuro.gfp",
        "neuro.tfr",
        "neuro.topomap"
      ],
      "tests": [
        "the_family_is_installed_and_is_not_a_builtin",
        "every_view_draws_its_numbers",
        "the_example_graph_runs_every_view"
      ],
      "needs": {
        "network": [],
        "filesystem": []
      },
      "ports": [
        {
          "of": "neuro.topomap",
          "port": "signal",
          "output": false,
          "unit": "$T"
        },
        {
          "of": "neuro.topomap",
          "port": "grid",
          "output": true,
          "unit": "$T"
        },
        {
          "of": "neuro.topomap",
          "port": "limit",
          "output": true,
          "unit": "$T"
        },
        {
          "of": "neuro.gfp",
          "port": "signal",
          "output": false,
          "unit": "$T"
        },
        {
          "of": "neuro.gfp",
          "port": "gfp",
          "output": true,
          "unit": "$T"
        },
        {
          "of": "neuro.gfp",
          "port": "peak_time",
          "output": true,
          "unit": "s"
        },
        {
          "of": "neuro.gfp",
          "port": "peak",
          "output": true,
          "unit": "$T"
        },
        {
          "of": "neuro.erpimage",
          "port": "epochs",
          "output": false,
          "unit": "$T"
        },
        {
          "of": "neuro.erpimage",
          "port": "image",
          "output": true,
          "unit": "$T"
        },
        {
          "of": "neuro.erpimage",
          "port": "rows",
          "output": true,
          "unit": "{count}"
        },
        {
          "of": "neuro.erpimage",
          "port": "order",
          "output": true,
          "unit": "1"
        },
        {
          "of": "neuro.tfr",
          "port": "epochs",
          "output": false,
          "unit": "$T"
        },
        {
          "of": "neuro.tfr",
          "port": "power",
          "output": true,
          "unit": "{power}"
        },
        {
          "of": "neuro.tfr",
          "port": "freqs",
          "output": true,
          "unit": "Hz"
        },
        {
          "of": "neuro.tfr",
          "port": "peak_hz",
          "output": true,
          "unit": "Hz"
        },
        {
          "of": "neuro.cdsa",
          "port": "signal",
          "output": false,
          "unit": "$T"
        },
        {
          "of": "neuro.cdsa",
          "port": "psd_db",
          "output": true,
          "unit": "{dB}"
        },
        {
          "of": "neuro.cdsa",
          "port": "freqs",
          "output": true,
          "unit": "Hz"
        },
        {
          "of": "neuro.cdsa",
          "port": "windows",
          "output": true,
          "unit": "{count}"
        }
      ]
    },
    "conditions": [
      {
        "id": "compiles",
        "status": "passed",
        "how": [
          "observed"
        ],
        "detail": "it builds offline, confined, against flowRS's crates and lock (5 test binaries)"
      },
      {
        "id": "tests",
        "status": "passed",
        "how": [
          "observed"
        ],
        "detail": "16 passed, each binary run alone under seatbelt (3 named in the manifest, all passed); 0 ignored; doc tests are not run"
      },
      {
        "id": "no_runtime_install",
        "status": "passed",
        "how": [
          "observed",
          "static"
        ],
        "detail": "no program started and nothing written outside its directories, built and run confined; every crate is one flowRS's lock pins; no process or library loading in its Rust (17020 other denials, reads and lookups, recorded)"
      },
      {
        "id": "no_undeclared_network",
        "status": "passed",
        "how": [
          "observed",
          "static"
        ],
        "detail": "no socket and no name lookup, built and run with the network denied; no socket API or network crate in its Rust"
      },
      {
        "id": "units",
        "status": "passed",
        "how": [
          "observed",
          "static"
        ],
        "detail": "19 ports read from its code, each declared, each as the manifest says"
      }
    ],
    "toolchain": {
      "rustc": "rustc 1.99.1 (58cf8f9c3 2026-10-13)",
      "cargo": "cargo 1.99.1 (5f94df478 2026-08-27)",
      "host": "aarch64-apple-darwin",
      "sandbox": "seatbelt",
      "observation": "kernel reports read back (canary seen)"
    },
    "flowrs_commit": "83e12a4b73221ac7b3c48ea545c860be180100ef",
    "verified_at": "2026-11-02T18:35:16Z",
    "verifier": "flowrs-registry 0.1.0"
  },
  "signature": {
    "v": 2,
    "key": "dc5d537054e6ca29b068f7a4375d0e8140af371410bd357235a146ef44d94ed33b6dfbe9c7a7ac772ec9d9ddaae7ca7b8028c9e163e39bfef3192748d9dd4e9ec4e6a705462ab98fbf030e294f78eadadd10122b0bd93a146be65c19751d4ec6eabf441d7e841630c495b2d57f41283232c45b3b4bb774c41be1bce61d551264603a500f3f387950685e4576dc280247b88fcf4dec7ee268e4d487b127d0bf79fd7a9d337e51d2c29d981f3f1b89afffbabff3f20077a90af83de9b4e0c75793d7d988857556d556e7c137c3917468f1d3a09a2066145d371ddf0ac2c37372974741d4e442e02a3c5e4c5e41f7222a54b3b3727610118f93b3d5ffc2bd2d2f7f91c8335ec0f840bfc4de7a43575f3b2db7eecb6f9585a37fb5908493d024d74e63b2dc945ea2f18ce3c542cacc0d64abeea6cb301ca8b22dc8d3cc3b7ee1b0999b62d6e8221d2c6b7f527a16ddaf9a8fb8fd2d94d90f6f4e6738015d9fd0e9fd47ff80c3aea251b570ebd0f16cb917fa39d6adca0e5359ccae44a4f4668314c263d85c336bb01d981e87ba267655232b095ba02bfc402257a5a1832f2a55f18aa5e94a75add7c7b77ce763773d3f57e326e45a7aa5de1bd6e3ee0b2f87a565494732a5c9bc15f442358a44f5093f32b7e4ab176afde3af7eff0af88cf4ee1870616252e75c639b54e7f4ccda08c7139488356b71fedae03c6c30a767311a1a7170ee04423d3476c85102287cedfaa5935a3d69737903a479f3051b254e3e90b97802497ec4ce32a3798df2436a1ac684b41c661f395251a286ea179c6011b98fc6cf34fe2408a2968478e30bb06e62ac6477cd32d5d9d560f65c5ae9d0ff66721629f8c00f06ebd229b68ea17dfbedbc3f05cf6211e26c163eabd213127808fbef5ac91d7f7cf0da00a96a40af412860080c7c558ae1e820bd55b6be4dd2e2337bdd783a081863b89185e1d9c09595ad43b7a6aba9f37546ca8bcce7eb674e0077732839c9af8337c01f48b6b75faa9f3390052b3f8246b33140f88401adbaeaaf82f50c75cd6393c83f4e742888d6952dddca0114e114758c124dfb77121fd348bc83588155ff82ba1a5dea3cc9aeaee08c5d853b7ac6b6066efe849f731ceb5594027bf8d8dc7984924d901cee0e1dc3b097f7d4616c689f9b082bb8d88a13846afdd96206a09b6f208fb85d830d429da755e404a8d48d2d5df94ecfa19c1f7ac92b9f8e2d1fe515932571f96acb264209acc35ed3ae5ab790fbc9dcb2e30a7dfdd61c944e5e6930a0344b38697887dc68eed1574750003138fc181519a56598f53bb216e264d7a9ea990d87194798e62153189e7bb5c015bb4d0dca87d453a50b5cfe93e8929366d2f743c40074bbb88f9b62ce65676685db60a21ac41761b08e1d9a9604a10ac7e38cc90c7dd610c69d9751d77fb13b0eb91df5ecb145b48b85c039fecf576d65bb3c29ca5273e0d5bacf0c7ef1eb61a94cda9a1a2002ef69e62578069533d287d2efb01ded3e44961ae9ea096f90ecc95930c25a3db3e3a8a116b23e33126c932bd6f3e427d559d64272e03f94c1e3aeceed574aa4c2c5745ebe5ac61db1bc7b4ab199ec55fee156be6ae5ba44296074237f355e4df01d13a8a212fa731c6510d0c43a5fc338a3392272550a10a328cdb1409e9133bd0d79801bc6aa99e361930bee2946d2f7f705eb1be381fbdd6a0923cfc1778607577473344a3b85b67be5e31f5c2271abdccd74e7b149dece024919f358f6adbe46b76e74d8dc8a0ece0a0d278b1de87f67f0a7e6cf54f3cfd54c0a6a5b2143fd900d90c9be7626617ecabb8439c34ad2a4853a6593d51c48e11a31b442d18dab3b4bfec198115c0e1db747f1de7b708d0e95f3db3e8c2eb3baa23ad6d0312ee315a7c0de1bd852b1cb68d02334b8e3187ffe5cb5b6cd4b01a43329899db572f61d6e5dfe22c3862403bb5c836ecdee4206206ff549e1587f788a38c3af0a36db60e70bce08b7318470a0fc58efccf1e13a362b010a29df4c5ebbc8bbfeb26b35ab8aee6b46a223b9784467b9f5f864818e1d5d466d059a0cf7a3c41f5ac308d25a66c4c7611fcec595253a8159f0d0a2d34c7aaa1d6b27162046a95185b68121b81a618750f8ba84f401f217aeb664a66f6357bfc7b1702b6fd34ffe1a32010584c3a84468de88a92c93ab5bd840ba52cc8ea4e9a68ded4acfc624031ec2443287877886db6efc64af01f7bf80782f8c5b3dda3b4cb5c3425028d7ef7f8f4177d437a61787ad6b325cd79ddcc3bfd9e1092ef118524e6c7c745b28ba8407ced9055d48c7275e1caadb88ea67bfdbe66563603de244bd3740b82153df340cc70c6ca947d6da9eb126e627666370e266aab079582e633fbad606c1535e4a15a25acb5efd4ae0cfeb03eeeb01a52d1ac3a5486cde1a151f7950fd5b68df976e843ceaa4d1e7c1644fa82984ec7d8405c6950674c3c3eeeb8a28aba272a244b26a11e07935a1ae362b1b3ddf900006fccc7b798b1ee73c8d4ae2245fad870924c4ff82ca92befb3aa6c960a19983c77f9d563d6fd529600f19897359ff641cd8db26cf065375094b0508c822809dd888cb3de0248177825e042f759505459036177c9c2e38f81806fdd183579f135019492e1e05b64a28fee0a7f48903aa9bf4d3a5bc73f0b15db50e2ead4b03e09c84d5687a17b5f5dd59e84934a5793994d73f74ae58fdb78030888cf8bad5c6f22942b241d8ee50be649668b15571968c796afcb5f749787bced05678144b2185aee171244291d7caf3d6a3c89b82f0ba02166938",
    "key_id": "v2:fa1a50ef56073d416f25e62fa6c5e7ef069f20766a1ef48ea0ec91d241df89cf",
    "ed25519": "64567845d5f9d62c7a7535ffdc1f718061f6a46663831e8720302eaed9e040f333aebfa48d6eae45289a76ff2e1f47af76cfe90d697d0706e9a798d861d9190d",
    "ml_dsa_65": "b3370688d006b81369194a33f1ad927b7a658e00427902286421ec584c6cd739357631ac55ea77ff8314abd6490b3082c3dbd2cb89922458f4b06885f5205fb058ad90577849e4889ebf3c2aa13a360f95f8eb8ed51798589ca97f866f453d719f30ab913a3b01ab22891ecbff90c83068894959899f6c473e9450331b1393625200422826c7ef1200b77711f32fb37dcdbdb5d4127823d94d937effadb06a8599e6121aa53c802d5cc4da05629f6947547d883d53eb566189be49b5bb9f7caaa87ba86cdcece1f83129194a37d5a82d241d60305091b351561975e03ba5f2ac0c189a6b1805343c0fa9c5be6548c62cd4f16ba74418bc78e4c38ed7679096e0c941114885311f1d53fbcaae2956681dbe5d96e2401469689eb1f769b914c9ab8efde4a708c3c433a3680b2885143b5f008c62cff70da746dc4eeb1a3bb2c88192d155e290e268de67128b0a60c3786d752b62e971e80e89c66c3cf81bc1c3e7da98b16f3350cf5bba1daf976543b9e67bbc5c386401abc72a9418b6cff7809435172b4224059228d4015aadc282813737db02f63e15495370e765fcc1848a2e47607b8a6268caf230eb4f6ee30a95ad79f2ffe53fb5a48d16352699d38d892abadd0c88b2aba97fe4893cc31d3fbd02b66b063b92dc353106f5a4fd31d4de9a78511097e5e2c7bd26393ecf9185446b579ba0511293a37281bae1c6181bf9b1bbbc68872e3ae0dd8a364280a7a5abb68ae14b3988357419a85353ee0d996a748667f62a0f7918dfaab83e2913021d6c576b79e145931c72079d61dbcb1ca733d3c35d0113363ac71e34bc44c346df5c2e61ec73d9b5b54d6c3d4ad621b613843b2f708ea9fe966e6cebeca965cdb377ace41f2761aea72d18c6e3394274aa828ae2d21ed56d1b2956d88e4b5bbb7de12b30e6aed5c17b81cb77c5367613f319e52e9f2c0fe879afb010dc029f9f08d9f6e1722758b35ca9ce53963f17cbc3eee8d5fc144eff349445187eb9fe69cc6be4206258b3f91827d896504b3e8caa251af1b0374baf4540008e652934e9326011deca447c3497f79bf645cce554fcd3ac870032a47f9ae7ca03d3cc5f3b408440cfcb820746a532f40f85cce38d1f2463226f295327a9770b072f969e574acc0767455956786f34798a1ca87be23118b40c64bc5b84d470c374ed5ba70ac6d5fe2f653f89b86798337c008f9c0b12f6ad0cbcafd16c2d154413cd9174030f721a63ddb8a508053f103c47e041083a45d100da82f872dc8c53e5370706c2e8a04aa46a3cfe236edf8560f623a2eed2b5ce72d5e31f2076d94f82536f5b228a04091caf53eca84a6e30e09d4e7a58b6f7e63c2d0d758334a174c7d8fe0e07c3a3c342e3274e6e5bc69e840af5fd299839ebf727e785f82215cf6225d8958ae07c0a32b9abae1b31f03f28b6125ad7e139e02beb8672c0ff064b9178c0d90f90db1fc9760c478fc0e44d5f53fc1eaca1aa3a8a0c412541b6bfbf9af19f62a55312028f45ba2793bc125a1de7cec222906436a906f7848989cfb72fda502bdbc7b39b97412e3a83df0d6c0b3c81818e03d3f6b6a295c938bcc1f90ae56482f1377577a29dde50adfccb27d59411cf7560fa8eab87a7ad7004599f321fc6f717556eaf8c530310a96b3918e4308f3a38f1d01fde4bad9d8d963af27be20558e24987067f8b37decca8b66dffe2bc161fc979cf7f40679c544e624db9a2b65e8bb55577f264d1ce354a4758a8f97055b880b5d61a3580836bc402d872ed45992ded4e40f452b8a4520258181d09fe9421074aaff7f0e7ab50c39c3dc7afcdbfffef7656584485586fd8952a736db0310b2705912297df16602a8c536b64d38d91d099df1cc072e2874b188282309e0aec953e905aeff4532c1326ad8b71e19880b09d9487b71657fe214f32fe38b63e235fcd11439d2589f22a4070cf6e7beefb30daf5e724f3c6ffd080789ff08ef2f7ba806874435b082ffcc752162d2f9c2a2c0cbce243947dc8c97fbd839de99e5a30d318563c23fc8d26ced256d1d2bf118f7a6b8cb6cc195b76cec653d1baabdc31a6c978f94021764ae47d24f63afeff4205db03d1ef3a78e1e6fe3e28f0f18a4d45ea0074595385e543379c9c4882c0d9ee2ca617a0b72f76a8a56f0e3fe2c871859876b48edfaa16ee1e689b554683b6bdd5780c7171fe881ed683cb63a45036d5041bc282293de59d188be34dcbc2b11e8efc2f8309eaddf4b1fd02f763538910ea1a9f4da0de66ca98804c7f0e59b2d1e4994fc241555b1ba262f7758f433afb6fa4ffce23d40aec5971b880d223faf2a5170ed1e28d43a43f23ef033ea381e6b3e560226e1236efff498c9b51620763819c8a0efa5e3262ef8ae9a04bb6422c8dab4b8b67a3c118e08303e5ff22bed3b1093fd9c6d5294f11a0e2d9b7477d37f839d0520012f1d573338772cd0e4f76d94ba643d9ea3966e57ff8b12f5c426c96835748cc716877f6c390e1c8ee7e8094933605072cfbacc954150253b3b4c35d58d5eb4b84cf461be4b38606953576aced481d04f3f94b7f2d098efcedba6ea31ce96e8e292b5151e69261ab3527577e8d97c0d44e5071e86a7fc2059eb4a7aa1d3db291a10aaff86e5357cda865ddebc99183ba05fec6ae2a1ed46be270705a8afdfca8b24765717120782fe132230153e9c82993235d40f298722a4d66edb6e2d7f8eace4a4659393dabcfd992a7131aff09698a256e7e8b31d28f69c58432aba971541ae5e94ecd92f37bef0a714de2b1e1a4f54e40b22c3c44dee209ae7069a310bed13e542ec88be1296dada527c9edcfb76e854069e6a864814c8707e380557233efc550fb707da5b1cc49af085025bcabc7c7e7d9d09ccb4cfa18c199d1fb8ebd7dd4e28b755f3206f87723037ece4b55a2ee98f67d28cff9c4455127141c0c78ce5c460fc20ae463ae2636e2098d85cf046fd0781d90d7cf1315bf7d4d34d460122f7878b420f04d8b0b0e4c0ebe9b0cfd82c17baddc67fcd9b3b16062ddb7c8027897d3fd84e2ad9004ad532a6b748e2f92499a3c301230c06aca16ca22422be50d3b9e1ac7334c9cfeac8821fdb75134054ce3422697f209d628fdc1049ff6955e86bdb4b57e40cc7ad48d0f6df3b43acb927e59be0cf0e991f83ca8fcef23447717abe99a748d471e4e577b7a44550c8322aa6222d0f57152175183cc81dfeaff77812df1c7a723e659dbc2f11699e1931cc885ccf8a167a3125dfa220d81164a8f48508e5ad9d35525923f56fb90ed8c6191c7c91d7eab633c997f9e08ec467d246bc97f3f7272ba97392bbf268967641245ed2e74b1e1bf7e0cb45394a33a09f7b8078fcc54ce0c91bbb1911fa94d8d20947d71e8612a8b7717bdd1c55a911ed61a9318ad15b103c1d9ef74a1eb1d37fa7f56f743a35dae3d8b945bff9ffb3a89a616a12de8007e9b648b5bece4ae4375953805c1aad38d93091483fde7adce195457a1c5c9500428b9744b2efe35b5ab715667c3601183115052b8853dd2bc0a3a4a67754a02289f7717ce4761c9ec088f28fc6a76cb147a525d76eb1f4883a5aac80ed7758dd8f1d25154adfc5cd0fefcb569978079c8b9f7781146bee7b7c97ccf1ba7204f22a0432056ace81e8096b5f0f2a035b1fc20645b7181ef36c1d379be4e0fb9242417ffafd24208af5f2ad485d8cdef02f5ddefa75603775f828a3b474b4cead4682713784f27f9c120bea5c1d8a5e62a55b9070ebae41ea18f0ce4d349802ac4a8c9e6a8fc9b7d6ca27ba2d0cd58a51a8964d5719341b68290406bbc6eb2e6f5aa9c4a7c61ad59d9c14a129137a727bc5f471de53d9b50f85009175724ff21092d1645875a4a7cb9f70782c7912408ba484a1d19ce3db91135cf1bbc7d2b14c4b10f48b1a6b643dc91d0c1c14af92d572eeb6ebb967b87931a6409f4a2acde01151758cc6b76172b71dfce3833c6f3c3d9725405f9a8b0bc13a7cc11c49c9fe124514ad6e1c95e34162054c5d80d1b5f46d802b1ccfd12e3805f1a80c5d83edc72904d488024c73709886901a0be5c2ca2951112654592fde710db9acdf44964d9f3ead7eac545fb85c5879565060f610faaa10f434274e9d0c191f040d1ba6263872625e73aba20fe311a65f577de694cdfd628f7bbe3939e237cb078198207fcdbd0409aecbc095bf6b24679b8423d33f2e71080ddfb863a8ed566ff65cf1f55634d04aa93ad4fdbddd579d004cee8afc47b1fcb917eb3fd5956424bd46deaf324090c4834d1a67dc16b9e3127612e1e556ac66366d49bdeef7a186be01906debc674864f9fec2687e3779990d7fbcc988212530addf1a7e6d54302d4d66a0ae4b7ca073f5cbfbcd91dcc853b8ce67b68bb6af65bb59e0639c5fba2969b203a02ca67ad0225bf70608445ea81e6a315c894b04289aea79997e3f80ece73f305fe0e9f4b88ee892f55a4789cb3f1aead5d516657cf40577d2e2def6bf3f2c45620d9e22177fc6c3983f25d6249def2cc5284e95e4ac5bcb0b3ab7d032684341af204a8b65fd0b60aa3f76439cd746a33fb2e68cf4ff79d793b80c9f432172fc0e1f089c223748ac0623648dc3ccf30a2e4873cecff716223751c0da000000000000000000000000000000000000000000000000000000000002060d11141a"
  }
}
