{"schema":"nisayon.public-system.v1","publication":"recorded evidence","execution_connected":false,"interfaces":[{"name":"project_context","kind":"tool","description":"Get current Git state, handoff, recent notes/checkpoints, and the next-work queue.","parameters":"","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":33}},{"name":"project_map","kind":"tool","description":"Locate the architecture, experiment plan, code, tests, and shared memory.","parameters":"","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":39}},{"name":"project_search","kind":"tool","description":"Search non-ignored project files with literal, case-insensitive ripgrep.","parameters":"query: str, limit: int=30","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":45}},{"name":"project_read","kind":"tool","description":"Read a bounded, line-numbered slice of a project source/document file.","parameters":"path: str, start_line: int=1, limit: int=160","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":51}},{"name":"memory_add","kind":"tool","description":"Append a sourced note; optionally supersede a prior note while retaining its history.","parameters":"title: str, body: str, kind: str='finding', status: str='proposed', sources: list[str] | None=None, supersedes: str | None=None","access":"append","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":57}},{"name":"memory_search","kind":"tool","description":"Find shared notes by all query terms. Superseded notes are excluded by default.","parameters":"query: str='', limit: int=10, include_superseded: bool=False","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":72}},{"name":"checkpoint_save","kind":"tool","description":"Save progress, next action, open questions, references, and current Git state.","parameters":"summary: str, next_action: str, open_questions: list[str] | None=None, references: list[str] | None=None, session: str='agent'","access":"append","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":80}},{"name":"checkpoint_list","kind":"tool","description":"Read the ten newest checkpoints without overwriting another session's work.","parameters":"","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":94}},{"name":"run_list","kind":"tool","description":"List recorded command runs; execution completion is not scientific acceptance.","parameters":"limit: int=10","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":100}},{"name":"run_inspect","kind":"tool","description":"Read run metadata and bounded stdout/stderr tails, including failed attempts.","parameters":"record_id: str, tail_chars: int=3000","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":106}},{"name":"workspace_doctor","kind":"tool","description":"Check dependencies, configuration files, clients, and launchers without invoking models.","parameters":"","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":112}},{"name":"nisayon://context","kind":"resource","description":"Read the context resource resource.","parameters":"","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":118}},{"name":"nisayon://architecture","kind":"resource","description":"Read the architecture resource resource.","parameters":"","access":"read","transport":"local stdio MCP","available_on_website":false,"source":{"path":"src/nisayon/mcp_server.py","sha256":"d4e8f3400d6e30070634d6db23886106527d56859f312cdbc7c1e415f96eb47f","byte_length":4629,"line":123}}],"modules":[{"name":"nisayon.engine.agent_diagnostics","description":"Finite model-directed diagnostic requests over the existing Lift executor.\n\nOnly the parent executes interventions, enforces budgets and selects an eligible\nconfirmation candidate. A model response cannot fabricate an execution or an\nacceptance. This module does not author incidents or read reserved answers.","source":{"path":"src/nisayon/engine/agent_diagnostics.py","sha256":"4e2ab720175ece8b5440359e032aa6da08e4b942f44623a7a7c36818105f7385","byte_length":17286},"entries":[{"name":"response_schema","kind":"function","line":42},{"name":"checked_repair","kind":"function","line":77},{"name":"public_run","kind":"function","line":100},{"name":"diagnose","kind":"function","line":114}]},{"name":"nisayon.engine.assets","description":"One public frozen policy; verify bytes before loading the upstream pickle.","source":{"path":"src/nisayon/engine/assets.py","sha256":"abe702190c390bee65d3cb52b8887006ffaf1718f5082b4d061c528b09a645a9","byte_length":2356},"entries":[{"name":"translate_checkpoint","kind":"function","line":17},{"name":"prepare_policy","kind":"function","line":34}]},{"name":"nisayon.engine.bounded_agent","description":"A finite JSON decision call for a development experiment, not a general planner.\n\nThe parent owns execution and acceptance. The model can inspect only its public\npacket using a restricted CLI permission profile. Native integrations, inherited\nshell credentials, project instructions and host skill discovery are disabled.\nEach call has its own command record; tokens come only from that call's events.","source":{"path":"src/nisayon/engine/bounded_agent.py","sha256":"f836ad91c7556b04189b5cf627b099c19a21bd72671445b88a3d2a086b0c31fd","byte_length":5302},"entries":[{"name":"arguments","kind":"function","line":45},{"name":"decide","kind":"function","line":91}]},{"name":"nisayon.engine.budgets","description":"Equal diagnostic ceilings, with attempted slots and observed time explicit.","source":{"path":"src/nisayon/engine/budgets.py","sha256":"9905bb0fc79da3512d20bdc16cec5445827c0aae1ba2c2efa4ad175645f580e5","byte_length":2714},"entries":[{"name":"BudgetExceeded","kind":"class","line":11},{"name":"DiagnosticLimits","kind":"class","line":16},{"name":"DiagnosticBudget","kind":"class","line":35}]},{"name":"nisayon.engine.comparison_recovery","description":"Inspect complete and interrupted comparison trials without resuming physics.","source":{"path":"src/nisayon/engine/comparison_recovery.py","sha256":"6e3c94ce021b6b53163cda100ffb4cffeb5ddbd3fe20ba1e40758139ecd95e42","byte_length":4975},"entries":[{"name":"inspect_comparison","kind":"function","line":14},{"name":"main","kind":"function","line":98}]},{"name":"nisayon.engine.conditions","description":"Local development-condition reservations, not an evaluation isolation boundary.","source":{"path":"src/nisayon/engine/conditions.py","sha256":"8126377b8826c83e6bbf8dd8133cea1e2fe75d6960c9b3cf462cad21c236b4bf","byte_length":8804},"entries":[{"name":"evidence_conditions","kind":"function","line":16},{"name":"consumed_history","kind":"function","line":43},{"name":"reserve_fresh","kind":"function","line":119},{"name":"verify_reservation","kind":"function","line":171}]},{"name":"nisayon.engine.configuration","description":"Finite, inspectable deployment changes for development failure families.","source":{"path":"src/nisayon/engine/configuration.py","sha256":"48d3bca1f8cc1a4702277aa313b87aa690273e4fe0c6963f683b42b98191bf1b","byte_length":2977},"entries":[{"name":"Deployment","kind":"class","line":12},{"name":"EpisodePrefix","kind":"class","line":62}]},{"name":"nisayon.engine.confirmation_service","description":"Freeze and execute a shared finite confirmation obligation after selection.\n\nBoth arms use this service. It performs full reruns and retains every assigned\noutcome. Candidate selection is outside the service; acceptance is Fable's.","source":{"path":"src/nisayon/engine/confirmation_service.py","sha256":"e33fb55838702fde52f971a1f541235d0a42c210902942a4bcd0d4f6f363c3d3","byte_length":11271},"entries":[{"name":"assignments_for","kind":"function","line":25},{"name":"history_references","kind":"function","line":65},{"name":"PreparedConfirmation","kind":"class","line":81},{"name":"prepare_confirmation","kind":"function","line":90},{"name":"execute_confirmation","kind":"function","line":194}]},{"name":"nisayon.engine.costs","description":"Keep measured command costs, nested components and missing categories distinct.","source":{"path":"src/nisayon/engine/costs.py","sha256":"92979dfe563c44826b1728f8f3e869fb66d1154f053a580ab4cdd20056aca9e8","byte_length":4633},"entries":[{"name":"aggregate_commands","kind":"function","line":38},{"name":"command_ledger","kind":"function","line":86}]},{"name":"nisayon.engine.development","description":"Run ten assigned development incidents with matched deterministic A/B procedures.\n\nThis is a scripted development ablation, not an isolated agent comparison.\nCandidates for both arms freeze before either arm executes confirmation.","source":{"path":"src/nisayon/engine/development.py","sha256":"12438cc49b8f7b896d293f2c67c00fba6f08e6626e6de213ffe11ce8d5049938","byte_length":18635},"entries":[{"name":"shared_inputs","kind":"function","line":35},{"name":"trial_record","kind":"function","line":65},{"name":"run_assigned_case","kind":"function","line":185},{"name":"retained_history","kind":"function","line":291},{"name":"main","kind":"function","line":298}]},{"name":"nisayon.engine.development_cases","description":"Finite development assignments. Loading them never executes or scores a case.","source":{"path":"src/nisayon/engine/development_cases.py","sha256":"cbe87df824ee327bb93025f571380a663832dfff13236b70aa565788266f8f32","byte_length":4206},"entries":[{"name":"Incident","kind":"class","line":19},{"name":"load_suite","kind":"function","line":95}]},{"name":"nisayon.engine.development_diagnostics","description":"Execute the same finite diagnostic procedure with ordinary or additional checks.","source":{"path":"src/nisayon/engine/development_diagnostics.py","sha256":"03f25f9cb58cc12840e61d001ade677990be02c72ec2b065ee07d8d1a45981c4","byte_length":13489},"entries":[{"name":"plans_for","kind":"function","line":22},{"name":"measured_run_costs","kind":"function","line":53},{"name":"diagnostic_header","kind":"function","line":93},{"name":"diagnose","kind":"function","line":122}]},{"name":"nisayon.engine.diagnostics","description":"Competent ordinary diagnostics and a fixed, inspectable development selector.\n\nThis is a deterministic procedure, not an agent or a root-cause oracle. It uses\nthe configuration differences and measured traces supplied equally to both arms.\nFinal acceptance belongs to the independent-of-selection evaluation service.","source":{"path":"src/nisayon/engine/diagnostics.py","sha256":"39f25cad544052911c7045a0d5a965f5064f24f6f4a0e1b3814c96db8a6e7763","byte_length":11081},"entries":[{"name":"deployment_from_record","kind":"function","line":25},{"name":"configuration_difference","kind":"function","line":35},{"name":"known_correction","kind":"function","line":44},{"name":"separating_probes","kind":"function","line":62},{"name":"ordinary_checks","kind":"function","line":87},{"name":"select_next","kind":"function","line":244}]},{"name":"nisayon.engine.execution_store","description":"Append execution intents before running, then seal immutable measured records.\n\nIntents survive an interruption before a run record is returned. They are not\nclaims that the assigned rollout completed. Recovery reports inspect both.","source":{"path":"src/nisayon/engine/execution_store.py","sha256":"774529c3ddfd2674416e246e08f86a07e832191213cb63fd8e65c5a931417115","byte_length":7130},"entries":[{"name":"ExecutionStore","kind":"class","line":20}]},{"name":"nisayon.engine.family_calibration","description":"Execute declared timing/reset calibration probes; no scored incident claims.","source":{"path":"src/nisayon/engine/family_calibration.py","sha256":"aa8a16883acddc261420c3be3763fdfe8f8902236b30b8014932b97e118454e0","byte_length":8967},"entries":[{"name":"assignments","kind":"function","line":24},{"name":"summarize_run","kind":"function","line":80},{"name":"main","kind":"function","line":99}]},{"name":"nisayon.engine.first_case","description":"Run the finite development case; external evaluation decides acceptance.","source":{"path":"src/nisayon/engine/first_case.py","sha256":"76828320abf16175cfac8a646ebb57291d2465b3cd56d0a09c9bafe977023a0c","byte_length":13383},"entries":[{"name":"qualification","kind":"function","line":43},{"name":"main","kind":"function","line":95}]},{"name":"nisayon.engine.history","description":"Retain explicitly supplied development history instead of ignoring missing inputs.","source":{"path":"src/nisayon/engine/history.py","sha256":"7daee40bd7abbe121295602a9db4d48e1dc53af3d9572cc953b78312aeb3d6a0","byte_length":3054},"entries":[{"name":"retained_confirmation_sources","kind":"function","line":13},{"name":"read_history","kind":"function","line":35},{"name":"retain_history","kind":"function","line":47},{"name":"verify_history","kind":"function","line":67}]},{"name":"nisayon.engine.identity","description":"Bind executions to measured local code, configuration and dependency identities.\n\nThese hashes identify retained bytes and package metadata. They are not remote\nattestation, a complete hash of the operating system, or proof of physical truth.","source":{"path":"src/nisayon/engine/identity.py","sha256":"d5b96fc1cd04beeed40e2578244e95667405e8d568e9cd680cfdd800db152ac4","byte_length":3222},"entries":[{"name":"project_root","kind":"function","line":21},{"name":"code_identity","kind":"function","line":25},{"name":"dependencies","kind":"function","line":53},{"name":"invocation","kind":"function","line":77}]},{"name":"nisayon.engine.integrate","description":"Verify retained execution, then call the evaluation owner's public interface.","source":{"path":"src/nisayon/engine/integrate.py","sha256":"69f674d06b2c670a499ce2d35f39caa4c72127f8adeceac4558f26931e7274ca","byte_length":6878},"entries":[{"name":"evaluator_contract_probe","kind":"function","line":19},{"name":"integrate","kind":"function","line":65},{"name":"main","kind":"function","line":140}]},{"name":"nisayon.engine.io","description":"Strict, portable evidence serialization without a simulator dependency.","source":{"path":"src/nisayon/engine/io.py","sha256":"b2a78c9358f2f4bcc0561761cb7c8fd15c85e58e3626853ece009df48ef684fb","byte_length":869},"entries":[{"name":"canonical_bytes","kind":"function","line":8},{"name":"digest","kind":"function","line":12},{"name":"file_digest","kind":"function","line":16},{"name":"write_json","kind":"function","line":24}]},{"name":"nisayon.engine.joint_case","description":"One command executes the frozen Lift case, integrates decisions and binds costs.","source":{"path":"src/nisayon/engine/joint_case.py","sha256":"d3b6069d4efafc59f24cac399dd549be74bc01afda10cfef7488b9c26bc6b98d","byte_length":4813},"entries":[{"name":"main","kind":"function","line":19}]},{"name":"nisayon.engine.lift","description":"Headless CPU Lift execution with fresh full resets and retained feedback.\n\nThe robomimic checkpoint is used only for policy inference. Its older environment\nwrapper is deliberately bypassed in favour of pinned robosuite's native API.","source":{"path":"src/nisayon/engine/lift.py","sha256":"a97e819fcd1dbd6492a6243081b60230a45776c46e37ef58b77ae4f8241aa3c0","byte_length":20012},"entries":[{"name":"candidate","kind":"function","line":38},{"name":"execute_action","kind":"function","line":50},{"name":"plain","kind":"function","line":65},{"name":"state","kind":"function","line":79},{"name":"recurrent_state","kind":"function","line":103},{"name":"LiftExecutor","kind":"class","line":110}]},{"name":"nisayon.engine.observations","description":"Timestamp actual robosuite sensor calls without changing their values.\n\nSimulator time and host monotonic time are separate clocks. A composite policy\nobservation carries all component acquisition stamps and uses the oldest one\nfor its age obligation. Receiving a cached value does not recapture the sensor.","source":{"path":"src/nisayon/engine/observations.py","sha256":"2f79aa8f80307aaa5703d9813c8c444ce880afb1e1e86d81f4915af09991fc14","byte_length":4009},"entries":[{"name":"SensorStamp","kind":"class","line":17},{"name":"CapturedObservation","kind":"class","line":25},{"name":"SensorRecorder","kind":"class","line":46}]},{"name":"nisayon.engine.qualification","description":"Declared execution premises shared by the measured development families.","source":{"path":"src/nisayon/engine/qualification.py","sha256":"2b4a7513bd41b4d4429317c3a55c1899a400bc49071a485de75a8e95381ab47a","byte_length":1877},"entries":[{"name":"execution_qualification","kind":"function","line":6}]},{"name":"nisayon.engine.qualify_development","description":"Qualify selected diagnostic paths on known development conditions, without confirmation.","source":{"path":"src/nisayon/engine/qualify_development.py","sha256":"10455333d464c1aebe4e4aa17d560c69fc59ab4abb51653656164f7c00d1f5d3","byte_length":2971},"entries":[{"name":"main","kind":"function","line":18}]},{"name":"nisayon.engine.records","description":"First-case JSON interface. These types describe evidence, not its acceptance.\n\nAll times below are seconds. Simulator and host-monotonic clocks are distinct.\nArtifact references resolve against the bundle's explicit artifact_root.","source":{"path":"src/nisayon/engine/records.py","sha256":"1dec267d4c5d7e8579b1bff493fcfe1ae4c1ce063290dc1224c50c9f607b6390","byte_length":3732},"entries":[{"name":"Cost","kind":"class","line":12},{"name":"Artifact","kind":"class","line":19},{"name":"TraceStep","kind":"class","line":24},{"name":"Run","kind":"class","line":55},{"name":"Plan","kind":"class","line":94},{"name":"Case","kind":"class","line":105},{"name":"Confirmation","kind":"class","line":116},{"name":"Bundle","kind":"class","line":126}]},{"name":"nisayon.engine.recovery","description":"Inspect retained complete and interrupted assignments without rerunning them.","source":{"path":"src/nisayon/engine/recovery.py","sha256":"0ae37c53e19cdb66cbe372913daf37bdba06c4716f04be69959bd4b7bcd2b52f","byte_length":6993},"entries":[{"name":"inspect_execution","kind":"function","line":15},{"name":"main","kind":"function","line":138}]},{"name":"nisayon.engine.screen","description":"Freeze the public execution harness; keep reserved trials closed without custody.\n\nThe reusable execution callable is development.run_assigned_case. This module\npackages its exact engine, baseline, budgets, predicates and final-check IDs.\nIt does not create cases, answers, an isolated agent provider or a custody boundary.","source":{"path":"src/nisayon/engine/screen.py","sha256":"e876ba3d02c2bd24b57ed93d7e9394d2068085bf8fd04f6754c63f6dcc510f7a","byte_length":8074},"entries":[{"name":"runtime_capabilities","kind":"function","line":39},{"name":"prepare_package","kind":"function","line":48},{"name":"reserved_readiness","kind":"function","line":95},{"name":"main","kind":"function","line":143}]},{"name":"nisayon.engine.store","description":"Portable, content-bound execution stores with strict relative paths.","source":{"path":"src/nisayon/engine/store.py","sha256":"47ca92d0526cbd8a8298786d1dd20404a6cacb8099e7f536b60d77e869ef8776","byte_length":17899},"entries":[{"name":"resolve_member","kind":"function","line":15},{"name":"create_manifest","kind":"function","line":36},{"name":"verify_manifest","kind":"function","line":53},{"name":"verify_execution","kind":"function","line":96}]},{"name":"nisayon.engine.telemetry","description":"Declared measurement availability at the policy execution boundary.\n\nThe unavailable profile is an explicit development control. It does not claim\nthat this local simulator cannot expose its policy state. Its frozen interface\nsimply does not read or record that state; both comparison arms get the same gap.","source":{"path":"src/nisayon/engine/telemetry.py","sha256":"0eb2668b57167e7da68a02fbcb84b00be3a8cf7e3cde747ff94ed994f379df0e","byte_length":1656},"entries":[{"name":"configuration","kind":"function","line":18},{"name":"capture_policy","kind":"function","line":28},{"name":"policy_digest","kind":"function","line":35}]},{"name":"nisayon.evaluation.bundle","description":"A bundle directory holds one case, its runs, artifacts and confirmation.\n\nLayout::\n\n    bundle/\n      case.json               nisayon.case.v1\n      runs/<run-id>.json      nisayon.run.v1, one per run\n      artifacts/...           trace files referenced by runs, relative to the artifact root\n      confirmation.json       nisayon.confirmation.v1 (optional until a candidate is frozen)\n      prior/*.json            earlier confirmations of the same case (optional)\n\nThe artifact root defaults to the bundle directory and must be explicit when it differs.","source":{"path":"src/nisayon/evaluation/bundle.py","sha256":"90771a4774104c22074b4ddfa74922c8cda22de8b76cd5b2b04f1b526c8826e1","byte_length":2895},"entries":[{"name":"Bundle","kind":"class","line":24},{"name":"load_bundle","kind":"function","line":36}]},{"name":"nisayon.evaluation.case","description":"The case record: identities, declared predicates and repair scope.","source":{"path":"src/nisayon/evaluation/case.py","sha256":"97f766a14084a942fceb8a1f6dfe875ea16418d8de71d6ed86ba8af884f534e0","byte_length":8032},"entries":[{"name":"Threshold","kind":"class","line":32},{"name":"Progress","kind":"class","line":55},{"name":"Timing","kind":"class","line":64},{"name":"Case","kind":"class","line":73},{"name":"parse_case","kind":"function","line":127}]},{"name":"nisayon.evaluation.checks","description":"Per-run assessment: process, measurement validity, task outcome and cost.\n\nThe four layers stay separate. A run can complete as a process and still be an\ninvalid experiment; a valid experiment can show a failed task; neither is an\nacceptance. Producer claims are retained for comparison and never used as\nevidence.","source":{"path":"src/nisayon/evaluation/checks.py","sha256":"817d4828ef6fff64f349b6857834efee399ce00923b958ebaee63d5f250e15b8","byte_length":42534},"entries":[{"name":"Finding","kind":"class","line":78},{"name":"Step","kind":"class","line":99},{"name":"Trace","kind":"class","line":119},{"name":"ArtifactMissing","kind":"class","line":126},{"name":"DigestMismatch","kind":"class","line":130},{"name":"parse_trace","kind":"function","line":250},{"name":"TraceStore","kind":"class","line":274},{"name":"RunAssessment","kind":"class","line":315},{"name":"assess_run","kind":"function","line":968}]},{"name":"nisayon.evaluation.codes","description":"Reason codes for evaluation findings.\n\nEach code has one severity. A decision takes the strongest severity among the\nfindings that bear on it: ``invalid`` (the experiment or protocol cannot answer\nthe question), ``rejected`` (a valid observation shows an obligation failed),\n``unresolved`` (a named gap prevents a decision) or ``info`` (retained context).","source":{"path":"src/nisayon/evaluation/codes.py","sha256":"d6e0e7889e29ad546c942584452d27acca4c68b9da2736eb9fbbdcf1d15dd016","byte_length":8934},"entries":[{"name":"strongest","kind":"function","line":206}]},{"name":"nisayon.evaluation.confirmation","description":"The finite confirmation obligation for the first case.\n\nA frozen candidate, the case's declared predicates, fresh conditions, paired\nreference and candidate runs, and every assigned outcome. Dropping a failure,\nreusing a condition, or changing the candidate after the freeze voids the\nconfirmation; a valid failure rejects the candidate; a gap leaves it unresolved.","source":{"path":"src/nisayon/evaluation/confirmation.py","sha256":"a8b3e17c550df6e82dea625088aab76c61218bf118a4f92a4aeec0929120aaac","byte_length":23559},"entries":[{"name":"Pair","kind":"class","line":43},{"name":"ConfirmationAssessment","kind":"class","line":59},{"name":"assess_confirmation","kind":"function","line":128}]},{"name":"nisayon.evaluation.controls","description":"Run every synthetic scenario through the evaluator and compare with its expectation.","source":{"path":"src/nisayon/evaluation/controls.py","sha256":"b973bff6879c59f193c6ff93069a913d90a89c7f2cc2b7802982b28dbddcfcbe","byte_length":2143},"entries":[{"name":"check_scenario","kind":"function","line":12},{"name":"run_controls","kind":"function","line":39}]},{"name":"nisayon.evaluation.decision","description":"Combine run assessments and the confirmation into one scoped decision.","source":{"path":"src/nisayon/evaluation/decision.py","sha256":"8f1ca09cf390fab8cd877f7ad0b7b12d26412d6d4ed907567e842bb876b1a56f","byte_length":44709},"entries":[{"name":"evaluator_sources_sha256","kind":"function","line":29},{"name":"aggregate_costs","kind":"function","line":45},{"name":"violates","kind":"function","line":140},{"name":"candidate_verdicts","kind":"function","line":156},{"name":"expand_history","kind":"function","line":204},{"name":"retained_protocols","kind":"function","line":438},{"name":"unreadable_history","kind":"function","line":470},{"name":"consumed_from_history","kind":"function","line":498},{"name":"history_consumption","kind":"function","line":503},{"name":"inline_trace_digests","kind":"function","line":550},{"name":"native_bundle_digest","kind":"function","line":563},{"name":"evaluate_loaded","kind":"function","line":644},{"name":"evaluate_bundle","kind":"function","line":1034}]},{"name":"nisayon.evaluation.first_case","description":"Adapter for execution-lane bundles (``nisayon.first_case.v1``).\n\nCodex's runner writes one JSON document, optionally gzip-compressed, holding\nthe case, qualification, plans, every run with an inline compact trace and an\noptional confirmation. This module translates that document into the\nevaluator's records without changing its meaning, verifies what the document\nlets us verify (observation and state chains, acquisition stamps, raw artifact\ndigests and manifests, the frozen protocol, repeated runs) and derives the\ninvalid-replay control from a retained run. Translation choices are recorded in\nthe decision's ``producer`` section so a reader can check them.\n\nThe obligation version is read from the frozen protocol (``protocol_id``) or\nthe producer's predicates. Version 0.1 records are evaluated against what they\ndeclared; the stricter version 0.2 requirements are reported as limitations,\nnever applied retroactively.","source":{"path":"src/nisayon/evaluation/first_case.py","sha256":"b226b518cfa7a6c85e68e76b2604ca4ef59e4838b0530b571663a4653d77baa4","byte_length":90629},"entries":[{"name":"producer_digest","kind":"function","line":129},{"name":"deployment","kind":"function","line":136},{"name":"known_deployments","kind":"function","line":149},{"name":"execute_action","kind":"function","line":153},{"name":"read_document","kind":"function","line":169},{"name":"write_document","kind":"function","line":182},{"name":"is_first_case","kind":"function","line":194},{"name":"sim","kind":"function","line":204},{"name":"wall","kind":"function","line":208},{"name":"deployment_components","kind":"function","line":216},{"name":"deployment_label","kind":"function","line":255},{"name":"obligation_version","kind":"function","line":264},{"name":"translate_predicates","kind":"function","line":278},{"name":"translate_case","kind":"function","line":417},{"name":"translate_steps","kind":"function","line":503},{"name":"translate_step","kind":"function","line":635},{"name":"translate_run","kind":"function","line":924},{"name":"translate_confirmation","kind":"function","line":1361},{"name":"locate_frozen_protocol","kind":"function","line":1529},{"name":"verify_frozen_protocol","kind":"function","line":1536},{"name":"load_manifest","kind":"function","line":1691},{"name":"load_cost_ledger","kind":"function","line":1796},{"name":"translate","kind":"function","line":1919},{"name":"evaluate_first_case","kind":"function","line":2129},{"name":"replay_control","kind":"function","line":2170}]},{"name":"nisayon.evaluation.ledger","description":"The evaluation lane's own cost ledger: measured evaluation walls, nothing invented.","source":{"path":"src/nisayon/evaluation/ledger.py","sha256":"c9ce218ea26977097e91fc52478032a3f60cba7d7711cea81e12be288aa80e34","byte_length":3801},"entries":[{"name":"evaluation_ledger","kind":"function","line":30}]},{"name":"nisayon.evaluation.package","description":"Checks on the execution lane's screen package (``nisayon.screen.execution-package.v1``).\n\nThe package freezes the sources, obligation and budgets a future reserved screen would\nrun under. These checks say whether the evaluator it binds is the evaluator in this\ncheckout, whether the obligation it names is the evaluator's, and which capabilities a\nreserved screen still lacks. They run nothing and establish no custody.","source":{"path":"src/nisayon/evaluation/package.py","sha256":"a9d304ce4e2806cc7a9854ebb5c1274b3ee78c2fce73afa022dbced9e75ca557","byte_length":8094},"entries":[{"name":"check_package","kind":"function","line":45},{"name":"render_package","kind":"function","line":174}]},{"name":"nisayon.evaluation.report","description":"Plain-text rendering of decisions and control summaries.","source":{"path":"src/nisayon/evaluation/report.py","sha256":"86a170d87f1e021b97ac81910a83c307327c11f5f884938be902308465a50477","byte_length":5990},"entries":[{"name":"finding_codes","kind":"function","line":6},{"name":"render_text","kind":"function","line":16},{"name":"render_controls","kind":"function","line":112}]},{"name":"nisayon.evaluation.reserved","description":"Checks for a future reserved evaluation, on openly labelled development examples.\n\nNothing here creates reserved answers, and nothing here is custody. The checks say\nwhether a sealed manifest, a comparison ledger and the retained development history\nare consistent with a reserved screen: complete assignments, no leaked case, a\nprotocol and retrieval cutoff frozen before sealing, and a custody statement that\nkeeps the solver away from the answers. A missing custody boundary is a named gap\nthat leaves the reserved trial unrun.","source":{"path":"src/nisayon/evaluation/reserved.py","sha256":"e933e81b0504e5c4ad6c148cc9985c1e701029c62bdef452c2f5cedcda7661e4","byte_length":12995},"entries":[{"name":"parse_manifest","kind":"function","line":54},{"name":"development_identifiers","kind":"function","line":112},{"name":"check_reserved","kind":"function","line":156},{"name":"render_reserved","kind":"function","line":324}]},{"name":"nisayon.evaluation.retained","description":"An index of the retained decisions and scores in a results directory.\n\nA row repeats what the retained file says; it is a table of contents, not new evidence.","source":{"path":"src/nisayon/evaluation/retained.py","sha256":"b363807f31de11b5acf9753d236440f117d45020991faac9c0995afc89aeb86d","byte_length":6645},"entries":[{"name":"collect_index","kind":"function","line":34},{"name":"render_index","kind":"function","line":118}]},{"name":"nisayon.evaluation.schema","description":"Strict parsing helpers for exchange records.\n\nRecords are plain JSON. Numbers must be finite; unknown values use explicit\nmissingness; timestamps carry a clock domain and unit. Anything else is\n``Malformed`` with the path that failed, so a producer can find it.","source":{"path":"src/nisayon/evaluation/schema.py","sha256":"5d9728911ec9376f9b321932596097b1eb567e7bc0b59b8c532833e0ce4f01a7","byte_length":6930},"entries":[{"name":"Malformed","kind":"class","line":22},{"name":"load_json","kind":"function","line":35},{"name":"canonical_json","kind":"function","line":51},{"name":"digest_of","kind":"function","line":58},{"name":"sha256_bytes","kind":"function","line":62},{"name":"mapping","kind":"function","line":66},{"name":"sequence","kind":"function","line":72},{"name":"require","kind":"function","line":78},{"name":"string","kind":"function","line":84},{"name":"optional_string","kind":"function","line":93},{"name":"finite","kind":"function","line":101},{"name":"integer","kind":"function","line":109},{"name":"boolean","kind":"function","line":117},{"name":"string_list","kind":"function","line":124},{"name":"number_list","kind":"function","line":132},{"name":"Quantity","kind":"class","line":137},{"name":"parse_quantity","kind":"function","line":151},{"name":"parse_duration","kind":"function","line":169},{"name":"parse_sim_time","kind":"function","line":177},{"name":"parse_wall_time","kind":"function","line":187}]},{"name":"nisayon.evaluation.scoring","description":"Score an arm comparison ledger (``nisayon.comparison.v1``) without re-running anything.\n\nThe scorer checks that the comparison was fair, counts what happened to every\nassigned case per arm, and aggregates costs without inventing missing ones.\nIt reports no ratio between arms; the reader draws the comparison under the\nstated unknowns.","source":{"path":"src/nisayon/evaluation/scoring.py","sha256":"8971815f04fa34a540c6b668741432afde7e0671fe78d397f11c536adebe2e05","byte_length":40465},"entries":[{"name":"score_comparison","kind":"function","line":339},{"name":"score_file","kind":"function","line":849},{"name":"render_score","kind":"function","line":855}]},{"name":"nisayon.ui_export.bytes","description":"Bounded bytes, exact-byte identities and strict JSON for the static boundary.","source":{"path":"src/nisayon/ui_export/bytes.py","sha256":"239120ba4a8e8ba2b0bacb58ec9c3f2cca1455d5889cf4a1d7afc632ddedd615","byte_length":2993},"entries":[{"name":"ExportError","kind":"class","line":14},{"name":"sha256","kind":"function","line":18},{"name":"canonical","kind":"function","line":22},{"name":"finite","kind":"function","line":29},{"name":"parse","kind":"function","line":53},{"name":"read","kind":"function","line":64},{"name":"decompress","kind":"function","line":72},{"name":"inside","kind":"function","line":80},{"name":"check_bytes","kind":"function","line":95}]},{"name":"nisayon.ui_export.contract","description":"Version-one wire objects. Numerical readings retain their source precision.","source":{"path":"src/nisayon/ui_export/contract.py","sha256":"b3fa8434fd6b32340ce852dde0a4abd230974c385a7dab6975af2bab281a2864","byte_length":6737},"entries":[{"name":"Wire","kind":"class","line":14},{"name":"FileRef","kind":"class","line":18},{"name":"Source","kind":"class","line":27},{"name":"Locator","kind":"class","line":36},{"name":"RunKey","kind":"class","line":42},{"name":"Memory","kind":"class","line":47},{"name":"Sample","kind":"class","line":56},{"name":"Samples","kind":"class","line":70},{"name":"Node","kind":"class","line":76},{"name":"Site","kind":"class","line":82},{"name":"Geom","kind":"class","line":88},{"name":"Model","kind":"class","line":96},{"name":"Convention","kind":"class","line":109},{"name":"Frame","kind":"class","line":118},{"name":"Reconstruction","kind":"class","line":129},{"name":"Finding","kind":"class","line":142},{"name":"Run","kind":"class","line":156},{"name":"Decision","kind":"class","line":178},{"name":"Case","kind":"class","line":194},{"name":"CaseRef","kind":"class","line":211},{"name":"Manifest","kind":"class","line":217},{"name":"Discovery","kind":"class","line":228},{"name":"Integrity","kind":"class","line":233},{"name":"LibraryEntry","kind":"class","line":238},{"name":"Library","kind":"class","line":245},{"name":"json_schema","kind":"function","line":258}]},{"name":"nisayon.ui_export.exporter","description":"Export a small real generation before extending the recorded case library.","source":{"path":"src/nisayon/ui_export/exporter.py","sha256":"1e5aaa60e65ffc9469407cca36461a46ad0531c2a272fc9cdad0af6f991f00a8","byte_length":12781},"entries":[{"name":"Store","kind":"class","line":15},{"name":"memory_state","kind":"function","line":64},{"name":"sample","kind":"function","line":72},{"name":"findings","kind":"function","line":106},{"name":"sample_indexes","kind":"function","line":157},{"name":"export_runs","kind":"function","line":179},{"name":"export_d01","kind":"function","line":236}]},{"name":"nisayon.ui_export.kinematics","description":"Configuration-only MuJoCo derivation; no simulation, collision or inference.","source":{"path":"src/nisayon/ui_export/kinematics.py","sha256":"f5bdf6efad8c8e205f6dd2b82d272cd9c2de60657b6889a67e7b4676027bb117","byte_length":7868},"entries":[{"name":"Kinematics","kind":"class","line":11}]},{"name":"nisayon.ui_export.library","description":"The six admitted, already observed development cases and their frozen decisions.","source":{"path":"src/nisayon/ui_export/library.py","sha256":"e69d2619ec2a1439b637866300e53fe39eb8e9c52a77d5e7307a122c72c311eb","byte_length":15582},"entries":[{"name":"Archive","kind":"class","line":29},{"name":"confirmation_projection","kind":"function","line":109},{"name":"replay_decision_source","kind":"function","line":200},{"name":"export_case","kind":"function","line":251}]},{"name":"nisayon.ui_export.selection","description":"Exact recorded-time comparison. No interpolation, clamping or future extension.","source":{"path":"src/nisayon/ui_export/selection.py","sha256":"878696504e83c52379e2c387c58c0100cba3c0a581946aa55ffaf4fd4a3cb0ec","byte_length":1587},"entries":[{"name":"align","kind":"function","line":7}]},{"name":"nisayon.ui_export.semantics","description":"Cross-object bindings. These checks never choose an experiment decision.","source":{"path":"src/nisayon/ui_export/semantics.py","sha256":"c1ae8592c018064a2ea71dd7cc18d1f0a650a7658a4657570859e2d8057086b4","byte_length":5341},"entries":[{"name":"require","kind":"function","line":6},{"name":"check_context","kind":"function","line":11}]},{"name":"nisayon.ui_export.source","description":"Admit retained bytes before deriving a display. No acceptance logic lives here.","source":{"path":"src/nisayon/ui_export/source.py","sha256":"d19710878c09d48787615c8ad20cced52526c22a97bba6b6ecf293832900044c","byte_length":7607},"entries":[{"name":"producer_digest","kind":"function","line":21},{"name":"Sources","kind":"class","line":27},{"name":"admit_bundle","kind":"function","line":50},{"name":"admit_raw","kind":"function","line":78},{"name":"admit_row","kind":"function","line":111},{"name":"project_private_paths","kind":"function","line":146},{"name":"admit_decision","kind":"function","line":162}]},{"name":"nisayon.ui_export.validate","description":"Validate the static trust boundary and exact moment locators, without a simulator.","source":{"path":"src/nisayon/ui_export/validate.py","sha256":"843aed34147ee358c579e219ae813f9b707f2b218069b995ce00821f428d5f3f","byte_length":17638},"entries":[{"name":"load_object","kind":"function","line":31},{"name":"validate_generation","kind":"function","line":45},{"name":"select","kind":"function","line":391}]}],"http":[{"method":"GET","path":"/api/engine.json","purpose":"Source-derived inventory of the local engine and its interfaces"},{"method":"GET","path":"/fixtures/ui/recorded/library.json","purpose":"Published experiment catalog and exact generation references"}]}
