From 952a6ea168cda8246541dc6e871545016c9a72e3 Mon Sep 17 00:00:00 2001 From: Coding-Dev-Tools <274649000+Coding-Dev-Tools@users.noreply.github.com> Date: Fri, 25 Sep 2026 04:34:07 -0400 Subject: [PATCH 1/6] fix(graph): stabilize evidence projection and capacity errors Publish renderer-safe evidence mass and relation weight without changing scene identity, keep historical ghosts at zero mass, use visual weight for zero-strength history edges, and expose GRAPH_CAPACITY consistently across graph APIs. Remove duplicate graph-layer normalization and bind the public benchmark registry to the updated source tree with immutable v74 evidence. --- BENCHMARKS.md | 10 +- README.md | 4 +- .../offline-fixtures-v74.json | 690 ++++++++++++++++++ .../offline-fixtures-v74.json.sha256 | 1 + docs/images/context-efficiency.svg | 4 +- .../images/evidence-backed-agent-examples.svg | 4 +- engraphis/classic_assets/dashboard.js | 2 +- engraphis/core/graph_scene.py | 14 +- .../engraphis-graph-every-worker.js | 4 +- .../dashboard_assets/engraphis-graph-every.js | 2 +- engraphis/dashboard_assets/ledger.js | 2 +- engraphis/read_only_api.py | 1 + engraphis/routes/v2_api.py | 1 + engraphis/service.py | 16 - engraphis/static/dashboard.js | 2 +- tests/test_benchmark_evidence.py | 4 +- tests/test_documentation_contracts.py | 2 +- tests/test_graph_engine_asset.py | 2 +- tests/test_graph_every_asset.py | 28 + tests/test_graph_explorer_v2.py | 3 + tests/test_graph_scene_contract.py | 16 +- tests/test_read_only_api.py | 18 +- 22 files changed, 784 insertions(+), 46 deletions(-) create mode 100644 docs/benchmark-evidence/offline-fixtures-v74.json create mode 100644 docs/benchmark-evidence/offline-fixtures-v74.json.sha256 diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 6a6a6ed9c..5e17f8db8 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -94,14 +94,14 @@ interpretation and do not count as additional benchmark-quality gains. ### Public numeric evidence registry Every exact public aggregate retained below comes from the checked-in, public-safe -[`offline-fixtures-v73.json`](docs/benchmark-evidence/offline-fixtures-v73.json) artifact. Its +[`offline-fixtures-v74.json`](docs/benchmark-evidence/offline-fixtures-v74.json) artifact. Its SHA-256 is -`aa7ed9c141afcc82fc2a05b63ed9037842f2ea8372667f3142cf9bb795833988`, also recorded in the +`7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a`, also recorded in the adjacent `.sha256` file. The artifact contains no raw questions, answers, prompts, customer data, or per-record content fingerprints. The fixture-suite digest is -`c60a48ea025c5c0ebfdacb68c38f068fc032f05b202e5c192a9223211cf30bf1`. The artifact defines +`e1fab68ff98f23cc0590344047c2bd18c19060d5297d2a753f6d079955f2a2f6`. The artifact defines the digest algorithm and records the SHA-256 of every suite and dataset file. Each evidence ID also binds its exact command through `sha256(UTF-8 exact command)`: @@ -123,10 +123,10 @@ Historical LoCoMo, graph, handoff, consolidation, and security figures remain pr source artifacts but are omitted from the current chart until each has a matching immutable, public-safe artifact. The chart labels coding outcomes, external datasets, and operational capacity as pending evaluation tracks rather than implying scores. Regenerate it with -`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v73.json --output docs/images/context-efficiency.svg` after selecting the report to publish. +`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v74.json --output docs/images/context-efficiency.svg` after selecting the report to publish. The companion examples are also generated from that artifact with -`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v73.json --output docs/images/evidence-backed-agent-examples.svg`. +`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v74.json --output docs/images/evidence-backed-agent-examples.svg`. The historical-to-executable mapping is in [`docs/BENCHMARK_CHANGE_COVERAGE.md`](docs/BENCHMARK_CHANGE_COVERAGE.md). diff --git a/README.md b/README.md index 62d36693e..e120759ff 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,9 @@ neither is an end-to-end question-answer score. Coding outcomes, external datase operational capacity remain separate pending evaluation tracks until their artifacts are selected. These values are evidence IDs `offline-chunking` and `offline-performance` in -[`offline-fixtures-v73.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v73.json), +[`offline-fixtures-v74.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v74.json), SHA-256 -`aa7ed9c141afcc82fc2a05b63ed9037842f2ea8372667f3142cf9bb795833988`. +`7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a`. [`BENCHMARKS.md`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/BENCHMARKS.md#public-numeric-evidence-registry) records the matching suite digest, exact commands, and per-command config digests. The offline fixture registry intentionally excludes external, model-dependent, consolidation, productivity, diff --git a/docs/benchmark-evidence/offline-fixtures-v74.json b/docs/benchmark-evidence/offline-fixtures-v74.json new file mode 100644 index 000000000..4f19209f3 --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v74.json @@ -0,0 +1,690 @@ +{ + "environment": { + "embedding": "deterministic", + "numpy": "2.4.5", + "platform": "win32", + "python": "3.12.10", + "vector_backend": "numpy" + }, + "generated_on": "2026-09-25", + "privacy": { + "contains_answers": false, + "contains_customer_data": false, + "contains_per_record_fingerprints": false, + "contains_prompts": false, + "contains_raw_questions": false + }, + "runs": [ + { + "boundary": "Deterministic offline retrieval fixture; normalized-character token estimator; not external QA or provider billing.", + "command": "python -m eval.chunking_eval --dataset eval/datasets/longdoc.jsonl --k 5", + "config_digest": "c1c8196aa7e1568ef3844a9fb2d76b87f342c39108e32d6ad144b885a76143b8", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-chunking", + "result": { + "chunked": { + "max_stored_tokens": 59, + "mean_context_tokens": 214.3, + "mean_evidence_tokens": 42.4, + "memories": 24, + "recall_at_k": 1.0 + }, + "context_reduction_pct": 71.1, + "documents": 6, + "k": 5, + "questions": 18, + "token_counter": "engraphis.chars4.v1", + "whole": { + "max_stored_tokens": 213, + "mean_context_tokens": 740.3, + "mean_evidence_tokens": 162.2, + "memories": 6, + "recall_at_k": 1.0 + } + } + }, + { + "boundary": "Deterministic offline CodeMem fixture; serialized JSON-shape payload proxies, not MCP transport responses, provider billing, or latency claims.", + "command": "python -m eval.performance --dataset eval/datasets/codemem.jsonl --k 5 --iterations 10 --json", + "config_digest": "bbe4aca81e58d4830e50a8fc7729a1d15b71d97a6299bccd79432b7f119677d7", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-performance", + "result": { + "answer_token_recall": 1.0, + "compact_serialized_payload_tokens": 11138, + "dataset_cases": 14, + "full_serialized_payload_tokens": 24590, + "hit_at_k": 1.0, + "k": 5, + "max_context_tokens": 108, + "mean_context_tokens": 85.38, + "memories": 44, + "packed_quality": { + "answer_token_recall": 1.0, + "hit_at_k": 1.0, + "recall_at_k": 1.0, + "sample_count": 26 + }, + "payload_boundary": { + "kind": "serialized_json_shape_proxy", + "mcp_envelope_serialized": false, + "token_counter": "engraphis.regex.v1", + "transport_measured": false + }, + "quality_scope": { + "packed": "packed_quality fields score only chunks admitted to reader context", + "retrieved": "legacy quality fields score all candidate chunks returned before context packing" + }, + "questions": 26, + "recall_at_k": 1.0, + "saved_serialized_payload_tokens": 13452, + "serialized_payload_savings_ratio": 0.5471, + "timed_recalls": 260, + "token_budget": 1500, + "token_counter": "engraphis.regex.v1" + } + }, + { + "boundary": "Deterministic offline support/abstention fixture; not a frontier-model answer-quality score.", + "command": "python -m eval.grounded", + "config_digest": "590442e51e3642c10489165759919dc86ffac62c182937330c153e7f8d5fc26f", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-grounded", + "result": { + "abstained": 6, + "answerable": 5, + "decision_accuracy": 1.0, + "grounded": 5, + "off_topic": 6, + "quarantine_hits": 1, + "quarantined": 1 + } + } + ], + "schema": "engraphis-public-offline-fixtures/v1", + "suite": { + "digest": "e1fab68ff98f23cc0590344047c2bd18c19060d5297d2a753f6d079955f2a2f6", + "digest_method": "sha256(canonical compact JSON mapping each sorted path to its file SHA-256)", + "files": { + "engraphis/__init__.py": "a2c5d147ea025e6249d99f4ae2752576c8b1df382393ec450a3ef1b03fcf315a", + "engraphis/ai_context.py": "4dfd5d39eb95d05c591d1981e9e855eced73232f53efd9fe9966e0e08957d030", + "engraphis/app.py": "44d68ad8c0ff46baed01978c9b04e40b8be5031609d5a69e205b7f05da3777fb", + "engraphis/backends/__init__.py": "a9f22b9278362904166614081f1df78469d453601b298ce4e8afdba8a3722b25", + "engraphis/backends/codegraph.py": "83e723a91068d23694092fbe00157fcb2597061d453eb36f955bf55bc5b4d35e", + "engraphis/backends/embedder_api.py": "56a6bceea4f757325dcea987b0339e41d3875634b1ae5103f0537a358cf5878b", + "engraphis/backends/embedder_deterministic.py": "ec8b23de7e7e8273416125f5876ca96f55e4ae7881841bae55783ab0ba9130ad", + "engraphis/backends/embedder_st.py": "e1c20fd980e07060387e3f9fa37fe02a916959fc8abce4e6067a62699c726de1", + "engraphis/backends/encrypted_db.py": "25f6c1480d296a88f317213700a8b3c81e2732399bfac464b0d893465b25e846", + "engraphis/backends/extractor.py": "f2e3455ab7f14caee1d5b5c4ef071e498e90118f1b0ddcb8510c969583b0fc57", + "engraphis/backends/graph_extractor.py": "88561efa0d3fabc447a0a005b10e36261379d46218cf62d905e6928cd2fda676", + "engraphis/backends/model_source.py": "8c3c7681f95214a2bbabd8de222e5ee11f42fe13402d27365654ae75fb363d4e", + "engraphis/backends/postgres_schema.py": "8468578c3add701d30d5eaa36d768ded2375d116e55f1836e09f6107a07a267e", + "engraphis/backends/query_planner.py": "bbdd77afc9b5523421b85b2ae63c8da7f5a7b777265450e0d21708a83e7bb23c", + "engraphis/backends/reranker.py": "747761d6cbfa421388974bcfd98d844f92391d80f4bf6a4feca00b0c7a6908ca", + "engraphis/backends/resources.py": "47cc867c3aecc8bd95fa284bc5bb04715f3339c19a0a11512973ef6171c95944", + "engraphis/backends/retention.py": "381d9371e3951d762f8b55eb54711de5697642acb39de99a714f246c059ecbd0", + "engraphis/backends/sync_folder.py": "e4f70a92a17f6a365910670df041e6e3ca421d44ada2827917cd66b4dc067bfa", + "engraphis/backends/sync_relay.py": "b8b9ad265453aba17ba7c27a355e12a793469b3e44cb217943c6fad9382a3006", + "engraphis/backends/vector_numpy.py": "c598831bea547824cfe08844816fa79857d3617cb0631238f95dad955a424f72", + "engraphis/backends/vector_sqlitevec.py": "6148e14ceaacc19239b64c642a3fba0e98797c78cec356210157afadf475a08b", + "engraphis/build_info.py": "624c22471e56d4c4047160808c4245488292af611564d1a63ca437605bbb414f", + "engraphis/classic_assets/__init__.py": "a7c1d52b285e3faa670ce231814b5758754aa0fbd05e1428e74c20c3ec51a4f1", + "engraphis/cloud_authz.py": "e80500579cb3a1d5fbf30814dc94e3e3967e50b311e8ed2fa56afcc13f7eb565", + "engraphis/cloud_features.py": "90e876f8993d99f01760cd01ae9fb63140e3f65036706e8fb0c8224560416330", + "engraphis/cloud_session.py": "7c83d7b85665c05aa4da2597a6b4ad2b951f1f8f4af20105d9d1750b9b123c2d", + "engraphis/commercial.py": "184f312066a9e682e51a0abeff042f1c0e8eed2d47470157b23930b5a17633aa", + "engraphis/config.py": "a46f3a335fad343e7df32942be91c04094fbafaf14b8b11f5fc433ef74743226", + "engraphis/core/__init__.py": "dd5143729c3939237f04636f437032b1f2d3a5f7d82c91bbc2a5a283c3f0ebaa", + "engraphis/core/adaptive_context.py": "cc5ce48109bb0d5230a5b2b8424b829c853feec5b5d5b82596413f2279b0c9f9", + "engraphis/core/browsing.py": "cfae752d52ef51b17c4ffbe44dde62d5b0e1ed0ca34ec0e1788f3991d94bf05f", + "engraphis/core/codegraph_export.py": "4641074258d7b23498f92dd45053a0fbb111863eaad2001c08e5e3c2dc2fd54f", + "engraphis/core/conflicts.py": "28530be25a4af0bffd8f609b965b33ca7f93199a70887789b2148fda8a61a486", + "engraphis/core/consolidate.py": "f66eedfe08319a64b761261ccf1c99b163eba564d6d4060534bf8c575aecf232", + "engraphis/core/context.py": "8cc15746e4de88bce7d34db8c11dfaa545f17305788e2167a286179171717fb9", + "engraphis/core/diagnostics.py": "5ba449bdf5087d8ccb5808379596e695c8f405da497372e99f2bac509f96e8e4", + "engraphis/core/documents.py": "84385db39ba44e06b58b4b26dbf954228ff4abed7230f28a7280166fa6457861", + "engraphis/core/engine.py": "f1ab3940f7a185f1e12b1a0b49857db8873c83313e8741822a3c80d818e59599", + "engraphis/core/evidence.py": "97912b52a3d22de909218f83c09c92572ed695d7b3c2117e5330271c6d84a7bd", + "engraphis/core/fsutil.py": "6db770fa8bd3e1a57dfa70eb8e8bc46d48c2dc53ead1b0b43eeecf085ef58cfc", + "engraphis/core/graph_layers.py": "64d74ab01c77119f6343ba6f1d6a84f9653f1a5d34d47ce7966f3ac31b29d2ea", + "engraphis/core/graph_policy.py": "ec5b373d01adb2de87df31d9f543130018e9a73faaaed239a184f14a32646615", + "engraphis/core/graph_scene.py": "d10465f5b87ed2af9382a8feb2cfbb6fba3a6157b13e1af50980bca52e857a83", + "engraphis/core/graphrank.py": "1279a58396104d3f906bfd5ec75b32efedfefe52201467bf19d80be3517017a5", + "engraphis/core/grounded.py": "ac40057dc37aa907e09c68e6b8cd54a989525fb310097df2970858708870ba3e", + "engraphis/core/ids.py": "e47eeadfaf560bc7638e1879fc491fa82d981cd42b9e4b05ef87033b2d7dfa60", + "engraphis/core/interfaces.py": "be11f909f0f59aca774b4cf7aeacf831123a5dc3fc1b889c47435b959e981266", + "engraphis/core/mutations.py": "dbb46a97686994e1652b2698e50c3309ff428d7258d6e8e53cbad7bb55b459aa", + "engraphis/core/obsidian.py": "991267c153cb7c4c40f7fe8f50aa71688892e250aaaf383b22c9e5910dc263b7", + "engraphis/core/poisoning.py": "5bc67169ee8032f3777f2d3969dcf71821437bd473ce4f917c4b41a50e845fb6", + "engraphis/core/query_planner.py": "249062d67392ab7c203cc71e9040e99bee91bf570604e90949149a93cb652120", + "engraphis/core/read_snapshots.py": "be08e63a88bd38ed91d61b28657a65201c38994856db2798b209a73151dd202a", + "engraphis/core/recall.py": "34959532fac07089ca8654fad0a1e945b11791918b3890420380ac7a9b78ccac", + "engraphis/core/resolve.py": "f01a6f55e44320ab04b97e516342f20155668863b2fc4765305e066d87586524", + "engraphis/core/retention_policy.py": "864c03bdb6e743cd0002c706de471e920f1fa1f1a9918ab343ef4c2042b47429", + "engraphis/core/retrieval_policy.py": "d169eb442115bd06c1e1da776fa6c1849e0795e658edd732a8d6821326b46b03", + "engraphis/core/savings.py": "cfbcfc7e476f4e28028555cd519696e23099f6210cf0b733225832aeaa0bc7dc", + "engraphis/core/schema.py": "ac273d3f0383995be815bbd866f2a36ea1398f30833aed57b8d4459afc87096b", + "engraphis/core/scoring.py": "f5b6ac291edf0968b3de83cb1951a97d5bfd8a8d079199cb2ef95bba0884c89a", + "engraphis/core/secrets.py": "a4835ba06e2616156528df6365ca1aba6cba0c97cdf834a709d2797a371099d2", + "engraphis/core/store.py": "2bcfda14325c6a846a45d87a7511a445d197618570eca0cf7f0c833596c2260c", + "engraphis/core/sync.py": "69f75b50fdb1ec9352f92460c89efeec8d72ca642bd10beb29474a8c62b4f58a", + "engraphis/core/textutil.py": "acd65031729fa5d91d09527b8eb52518b83cfce77a55e6b7ae2d94686e35c1a6", + "engraphis/core/user_model.py": "3147ec8ee7cfd855783f639874b63f331cdc822bd8bd9298cfb326dd18666026", + "engraphis/core/vector_repair.py": "a8c1812de4e3ed288eda3e54a505e136d6ebd3ec296788bcbb8804b11e13cfc8", + "engraphis/core/vector_search.py": "75800052e573e9af01c6fd098eaf8647c3c45cd7eb2601dae05d42359e19b234", + "engraphis/dashboard_app.py": "9305c9c72c43027b2b79c0ce559d398fc232929968d6ea03c37065e3227c8d51", + "engraphis/dashboard_assets/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "engraphis/device_connect.py": "c8cd0a22e9fd2d92a65bd74047cc3a8b7159bfc9a297cb639c1c7f1699f8802e", + "engraphis/document_import.py": "94fa0ca340ad0ebd060b143f46657798a81c440a11b82aa46fefa83fb65295dc", + "engraphis/engines/__init__.py": "111232af583889195c5f5a60298e32484348608e81d2bdd822fd3ecd2a33c1e4", + "engraphis/engines/embedder.py": "998b65dd566966bb6581fd9f09cdf46c58a3923ef5df3073ccdaa541153a3581", + "engraphis/engines/ingest.py": "1a5d4b52c13e533864329f9fff11c0f6ebc299ff7093a9d9275e5c9626a39ce2", + "engraphis/engines/intelligence.py": "b561589b98deb98271f104dfec6276aeba13c4815e627259be5f8769f2e7ad82", + "engraphis/engines/recall.py": "f979580d065599c07acbc3add59f71e52d9a186a2104b0e257daa7959ea88d26", + "engraphis/engines/reweight.py": "91ec5815f5d356a7068c36133d24405334450f361f902f99275bed3ccebffd49", + "engraphis/engines/thoughts.py": "4adb9c8a9bcfe736cb42fff9b5ce24631da6ec473d178e83f1c176fde3b8b814", + "engraphis/factory.py": "3b8765834cb04b052b89a9964b357b4ffb9c41a0f769bf1261768033653f708d", + "engraphis/graphdata.py": "195e583a4d4aefe97d8cff635cabea1ff9cd3f11c54ad392d951765d89910863", + "engraphis/hosted_client.py": "9c67aff6881c29704498f4ca99f836009be4ea58a248d74459c536dac7341a88", + "engraphis/http_security.py": "596981e96741fd47064d03db409605bbb435f062c0c6ef69b040aacdd8763a20", + "engraphis/inspector/__init__.py": "720cac28b8a6019d0a0c53809d5905b7d6eb9d4ecbac767505904c6ec3c39071", + "engraphis/inspector/app.py": "8aefe8a935397dde3c6466e691a7e6a7203ebe42e07aa00c332b733465e59e04", + "engraphis/licensing.py": "7e73c28b0e1c3536e2080a129af614f838d2cae3ec3a48a3d8ed7e5153c9e935", + "engraphis/llm/__init__.py": "f3096d2ddd652b99e6fc0b4c5a8786d9bbaba41b259df0b44ce93b57bde3a8b1", + "engraphis/llm/client.py": "304330bf7a45b0eef8f5beabee419b971d205c55f686de86c26d91fea69d172e", + "engraphis/local_auth.py": "b0ad3a1926d417a2aaa6c44a7dbf6e51f575290ddfa27875b78a03db176623c3", + "engraphis/logging_setup.py": "f7d2edc756458a852e0401453e9c71b785aba08fa7859aacbdc23fb30dc7982a", + "engraphis/managed_processing.py": "6d33cdfd10800d9552fcfae3c2b071d2b39fe10fb69d1a8e5d9ed6026882197e", + "engraphis/mcp_classic_cli.py": "778122b121a1c654b8f85810fad05d9c8d7799cf13903d7dc274938b51008da0", + "engraphis/mcp_cli.py": "ed2d997438d727180842dc5fb3f6776f5a5d97974f690ee7229264be1ff61957", + "engraphis/mcp_http_cli.py": "f6ac8bb04a0cb179e840502fdd543b8f55d0f1bf0045fc7900e06ae002cf422d", + "engraphis/mcp_server.py": "5a76a9b82e94a7be526307172fa5a0a594ddfec8c3989b0044db4cf40ff64775", + "engraphis/models.py": "6e76e97db0aca3805c6f582ea78cc6e1c0ccd2665e16fd8ab81eb91b94141b51", + "engraphis/netutil.py": "2e0f8a9095f6f31dcb5b96d323f023b9214369d59e1c488125a7d443a55972ff", + "engraphis/observability.py": "a3a6945bf33a0d8e216da56ca7efec0031b82dc64a66cff36f0b2161f5db4981", + "engraphis/obsidian_import.py": "c7cf4b5e993afce3ffb45f01637804719cb9e7cd2461ffe629c055be5975721f", + "engraphis/private_state.py": "7485570efcaee8a1dc00b64ebfdc23178517235ae17609aa78db8bdda7e45fe3", + "engraphis/read_only_api.py": "7d9d306919b30cf712fa59219059bb87be8328ec515487e55d76dcc1f0b80c38", + "engraphis/redirector.py": "5ba964b81f09008c9369180cb49d247519000763274aabc5e046215b12fa641d", + "engraphis/routes/__init__.py": "f0d59080212cfa0d9b50877bca28e5832d1ae917899500d52c68b1c8821231af", + "engraphis/routes/memory.py": "9ca066e1762eeeaafd9790ed57d730efcaceb57742dbe0c830ad8764500ff9e5", + "engraphis/routes/v2_api.py": "45c02594fe4c357975e739beaaa666a3742b461fd873e60ef2415b62ee90bb85", + "engraphis/routes/vault.py": "1a7eee7c1a7c7aa11091042756aa2739a3eb963647020f40584a6a38da1988af", + "engraphis/service.py": "d2eab019c50c090024a15a38af5e56324a18eaa475b6dacef4dde9f5a031cb94", + "engraphis/service_context.py": "3de9289f49a977cdc206285ac42a9953a104eb1d1b1bc8ea77febd75c7cd82ab", + "engraphis/static/__init__.py": "1fff4c4e2554e7f5fcf3eace269feba09827524917193a4dd65df95bae64ad1f", + "engraphis/stores/__init__.py": "48ee4326c8f28eecf46f558b7aea21adb779226a7038299017ab90196d5d84be", + "engraphis/stores/graph.py": "ebf603b54cf8450e7c9a7319bd05db2f39fcda8491f5969d6af3e8da61571bc2", + "engraphis/stores/ledger.py": "df5cbb30d977decc0a9c3a2365c9c115cfbb5fe951bae48446436661c80e5d30", + "engraphis/stores/vaults.py": "2c986129b9d1e7aab33e18a3b9a278eb5ad2236895587f69b5816a5d96796bc3", + "engraphis/stores/vectors.py": "45a1baca381fc647548cc89424eb36d5853f7562c275b191b35b99339a190b7d", + "engraphis/update_check.py": "ffbf5ef682fb15177915073ebc0b5eab4dee9092bbf0f58d36a8a54c6605ccf4", + "eval/__init__.py": "639f0c6d9d6aac8ff6dc605a34a0a301058905cc53bff4eaed5912247f0e7c56", + "eval/ablation.py": "16f159dee75d2f96cc42f230c2403fa19ea0bda7091c4823660da553463a194a", + "eval/adversarial_memory_security.py": "35dd8d981bcbad50e9815465be420b05b62a9dea28a78eb6cc1e09ec51c320c4", + "eval/agent_benchmarks.py": "8e88943e45a1b2083b366cbb0329326ef918b119a2366ed395c404c2b7ef98b0", + "eval/benchmark.py": "b71832affdf87d23bc1db7b522a669a7888571b3989b03a235c70f5da9952bd6", + "eval/benchmark_analysis.py": "1200791425d029695fee0b7da1f188a8962f337aa31eb4217d50e4503641d2b3", + "eval/benchmark_campaign.py": "033dbebfb47df5fcd3a6588b29ea4ab5fd44d4387ae45334379278ab30f3e57f", + "eval/campaign_adapters.py": "3e1db1183358331143d2d560b3a122d5e6b817f02c597ac7b4cc2ed8b7ce04e8", + "eval/campaign_api.py": "323be4e1d9520e8047ab54c9cbb158013785402b06ee4e93e55227971c54bf95", + "eval/campaign_candidate.py": "88541840d16c3b7368586ed0ee3566054214b1f594826b746b28d0e407cb812a", + "eval/campaign_continuation.py": "7f77a20ac8f85cd96729bba0cf45872c98a3421af005bd735434b7b416dd7e1f", + "eval/campaign_ledger.py": "ba3079ba541cb1f70929a76f147d2bc5e8b264103a1cd7faad97685e0ecc7790", + "eval/campaign_oracle.py": "9ea5479786efd9caa2b59e612e891a93dd34b500a2b36aa20bcf749fb6d4d48a", + "eval/campaign_storage.py": "ebcd1f4aeceaa5ff9304494c64dd31fe31637ceb107d8cc39fa292e3b14055d4", + "eval/capacity_matrix.py": "8c25bd97754c1d7a8468a687042a3c87cc9c0299cf01c19b80dacfec2be4e552", + "eval/chunking_eval.py": "a16544353940c0a8c40cea3b9932d3399b35ea5994b809b78f5dbe4a952c467f", + "eval/code_agent_ab.py": "d98bba6b77700ff6bf86ff0d2cf518a67e5a2676ef51bbddabbb2ff26e1f3aaa", + "eval/code_arm.py": "d211166fce1b8a4173848e1617873b7e84aadeff43746effe7483c54bbdb6f1d", + "eval/codex_oauth.py": "f235fca482de4201d1850bbfb583765ac5f1a057b4ad7e2d504d036bfc03f391", + "eval/coding_acceptance.py": "4b39cbcb60d7fba503cca597399cf9d04ad9567a43cdb950015ccf552e6a2773", + "eval/coding_corpus.py": "7b5205e8544578fe99d9d9cf6cfc34e40e5d1d049238d502ff7bc6f3c14948f5", + "eval/consolidation_ranking.py": "917b578d4e0bcb929bf1a1a37611acf7716a520c076abf4ade0d8d12a1c455de", + "eval/context_economy.py": "709ac7cc866855f96d7717ab2bea12e8b0d3a140d15fb978a2a929ad085931f2", + "eval/context_efficiency_guardrails.py": "22afd1a6fe17219e74701dc587ec35f569a5bf22bea270944525f51746723f14", + "eval/datasets/codemem.jsonl": "341313023c22850a2e14f02742b571ad1deca824f886a1654a59541304c01f3c", + "eval/datasets/coding_memory_v1/oracles/atlas-green--code_relationships.py": "969aa71235e0ae3cb764b9ee12b789184cedb5fea6fcc0d86e5dcb2c0498fa56", + "eval/datasets/coding_memory_v1/oracles/atlas-green--condition_values.py": "648702646fb62990168e98fba0dc6a27be128876548fa7035a59d71aee9da02d", + "eval/datasets/coding_memory_v1/oracles/atlas-green--corrections.py": "c7132c7fe39b7afbdf11065037369c0f3c38a22e69d8742e8afddfd5785d2e61", + "eval/datasets/coding_memory_v1/oracles/atlas-green--long_documents.py": "65dffb25944cb612872655f12db16af73f7a095e7abcf6a7cc5d31dc91f083b1", + "eval/datasets/coding_memory_v1/oracles/atlas-green--multilingual.py": "ff49874a691bfc30c082695ee6d3c89b9f2e1e5eecf086026110770d8e1b0452", + "eval/datasets/coding_memory_v1/oracles/atlas-green--paraphrases.py": "dbdcf5d7abf136aa5816df8465bfde842284aef5ef002e955cee05ae69d574ca", + "eval/datasets/coding_memory_v1/oracles/atlas-green--poisoning.py": "58b8ca4a37f55c4d112640414dc82620e32e643ab0aa539260884a5ecc50740f", + "eval/datasets/coding_memory_v1/oracles/atlas-green--scope_boundaries.py": "c1e92b10b40004c95abd3dfbada1a38fe0ce56300ecddca8360b51a1e6671458", + "eval/datasets/coding_memory_v1/oracles/atlas-green--temporal_history.py": "a64e4e5a29ce1040cf53e94571491325347f443d72a93f05bcf87c2878665952", + "eval/datasets/coding_memory_v1/oracles/atlas-green--unsupported_questions.py": "c8b415052ea7320e1df3c5475a676d4dd24602c45dbf1868fba6880846e029ee", + "eval/datasets/coding_memory_v1/oracles/atlas-north--code_relationships.py": "bb4305d15a81b4b4ef80b374acb59fee6fc32b213b101dd4b173ac4144d8570d", + "eval/datasets/coding_memory_v1/oracles/atlas-north--condition_values.py": "4bc5b1aff48ef6ad5ece1bd915f6949f72d365bb4815c4d82515b438bc644112", + "eval/datasets/coding_memory_v1/oracles/atlas-north--corrections.py": "7851502a9bc842f840bee1001e42140ee1df08be2730b563b1b197285d14742c", + "eval/datasets/coding_memory_v1/oracles/atlas-north--long_documents.py": "6204123eded20fc0c7aa59b312f8b5bd29aa88a720f7318e32b3c6a17651b57b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--multilingual.py": "5c989b34fdad1e076b61ffb1f7a1371dc635f44a537abc743b765d5f6009004e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--paraphrases.py": "fd189285d0cde9991dea461af9cd18b4203656a69da1298494fccf972ed8a58b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--poisoning.py": "66305d69419736bdbb11a896543933604d898cd5394d94eedda8b92e632a09ac", + "eval/datasets/coding_memory_v1/oracles/atlas-north--scope_boundaries.py": "d9fbbe3924b5178f32f1937485af3b8db242a0e3a08c7bf41a3d2a57f34a8879", + "eval/datasets/coding_memory_v1/oracles/atlas-north--temporal_history.py": "7e7be0d6e558a71d3baad14a8812a6c998ad25e3f52c997a301333e0711f820e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--unsupported_questions.py": "91f574dd678bf244a1fa6f9708e945259bb8ff8e2eb213426be5c3b187be3c3b", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--code_relationships.py": "d0998e13db38d1fae9be6d254431b4fe592f89eb03ee25705f4c70985cd48c89", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--condition_values.py": "f97610aee190dca03b01aa48ffe4aa3f75e099a59fdd867db98f743f4a376729", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--corrections.py": "b7c31f7a9a1f978321ca5445997e0d284deea770c85f6d81a80204e548ad53ea", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--long_documents.py": "20ec2b41cd3b6691164bce096dff16f7bf5be674f922cb637120c0347e60d0b6", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--multilingual.py": "131e7dc978d3f2f7df395b6f1b4a9150051c0ca93c6dc5c386e58d46c8fdc573", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--paraphrases.py": "1e7d9da36e6634ca2d2b11dc97468bd671df133345dcb76859e1dc3cb77dc664", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--poisoning.py": "48460691ac0086c47102eec85387ac03bee9190ac83e3dafc4babc79b71d9bd7", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--scope_boundaries.py": "b96207e9b1fd09f49218102a5b88fde5b9656604df4cfd314e86426e3b6d6075", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--temporal_history.py": "7a196ff9a1db05b0c8f3a83086ae44cdc580dc58e4acc217d1db2575d9711b88", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--unsupported_questions.py": "724564b5b75b9425b6889faae6d5e650bd5c940016c2b96054e5359d9d8b0887", + "eval/datasets/coding_memory_v1/oracles/atlas-west--code_relationships.py": "14295f735bcac4d4ae738eedfbd8fad4593afc914bc835233ec35e2263d43613", + "eval/datasets/coding_memory_v1/oracles/atlas-west--condition_values.py": "8ac70d9ca0c9122567bb9986d2cc5798104966df20e262b8087920e8fb5d82a2", + "eval/datasets/coding_memory_v1/oracles/atlas-west--corrections.py": "89d6a1a7781465c311830b7e769d2a76df41ab5c703ff662b3df1cc4c9a01668", + "eval/datasets/coding_memory_v1/oracles/atlas-west--long_documents.py": "38e67a26f69707089f852657a810ef1fca0395beb5511fff67c30f21ed63df57", + "eval/datasets/coding_memory_v1/oracles/atlas-west--multilingual.py": "bccf6579681d45940542ccb1f936ea1b225f4cf551a3ef31f3f8b1a026856e51", + "eval/datasets/coding_memory_v1/oracles/atlas-west--paraphrases.py": "89c8ce16c682553b27652e176b67a06f3228ae6209fbc8a7264260680f5651a9", + "eval/datasets/coding_memory_v1/oracles/atlas-west--poisoning.py": "fe9beb97d27eacdd87056fa1c9b04c62e2facae9354e765b912de60b35021621", + "eval/datasets/coding_memory_v1/oracles/atlas-west--scope_boundaries.py": "2eb3b1130c54644fcbade52da8f50cad1376a07b51856a962522913cbcbb7649", + "eval/datasets/coding_memory_v1/oracles/atlas-west--temporal_history.py": "116ee20af475da329cb535b0a02bd19ea1e7518b5b780ec12ba396ec896cc116", + "eval/datasets/coding_memory_v1/oracles/atlas-west--unsupported_questions.py": "080969e026215b9fe4ede6d0b4d02e9143e1293bea5d7383681e478426ddf121", + "eval/datasets/coding_memory_v1/oracles/borealis-green--code_relationships.py": "3965671e5e2432c8236c250f7982d4f478d8f1fe1268ffe57c555cf5fbbcd414", + "eval/datasets/coding_memory_v1/oracles/borealis-green--condition_values.py": "92994990327445258984ee6bf1d95f47359ff4b194e1f36e193980a523e6c5e0", + "eval/datasets/coding_memory_v1/oracles/borealis-green--corrections.py": "c5b473f962deacd6d59ea9967626e029888abbdb48f320704bcb6de876ce3f46", + "eval/datasets/coding_memory_v1/oracles/borealis-green--long_documents.py": "54aee2c1031c17b5678db2b0955eda8fafe5990aa9e52f02936584a9b75b9ab1", + "eval/datasets/coding_memory_v1/oracles/borealis-green--multilingual.py": "c458ac5c63e440e3d9486d096278759920d636f73e1901258679251afd86eb60", + "eval/datasets/coding_memory_v1/oracles/borealis-green--paraphrases.py": "250d027660f268cef1caa745cf3155de6e2f4adfaed02ba675eaa83224ffeee8", + "eval/datasets/coding_memory_v1/oracles/borealis-green--poisoning.py": "978f16eb5033c602ec09ed57ba0667edec9ac3e26accc1ce1456bc893ac9e6a7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--scope_boundaries.py": "4b73a2e5dc5ac815c14e08a34acefd2ad426282cfae379ca2fd3060a3784c9b7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--temporal_history.py": "6636d511bbcca51ca85c4eb0ec5ae956b3baaa5f9af89458ceb86329115743bd", + "eval/datasets/coding_memory_v1/oracles/borealis-green--unsupported_questions.py": "5cd4f70627bc60572c720a797bff122ef9bf219f32d265f694affa33b1f9f4fe", + "eval/datasets/coding_memory_v1/oracles/borealis-north--code_relationships.py": "769903aeac3ce360d845ddf1a6e89192737dbb460e1f2e251230b74d40763dd6", + "eval/datasets/coding_memory_v1/oracles/borealis-north--condition_values.py": "f6e69f525fd240a09152989b9d8a529e9abe076e7fc2c98d10bd84f9c6da2b56", + "eval/datasets/coding_memory_v1/oracles/borealis-north--corrections.py": "987ece1c7507a69a973c1e051b27c1d3b104ecda79df48959e49a62da31aa137", + "eval/datasets/coding_memory_v1/oracles/borealis-north--long_documents.py": "011134140cc486a3c089b407adbfbf5b958e1f8c1bffd572c29b8cd5d7f07f7a", + "eval/datasets/coding_memory_v1/oracles/borealis-north--multilingual.py": "1d29536a4a5836f64f56adcd1a965db85bc3371a12ad5bbb5644520c9d9606c8", + "eval/datasets/coding_memory_v1/oracles/borealis-north--paraphrases.py": "09a5fad90c24f75f2f448854c8778aab896c67854c97f884c2d689ead808583e", + "eval/datasets/coding_memory_v1/oracles/borealis-north--poisoning.py": "c1bec2ed9b31103e39db9dbab2be8db401cb0874bb3ce8573a0841a054e28a46", + "eval/datasets/coding_memory_v1/oracles/borealis-north--scope_boundaries.py": "faf51b368d7ba9406442edde29e290c931e67bff2799783dfd27f2226020e15b", + "eval/datasets/coding_memory_v1/oracles/borealis-north--temporal_history.py": "da52f43530149a4a293065674623fa49f83b37cd84b9871044b3bf32762fd8c1", + "eval/datasets/coding_memory_v1/oracles/borealis-north--unsupported_questions.py": "be0abc698692c9fe82f40f76a4694c472882a53843894dddd631ab1ab77aae45", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--code_relationships.py": "9497b7d2373bb9f858e994f7919cff72e7e3c4c4eaa1efda287524b1a182d1f4", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--condition_values.py": "aea13e4b7721019e7bc1f54878bb25b9f27a8a5044fe444e86ba5460deb13e09", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--corrections.py": "bfd446d431afb6c05ad9d8775b90887947b85981037756e05262f3b101d41e7b", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--long_documents.py": "eae829a374c0cd6237fac4ec52fec0d98d7340ec0b307b9b0b0c90c116d4b472", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--multilingual.py": "e821f91999b5f12cff53fdaa956af4e0bb2f929497f95b4e2ceb57a6621e58f7", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--paraphrases.py": "1a99c15898831a1c9aacab951868101d57e59e91ed90a2777015a26dbcc3043c", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--poisoning.py": "411877fc07b053201a63aa4e45cb499344abccb0a562c236d53a672078b1eb63", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--scope_boundaries.py": "b198dfb636910953ba372edf1cd6db382d4e5725bf7f820171be8c63f9fedf7d", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--temporal_history.py": "3de5efd6ef661572191c6aa426fb10caf9f4bed4aa495b6298815aab3acdce22", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--unsupported_questions.py": "baf5dd85e86a97dedb0b395b5c574ea5ffcdad7a46bbbe9787cfdc33d6c7a06c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--code_relationships.py": "48e53b3a561f91fdf4eedb2d63aad65eece8ae80188bb3d5bdcaf184fb0b6945", + "eval/datasets/coding_memory_v1/oracles/borealis-west--condition_values.py": "2dd7a524bd2a2aa2fbf212246880d4e4ecf03f503b70f25179f3ab6bab28a07a", + "eval/datasets/coding_memory_v1/oracles/borealis-west--corrections.py": "7d3080e05544e10243040fe0a969a8c524e4262f8f5c38abdc3d8e06c67fdabd", + "eval/datasets/coding_memory_v1/oracles/borealis-west--long_documents.py": "fc42e935879e7a81f6eef9fe72f8683244501ae10654008a7863d397ee73058c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--multilingual.py": "19181c442ce5f6941485190ecf050e455914dae988f86efa42665cdef0d835a2", + "eval/datasets/coding_memory_v1/oracles/borealis-west--paraphrases.py": "f7a5cb842aae3d2bc8d62ea40325b332a8bd4f013b76bac8bf154fedb3dbcbe1", + "eval/datasets/coding_memory_v1/oracles/borealis-west--poisoning.py": "285a2526a6be4e556a564899e9a376ae1286fef6f0ad22eb9289fba1905a2b68", + "eval/datasets/coding_memory_v1/oracles/borealis-west--scope_boundaries.py": "fb994823743ff5b4853b142c17779778bdb11296958e033e5c6be598833a4cf5", + "eval/datasets/coding_memory_v1/oracles/borealis-west--temporal_history.py": "f30a74c85ad654a7450e20d07baceb3b4fb2a56b454d7b43b854bef3cdb2cee6", + "eval/datasets/coding_memory_v1/oracles/borealis-west--unsupported_questions.py": "01cbbd0b21a745720514aea6a21a98a3cccdbf0c0518bd5508019433b964776b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--code_relationships.py": "8b08e7c65289515a9eee2ae5f4cd60ce94350e9a561225bef0e8f8815ea28f79", + "eval/datasets/coding_memory_v1/oracles/cinder-green--condition_values.py": "92e7d75d38f5dbcc685075e947005a9ae5a410207e7f17aa770b034b8690cbe5", + "eval/datasets/coding_memory_v1/oracles/cinder-green--corrections.py": "424cbf0924a8cbc1a59a6d7bc82b5527e41f52c8ee9f558ea3e398ab4d913919", + "eval/datasets/coding_memory_v1/oracles/cinder-green--long_documents.py": "2a52df9cef3ee66357847322794a382c927b828c6ab1a2819a799ff55d53657b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--multilingual.py": "e47e791dd15b045a6a958ca114b1359ca8537e160274b015214746a2564363c6", + "eval/datasets/coding_memory_v1/oracles/cinder-green--paraphrases.py": "9e92a79ec00231cb381ce58e389dfdb2520a17ecf1e9c2e39e79501449e9ddd0", + "eval/datasets/coding_memory_v1/oracles/cinder-green--poisoning.py": "33213e6f194332969da88f4748c8f26ef93219b6c4bc710a142082f8147ccfcc", + "eval/datasets/coding_memory_v1/oracles/cinder-green--scope_boundaries.py": "8d2489da1fba137981e45e42c843f9cbd17e851c82ddcdc5904b4a86af0d9692", + "eval/datasets/coding_memory_v1/oracles/cinder-green--temporal_history.py": "29403fd08f0de7da3dfcc6c181e1f448a5c5264e95ff3924f3066508d85468b1", + "eval/datasets/coding_memory_v1/oracles/cinder-green--unsupported_questions.py": "ba21014188f9ae849e0bb79babe163194703c4cf01f0600f4c9f71058e7fed56", + "eval/datasets/coding_memory_v1/oracles/cinder-north--code_relationships.py": "46280659557bd08afff185352438bb63dfd308dabf5c7c1862c2f442bd171d48", + "eval/datasets/coding_memory_v1/oracles/cinder-north--condition_values.py": "6c62d673b1b6cb4b5c89ff2af4ecf57c2c9d73074a01ab92b8fde57815cab783", + "eval/datasets/coding_memory_v1/oracles/cinder-north--corrections.py": "8245b196072389517fad6d76ed7709d7e12eb52e08732e4ddcfc40fc1d986879", + "eval/datasets/coding_memory_v1/oracles/cinder-north--long_documents.py": "6790c7b89d80ab909d9e1a31b59bfa5cd199cddabed2e159daf7c5c049ff9a43", + "eval/datasets/coding_memory_v1/oracles/cinder-north--multilingual.py": "9532bbd14506cac0edcc09f474e7c96a402903de947e0e76f5c8aab4bff37646", + "eval/datasets/coding_memory_v1/oracles/cinder-north--paraphrases.py": "cc904350ae7d40e26d91d482ac15d87ec8022d4c82905021dd38003c5fa2d067", + "eval/datasets/coding_memory_v1/oracles/cinder-north--poisoning.py": "e8e451c49c98744b4a484141f86d337db4ec5326264b1500893a20c3451c5ae4", + "eval/datasets/coding_memory_v1/oracles/cinder-north--scope_boundaries.py": "50d42fc48aa70d55b6a3b39c9bf17437726f37e1e5ae9870d415fccad92c7bae", + "eval/datasets/coding_memory_v1/oracles/cinder-north--temporal_history.py": "14b1336fbaed11cad455f588bbe078effc31f5f357f670e1f189ec3d78b172f5", + "eval/datasets/coding_memory_v1/oracles/cinder-north--unsupported_questions.py": "0a2f740700a990d22b4c3051aa3e4260e3df4ce65931d419052f74e05c750a67", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--code_relationships.py": "0e29053f11fe618c01fa90a274688f18ba8a7f3cfea56757a96d5a5bc95b61a8", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--condition_values.py": "ca57ac4e22e9b4739217020d7792ac642326935b8db9305ead2ec5bea2a6e456", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--corrections.py": "9edbfaa58a99776e835c325e50a77df5b4b302b3ddd0932dc2a349a77b4100b5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--long_documents.py": "4b3fbe7380201285ac4b4a1ec4d8238c5663b97af01cbdc8ffff8fdf2a9467c5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--multilingual.py": "b0bba5ecf669f3368ef29373b755dc1296502665584574c771ebf4664debb5ce", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--paraphrases.py": "e146f7aa1ffabf3b313251b59c59e1836c0cd17901d07fc6ef5334eaccf8bf36", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--poisoning.py": "692ee07e750fb08652a1ca6bc6dcbbef77219701585f1336c6037dae5a7c5767", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--scope_boundaries.py": "8ca0b911d38a72e4ecce6871ba3d0c7dbab433b0541cb64b116f7a88d521554c", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--temporal_history.py": "6ba5400c5435af64c80a7366fdf49fea132f1011f9d84f9d0cc5f2f2f30a67ac", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--unsupported_questions.py": "1d3324db0a085be30ce3dff1a2ec3866b8592a5ef6b43f39211a2e3a59fc1cd6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--code_relationships.py": "0149333a3fb0f8d60939bf927921305eae447f7511c74f042ff3c880eadff825", + "eval/datasets/coding_memory_v1/oracles/cinder-west--condition_values.py": "3158243f9f7f0b92aaee4164379159b46143acd11fc3d41a708630c1d33ea22c", + "eval/datasets/coding_memory_v1/oracles/cinder-west--corrections.py": "a9fbb89aa629a23e7a1fddf4fca09da40365bbc7a9a6192d805e498fe17f93ff", + "eval/datasets/coding_memory_v1/oracles/cinder-west--long_documents.py": "3c702c653a8ddff84eb5c24a77567aa63d2069c48ed174bcf29065c0ddb30ec6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--multilingual.py": "b8f5f7e00e6edac3f8e0b7e8bc09ea6c7d661370fa2226eb1795306ce3c634a7", + "eval/datasets/coding_memory_v1/oracles/cinder-west--paraphrases.py": "10361be87e9d9cb98d2ff1bbc18252178d475a5c5f2efb77bc81dea05109df05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--poisoning.py": "889a5a43604f7d1677ee0f28683abfc48a8a597b052f558c1b4d19c5f33444ec", + "eval/datasets/coding_memory_v1/oracles/cinder-west--scope_boundaries.py": "b84e78812baaa92422226c06d78cfe7c1be260e2bfcf9c5bb1ed73f2f3cc136b", + "eval/datasets/coding_memory_v1/oracles/cinder-west--temporal_history.py": "9d99a981fca0c801a0a52e2af24cd4262dad72f4f34cd84894784285d241bd05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--unsupported_questions.py": "43b8f854961d9cca5cb83b53b9e07d22388d0c7db406dc8e4f8cfdaa5f89fffd", + "eval/datasets/coding_memory_v1/oracles/delta-green--code_relationships.py": "97a08f2bf9b1a11f95a062f7df27d69db3e9dbc421837347acfe62111af02885", + "eval/datasets/coding_memory_v1/oracles/delta-green--condition_values.py": "5e53695288b84a526c61b748b170f6d6219f94a942edc0887ea6157535ad8d52", + "eval/datasets/coding_memory_v1/oracles/delta-green--corrections.py": "c6d16232ebe6bdb0b5c94db1ba4f108257b47ee8f8b96cda5f8e17212022b542", + "eval/datasets/coding_memory_v1/oracles/delta-green--long_documents.py": "bedb6f495437beada344ce6cdd92954108aa4c639622fd1cc294d2a1139b26d9", + "eval/datasets/coding_memory_v1/oracles/delta-green--multilingual.py": "dbf84f4e8c016c5e60fdac5fd3ac2faf79fb0534f5c2ac534491acc31d5f3530", + "eval/datasets/coding_memory_v1/oracles/delta-green--paraphrases.py": "ea8f00c86e8fbc2ab10a448f48019146181d0e55438def6f47f41f0ef3181be4", + "eval/datasets/coding_memory_v1/oracles/delta-green--poisoning.py": "4eb4e289e944e7762c39ce85a8fc2582e310de6a86cbc1cc36b44112653140ea", + "eval/datasets/coding_memory_v1/oracles/delta-green--scope_boundaries.py": "2fe9b96deecfb488430abd9657adc6b3ea092b18f32c41c1669d29175ec6e860", + "eval/datasets/coding_memory_v1/oracles/delta-green--temporal_history.py": "531cbb953400584356cb6525bc1a2e559f7ec3867d845c736d8026a046b91e7d", + "eval/datasets/coding_memory_v1/oracles/delta-green--unsupported_questions.py": "edebf25c2168411fdefae1307a71d829224dba3dbc7ea000054416e52123d5a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--code_relationships.py": "9357ad0d5f6a1cc787f980d0d506b07808538179f71ae3e8ce1c3eb655d24e35", + "eval/datasets/coding_memory_v1/oracles/delta-north--condition_values.py": "4199f7409696a260b1531f4ec7cfd15555b4d58d06b0b8a88b1c7621fe7d328b", + "eval/datasets/coding_memory_v1/oracles/delta-north--corrections.py": "b8bd58db7c5ae93d33e6223cc34f0e09d58831361ac013ec08277fe2c102ac17", + "eval/datasets/coding_memory_v1/oracles/delta-north--long_documents.py": "0f08b744446b1c52e8fe86626ab05c171377f17c46e604cb2ea647ed5d0daddd", + "eval/datasets/coding_memory_v1/oracles/delta-north--multilingual.py": "ada9eb404190d05637cea59e3f8ed541aea2c9e0f9be0d166885d6789351f7a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--paraphrases.py": "04ec2e8308f47f46e38c89f4a2fe44deef4a0b20a1c8517395ad00983bf7361c", + "eval/datasets/coding_memory_v1/oracles/delta-north--poisoning.py": "d72ea7b98db47e4de03884e2786206dc3da5cc08e5203c86b1d38a2d48c2fd47", + "eval/datasets/coding_memory_v1/oracles/delta-north--scope_boundaries.py": "cedb3234b22a40a7b889f50cfb5751fbba31e46f541b19feb2c4759c8007bac3", + "eval/datasets/coding_memory_v1/oracles/delta-north--temporal_history.py": "2f7c1bd4ebc051eee411d11251aff2ee5fee602a0800410bc0dbd2e86e99628b", + "eval/datasets/coding_memory_v1/oracles/delta-north--unsupported_questions.py": "f1f0b9858c806956122144c6e769f3baf9f87f07ff92eec98eb58d8019e6fba2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--code_relationships.py": "79579639a60d96365781e853d1319a2bf85d9a2b4d8639410da7e3c1efc364b2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--condition_values.py": "27defbfe7c237f971ae29e8f000f098eae32a11f3afad06f2bf3b27af432d902", + "eval/datasets/coding_memory_v1/oracles/delta-violet--corrections.py": "b3b685a5c33d1086e8ab4258d26c5ec9aa7396b8250a250351f0a6057fcf2075", + "eval/datasets/coding_memory_v1/oracles/delta-violet--long_documents.py": "4a5ce75372c8762bcd7986f8ceef454800c3636124ffd9de3a8315d210ae85f1", + "eval/datasets/coding_memory_v1/oracles/delta-violet--multilingual.py": "7ef19f25e97a24522b79a9d7e7f3d2d9e395a1fc2c60564e2f66081533bdacb5", + "eval/datasets/coding_memory_v1/oracles/delta-violet--paraphrases.py": "b6e00019bead0a5bc0facdac886b48fccfd3cccaa254267fda780e933d57904f", + "eval/datasets/coding_memory_v1/oracles/delta-violet--poisoning.py": "3e3e1e1fe04ae3e0c615ca21e794fead5d06f887d6fe7347fb9122684c8b8017", + "eval/datasets/coding_memory_v1/oracles/delta-violet--scope_boundaries.py": "336ae66910d533344712a2d87126f53df48d43eae9e7d17797938c3f9c560204", + "eval/datasets/coding_memory_v1/oracles/delta-violet--temporal_history.py": "a81cb5d2a5eb521dfd161ffbd21bd366777b1239f2d3412acc77b0a9c7c7d82b", + "eval/datasets/coding_memory_v1/oracles/delta-violet--unsupported_questions.py": "3341895608073374b98e67a88489abb9020fed5bb692231a0a61e15c8de0ddf1", + "eval/datasets/coding_memory_v1/oracles/delta-west--code_relationships.py": "e8f17f3838cb74e1ade0cfd6edf540dc086507b51ca67c2020ed490d75dbffe5", + "eval/datasets/coding_memory_v1/oracles/delta-west--condition_values.py": "a935a6e7a4081737eef76a93d54b34dc885b4699e02d797f1be78286dd642a2b", + "eval/datasets/coding_memory_v1/oracles/delta-west--corrections.py": "ee407e5aa8d57254bb7029d537bb2b59a297958cdff9bf271de3787b6448241e", + "eval/datasets/coding_memory_v1/oracles/delta-west--long_documents.py": "55fa08b75982d0547f0c2f13cdc6522d0fbd33efb4af9ae8c6ada11b2d46f321", + "eval/datasets/coding_memory_v1/oracles/delta-west--multilingual.py": "ce8a3e45ad8417ca1798579a22e12eeb7d170a11ebfb865746388eb0e7dca848", + "eval/datasets/coding_memory_v1/oracles/delta-west--paraphrases.py": "e6458588e20e76596e24be6cc838bd4b0d5a47b05b7bf0bb6017b0cecd0d6a68", + "eval/datasets/coding_memory_v1/oracles/delta-west--poisoning.py": "4c70955a2650d13eba24d6e933f765e0bd40da0a1cd8b920416989a76bdaf2d7", + "eval/datasets/coding_memory_v1/oracles/delta-west--scope_boundaries.py": "cfe9120c49224b6f9ed86ea7d85e496000bef0648c92c7fd474c540e892863cd", + "eval/datasets/coding_memory_v1/oracles/delta-west--temporal_history.py": "3527edc8a85c71f889ff0b2ac8bf9ab005ad5bb6c95bcd917dedae44aa3efc72", + "eval/datasets/coding_memory_v1/oracles/delta-west--unsupported_questions.py": "8c40923b8d4bd6bfc78ff6548ef9a840319b7ee4ea967554f26a8d24a4349935", + "eval/datasets/coding_memory_v1/oracles/ember-green--code_relationships.py": "cc7f82ad85363ee35ccd75744159bf4c4f07965e396bff07989cca7a55071679", + "eval/datasets/coding_memory_v1/oracles/ember-green--condition_values.py": "3fa888c125812f1488de9e021358cd531a9d50bb7d4b6173be3656268474b635", + "eval/datasets/coding_memory_v1/oracles/ember-green--corrections.py": "7cc639d4bd7b287ed0e3f2188491d6e4866e021b21874b34b365c1eb2b2d6d68", + "eval/datasets/coding_memory_v1/oracles/ember-green--long_documents.py": "972e7879a30ab26f86f09bce6dc9853c7f96124d0bbe5062111607496bcc9a95", + "eval/datasets/coding_memory_v1/oracles/ember-green--multilingual.py": "0f0585bd3264de3d5fed5928b54ff4fb87f71b2edb1d35c83a534251121124b4", + "eval/datasets/coding_memory_v1/oracles/ember-green--paraphrases.py": "a3c15541bb87cc862d1c9764cfdc1ffebbc831876b55167470ecb3b66519740a", + "eval/datasets/coding_memory_v1/oracles/ember-green--poisoning.py": "ace5b7b12c4ca068739af4bc5e215af1af7fe153399ff17ffb7a67b8b9aa1f94", + "eval/datasets/coding_memory_v1/oracles/ember-green--scope_boundaries.py": "daf132e130c5743d67129c1564f329fbb2670d1242648920b646a83bc2236e4b", + "eval/datasets/coding_memory_v1/oracles/ember-green--temporal_history.py": "1438f09f0ae41b1f6b42930518203a36c7de31a870b684dbb7f16e71a37c784b", + "eval/datasets/coding_memory_v1/oracles/ember-green--unsupported_questions.py": "da27396afbc1529c61972f739cefb26dcaf97bea529c084518a95080eac4fe78", + "eval/datasets/coding_memory_v1/oracles/ember-north--code_relationships.py": "debaf885151c3f47660053ff50e015338b8aa9bca089d7e901ee8bc34f7085e6", + "eval/datasets/coding_memory_v1/oracles/ember-north--condition_values.py": "109a7ee90c04da83f57a94a9a724dcf98a3e96405c7a456686c198ff5d85a69c", + "eval/datasets/coding_memory_v1/oracles/ember-north--corrections.py": "c246ba011c68d3ad0a4ee1d14231304a7f17f28027f1764e60da93062cf1cd3c", + "eval/datasets/coding_memory_v1/oracles/ember-north--long_documents.py": "176200cf2a011c7231ed4cadacbe86b1eeb695fbbee282bf4c4a96430d98fe84", + "eval/datasets/coding_memory_v1/oracles/ember-north--multilingual.py": "e850a910515e71a27edff26f7bedf39d8cb75c726e48357a2c41d4da051be6e9", + "eval/datasets/coding_memory_v1/oracles/ember-north--paraphrases.py": "0a6f03310e44abcf4ca61d69e22edbd21ce47a17629adf4f5079f7565534b469", + "eval/datasets/coding_memory_v1/oracles/ember-north--poisoning.py": "a81ee758fc57bcc58bf0bf2a38dae8b6eb4aeb14949063206e32cdff6f301dfb", + "eval/datasets/coding_memory_v1/oracles/ember-north--scope_boundaries.py": "fe42df24612c66b175f1c98794ed9f13a1a7819418e4aeb5ff98531515221de1", + "eval/datasets/coding_memory_v1/oracles/ember-north--temporal_history.py": "410f9770097228724a5af1357003ea23caefe1226275d030d46efa535c42d306", + "eval/datasets/coding_memory_v1/oracles/ember-north--unsupported_questions.py": "eebe43443938693a74081661d2ff3733b39c6dac5c7ecd88c4dbab5ad18689ee", + "eval/datasets/coding_memory_v1/oracles/ember-violet--code_relationships.py": "c00a30669fbd1c740b44e17c7c7369582c28a16da3aeec9d27420b8aef7c553a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--condition_values.py": "1645e7c56c870f4367c263ccc9041181b1d187a698252203ca651235db59e684", + "eval/datasets/coding_memory_v1/oracles/ember-violet--corrections.py": "735f1d125d2ade6f3eabbf1082a408fe6afd4328cd954833e23df275df498e37", + "eval/datasets/coding_memory_v1/oracles/ember-violet--long_documents.py": "e1ded8e9641639443a6b14da18b2e0cbcddc6fc6045bf0b57404b59b59327dce", + "eval/datasets/coding_memory_v1/oracles/ember-violet--multilingual.py": "fbf04cda8e1231c7ac4c64d4c1856f7bfafcb6f1d016de0b1bdbbaaafcfe03b6", + "eval/datasets/coding_memory_v1/oracles/ember-violet--paraphrases.py": "2fd495def306778073df30b20dbc7a1500c06c90638acf6d9b9280db78dec53a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--poisoning.py": "335674216a418254a01a7f5505344af20ad499a5fe41cb9c8654a0705574a18e", + "eval/datasets/coding_memory_v1/oracles/ember-violet--scope_boundaries.py": "078d60287888903e90343d144d8f54e08a3751ffcba82fd827ca0c9f8ee75fe7", + "eval/datasets/coding_memory_v1/oracles/ember-violet--temporal_history.py": "f7ad47f3253fe922977cbd0b63679abf00559f1b2dc895246e09840652b2c41b", + "eval/datasets/coding_memory_v1/oracles/ember-violet--unsupported_questions.py": "b91545082a31952351bc4c08d6cc09132432126dfd772952c818396bd7a68af1", + "eval/datasets/coding_memory_v1/oracles/ember-west--code_relationships.py": "74fb3e0d99a5bd4f54b8b57f6040ce7978a81bffa1ae70f9069fb2322e6ea581", + "eval/datasets/coding_memory_v1/oracles/ember-west--condition_values.py": "26d605b42d18cf029dfdc29124eea898e0dfa5642c43c1c775007fb443ba6cda", + "eval/datasets/coding_memory_v1/oracles/ember-west--corrections.py": "65c2ef8544b42ecb6b3ea9ce8bc95ec5f0ea8bb07c2b74d52e7880d99962f563", + "eval/datasets/coding_memory_v1/oracles/ember-west--long_documents.py": "4c8e54c7ec930d6cc782fa1a0519a0f1e0e916e3929902e13199775cefdaf338", + "eval/datasets/coding_memory_v1/oracles/ember-west--multilingual.py": "356e407f47d39e7f53337ffc4f27c68935a2c831301dc3dd006b2939cc61decd", + "eval/datasets/coding_memory_v1/oracles/ember-west--paraphrases.py": "c91cf574cf8b5aadaa6c9331c3f8f4a8fec7ec33c227f20894f463d81d110a7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--poisoning.py": "5f6b8740798a7a093994748ef4b11e0e1de0be562c7f09790e1f0ebb9ed21f7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--scope_boundaries.py": "5e20c5154818cc29b7e71444054d67836eddc882f2f17be8aed78afe31a9037f", + "eval/datasets/coding_memory_v1/oracles/ember-west--temporal_history.py": "fc51d1a39693d1f7fb2db4bf1ffe865d4c44848c159188cdcfda54618c0d8fe2", + "eval/datasets/coding_memory_v1/oracles/ember-west--unsupported_questions.py": "079c421cae974bcccc2107dac74421dd5bc2d1b40f7d91cb79a8014af526d260", + "eval/datasets/coding_memory_v1/oracles/fjord-green--code_relationships.py": "b5e4a284bad1d7ff81d5be9cf1faaaaf5e718cb51624189482624721cb459f1b", + "eval/datasets/coding_memory_v1/oracles/fjord-green--condition_values.py": "63c152b8da5655ae5c701cbb51099340d5f5103fcc47840239098a7366d24151", + "eval/datasets/coding_memory_v1/oracles/fjord-green--corrections.py": "b7b33b8de153c205ff4fdaadd5538eae8a22fd4401e70db9f645dae205c62cba", + "eval/datasets/coding_memory_v1/oracles/fjord-green--long_documents.py": "624cf014bc795a24e2f1f4fa2f9dbf11d2ad1c38f81cbc58ab3948f96c48c8c4", + "eval/datasets/coding_memory_v1/oracles/fjord-green--multilingual.py": "f8d2483fd9266946c980764feba0eda27c95ea2ff11222a4dd4247fb537f1f00", + "eval/datasets/coding_memory_v1/oracles/fjord-green--paraphrases.py": "151be253b730d5c5b4bbcabcce3bd218477241ebf0f1bd5fe9dc8d70798feb6f", + "eval/datasets/coding_memory_v1/oracles/fjord-green--poisoning.py": "e7b0efca3813bbb1d4ea9cefa752b4318942b118bb61ee9dcbbf640daa66644d", + "eval/datasets/coding_memory_v1/oracles/fjord-green--scope_boundaries.py": "56177cfb45f32c548be83cc78197fcf5b53826f01cca69e471535476184ae8f9", + "eval/datasets/coding_memory_v1/oracles/fjord-green--temporal_history.py": "2c79d26467eb8443d743bb8823cc1f2a5d1e5da7c887754505baa130e37f1b2e", + "eval/datasets/coding_memory_v1/oracles/fjord-green--unsupported_questions.py": "fb5f222f4e0715379591f559036c0549f67a7b6e3491e880c6cf8d5b91fa9000", + "eval/datasets/coding_memory_v1/oracles/fjord-north--code_relationships.py": "07402078200db9ab15fc61a72e31d9df0938edfb1e9d5b7e532b422dccab15aa", + "eval/datasets/coding_memory_v1/oracles/fjord-north--condition_values.py": "8c1549b5a444c9cbf1304fcca13b79263bf8d9f0b4f41c16da539b3bf5da3bf4", + "eval/datasets/coding_memory_v1/oracles/fjord-north--corrections.py": "a2634af73134c025de1b6239756ee2051e505e0a535221947babef5ba161fa13", + "eval/datasets/coding_memory_v1/oracles/fjord-north--long_documents.py": "4f80f3673afd1320d16a6bd45fefc85522d6f4bb889ff96f6e99410580feec09", + "eval/datasets/coding_memory_v1/oracles/fjord-north--multilingual.py": "3a9c953fbe76eb7374992a6a81d35b8dc0a635c02b90f328af140bbda2acc180", + "eval/datasets/coding_memory_v1/oracles/fjord-north--paraphrases.py": "ec2d9d7bbd678be73946cba8177184839505cd891df410ae8e676fc254df2ca5", + "eval/datasets/coding_memory_v1/oracles/fjord-north--poisoning.py": "6d9b91b4d53925d58d3c0cea694f591572a53184f23816101af0aa644aa1b86d", + "eval/datasets/coding_memory_v1/oracles/fjord-north--scope_boundaries.py": "2e98afa064e8a295a78bea654014a92734696a235fb0538732bb8d85799c7287", + "eval/datasets/coding_memory_v1/oracles/fjord-north--temporal_history.py": "4059ab8e427c2b6fd68155992404fbf493c7ebdf0a4357aa5c5f4ff0c67808f9", + "eval/datasets/coding_memory_v1/oracles/fjord-north--unsupported_questions.py": "79f14e18e282c1b6bbe21ef2affc9dd8a259a171c2e4975d42363f7c91689c1e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--code_relationships.py": "9ea8a9ade1001bcd43929782c3410f35fc5056e438342ca848fe0b1b0ff56170", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--condition_values.py": "09e223a1c0bff6c95a5863fdc28dc00ed96b90887cd635d014712058079ccbfe", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--corrections.py": "f822c373fc4a93189fdce09999a9dcbe8797b0c0dc780eddd4e342edf21dc14e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--long_documents.py": "983aeaae1e14937a740218228778be3e1938cdf1ff9228eba44064336188f297", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--multilingual.py": "6e929f8846cfc756c71bcc21bc0f27ef8fc23270d21292fc35d70e6bbd31c066", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--paraphrases.py": "c644d9f01edbd213447618bc269f56804450901faf4f4660c1f666d4e9b4ada4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--poisoning.py": "cf3849312f96b0072efdfd4e858abb24d7e6a808bf883bcc9dde5dd5a4594364", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--scope_boundaries.py": "373d10e20713bdc26849706525f765f2be4ab57e87e576e39a1a1dd4e7feed88", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--temporal_history.py": "4d2c36480cc04d43aa8f535bf998968b474f2f596d5349dcd42684c5a667c6a4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--unsupported_questions.py": "b381d2016dea525eebd8de8d026dc48ad2080b93823a95d6e2bb06d29cc86775", + "eval/datasets/coding_memory_v1/oracles/fjord-west--code_relationships.py": "e1e10ed9ee8a4d5c2e798c2bf04cba5c39eaa3873901bd93724af166ba2479ae", + "eval/datasets/coding_memory_v1/oracles/fjord-west--condition_values.py": "427764a62d2e11f6c9fe4b2cdcd32fa92f61749403dff648601a47187e38787a", + "eval/datasets/coding_memory_v1/oracles/fjord-west--corrections.py": "4aa041aa87f4c8628d113bab855a151c2e38bd6919cd02224827fd07d060fb34", + "eval/datasets/coding_memory_v1/oracles/fjord-west--long_documents.py": "89875548e6952ce810d8983b0eaf2724bf8f329bf44e4d9193cfa3405e1ce80e", + "eval/datasets/coding_memory_v1/oracles/fjord-west--multilingual.py": "8b5c14cdb26941d1ae25701bc99efc5fe4ae6e50fed3c65b193952444f1593d1", + "eval/datasets/coding_memory_v1/oracles/fjord-west--paraphrases.py": "bcdc9a5f1fe45ef63fd5e6b728c83c7a8d05c7b80957e3276c074700b409e924", + "eval/datasets/coding_memory_v1/oracles/fjord-west--poisoning.py": "5504e1bab0865fb3041c88f151938789d79422eff91a3ce72f4a41fc14e2f897", + "eval/datasets/coding_memory_v1/oracles/fjord-west--scope_boundaries.py": "63f226631a663dca0ef62a4f32bb98fbe1e30e3b1f030ee42c3f7f2bf6a09af0", + "eval/datasets/coding_memory_v1/oracles/fjord-west--temporal_history.py": "75c9582a16db2c89f12506bd7a4115fcd871c6da63e80429a8e70e31c1f5f862", + "eval/datasets/coding_memory_v1/oracles/fjord-west--unsupported_questions.py": "05e4ba65be7cb4e6500af5e14721c70f93fd7390abe58a60f6f8e4f8e9b0ae5c", + "eval/datasets/coding_memory_v1/oracles/grove-green--code_relationships.py": "bd5619518e839f84ca03297c4f7842a2944d8b445ec1863a8dfc68e4c2114a03", + "eval/datasets/coding_memory_v1/oracles/grove-green--condition_values.py": "67377847b6ff1ab865f5c25351fcfa1ee13e6ec6a089444cb3eb0709b660148b", + "eval/datasets/coding_memory_v1/oracles/grove-green--corrections.py": "c07e8a03c6c47818f9c574d4f21b27668989711fb5e0af3b5cf1a87b293abcbd", + "eval/datasets/coding_memory_v1/oracles/grove-green--long_documents.py": "3f75fc2158c66a19dbbd19209fc80026339abe93a2282ff55c7c01429ac549f3", + "eval/datasets/coding_memory_v1/oracles/grove-green--multilingual.py": "19b1f800b38a11cf0f50df6da3a011806098561e32a279b78e1806de9b8c11fb", + "eval/datasets/coding_memory_v1/oracles/grove-green--paraphrases.py": "a5996376b9f589283dbe301dd1e0644af92a8b6a0222b51b99ed6fbb83570782", + "eval/datasets/coding_memory_v1/oracles/grove-green--poisoning.py": "c4dee0969e39b52dc9b697e45587c8cd84926a97c9a48f7211c0a00571bfb657", + "eval/datasets/coding_memory_v1/oracles/grove-green--scope_boundaries.py": "8d45422f0a1a2115deb90f560409fdad1105b7cae1f03052f8ebac404ba9517c", + "eval/datasets/coding_memory_v1/oracles/grove-green--temporal_history.py": "abc1b386173c8252ac10f11a36fbcdd6d91c731686108a6d32c62d17955d21b9", + "eval/datasets/coding_memory_v1/oracles/grove-green--unsupported_questions.py": "1ee09741a1c94a1fa83c7edf5b6c07d8da2e45826f748d899ec71917e8369d54", + "eval/datasets/coding_memory_v1/oracles/grove-north--code_relationships.py": "fd75d734a5f45a5ec54b125c1d379df67c5531659f212a2f5c1c5e88169167e0", + "eval/datasets/coding_memory_v1/oracles/grove-north--condition_values.py": "c600c0e5f50e352406b99527b050f4df6dc8ab8920b5b946de190ad7629b5e6d", + "eval/datasets/coding_memory_v1/oracles/grove-north--corrections.py": "4d6fdbe4f5eb9c8e4bfc2a974e6c3cbf1d124d0b20d3f050c84e766f507b4be7", + "eval/datasets/coding_memory_v1/oracles/grove-north--long_documents.py": "5b0bbb9f0a90eb377cbfe45ff6f37077a9ce32c7c6730720f0bfd49b844fdf4b", + "eval/datasets/coding_memory_v1/oracles/grove-north--multilingual.py": "525ea2fdad66d66d7b90892e9424ebae281c1dabfb49f2668784a687b7ec894e", + "eval/datasets/coding_memory_v1/oracles/grove-north--paraphrases.py": "1105e52a8c8d3ff79c64b59ec5f23d66d742b8dcecf91e8e62060895c7371f4a", + "eval/datasets/coding_memory_v1/oracles/grove-north--poisoning.py": "7d32e533f6dac57e5d651868386686d2b78e7db1cc29b1860fede23fc9c49813", + "eval/datasets/coding_memory_v1/oracles/grove-north--scope_boundaries.py": "7bea4129589ea34ba10667a7035b126a32b423ec7f3b1ff2b10f6ffc9aa1c2ee", + "eval/datasets/coding_memory_v1/oracles/grove-north--temporal_history.py": "859b6504250f5746ce197e4a0a7c1006f1c2257b939c53a493f9d36f6d2b7d6a", + "eval/datasets/coding_memory_v1/oracles/grove-north--unsupported_questions.py": "6b893c4c124f071e9ad5d9946448b070c2b2f5f10da6f058e60840c18510fd0f", + "eval/datasets/coding_memory_v1/oracles/grove-violet--code_relationships.py": "09bb7df6b115b83cb98a4274b2d883e81b809643ed4f912b383a9e09a7f7a1f9", + "eval/datasets/coding_memory_v1/oracles/grove-violet--condition_values.py": "a68c126f0d7b2fc0950baa5df095d7d513cdb8359883404bad3c1c84c8de666d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--corrections.py": "46024b5fb187aaf3574d380af1a3bb2aa44028f89377f810ca5e98ee03c3b9aa", + "eval/datasets/coding_memory_v1/oracles/grove-violet--long_documents.py": "ec8d401f6437fbaa3b11ddb96973b31944ff374da677f7aae26c0e79e6a1315b", + "eval/datasets/coding_memory_v1/oracles/grove-violet--multilingual.py": "d14e8bf66593ceab7b691119b8a82f211933e2b3f6ebf8a25a75e61ffedbc1c0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--paraphrases.py": "963b7321a32931f238d12e7cdc3849f64682c7cb704b77f4b849543cc40b6df0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--poisoning.py": "39e5edc76a122d37d90b1af28c2293e2f8b0c38e1bdb6460340c0bc2a71ad87d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--scope_boundaries.py": "472298607415aedfb9a36bad7783e7b7e3bccc339ee44cd83746d782ca99e411", + "eval/datasets/coding_memory_v1/oracles/grove-violet--temporal_history.py": "dcf793210a0a547c25587bba70e01d4d56576604856ed084eb5fa466b8be7b83", + "eval/datasets/coding_memory_v1/oracles/grove-violet--unsupported_questions.py": "bbe1769dc0afbe220e8069ef21b85164c31ecff6c3c7f5bf6d18d1e48f5f3c72", + "eval/datasets/coding_memory_v1/oracles/grove-west--code_relationships.py": "5374fb66cd91be79b5eabd2696ada5fee89605d8a1fc84ce36bd6a8ca82cbe5e", + "eval/datasets/coding_memory_v1/oracles/grove-west--condition_values.py": "2e807846b760b65afe0f5e48947463a66c15b8d89899a2724cddd865311760b0", + "eval/datasets/coding_memory_v1/oracles/grove-west--corrections.py": "bca219aae5f85e3f5504d5b39646efe89ff7dc6c007a4323abd5c5154cb4d5a9", + "eval/datasets/coding_memory_v1/oracles/grove-west--long_documents.py": "19c3ca44f78ef79ca1b907c80214e11a8195e994893f1de683b5d9796eb29d6b", + "eval/datasets/coding_memory_v1/oracles/grove-west--multilingual.py": "7842efb41f88fcd49e7a2350e9b44a3a1946bf73e5cb103e4a91a11e810301a2", + "eval/datasets/coding_memory_v1/oracles/grove-west--paraphrases.py": "fd70e8a20da665073ad172219bd57b24e53575dccc344adc1fa0190770ffc6cd", + "eval/datasets/coding_memory_v1/oracles/grove-west--poisoning.py": "473acfa06852554dee20445dd1a86df4e626e0363a7b72de57d68819314bf938", + "eval/datasets/coding_memory_v1/oracles/grove-west--scope_boundaries.py": "3ba0e93abf07498c570cd81b0c4f753bb75b6d4f4bf6c786461bad1a3b301286", + "eval/datasets/coding_memory_v1/oracles/grove-west--temporal_history.py": "334bc7b057f570efd20896d282e54c986f5b6c642930057c8520f84b721ed5e9", + "eval/datasets/coding_memory_v1/oracles/grove-west--unsupported_questions.py": "5102eb2dadcce0dcc0ba157495d4fa10c4983e4bf6627aff25bbd547a08115ca", + "eval/datasets/coding_memory_v1/oracles/helios-green--code_relationships.py": "d376cda89c44b3282a86afe7cd01583f0b53f2c80cd92b47bc2fa4a19271e9ee", + "eval/datasets/coding_memory_v1/oracles/helios-green--condition_values.py": "7b6eaf2f46a5b2f1ae6e8e6da0bcfe6044fea5639df158e137fb8ba32b929909", + "eval/datasets/coding_memory_v1/oracles/helios-green--corrections.py": "2e849f6c926aa0ce1b2e69ce8cdc5ba9c50feb89b33b257fc71bf3aa3b8461b8", + "eval/datasets/coding_memory_v1/oracles/helios-green--long_documents.py": "884c17b7d20d986708c0eff2821cc7b76c5f7b16afd26c43ca80fb507e2f3ea7", + "eval/datasets/coding_memory_v1/oracles/helios-green--multilingual.py": "1182048aef0dcfbc416a004bc43f49f1d2a5de4132e7243ab7d147f54aab1acc", + "eval/datasets/coding_memory_v1/oracles/helios-green--paraphrases.py": "a73950ae7fceacfaa6c7c7a26c8379f9164a29ebea883cede9222e72c506db5e", + "eval/datasets/coding_memory_v1/oracles/helios-green--poisoning.py": "60c5112afb7b84ee5513f2657f42d0eacb0607ba345c28618af3b3b3eaab753e", + "eval/datasets/coding_memory_v1/oracles/helios-green--scope_boundaries.py": "dab035b811e7e9a60bf447d1ea26f6db915c320b5dc2dd04cda4b6f1023296be", + "eval/datasets/coding_memory_v1/oracles/helios-green--temporal_history.py": "c22dd57bc7cd659863231b164192caf6c4929c5baaf8edd8be8cac00268e5847", + "eval/datasets/coding_memory_v1/oracles/helios-green--unsupported_questions.py": "f78986b8093eab4ecc8c1319d359498d64177db55a4e38cf8d0b32d1e5af4b2a", + "eval/datasets/coding_memory_v1/oracles/helios-north--code_relationships.py": "81721c60bd4e3466600442214147ae6641ebc05ae414965f4a09b89cc74cb8d6", + "eval/datasets/coding_memory_v1/oracles/helios-north--condition_values.py": "8fbcf116c1f0d480d61b2974e7bef73acef053d45bf0ac3b12e6ea48b017e43f", + "eval/datasets/coding_memory_v1/oracles/helios-north--corrections.py": "beae8d6c5828c1f225e5e953236136a217ee48e67cebc82049caf8f1c60cfdcc", + "eval/datasets/coding_memory_v1/oracles/helios-north--long_documents.py": "019e7ff3b9efcb461c1c68acc657b2438cc2d63d4b4165c0caa4523c440f12bc", + "eval/datasets/coding_memory_v1/oracles/helios-north--multilingual.py": "a48324390ab60686c2b1417f0c049f47601737c55fdf000b696ccc5de260ccab", + "eval/datasets/coding_memory_v1/oracles/helios-north--paraphrases.py": "9e2552399b988a6d722ccfaec7cfbea10853164336fadc9e9146dbae788a2d8a", + "eval/datasets/coding_memory_v1/oracles/helios-north--poisoning.py": "75eecaa42c302898581d3bef8aee00fa1dec6c3bc968c0014a522196e18c7681", + "eval/datasets/coding_memory_v1/oracles/helios-north--scope_boundaries.py": "8bd32a30cd1c2e346375bf2b37ef4908c3feeb67a80ec52ed3108bfe9cbd548e", + "eval/datasets/coding_memory_v1/oracles/helios-north--temporal_history.py": "1d1118cb5d438f91bb027acaa3b64f867e93cca7eb0f480bb83073584fafd97a", + "eval/datasets/coding_memory_v1/oracles/helios-north--unsupported_questions.py": "02a854bf89085637e366f801d2be6ab26b9e18296f13531485d08c2a64621c7c", + "eval/datasets/coding_memory_v1/oracles/helios-violet--code_relationships.py": "e32101847ccad5cd18fbc2c667ba4d1b63e3e7f8067dc89de5f485546dfef525", + "eval/datasets/coding_memory_v1/oracles/helios-violet--condition_values.py": "c8ef59dc9dcfe3aecc990d82fe44f1f93b7adc8c65f1fc38e79b934d351635c6", + "eval/datasets/coding_memory_v1/oracles/helios-violet--corrections.py": "a3a36bb554a6f4a83ea612bbbe9c0ee4ee1a08071e490a9a909c46d3049bb379", + "eval/datasets/coding_memory_v1/oracles/helios-violet--long_documents.py": "f9fa707bb28b4d7ea96e3bacfa22f24502b571a76a79defd147fe9d5205963a2", + "eval/datasets/coding_memory_v1/oracles/helios-violet--multilingual.py": "cfbfe0535e905dd58434bc25d84e7746dbdf1fc50d72d0fa96cc78677eaf18b9", + "eval/datasets/coding_memory_v1/oracles/helios-violet--paraphrases.py": "1743c8cbf0564d91dfb4db88b694072fdc9bb5a0b9f26f578649af7f539ee393", + "eval/datasets/coding_memory_v1/oracles/helios-violet--poisoning.py": "02cf390520757473e9d677f5c1f0934ecf50645ad5edcdc64caec23721a5d99e", + "eval/datasets/coding_memory_v1/oracles/helios-violet--scope_boundaries.py": "5ab003dfc23cb00d0a70195541a780a4b80b1d496728b2b88f7f154310e67a6d", + "eval/datasets/coding_memory_v1/oracles/helios-violet--temporal_history.py": "209e95f62c39d3f2223ed00a378788e396d04de392324455cd9d19dedb3a87ad", + "eval/datasets/coding_memory_v1/oracles/helios-violet--unsupported_questions.py": "a3ff0703297e2f743917e74abeffc0c922a6241318f37d63a49242c6bcc18059", + "eval/datasets/coding_memory_v1/oracles/helios-west--code_relationships.py": "4d8543e4c49d59f844830ccee3fcea0643ee17ce43f51863b94a1b4fbc9825ea", + "eval/datasets/coding_memory_v1/oracles/helios-west--condition_values.py": "f2efa7fd803df0e10c440d5ec2d98dedf5e02e23a4cedddcde5ea722f4039e40", + "eval/datasets/coding_memory_v1/oracles/helios-west--corrections.py": "181c42640cee47db2b5c779bdf8fe2e84103a92459d7f6cb0d9587458e421406", + "eval/datasets/coding_memory_v1/oracles/helios-west--long_documents.py": "49337830deb24f9d6b11ba4e01f397c0cf1a40a15524f1ce33354a2c61615072", + "eval/datasets/coding_memory_v1/oracles/helios-west--multilingual.py": "f1e4ef8be6bba13457a2da1c3a2082f81bba765f2cf1f07b93eb20edf5e2debe", + "eval/datasets/coding_memory_v1/oracles/helios-west--paraphrases.py": "29abfff3b323496fb62e739cdc0be2aada1b7e1467a141cc8d19a1d54c1ab130", + "eval/datasets/coding_memory_v1/oracles/helios-west--poisoning.py": "14b7f874c10681ff3829b2659cbe7500250369652d11b26c842e62718093ca0f", + "eval/datasets/coding_memory_v1/oracles/helios-west--scope_boundaries.py": "decbdb3cd7ab0c40c0aadb1ecdeef9e2ee2586dd8802b9bb16235f211ce05ee1", + "eval/datasets/coding_memory_v1/oracles/helios-west--temporal_history.py": "6e7c2369157234374d3f9633b7e772b4a3bff405d418c6e1336e56c87ebf28de", + "eval/datasets/coding_memory_v1/oracles/helios-west--unsupported_questions.py": "379716803a300bbecd3fc8f1661bdac2fcd8a98a2bb18514d8de168bd57fa144", + "eval/datasets/coding_memory_v1/oracles/island-green--code_relationships.py": "833962801d594247d5c5644df0e6aee877d452127ea5c0dbc22c81512132ab21", + "eval/datasets/coding_memory_v1/oracles/island-green--condition_values.py": "cfbb4ea0a4dd12d69686178ba8246bd08b93743dc5395cd0479984a53655d909", + "eval/datasets/coding_memory_v1/oracles/island-green--corrections.py": "4c7ee2538df9988864e24d9b86805d26b64d1a37638b57abdd1761e24c4ab340", + "eval/datasets/coding_memory_v1/oracles/island-green--long_documents.py": "f73cd2b884539680c500af9a5c8cc00d1dc9f1d2ef7bda61f6c8253b2bf799ed", + "eval/datasets/coding_memory_v1/oracles/island-green--multilingual.py": "e954fa56aa819ef9088c8d6da4abd647b689956c4ff4a7b0b8e31078522f2702", + "eval/datasets/coding_memory_v1/oracles/island-green--paraphrases.py": "4cde223eac40d4a2962aa2ace533b8761c5b82784767b0307c884ac5e6ad0576", + "eval/datasets/coding_memory_v1/oracles/island-green--poisoning.py": "08725e295848b2c58c9e6d6a0554a2dd4a6506af75039205c444251d11a62acb", + "eval/datasets/coding_memory_v1/oracles/island-green--scope_boundaries.py": "257cd579af07491748f5de88d04f8af85056b0448d348e59c7b0cbb28754fb1b", + "eval/datasets/coding_memory_v1/oracles/island-green--temporal_history.py": "e93105f0639a83b300a6de3bbae56166eedac2e58122f7e84ce5a40a074db6b6", + "eval/datasets/coding_memory_v1/oracles/island-green--unsupported_questions.py": "a707cee90fb3f0cabd0e692399a361f59da0fc4e9e7bbf0cde702e05579f0b3f", + "eval/datasets/coding_memory_v1/oracles/island-north--code_relationships.py": "f00e022ce900e4ad0fcec93f2dbf016337a4d83afacbcf739f61f71316723173", + "eval/datasets/coding_memory_v1/oracles/island-north--condition_values.py": "c704a03a70253585a67823826dc0a6ebaf6323a8880c00af80c148c150176daf", + "eval/datasets/coding_memory_v1/oracles/island-north--corrections.py": "e2cadf6e4f365f94cf0f440758b173da4d14ba12c03a84351e0608f0c60bccc5", + "eval/datasets/coding_memory_v1/oracles/island-north--long_documents.py": "300246fd3d85d73b63066d133361bc784ae26b46f4197c5c41ac960eb37f9508", + "eval/datasets/coding_memory_v1/oracles/island-north--multilingual.py": "f8aba8e14ed3c420e90e701880ea38e924e1219e3cc3643ba8bde17cb31ddef6", + "eval/datasets/coding_memory_v1/oracles/island-north--paraphrases.py": "503ce2c132c666bb67920e90d4a898f5a73f1d66779cd83c1885812f223e30e5", + "eval/datasets/coding_memory_v1/oracles/island-north--poisoning.py": "3369d956e5af12bc6be80828c4c6ab03ccf80c79e38dea3162b4e2c09771ff30", + "eval/datasets/coding_memory_v1/oracles/island-north--scope_boundaries.py": "9b4f6186f71713175f1eb5aacb0b6258c746b2297ca7c692f54bf5feabd5d261", + "eval/datasets/coding_memory_v1/oracles/island-north--temporal_history.py": "7c22b0edbf8edb7a511a581ffe6f1ce14454ef3feb527eca90d1386ce00b2c6b", + "eval/datasets/coding_memory_v1/oracles/island-north--unsupported_questions.py": "c1e5d526b0c6b88394f19a8b8edca7dae1db718b24be2d57374eb3769bbd1f24", + "eval/datasets/coding_memory_v1/oracles/island-violet--code_relationships.py": "9672d608ea0c8623ff1fe760f943173b2fdac5dc4ea4b7ae0dba33436d860254", + "eval/datasets/coding_memory_v1/oracles/island-violet--condition_values.py": "cfea91adcc9b3f9eb28cc24cf310e10b436f81cff51297f161b9a3b59a21f62c", + "eval/datasets/coding_memory_v1/oracles/island-violet--corrections.py": "075d48a2dfd91af8328982fe475ec915c00b75db38819aff3b4c2343147e2bfc", + "eval/datasets/coding_memory_v1/oracles/island-violet--long_documents.py": "85cc789277e59925b36ea3bd82e23f989e79fb0be2e55083e2656e518641dd3c", + "eval/datasets/coding_memory_v1/oracles/island-violet--multilingual.py": "84615b70eb74eb2180dd8a89d8d34c11e904030bfaa26c57e2e6c968daf64d29", + "eval/datasets/coding_memory_v1/oracles/island-violet--paraphrases.py": "5244d32ffc4127d519e2f5a875ffaecf7bc51eaa1426d2aacbc42490cf291d22", + "eval/datasets/coding_memory_v1/oracles/island-violet--poisoning.py": "9bde478876ea0be60555d5bd26d3790e4f305327ece10bf6c258bc564354fa1d", + "eval/datasets/coding_memory_v1/oracles/island-violet--scope_boundaries.py": "8e8b0a64342963b4dbc000578a72c0e0801fc1ca4af140f09b55d4cdb03b1274", + "eval/datasets/coding_memory_v1/oracles/island-violet--temporal_history.py": "3e187ce259c7f57f6dba4a28c3ecdf31fbe6458f7d908b22cb8b5ce8325437ae", + "eval/datasets/coding_memory_v1/oracles/island-violet--unsupported_questions.py": "0e60f29a47953c5d434c159eece26bbb03cc837842c493111b34310f9cff4693", + "eval/datasets/coding_memory_v1/oracles/island-west--code_relationships.py": "c19c42978fa5f9c6e1f41886eb1cc0fdb7e12304ba58b160b4cbe1975640acfe", + "eval/datasets/coding_memory_v1/oracles/island-west--condition_values.py": "07c4c591e08f5248f3016dc16cecfea7dd75bebff1a61599f258938d7031043d", + "eval/datasets/coding_memory_v1/oracles/island-west--corrections.py": "a7d93dfb579ec4f58cf2f6d29a6d0ab7dbf1a17f6ae49b98902a5ea22525e649", + "eval/datasets/coding_memory_v1/oracles/island-west--long_documents.py": "20a50dd63e04ce751115fca671b9da7ebbf240e26f39d494583cb405a03b750c", + "eval/datasets/coding_memory_v1/oracles/island-west--multilingual.py": "65d82c4d7968e0e597509c692015bdac0b92841c726d87560d9caa32429176f4", + "eval/datasets/coding_memory_v1/oracles/island-west--paraphrases.py": "feb7eb2e8592162d7d1f433610cb02ba04cd9797191d65a9f0e5bc4f4711c4ed", + "eval/datasets/coding_memory_v1/oracles/island-west--poisoning.py": "3d7c2c6a7f247f3e8158d5ba007bbbdf027a74e9a2c52f52953b3ccf2c21f17f", + "eval/datasets/coding_memory_v1/oracles/island-west--scope_boundaries.py": "ff0f36139f6da5428b9538d108aded522e62ca803035ebef78e11255cf55e08b", + "eval/datasets/coding_memory_v1/oracles/island-west--temporal_history.py": "42cb1c552ce01308b47d526c6e6993fb3270239b392cfa9f5e42b8e0fcfb3f82", + "eval/datasets/coding_memory_v1/oracles/island-west--unsupported_questions.py": "911b4257380640d35d6e2fc5292e235eedc113f5e71d8e71e8ccab7c72d4f290", + "eval/datasets/coding_memory_v1/oracles/juniper-green--code_relationships.py": "373395d3b70f64f8102609d27ce10c4aeb937ac73988c2ce2be1e283df94ef82", + "eval/datasets/coding_memory_v1/oracles/juniper-green--condition_values.py": "f04794a96b06d537550227ec308b1f02405cdab42d7d3ae4db4afd2c25bee8cd", + "eval/datasets/coding_memory_v1/oracles/juniper-green--corrections.py": "5a354a8c8efdbc498d25ffbf6095fee7b3d7d638134b452c7c9ecb186b4e1bc7", + "eval/datasets/coding_memory_v1/oracles/juniper-green--long_documents.py": "8610157668d6a90c794a956f6f0b432f03e3559238599ad1cb412f6f1a2f7e46", + "eval/datasets/coding_memory_v1/oracles/juniper-green--multilingual.py": "dcb99335fa18b008197532809ff7127be2cda600848e10c8bfe4677bd896f90e", + "eval/datasets/coding_memory_v1/oracles/juniper-green--paraphrases.py": "7a4cb1bbe3de2e6fe6a33b1f78829f4aeb21d21c2e8d4d3399d3d98958ba0909", + "eval/datasets/coding_memory_v1/oracles/juniper-green--poisoning.py": "ba73c2c6f04590538e16c50be527da60f5949781bc8833a3c18a7c597146eb10", + "eval/datasets/coding_memory_v1/oracles/juniper-green--scope_boundaries.py": "9d09c0851a3906b6281cb1c5811714224161e27a1aa46edd81c5659e7f93cd3d", + "eval/datasets/coding_memory_v1/oracles/juniper-green--temporal_history.py": "fd05595a452952dca2d0089f5701a60145a3b5705b78a5ff2f8f9f13fbf1c259", + "eval/datasets/coding_memory_v1/oracles/juniper-green--unsupported_questions.py": "f58bfcb89db799dc1578fc8791b49e97e7f22b30e720aeaf661f0ad2e6a9660c", + "eval/datasets/coding_memory_v1/oracles/juniper-north--code_relationships.py": "a84f02bd3c2b9c367248dae8aa3580d83de6a1beb6fe464553eb8a2bfb172b75", + "eval/datasets/coding_memory_v1/oracles/juniper-north--condition_values.py": "d70311ae339556f18240f824d0f0bd0024060c2698fcca8fe7cb540e8a8bc727", + "eval/datasets/coding_memory_v1/oracles/juniper-north--corrections.py": "fa290629339007fdd4230a76d49fa294a218c5f0cf6b90c3074678b0f16c539a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--long_documents.py": "e30025d68ae3b48b566bf3fb2aea5e3603f5f7ab658da8fcb2256d3b1964c85a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--multilingual.py": "b8bb0199c4acfe71df8d4e7df75bdd37e038cc72aa82bc6df10715819aeb3686", + "eval/datasets/coding_memory_v1/oracles/juniper-north--paraphrases.py": "aabf70509d3b0602d43c9590f04fa3ad1370a40c266d20f64a5ece15d4c79a51", + "eval/datasets/coding_memory_v1/oracles/juniper-north--poisoning.py": "ebfb9d7bf3c50eed8f44b73e391496ef377942de389b6feb64c7a1c0f9646444", + "eval/datasets/coding_memory_v1/oracles/juniper-north--scope_boundaries.py": "06c2c9d57ade79139c9b0d20568703477bb9e3a934f2f8900ad717ef157e5844", + "eval/datasets/coding_memory_v1/oracles/juniper-north--temporal_history.py": "0d97ba6d7a5d7741bf248b599ed18ae81b1c0053ad53cbc64934f31e9c3461aa", + "eval/datasets/coding_memory_v1/oracles/juniper-north--unsupported_questions.py": "526648ba7a4edc21bc2eb589c1e5c98a20fb07aa692687de4c3845e559be8096", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--code_relationships.py": "c73fd24d0adbeda6c7afeb15ab07296c0438402893e8d442af26865106d6e8ea", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--condition_values.py": "4aadae570ef84f976d49ba1fc92574ef55630b1c3017e90dbec1f85e6fb74c4a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--corrections.py": "07236b2a88df73c8d0f6afbe7d972fdc18f8c835a852f5c20748a369c77d82e2", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--long_documents.py": "54d3201b621b168ce03963c423942f142cb403f9d90234f063ff33b7add4d2dc", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--multilingual.py": "e0cc26d743cbea8e98261895474879d078fd53941c075606bfc6e52ee098db93", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--paraphrases.py": "a1f836316408052cab1253b56b5caa6b1432fe6eeaabbb5872da97ec9bde633a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--poisoning.py": "bc09271eadf77f1b6c03fff20ca9c0f0a42a99d1c5600e6b7843f0a0d549ed5d", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--scope_boundaries.py": "17a7258bed9efe1c86a05756c5b5d17926fd72f01de4b2addd5d2fb4550f4da5", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--temporal_history.py": "8bda8599d861857204c48b55729607c8cb0cb3ae2701eb18fb600d398468cafe", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--unsupported_questions.py": "10cdbb013f78f0e54c31a6e76f03d8d15a6063fd7971a2d803a390890c036ad2", + "eval/datasets/coding_memory_v1/oracles/juniper-west--code_relationships.py": "f0a682d413b3d8418c664db2775de4eef35240c508cc71ca6bbc055cd0c8dbe6", + "eval/datasets/coding_memory_v1/oracles/juniper-west--condition_values.py": "200a4b78f201e992ac10112a194c97b88841dc5930e3e7de9bfc076bf4c69fa7", + "eval/datasets/coding_memory_v1/oracles/juniper-west--corrections.py": "41ea9b5a5f40d8703343f4570593c3f27905e5ff70fae57bdbdb5fcccc585d22", + "eval/datasets/coding_memory_v1/oracles/juniper-west--long_documents.py": "7d8cdd01c5d90ad62e9da93a99febead683e3f01c5ca37315382a2fb0f512d76", + "eval/datasets/coding_memory_v1/oracles/juniper-west--multilingual.py": "1815adc5946bf9e7dba16786d8c29f9466537b7a43b1c392f927b61c56da54ee", + "eval/datasets/coding_memory_v1/oracles/juniper-west--paraphrases.py": "5d0110bc2098d2143303476fb5c5714086d0278b848110c63aa626e0b88311cc", + "eval/datasets/coding_memory_v1/oracles/juniper-west--poisoning.py": "4e16d9de9931cffc6915805b4fc375dad3ffb7fad17eb893205ce6d07102bcb3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--scope_boundaries.py": "6c5d875184c890a922ee18ac423598fdcece109a91e9e62d5a7ccc82d2eaaa70", + "eval/datasets/coding_memory_v1/oracles/juniper-west--temporal_history.py": "3404fdbb5cc4693333d48d27da928531279d148ffe1cdadbdd741dfc1a8d38d3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--unsupported_questions.py": "b85a4cf14f9596cd14b480acd323772fc91084ad1413fa27435bdb7ffe5baa6b", + "eval/datasets/longdoc.jsonl": "7f5ade95e1f283d0db8cf78e53ed8995d3534f847e616d2c0005fd8da37ac790", + "eval/engine_capacity.py": "1940da1c3a435d81c7b7a1a689e966c23b92e4f94af115b45813dd30e2c04eec", + "eval/evidence_contracts.py": "03969fdf01e78135c66e698d3f523e5312ccca3737dd3036b37a2c6676ba4ea2", + "eval/external.py": "98500a97c18152b1b86a270062033c48176224d7468ac0f703ddc7de862a30e2", + "eval/external_checkpoints.py": "3bef38d03bba6d5242d7edef089a80da7064b7dcf0187c292becec92d485304b", + "eval/extractor_quality.py": "50820fe7f821d111e17e4e77a3d1159e7d6979d110b052c4f254a5b309c2652a", + "eval/fts_insert_scaling.py": "6088997e0f85d430fafb74509e24a960fbd59c06c8b2839285942b97d2116724", + "eval/graph_every_bench.py": "79da573c5edf315f71bfab412d3ea283b8da45d1fdabc78ddd19302ead09e4f0", + "eval/graph_traversal.py": "b094f75c3a1d75ba3cf19e372187d692d3c595a1d9bde19bbe95ae0c79a5175f", + "eval/grounded.py": "053d5193b716a2c3e507fcd44057d392de910a4442b46bd7cc1f30ac0ba68541", + "eval/handoff_quality.py": "7daf635510764e236f48ca7e2537a85d8ebc1ad995513144329c1f0236405937", + "eval/harness.py": "8c96c26a121dfc2d9ea051a05861af8951c93a732dba9cb13de0de178414b016", + "eval/hosted_evidence.py": "7946cd8c1e3aa291268271b2aa11210d5f09c9b05ba635aa0b64bef07bdcee45", + "eval/hosted_ledger.py": "a53036d12ff671371c148910a816fb20c7e7f3346250a303722352f47b06c476", + "eval/hosted_luna.py": "4dbf02a65eec38bcde92d82952a0b372abbac1f68378d11a04528f4a31a835dc", + "eval/local_benchmark_queue.py": "43fa67b4d653e770822da816511e8e62b3714e60d2edd49ea2a4c5c3d8d20851", + "eval/local_capacity_campaign.py": "ab4935263f9d24c4e38bd4f16164b4c4c07eff91c695809b6fc75299d4f03d62", + "eval/longmemeval_v2.py": "defb4d47f453aa4615a8f101b82df3fadf64f0f9eae0ce1021d86d3750dad437", + "eval/longmemeval_v2_evidence.py": "8486bd4dcfdd8b1f7a14c32fe4f427c980ccdcc3aa2eb018d7dfc40305412eff", + "eval/longmemeval_v2_matrix.py": "ca085cd59481813cce5dbdfbc94f40f67173ac3a1bc3dce6f6d3e09eb7b08153", + "eval/metrics.py": "16857e2cf6ed339cb57a26c9bfa1879444b4d279bd972e5a9fa644ed1308afe0", + "eval/native_coverage_scaling.py": "0d318c116241050fc0c7bdbbb5646ca67944d7c304ccd9a462834e0553ffa90a", + "eval/performance.py": "dccc55c26dc396f9fee98defd152900cf8aabeb5d6198bc711e0eb8f472ecc57", + "eval/performance_engine.py": "3d37cf0a5989c8fa6e8b6ab7ae0b2e0d5410a8b922d2f3130c1a7794d93dcbb1", + "eval/planned_recall.py": "f9a87291ecb181045b98ca65fe55db820bf7cee4ae4f4d087ca3458afdd7837e", + "eval/proactive_ranking.py": "8610541f1d547f9c0eb46d078dbcaa670c0a97157acc37f96ec08b482cb7a6ab", + "eval/productivity.py": "6d4644ebdc44472aeb3879963774fab276bfa269b781139c46ded48774a22717", + "eval/public_readiness.py": "5ce8a18d0bfe09e75e88548a589b8fc6d2cbf04c0f8cd1ce51cd9519136a2751", + "eval/redteam_poisoning.py": "fce120cc3adf2ee966b59cd3ea7f20d242a0af49b52492143543130fe14c0cc8", + "eval/reinforcement.py": "72ed766775a2658eaa728afec51c0ac22d97a90e813111954df66a6ec50f2bef", + "eval/repair_discovery.py": "db05496fbbcb0df86c5cdc2f0c85fb6b6605b0cace6cb44ae2add10b72784b5f", + "eval/resolver_reworded_corrections.py": "a9054778a37b2175b46f04b674b4779e358931eee5d2ae52bbc5f953d234fb9e", + "eval/resource_hierarchy.py": "5ab6c989bb143c4386749c45a33c190447e829c1b5657e8c0aca30f34bd69461", + "eval/rework_statistics.py": "e12c14288797c5cf2dd93d51f606244287bc2f4ff8bd401f1d1b072efd1f9529", + "eval/run_longmemeval_v2.py": "866863d9f8f7ce8f7c3c36741ab324faa5fae417827f907c655eace38de0f5ac", + "eval/task_pairs.py": "fddc54804e8837ec0731813297fb55825458317f898e29176e16f3f5a2f527fd", + "eval/user_journeys.py": "a1c8436d4a6871baff21f9aa4f6ac1545def60d946cd3b1454c3d9cd8661a049", + "eval/vector_scale.py": "3f9c327d9eca1a857512ddc208e972933be1a7d4fa7fa0017aca0cbf8fe7bb6d", + "eval/vector_scale_storage.py": "24040fd1b96b9f9cd43ea37b0b37ea118a02bd096aff77fc67ff8b0df769b1dc", + "eval/vector_scan_plan.py": "34fba3d029bfc78134e8c9c450b019ff56c3bdcbeb921400888077cb44e9b848", + "scripts/export_offline_evidence.py": "4e10c2b3d5f6a2024a7f95f7b87ce47ec2cb4ef31c55611b2e5cf35502ebc0ba" + } + } +} diff --git a/docs/benchmark-evidence/offline-fixtures-v74.json.sha256 b/docs/benchmark-evidence/offline-fixtures-v74.json.sha256 new file mode 100644 index 000000000..782b9376c --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v74.json.sha256 @@ -0,0 +1 @@ +7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a offline-fixtures-v74.json diff --git a/docs/images/context-efficiency.svg b/docs/images/context-efficiency.svg index 7eb5ca227..d7f99c3be 100644 --- a/docs/images/context-efficiency.svg +++ b/docs/images/context-efficiency.svg @@ -1,6 +1,6 @@ Measured context and retrieval boundaries -Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 aa7ed9c141afcc82fc2a05b63ed9037842f2ea8372667f3142cf9bb795833988. +Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a. @@ -105,7 +105,7 @@ mcp transport not measured SOURCE ARTIFACT -aa7ed9c141af +7a5dafabf4ef SHA-256 prefix Artifact-driven local measurements diff --git a/docs/images/evidence-backed-agent-examples.svg b/docs/images/evidence-backed-agent-examples.svg index 4025040d1..26f634ea7 100644 --- a/docs/images/evidence-backed-agent-examples.svg +++ b/docs/images/evidence-backed-agent-examples.svg @@ -1,6 +1,6 @@ Three evidence-backed Engraphis agent behaviors - A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: aa7ed9c141afcc82fc2a05b63ed9037842f2ea8372667f3142cf9bb795833988. + A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: 7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a. @@ -47,5 +47,5 @@ Reproduce: eval.chunking_eval + eval.grounded - SHA256 aa7ed9c141afcc82fc2a05b63ed9037842f2ea8372667f3142cf9bb795833988 + SHA256 7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a diff --git a/engraphis/classic_assets/dashboard.js b/engraphis/classic_assets/dashboard.js index 42517944a..e21426964 100644 --- a/engraphis/classic_assets/dashboard.js +++ b/engraphis/classic_assets/dashboard.js @@ -1220,7 +1220,7 @@ function loadAllGraphEngine(){ if(typeof EngraphisEveryGraph!=='undefined')return Promise.resolve(); if(!ALL_GRAPH_ENGINE_LOADING){ ALL_GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ - const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260905-every-20'; + const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1'; script.onload=()=>{typeof EngraphisEveryGraph==='undefined'?reject(new Error('Every-node graph asset loaded without registering EngraphisEveryGraph')):resolve()}; script.onerror=()=>reject(new Error('Every-node graph asset could not load')); document.head.appendChild(script); diff --git a/engraphis/core/graph_scene.py b/engraphis/core/graph_scene.py index cc5531414..c9f90afd3 100644 --- a/engraphis/core/graph_scene.py +++ b/engraphis/core/graph_scene.py @@ -102,8 +102,8 @@ def _hash_record( """Return a deterministic hash view of an emitted scene record. Layout coordinates are derived from ``scene_hash`` and therefore must not be fed back - into it. All other fields are part of the public scene identity, including optional - repository and temporal metadata. + into it. Derived renderer aliases may likewise be excluded. All other fields are part of + the public scene identity, including optional repository and temporal metadata. """ def normalize(value: Any) -> Any: if isinstance(value, Mapping): @@ -120,7 +120,7 @@ def normalize(value: Any) -> Any: return [normalize(item) for item in value] return value - ignored = {"x", "y", *exclude} + ignored = {"x", "y", "evidence_mass", *exclude} return { str(key): normalize(value) for key, value in sorted(record.items()) if key not in ignored @@ -1416,6 +1416,7 @@ def build_canonical_graph( "entity_quality": quality, "mass_score": public_score, "gravity_mass": gravity_mass, + "evidence_mass": gravity_mass, "visual_radius": visual_radius, "anchor_eligible": bool(quality), }) @@ -1427,6 +1428,7 @@ def build_canonical_graph( "entity_quality": 0.0, "mass_score": 0.0, "gravity_mass": 0.0, + "evidence_mass": 0.0, "visual_radius": 0.0, "anchor_eligible": False, }) @@ -2254,6 +2256,7 @@ def _build_complete_scene( "entity_quality": 1.0, "mass_score": public_score, "gravity_mass": gravity_mass, + "evidence_mass": gravity_mass, "visual_radius": visual_radius, "component_id": f"component_memory_{memory_id}", "community_id": memory_community[memory_id], @@ -2276,6 +2279,7 @@ def _build_complete_scene( if node.get("ghost"): node["mass_score"] = 0.0 node["gravity_mass"] = 0.0 + node["evidence_mass"] = 0.0 node["weighted_degree"] = 0.0 node["pagerank"] = 0.0 node["support_count"] = 0 @@ -2591,6 +2595,7 @@ def build_graph_scene( node["ghost"] = True node["mass_score"] = 0.0 node["gravity_mass"] = 0.0 + node["evidence_mass"] = 0.0 node["weighted_degree"] = 0.0 node["pagerank"] = 0.0 node["support_count"] = 0 @@ -3065,10 +3070,11 @@ def eligible(node_id: str) -> bool: "x", "y", "gravity_mass", "visual_radius", "mass_score", "weighted_degree", "pagerank", "support_count", "scene_rank", "anchor_role", "system_anchor_id", "orbit_tier", "orbit_radius", + "evidence_mass", "galactic_radius", "galactic_target_radius", ) _ALL_PRESENTATION_EDGE_FIELDS = ( "id", "source", "target", "relation", "layer", "ghost", "strength", - "rest_length", "spring_strength", + "rest_length", "spring_strength", "weight", ) _ALL_PRESENTATION_META_FIELDS = ( "workspace", "level", "scene_hash", "index_generation", diff --git a/engraphis/dashboard_assets/engraphis-graph-every-worker.js b/engraphis/dashboard_assets/engraphis-graph-every-worker.js index 1e3909667..d02789519 100644 --- a/engraphis/dashboard_assets/engraphis-graph-every-worker.js +++ b/engraphis/dashboard_assets/engraphis-graph-every-worker.js @@ -93,7 +93,7 @@ ? String(node.community_id) : null; if (!communityIndex.has(group)) communityIndex.set(group, communityIndex.size); communities[index] = communityIndex.get(group); - const mass = Number(node.evidence_mass); + const mass = Number(node.evidence_mass != null ? node.evidence_mass : (node.gravity_mass != null ? node.gravity_mass : node.mass_score)); evidenceMass[index] = Number.isFinite(mass) && mass > 0 ? mass : 0; } @@ -111,7 +111,7 @@ if (source === undefined || target === undefined) continue; sources.push(source); targets.push(target); - const weight = Number(link.weight); + const weight = Number(link.weight != null ? link.weight : (link.strength != null ? link.strength : 1)); weights.push(Number.isFinite(weight) && weight > 0 ? weight : 1); relations.push(String(link.relation || link.label || "")); edgeLayers.push(String(link.layer || 'semantic')); diff --git a/engraphis/dashboard_assets/engraphis-graph-every.js b/engraphis/dashboard_assets/engraphis-graph-every.js index e3c84f488..07befd2f4 100644 --- a/engraphis/dashboard_assets/engraphis-graph-every.js +++ b/engraphis/dashboard_assets/engraphis-graph-every.js @@ -8,7 +8,7 @@ (function () { 'use strict'; - const WORKER_URL = '/v2-assets/engraphis-graph-every-worker.js?v=20260830-spacetime-controls-20'; + const WORKER_URL = '/v2-assets/engraphis-graph-every-worker.js?v=20260925-evidence-mass-1'; const MAX_NODES = 20000; const MAX_LINKS = 200000; const LABEL_MAX = 220; diff --git a/engraphis/dashboard_assets/ledger.js b/engraphis/dashboard_assets/ledger.js index 262839fc9..9855f6f55 100644 --- a/engraphis/dashboard_assets/ledger.js +++ b/engraphis/dashboard_assets/ledger.js @@ -475,7 +475,7 @@ if (!graphAllAssetsPromise) { const controller = new AbortController(); const attempt = loadScript( - graphAssetSource('/v2-assets/engraphis-graph-every.js?v=20260905-every-20'), + graphAssetSource('/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1'), 'EngraphisEveryGraph', controller.signal, ); graphAllAssetsPromise = attempt; diff --git a/engraphis/read_only_api.py b/engraphis/read_only_api.py index 98f0a1a60..f1f9edcfc 100644 --- a/engraphis/read_only_api.py +++ b/engraphis/read_only_api.py @@ -219,6 +219,7 @@ def run(fn, *args, **kwargs): logger.info("graph scene exceeds capacity (%s, resource=%s, count=%s, limit=%s)", type(exc).__name__, exc.resource, exc.count, exc.limit) raise HTTPException(status_code=413, detail={ + "code": "GRAPH_CAPACITY", "error": "graph scene exceeds the safety limit", "safety_state": "capacity_exceeded", "degraded": True, diff --git a/engraphis/routes/v2_api.py b/engraphis/routes/v2_api.py index 395d0a8ba..dab033191 100644 --- a/engraphis/routes/v2_api.py +++ b/engraphis/routes/v2_api.py @@ -186,6 +186,7 @@ def _run(fn, *a, **k): logger.info("graph scene exceeds capacity (%s, resource=%s, count=%s, limit=%s)", type(exc).__name__, exc.resource, exc.count, exc.limit) raise HTTPException(status_code=413, detail={ + "code": "GRAPH_CAPACITY", "error": "graph scene exceeds the safety limit", "safety_state": "capacity_exceeded", "degraded": True, diff --git a/engraphis/service.py b/engraphis/service.py index 3a3dd55e6..00d44a8e9 100644 --- a/engraphis/service.py +++ b/engraphis/service.py @@ -11501,14 +11501,6 @@ def graph(self, *, workspace: str, limit: int = 2000, ] selected_layers = {layer.value for layer in selected_graph_layers} - selected_graph_layers = None - selected_layers = None - if layers is not None: - selected_graph_layers = [ - _enum(layer, GraphLayer, "layer") for layer in layers - ] - selected_layers = {layer.value for layer in selected_graph_layers} - def temporal_sql(alias: str, *, history: bool = False ) -> tuple[str, list[float]]: """Parameterized world/system visibility for graph-owned SQL. @@ -11557,14 +11549,6 @@ def public_edge_sql(alias: str, *, history: bool = False [*support_params, *memory_params], ) - selected_graph_layers = None - selected_layers = None - if layers is not None: - selected_graph_layers = [ - _enum(layer, GraphLayer, "layer") for layer in layers - ] - selected_layers = {layer.value for layer in selected_graph_layers} - def visible_entities(): """Return public entities under both temporal anchors in one bounded query. diff --git a/engraphis/static/dashboard.js b/engraphis/static/dashboard.js index 42517944a..e21426964 100644 --- a/engraphis/static/dashboard.js +++ b/engraphis/static/dashboard.js @@ -1220,7 +1220,7 @@ function loadAllGraphEngine(){ if(typeof EngraphisEveryGraph!=='undefined')return Promise.resolve(); if(!ALL_GRAPH_ENGINE_LOADING){ ALL_GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ - const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260905-every-20'; + const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1'; script.onload=()=>{typeof EngraphisEveryGraph==='undefined'?reject(new Error('Every-node graph asset loaded without registering EngraphisEveryGraph')):resolve()}; script.onerror=()=>reject(new Error('Every-node graph asset could not load')); document.head.appendChild(script); diff --git a/tests/test_benchmark_evidence.py b/tests/test_benchmark_evidence.py index b6f6b43f2..79468537a 100644 --- a/tests/test_benchmark_evidence.py +++ b/tests/test_benchmark_evidence.py @@ -33,8 +33,8 @@ ROOT = Path(__file__).resolve().parents[1] -PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v73.json" -PUBLIC_OFFLINE_SHA = "aa7ed9c141afcc82fc2a05b63ed9037842f2ea8372667f3142cf9bb795833988" +PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v74.json" +PUBLIC_OFFLINE_SHA = "7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a" @pytest.fixture(scope="module") diff --git a/tests/test_documentation_contracts.py b/tests/test_documentation_contracts.py index 7cca06477..304f79af8 100644 --- a/tests/test_documentation_contracts.py +++ b/tests/test_documentation_contracts.py @@ -106,7 +106,7 @@ def test_core_backend_imports_stay_behind_outer_composition_root() -> None: def test_benchmark_text_alternatives_match_registered_fixture_boundary() -> None: """The current image and its alt text expose only current registered boundaries.""" - registry = json.loads(_read("docs/benchmark-evidence/offline-fixtures-v73.json")) + registry = json.loads(_read("docs/benchmark-evidence/offline-fixtures-v74.json")) measurements = {run["id"]: run["result"] for run in registry["runs"]} payload = measurements["offline-performance"] readme = _read("README.md") diff --git a/tests/test_graph_engine_asset.py b/tests/test_graph_engine_asset.py index c1c63eebc..0bc1efdc9 100644 --- a/tests/test_graph_engine_asset.py +++ b/tests/test_graph_engine_asset.py @@ -410,7 +410,7 @@ def test_show_all_lazily_loads_its_renderer_after_the_main_engine_is_ready() -> report = _run_routing("all-loaded") assert report["appended"] == [ - "/v2-assets/engraphis-graph-every.js?v=20260905-every-20" + "/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1" ] assert report["beforeSettle"] == {"engine": 0, "classic": 0} assert report["engine"] == 1 diff --git a/tests/test_graph_every_asset.py b/tests/test_graph_every_asset.py index f8f34320e..4a69ffd6b 100644 --- a/tests/test_graph_every_asset.py +++ b/tests/test_graph_every_asset.py @@ -79,6 +79,34 @@ def test_worker_compacts_to_typed_arrays_and_preserves_falsy_ids() -> None: assert report["bridges"] == [0, 1] +def test_worker_uses_visual_weight_for_zero_strength_ghost_edges() -> None: + script = """ +send({ type: 'prepare', payload: { + nodes: [ + { id: 'a', community_id: 'a' }, + { id: 'b', community_id: 'b' }, + { id: 'c', community_id: 'c' }, + ], + links: [ + { source: 'a', target: 'b', weight: 4, strength: 0, ghost: true }, + { source: 'a', target: 'c', weight: 1, strength: 8 }, + ], +}}); +setTimeout(() => { + const ready = latest('ready'); + console.log(JSON.stringify({ + weights: Array.from(ready.edgeWeights), + ghosts: Array.from(ready.edgeGhosts), + bridges: Array.from(ready.edgeBridges), + })); +}, 50); +""" + report = _run_worker(script) + assert report["weights"] == [4.0, 1.0] + assert report["ghosts"] == [1, 0] + assert report["bridges"][0] == 1 + + def test_worker_refuses_over_capacity_with_explicit_response() -> None: script = """ const big = Array.from({ length: 20001 }, (_, i) => ({ id: `n${i}` })); diff --git a/tests/test_graph_explorer_v2.py b/tests/test_graph_explorer_v2.py index a73619a08..c2ee646da 100644 --- a/tests/test_graph_explorer_v2.py +++ b/tests/test_graph_explorer_v2.py @@ -1751,6 +1751,7 @@ def test_complete_scene_capacity_error_is_explicit_and_never_samples(monkeypatch assert response.status_code == 413 detail = response.json()["detail"] + assert detail["code"] == "GRAPH_CAPACITY" assert detail["safety_state"] == "capacity_exceeded" assert detail["degraded"] is True assert detail["truncated"] is False @@ -2003,7 +2004,9 @@ def test_graph_scene_history_is_zero_physics_and_does_not_change_live_mass(): beta_history = next(node for node in history["nodes"] if node["id"] == beta) assert alpha_node["ghost"] is True assert alpha_node["gravity_mass"] == 0.0 + assert alpha_node["evidence_mass"] == 0.0 assert beta_history["gravity_mass"] == beta_live["gravity_mass"] + assert beta_history["evidence_mass"] == beta_live["evidence_mass"] assert (beta_history["x"], beta_history["y"]) == ( beta_live["x"], beta_live["y"] ) diff --git a/tests/test_graph_scene_contract.py b/tests/test_graph_scene_contract.py index 754d6a83a..93b20f0ee 100644 --- a/tests/test_graph_scene_contract.py +++ b/tests/test_graph_scene_contract.py @@ -5,7 +5,7 @@ import math from pathlib import Path -from engraphis.core.graph_scene import project_all_presentation +from engraphis.core.graph_scene import _hash_record, project_all_presentation FIXTURE = Path(__file__).with_name("graph_scene_fixture.json") @@ -14,6 +14,11 @@ def _scene() -> dict: return json.loads(FIXTURE.read_text(encoding="utf-8")) +def test_hash_record_ignores_derived_evidence_alias() -> None: + base = {"id": "n1", "gravity_mass": 3.0, "visual_radius": 4.0} + assert _hash_record(base) == _hash_record({**base, "evidence_mass": 3.0}) + + def test_graph_scene_fixture_has_stable_public_shape(): scene = _scene() assert set(scene) == { @@ -120,8 +125,10 @@ def test_all_presentation_projects_only_renderer_fields_without_mutating_scene() scene = _scene() scene["nodes"][0]["private_evidence"] = [{"memory": "must stay server-side"}] scene["nodes"][0]["ghost"] = True + scene["nodes"][0]["evidence_mass"] = 4.0 scene["nodes"][0]["member_ids"] = ["member-primary", "member-extra"] scene["edges"][0]["support_ids"] = ["mem_private"] + scene["edges"][0]["weight"] = 3.0 projected = project_all_presentation(scene) assert projected["meta"]["all_projected"] is True @@ -132,11 +139,12 @@ def test_all_presentation_projects_only_renderer_fields_without_mutating_scene() assert projected["nodes"][0]["member_ids"] == ["member-primary"] assert { "id", "label", "type", "community_id", "x", "y", - "anchor_role", "system_anchor_id", "gravity_mass", "visual_radius", + "anchor_role", "system_anchor_id", "gravity_mass", "evidence_mass", + "visual_radius", } <= projected["nodes"][0].keys() assert { - "id", "source", "target", "relation", "layer", "strength", "rest_length", - "spring_strength", "bridge", + "id", "source", "target", "relation", "layer", "strength", "weight", + "rest_length", "spring_strength", "bridge", } <= projected["edges"][0].keys() assert projected["edges"][0]["relation"] == scene["edges"][0]["relation"] assert set(projected) == {"meta", "nodes", "edges"} diff --git a/tests/test_read_only_api.py b/tests/test_read_only_api.py index 58a689563..2ec185b2c 100644 --- a/tests/test_read_only_api.py +++ b/tests/test_read_only_api.py @@ -7,7 +7,7 @@ from engraphis.config import settings from engraphis.core.interfaces import Edge, GraphLayer, Node from engraphis.read_only_api import MAX_READ_ONLY_BODY_BYTES, create_read_only_app -from engraphis.service import MemoryService +from engraphis.service import GraphSceneCapacityExceeded, MemoryService from engraphis.backends.graph_extractor import RegexGraphExtractor @@ -92,6 +92,22 @@ def test_tokenless_read_only_factory_rejects_remote_peers(): assert response.json() == {"detail": "remote access requires a bearer token"} +def test_read_only_graph_capacity_error_uses_stable_code(): + class _Service: + def graph(self, **_kwargs): + raise GraphSceneCapacityExceeded( + resource="graph edges", count=5_001, limit=5_000 + ) + + response = TestClient(create_read_only_app(_Service())).get( + "/graph", params={"workspace": "w", "limit": 5_000} + ) + + assert response.status_code == 413 + assert response.json()["detail"]["code"] == "GRAPH_CAPACITY" + assert response.json()["detail"]["resource"] == "graph edges" + + def test_read_only_api_serves_graph_and_intent_recall(): svc = MemoryService.create(":memory:", graph_extractor="regex") pending = svc.remember( From c662167d4cf2441d79f62d3052ebca71cf1462a2 Mon Sep 17 00:00:00 2001 From: Coding-Dev-Tools Date: Sun, 27 Sep 2026 02:35:03 -0400 Subject: [PATCH 2/6] fix: harden graph rendering and opt-in decision boundaries --- BENCHMARKS.md | 10 +- README.md | 4 +- .../offline-fixtures-v75.json | 691 ++++++++++++++++++ .../offline-fixtures-v75.json.sha256 | 1 + docs/images/context-efficiency.svg | 2 +- .../images/evidence-backed-agent-examples.svg | 4 +- engraphis/backends/jev_decision.py | 176 +++++ engraphis/classic_assets/dashboard.js | 8 +- engraphis/classic_assets/index.html | 2 +- .../dashboard_assets/engraphis-graph-every.js | 65 +- engraphis/dashboard_assets/engraphis-graph.js | 164 ++++- .../dashboard_assets/engraphis-spacetime.js | 38 +- engraphis/dashboard_assets/index.html | 33 +- engraphis/dashboard_assets/ledger.js | 103 ++- engraphis/static/dashboard.js | 8 +- engraphis/static/index.html | 2 +- scripts/rebind_offline_evidence.py | 15 + tests/e2e/graph-engine.spec.js | 84 ++- tests/e2e/ledger.spec.js | 69 +- tests/e2e/ledger_sliders_themes.spec.js | 20 +- tests/test_benchmark_evidence.py | 4 +- tests/test_documentation_contracts.py | 2 +- tests/test_graph_engine_asset.py | 252 +++++-- tests/test_graph_every_asset.py | 2 +- tests/test_graph_render_scheduling.py | 107 +++ tests/test_jev_backend.py | 130 ++++ tests/test_ledger_sliders_and_physics.py | 10 +- 27 files changed, 1738 insertions(+), 268 deletions(-) create mode 100644 docs/benchmark-evidence/offline-fixtures-v75.json create mode 100644 docs/benchmark-evidence/offline-fixtures-v75.json.sha256 create mode 100644 engraphis/backends/jev_decision.py create mode 100644 scripts/rebind_offline_evidence.py create mode 100644 tests/test_graph_render_scheduling.py create mode 100644 tests/test_jev_backend.py diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 5e17f8db8..62ed501ce 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -94,14 +94,14 @@ interpretation and do not count as additional benchmark-quality gains. ### Public numeric evidence registry Every exact public aggregate retained below comes from the checked-in, public-safe -[`offline-fixtures-v74.json`](docs/benchmark-evidence/offline-fixtures-v74.json) artifact. Its +[`offline-fixtures-v75.json`](docs/benchmark-evidence/offline-fixtures-v75.json) artifact. Its SHA-256 is -`7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a`, also recorded in the +`dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e`, also recorded in the adjacent `.sha256` file. The artifact contains no raw questions, answers, prompts, customer data, or per-record content fingerprints. The fixture-suite digest is -`e1fab68ff98f23cc0590344047c2bd18c19060d5297d2a753f6d079955f2a2f6`. The artifact defines +`4e752a18cceb4832598b0ec182986c13c30715a5cbc8e3f72eb62a4823019dcf`. The artifact defines the digest algorithm and records the SHA-256 of every suite and dataset file. Each evidence ID also binds its exact command through `sha256(UTF-8 exact command)`: @@ -123,10 +123,10 @@ Historical LoCoMo, graph, handoff, consolidation, and security figures remain pr source artifacts but are omitted from the current chart until each has a matching immutable, public-safe artifact. The chart labels coding outcomes, external datasets, and operational capacity as pending evaluation tracks rather than implying scores. Regenerate it with -`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v74.json --output docs/images/context-efficiency.svg` after selecting the report to publish. +`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v75.json --output docs/images/context-efficiency.svg` after selecting the report to publish. The companion examples are also generated from that artifact with -`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v74.json --output docs/images/evidence-backed-agent-examples.svg`. +`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v75.json --output docs/images/evidence-backed-agent-examples.svg`. The historical-to-executable mapping is in [`docs/BENCHMARK_CHANGE_COVERAGE.md`](docs/BENCHMARK_CHANGE_COVERAGE.md). diff --git a/README.md b/README.md index e120759ff..b1a4fe42f 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,9 @@ neither is an end-to-end question-answer score. Coding outcomes, external datase operational capacity remain separate pending evaluation tracks until their artifacts are selected. These values are evidence IDs `offline-chunking` and `offline-performance` in -[`offline-fixtures-v74.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v74.json), +[`offline-fixtures-v75.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v75.json), SHA-256 -`7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a`. +`dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e`. [`BENCHMARKS.md`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/BENCHMARKS.md#public-numeric-evidence-registry) records the matching suite digest, exact commands, and per-command config digests. The offline fixture registry intentionally excludes external, model-dependent, consolidation, productivity, diff --git a/docs/benchmark-evidence/offline-fixtures-v75.json b/docs/benchmark-evidence/offline-fixtures-v75.json new file mode 100644 index 000000000..329b298fd --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v75.json @@ -0,0 +1,691 @@ +{ + "environment": { + "embedding": "deterministic", + "numpy": "2.4.5", + "platform": "win32", + "python": "3.12.10", + "vector_backend": "numpy" + }, + "generated_on": "2026-09-27", + "privacy": { + "contains_answers": false, + "contains_customer_data": false, + "contains_per_record_fingerprints": false, + "contains_prompts": false, + "contains_raw_questions": false + }, + "runs": [ + { + "boundary": "Deterministic offline retrieval fixture; normalized-character token estimator; not external QA or provider billing.", + "command": "python -m eval.chunking_eval --dataset eval/datasets/longdoc.jsonl --k 5", + "config_digest": "c1c8196aa7e1568ef3844a9fb2d76b87f342c39108e32d6ad144b885a76143b8", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-chunking", + "result": { + "chunked": { + "max_stored_tokens": 59, + "mean_context_tokens": 214.3, + "mean_evidence_tokens": 42.4, + "memories": 24, + "recall_at_k": 1.0 + }, + "context_reduction_pct": 71.1, + "documents": 6, + "k": 5, + "questions": 18, + "token_counter": "engraphis.chars4.v1", + "whole": { + "max_stored_tokens": 213, + "mean_context_tokens": 740.3, + "mean_evidence_tokens": 162.2, + "memories": 6, + "recall_at_k": 1.0 + } + } + }, + { + "boundary": "Deterministic offline CodeMem fixture; serialized JSON-shape payload proxies, not MCP transport responses, provider billing, or latency claims.", + "command": "python -m eval.performance --dataset eval/datasets/codemem.jsonl --k 5 --iterations 10 --json", + "config_digest": "bbe4aca81e58d4830e50a8fc7729a1d15b71d97a6299bccd79432b7f119677d7", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-performance", + "result": { + "answer_token_recall": 1.0, + "compact_serialized_payload_tokens": 11138, + "dataset_cases": 14, + "full_serialized_payload_tokens": 24590, + "hit_at_k": 1.0, + "k": 5, + "max_context_tokens": 108, + "mean_context_tokens": 85.38, + "memories": 44, + "packed_quality": { + "answer_token_recall": 1.0, + "hit_at_k": 1.0, + "recall_at_k": 1.0, + "sample_count": 26 + }, + "payload_boundary": { + "kind": "serialized_json_shape_proxy", + "mcp_envelope_serialized": false, + "token_counter": "engraphis.regex.v1", + "transport_measured": false + }, + "quality_scope": { + "packed": "packed_quality fields score only chunks admitted to reader context", + "retrieved": "legacy quality fields score all candidate chunks returned before context packing" + }, + "questions": 26, + "recall_at_k": 1.0, + "saved_serialized_payload_tokens": 13452, + "serialized_payload_savings_ratio": 0.5471, + "timed_recalls": 260, + "token_budget": 1500, + "token_counter": "engraphis.regex.v1" + } + }, + { + "boundary": "Deterministic offline support/abstention fixture; not a frontier-model answer-quality score.", + "command": "python -m eval.grounded", + "config_digest": "590442e51e3642c10489165759919dc86ffac62c182937330c153e7f8d5fc26f", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-grounded", + "result": { + "abstained": 6, + "answerable": 5, + "decision_accuracy": 1.0, + "grounded": 5, + "off_topic": 6, + "quarantine_hits": 1, + "quarantined": 1 + } + } + ], + "schema": "engraphis-public-offline-fixtures/v1", + "suite": { + "digest": "4e752a18cceb4832598b0ec182986c13c30715a5cbc8e3f72eb62a4823019dcf", + "digest_method": "sha256(canonical compact JSON mapping each sorted path to its file SHA-256)", + "files": { + "engraphis/__init__.py": "a2c5d147ea025e6249d99f4ae2752576c8b1df382393ec450a3ef1b03fcf315a", + "engraphis/ai_context.py": "4dfd5d39eb95d05c591d1981e9e855eced73232f53efd9fe9966e0e08957d030", + "engraphis/app.py": "44d68ad8c0ff46baed01978c9b04e40b8be5031609d5a69e205b7f05da3777fb", + "engraphis/backends/__init__.py": "a9f22b9278362904166614081f1df78469d453601b298ce4e8afdba8a3722b25", + "engraphis/backends/codegraph.py": "83e723a91068d23694092fbe00157fcb2597061d453eb36f955bf55bc5b4d35e", + "engraphis/backends/embedder_api.py": "56a6bceea4f757325dcea987b0339e41d3875634b1ae5103f0537a358cf5878b", + "engraphis/backends/embedder_deterministic.py": "ec8b23de7e7e8273416125f5876ca96f55e4ae7881841bae55783ab0ba9130ad", + "engraphis/backends/embedder_st.py": "e1c20fd980e07060387e3f9fa37fe02a916959fc8abce4e6067a62699c726de1", + "engraphis/backends/encrypted_db.py": "25f6c1480d296a88f317213700a8b3c81e2732399bfac464b0d893465b25e846", + "engraphis/backends/extractor.py": "f2e3455ab7f14caee1d5b5c4ef071e498e90118f1b0ddcb8510c969583b0fc57", + "engraphis/backends/graph_extractor.py": "88561efa0d3fabc447a0a005b10e36261379d46218cf62d905e6928cd2fda676", + "engraphis/backends/jev_decision.py": "bdbe491d34805b0c8c52e4b8519d5f899110040187a6801df181ff5e44be965f", + "engraphis/backends/model_source.py": "8c3c7681f95214a2bbabd8de222e5ee11f42fe13402d27365654ae75fb363d4e", + "engraphis/backends/postgres_schema.py": "8468578c3add701d30d5eaa36d768ded2375d116e55f1836e09f6107a07a267e", + "engraphis/backends/query_planner.py": "bbdd77afc9b5523421b85b2ae63c8da7f5a7b777265450e0d21708a83e7bb23c", + "engraphis/backends/reranker.py": "747761d6cbfa421388974bcfd98d844f92391d80f4bf6a4feca00b0c7a6908ca", + "engraphis/backends/resources.py": "47cc867c3aecc8bd95fa284bc5bb04715f3339c19a0a11512973ef6171c95944", + "engraphis/backends/retention.py": "381d9371e3951d762f8b55eb54711de5697642acb39de99a714f246c059ecbd0", + "engraphis/backends/sync_folder.py": "e4f70a92a17f6a365910670df041e6e3ca421d44ada2827917cd66b4dc067bfa", + "engraphis/backends/sync_relay.py": "b8b9ad265453aba17ba7c27a355e12a793469b3e44cb217943c6fad9382a3006", + "engraphis/backends/vector_numpy.py": "c598831bea547824cfe08844816fa79857d3617cb0631238f95dad955a424f72", + "engraphis/backends/vector_sqlitevec.py": "6148e14ceaacc19239b64c642a3fba0e98797c78cec356210157afadf475a08b", + "engraphis/build_info.py": "624c22471e56d4c4047160808c4245488292af611564d1a63ca437605bbb414f", + "engraphis/classic_assets/__init__.py": "a7c1d52b285e3faa670ce231814b5758754aa0fbd05e1428e74c20c3ec51a4f1", + "engraphis/cloud_authz.py": "e80500579cb3a1d5fbf30814dc94e3e3967e50b311e8ed2fa56afcc13f7eb565", + "engraphis/cloud_features.py": "90e876f8993d99f01760cd01ae9fb63140e3f65036706e8fb0c8224560416330", + "engraphis/cloud_session.py": "7c83d7b85665c05aa4da2597a6b4ad2b951f1f8f4af20105d9d1750b9b123c2d", + "engraphis/commercial.py": "184f312066a9e682e51a0abeff042f1c0e8eed2d47470157b23930b5a17633aa", + "engraphis/config.py": "a46f3a335fad343e7df32942be91c04094fbafaf14b8b11f5fc433ef74743226", + "engraphis/core/__init__.py": "dd5143729c3939237f04636f437032b1f2d3a5f7d82c91bbc2a5a283c3f0ebaa", + "engraphis/core/adaptive_context.py": "cc5ce48109bb0d5230a5b2b8424b829c853feec5b5d5b82596413f2279b0c9f9", + "engraphis/core/browsing.py": "cfae752d52ef51b17c4ffbe44dde62d5b0e1ed0ca34ec0e1788f3991d94bf05f", + "engraphis/core/codegraph_export.py": "4641074258d7b23498f92dd45053a0fbb111863eaad2001c08e5e3c2dc2fd54f", + "engraphis/core/conflicts.py": "28530be25a4af0bffd8f609b965b33ca7f93199a70887789b2148fda8a61a486", + "engraphis/core/consolidate.py": "f66eedfe08319a64b761261ccf1c99b163eba564d6d4060534bf8c575aecf232", + "engraphis/core/context.py": "8cc15746e4de88bce7d34db8c11dfaa545f17305788e2167a286179171717fb9", + "engraphis/core/diagnostics.py": "5ba449bdf5087d8ccb5808379596e695c8f405da497372e99f2bac509f96e8e4", + "engraphis/core/documents.py": "84385db39ba44e06b58b4b26dbf954228ff4abed7230f28a7280166fa6457861", + "engraphis/core/engine.py": "f1ab3940f7a185f1e12b1a0b49857db8873c83313e8741822a3c80d818e59599", + "engraphis/core/evidence.py": "97912b52a3d22de909218f83c09c92572ed695d7b3c2117e5330271c6d84a7bd", + "engraphis/core/fsutil.py": "6db770fa8bd3e1a57dfa70eb8e8bc46d48c2dc53ead1b0b43eeecf085ef58cfc", + "engraphis/core/graph_layers.py": "64d74ab01c77119f6343ba6f1d6a84f9653f1a5d34d47ce7966f3ac31b29d2ea", + "engraphis/core/graph_policy.py": "ec5b373d01adb2de87df31d9f543130018e9a73faaaed239a184f14a32646615", + "engraphis/core/graph_scene.py": "d10465f5b87ed2af9382a8feb2cfbb6fba3a6157b13e1af50980bca52e857a83", + "engraphis/core/graphrank.py": "1279a58396104d3f906bfd5ec75b32efedfefe52201467bf19d80be3517017a5", + "engraphis/core/grounded.py": "ac40057dc37aa907e09c68e6b8cd54a989525fb310097df2970858708870ba3e", + "engraphis/core/ids.py": "e47eeadfaf560bc7638e1879fc491fa82d981cd42b9e4b05ef87033b2d7dfa60", + "engraphis/core/interfaces.py": "be11f909f0f59aca774b4cf7aeacf831123a5dc3fc1b889c47435b959e981266", + "engraphis/core/mutations.py": "dbb46a97686994e1652b2698e50c3309ff428d7258d6e8e53cbad7bb55b459aa", + "engraphis/core/obsidian.py": "991267c153cb7c4c40f7fe8f50aa71688892e250aaaf383b22c9e5910dc263b7", + "engraphis/core/poisoning.py": "5bc67169ee8032f3777f2d3969dcf71821437bd473ce4f917c4b41a50e845fb6", + "engraphis/core/query_planner.py": "249062d67392ab7c203cc71e9040e99bee91bf570604e90949149a93cb652120", + "engraphis/core/read_snapshots.py": "be08e63a88bd38ed91d61b28657a65201c38994856db2798b209a73151dd202a", + "engraphis/core/recall.py": "34959532fac07089ca8654fad0a1e945b11791918b3890420380ac7a9b78ccac", + "engraphis/core/resolve.py": "f01a6f55e44320ab04b97e516342f20155668863b2fc4765305e066d87586524", + "engraphis/core/retention_policy.py": "864c03bdb6e743cd0002c706de471e920f1fa1f1a9918ab343ef4c2042b47429", + "engraphis/core/retrieval_policy.py": "d169eb442115bd06c1e1da776fa6c1849e0795e658edd732a8d6821326b46b03", + "engraphis/core/savings.py": "cfbcfc7e476f4e28028555cd519696e23099f6210cf0b733225832aeaa0bc7dc", + "engraphis/core/schema.py": "ac273d3f0383995be815bbd866f2a36ea1398f30833aed57b8d4459afc87096b", + "engraphis/core/scoring.py": "f5b6ac291edf0968b3de83cb1951a97d5bfd8a8d079199cb2ef95bba0884c89a", + "engraphis/core/secrets.py": "a4835ba06e2616156528df6365ca1aba6cba0c97cdf834a709d2797a371099d2", + "engraphis/core/store.py": "2bcfda14325c6a846a45d87a7511a445d197618570eca0cf7f0c833596c2260c", + "engraphis/core/sync.py": "69f75b50fdb1ec9352f92460c89efeec8d72ca642bd10beb29474a8c62b4f58a", + "engraphis/core/textutil.py": "acd65031729fa5d91d09527b8eb52518b83cfce77a55e6b7ae2d94686e35c1a6", + "engraphis/core/user_model.py": "3147ec8ee7cfd855783f639874b63f331cdc822bd8bd9298cfb326dd18666026", + "engraphis/core/vector_repair.py": "a8c1812de4e3ed288eda3e54a505e136d6ebd3ec296788bcbb8804b11e13cfc8", + "engraphis/core/vector_search.py": "75800052e573e9af01c6fd098eaf8647c3c45cd7eb2601dae05d42359e19b234", + "engraphis/dashboard_app.py": "9305c9c72c43027b2b79c0ce559d398fc232929968d6ea03c37065e3227c8d51", + "engraphis/dashboard_assets/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "engraphis/device_connect.py": "c8cd0a22e9fd2d92a65bd74047cc3a8b7159bfc9a297cb639c1c7f1699f8802e", + "engraphis/document_import.py": "94fa0ca340ad0ebd060b143f46657798a81c440a11b82aa46fefa83fb65295dc", + "engraphis/engines/__init__.py": "111232af583889195c5f5a60298e32484348608e81d2bdd822fd3ecd2a33c1e4", + "engraphis/engines/embedder.py": "998b65dd566966bb6581fd9f09cdf46c58a3923ef5df3073ccdaa541153a3581", + "engraphis/engines/ingest.py": "1a5d4b52c13e533864329f9fff11c0f6ebc299ff7093a9d9275e5c9626a39ce2", + "engraphis/engines/intelligence.py": "b561589b98deb98271f104dfec6276aeba13c4815e627259be5f8769f2e7ad82", + "engraphis/engines/recall.py": "f979580d065599c07acbc3add59f71e52d9a186a2104b0e257daa7959ea88d26", + "engraphis/engines/reweight.py": "91ec5815f5d356a7068c36133d24405334450f361f902f99275bed3ccebffd49", + "engraphis/engines/thoughts.py": "4adb9c8a9bcfe736cb42fff9b5ce24631da6ec473d178e83f1c176fde3b8b814", + "engraphis/factory.py": "3b8765834cb04b052b89a9964b357b4ffb9c41a0f769bf1261768033653f708d", + "engraphis/graphdata.py": "195e583a4d4aefe97d8cff635cabea1ff9cd3f11c54ad392d951765d89910863", + "engraphis/hosted_client.py": "9c67aff6881c29704498f4ca99f836009be4ea58a248d74459c536dac7341a88", + "engraphis/http_security.py": "596981e96741fd47064d03db409605bbb435f062c0c6ef69b040aacdd8763a20", + "engraphis/inspector/__init__.py": "720cac28b8a6019d0a0c53809d5905b7d6eb9d4ecbac767505904c6ec3c39071", + "engraphis/inspector/app.py": "8aefe8a935397dde3c6466e691a7e6a7203ebe42e07aa00c332b733465e59e04", + "engraphis/licensing.py": "7e73c28b0e1c3536e2080a129af614f838d2cae3ec3a48a3d8ed7e5153c9e935", + "engraphis/llm/__init__.py": "f3096d2ddd652b99e6fc0b4c5a8786d9bbaba41b259df0b44ce93b57bde3a8b1", + "engraphis/llm/client.py": "304330bf7a45b0eef8f5beabee419b971d205c55f686de86c26d91fea69d172e", + "engraphis/local_auth.py": "b0ad3a1926d417a2aaa6c44a7dbf6e51f575290ddfa27875b78a03db176623c3", + "engraphis/logging_setup.py": "f7d2edc756458a852e0401453e9c71b785aba08fa7859aacbdc23fb30dc7982a", + "engraphis/managed_processing.py": "6d33cdfd10800d9552fcfae3c2b071d2b39fe10fb69d1a8e5d9ed6026882197e", + "engraphis/mcp_classic_cli.py": "778122b121a1c654b8f85810fad05d9c8d7799cf13903d7dc274938b51008da0", + "engraphis/mcp_cli.py": "ed2d997438d727180842dc5fb3f6776f5a5d97974f690ee7229264be1ff61957", + "engraphis/mcp_http_cli.py": "f6ac8bb04a0cb179e840502fdd543b8f55d0f1bf0045fc7900e06ae002cf422d", + "engraphis/mcp_server.py": "5a76a9b82e94a7be526307172fa5a0a594ddfec8c3989b0044db4cf40ff64775", + "engraphis/models.py": "6e76e97db0aca3805c6f582ea78cc6e1c0ccd2665e16fd8ab81eb91b94141b51", + "engraphis/netutil.py": "2e0f8a9095f6f31dcb5b96d323f023b9214369d59e1c488125a7d443a55972ff", + "engraphis/observability.py": "a3a6945bf33a0d8e216da56ca7efec0031b82dc64a66cff36f0b2161f5db4981", + "engraphis/obsidian_import.py": "c7cf4b5e993afce3ffb45f01637804719cb9e7cd2461ffe629c055be5975721f", + "engraphis/private_state.py": "7485570efcaee8a1dc00b64ebfdc23178517235ae17609aa78db8bdda7e45fe3", + "engraphis/read_only_api.py": "7d9d306919b30cf712fa59219059bb87be8328ec515487e55d76dcc1f0b80c38", + "engraphis/redirector.py": "5ba964b81f09008c9369180cb49d247519000763274aabc5e046215b12fa641d", + "engraphis/routes/__init__.py": "f0d59080212cfa0d9b50877bca28e5832d1ae917899500d52c68b1c8821231af", + "engraphis/routes/memory.py": "9ca066e1762eeeaafd9790ed57d730efcaceb57742dbe0c830ad8764500ff9e5", + "engraphis/routes/v2_api.py": "45c02594fe4c357975e739beaaa666a3742b461fd873e60ef2415b62ee90bb85", + "engraphis/routes/vault.py": "1a7eee7c1a7c7aa11091042756aa2739a3eb963647020f40584a6a38da1988af", + "engraphis/service.py": "d2eab019c50c090024a15a38af5e56324a18eaa475b6dacef4dde9f5a031cb94", + "engraphis/service_context.py": "3de9289f49a977cdc206285ac42a9953a104eb1d1b1bc8ea77febd75c7cd82ab", + "engraphis/static/__init__.py": "1fff4c4e2554e7f5fcf3eace269feba09827524917193a4dd65df95bae64ad1f", + "engraphis/stores/__init__.py": "48ee4326c8f28eecf46f558b7aea21adb779226a7038299017ab90196d5d84be", + "engraphis/stores/graph.py": "ebf603b54cf8450e7c9a7319bd05db2f39fcda8491f5969d6af3e8da61571bc2", + "engraphis/stores/ledger.py": "df5cbb30d977decc0a9c3a2365c9c115cfbb5fe951bae48446436661c80e5d30", + "engraphis/stores/vaults.py": "2c986129b9d1e7aab33e18a3b9a278eb5ad2236895587f69b5816a5d96796bc3", + "engraphis/stores/vectors.py": "45a1baca381fc647548cc89424eb36d5853f7562c275b191b35b99339a190b7d", + "engraphis/update_check.py": "ffbf5ef682fb15177915073ebc0b5eab4dee9092bbf0f58d36a8a54c6605ccf4", + "eval/__init__.py": "639f0c6d9d6aac8ff6dc605a34a0a301058905cc53bff4eaed5912247f0e7c56", + "eval/ablation.py": "16f159dee75d2f96cc42f230c2403fa19ea0bda7091c4823660da553463a194a", + "eval/adversarial_memory_security.py": "35dd8d981bcbad50e9815465be420b05b62a9dea28a78eb6cc1e09ec51c320c4", + "eval/agent_benchmarks.py": "8e88943e45a1b2083b366cbb0329326ef918b119a2366ed395c404c2b7ef98b0", + "eval/benchmark.py": "b71832affdf87d23bc1db7b522a669a7888571b3989b03a235c70f5da9952bd6", + "eval/benchmark_analysis.py": "1200791425d029695fee0b7da1f188a8962f337aa31eb4217d50e4503641d2b3", + "eval/benchmark_campaign.py": "033dbebfb47df5fcd3a6588b29ea4ab5fd44d4387ae45334379278ab30f3e57f", + "eval/campaign_adapters.py": "3e1db1183358331143d2d560b3a122d5e6b817f02c597ac7b4cc2ed8b7ce04e8", + "eval/campaign_api.py": "323be4e1d9520e8047ab54c9cbb158013785402b06ee4e93e55227971c54bf95", + "eval/campaign_candidate.py": "88541840d16c3b7368586ed0ee3566054214b1f594826b746b28d0e407cb812a", + "eval/campaign_continuation.py": "7f77a20ac8f85cd96729bba0cf45872c98a3421af005bd735434b7b416dd7e1f", + "eval/campaign_ledger.py": "ba3079ba541cb1f70929a76f147d2bc5e8b264103a1cd7faad97685e0ecc7790", + "eval/campaign_oracle.py": "9ea5479786efd9caa2b59e612e891a93dd34b500a2b36aa20bcf749fb6d4d48a", + "eval/campaign_storage.py": "ebcd1f4aeceaa5ff9304494c64dd31fe31637ceb107d8cc39fa292e3b14055d4", + "eval/capacity_matrix.py": "8c25bd97754c1d7a8468a687042a3c87cc9c0299cf01c19b80dacfec2be4e552", + "eval/chunking_eval.py": "a16544353940c0a8c40cea3b9932d3399b35ea5994b809b78f5dbe4a952c467f", + "eval/code_agent_ab.py": "d98bba6b77700ff6bf86ff0d2cf518a67e5a2676ef51bbddabbb2ff26e1f3aaa", + "eval/code_arm.py": "d211166fce1b8a4173848e1617873b7e84aadeff43746effe7483c54bbdb6f1d", + "eval/codex_oauth.py": "f235fca482de4201d1850bbfb583765ac5f1a057b4ad7e2d504d036bfc03f391", + "eval/coding_acceptance.py": "4b39cbcb60d7fba503cca597399cf9d04ad9567a43cdb950015ccf552e6a2773", + "eval/coding_corpus.py": "7b5205e8544578fe99d9d9cf6cfc34e40e5d1d049238d502ff7bc6f3c14948f5", + "eval/consolidation_ranking.py": "917b578d4e0bcb929bf1a1a37611acf7716a520c076abf4ade0d8d12a1c455de", + "eval/context_economy.py": "709ac7cc866855f96d7717ab2bea12e8b0d3a140d15fb978a2a929ad085931f2", + "eval/context_efficiency_guardrails.py": "22afd1a6fe17219e74701dc587ec35f569a5bf22bea270944525f51746723f14", + "eval/datasets/codemem.jsonl": "341313023c22850a2e14f02742b571ad1deca824f886a1654a59541304c01f3c", + "eval/datasets/coding_memory_v1/oracles/atlas-green--code_relationships.py": "969aa71235e0ae3cb764b9ee12b789184cedb5fea6fcc0d86e5dcb2c0498fa56", + "eval/datasets/coding_memory_v1/oracles/atlas-green--condition_values.py": "648702646fb62990168e98fba0dc6a27be128876548fa7035a59d71aee9da02d", + "eval/datasets/coding_memory_v1/oracles/atlas-green--corrections.py": "c7132c7fe39b7afbdf11065037369c0f3c38a22e69d8742e8afddfd5785d2e61", + "eval/datasets/coding_memory_v1/oracles/atlas-green--long_documents.py": "65dffb25944cb612872655f12db16af73f7a095e7abcf6a7cc5d31dc91f083b1", + "eval/datasets/coding_memory_v1/oracles/atlas-green--multilingual.py": "ff49874a691bfc30c082695ee6d3c89b9f2e1e5eecf086026110770d8e1b0452", + "eval/datasets/coding_memory_v1/oracles/atlas-green--paraphrases.py": "dbdcf5d7abf136aa5816df8465bfde842284aef5ef002e955cee05ae69d574ca", + "eval/datasets/coding_memory_v1/oracles/atlas-green--poisoning.py": "58b8ca4a37f55c4d112640414dc82620e32e643ab0aa539260884a5ecc50740f", + "eval/datasets/coding_memory_v1/oracles/atlas-green--scope_boundaries.py": "c1e92b10b40004c95abd3dfbada1a38fe0ce56300ecddca8360b51a1e6671458", + "eval/datasets/coding_memory_v1/oracles/atlas-green--temporal_history.py": "a64e4e5a29ce1040cf53e94571491325347f443d72a93f05bcf87c2878665952", + "eval/datasets/coding_memory_v1/oracles/atlas-green--unsupported_questions.py": "c8b415052ea7320e1df3c5475a676d4dd24602c45dbf1868fba6880846e029ee", + "eval/datasets/coding_memory_v1/oracles/atlas-north--code_relationships.py": "bb4305d15a81b4b4ef80b374acb59fee6fc32b213b101dd4b173ac4144d8570d", + "eval/datasets/coding_memory_v1/oracles/atlas-north--condition_values.py": "4bc5b1aff48ef6ad5ece1bd915f6949f72d365bb4815c4d82515b438bc644112", + "eval/datasets/coding_memory_v1/oracles/atlas-north--corrections.py": "7851502a9bc842f840bee1001e42140ee1df08be2730b563b1b197285d14742c", + "eval/datasets/coding_memory_v1/oracles/atlas-north--long_documents.py": "6204123eded20fc0c7aa59b312f8b5bd29aa88a720f7318e32b3c6a17651b57b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--multilingual.py": "5c989b34fdad1e076b61ffb1f7a1371dc635f44a537abc743b765d5f6009004e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--paraphrases.py": "fd189285d0cde9991dea461af9cd18b4203656a69da1298494fccf972ed8a58b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--poisoning.py": "66305d69419736bdbb11a896543933604d898cd5394d94eedda8b92e632a09ac", + "eval/datasets/coding_memory_v1/oracles/atlas-north--scope_boundaries.py": "d9fbbe3924b5178f32f1937485af3b8db242a0e3a08c7bf41a3d2a57f34a8879", + "eval/datasets/coding_memory_v1/oracles/atlas-north--temporal_history.py": "7e7be0d6e558a71d3baad14a8812a6c998ad25e3f52c997a301333e0711f820e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--unsupported_questions.py": "91f574dd678bf244a1fa6f9708e945259bb8ff8e2eb213426be5c3b187be3c3b", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--code_relationships.py": "d0998e13db38d1fae9be6d254431b4fe592f89eb03ee25705f4c70985cd48c89", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--condition_values.py": "f97610aee190dca03b01aa48ffe4aa3f75e099a59fdd867db98f743f4a376729", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--corrections.py": "b7c31f7a9a1f978321ca5445997e0d284deea770c85f6d81a80204e548ad53ea", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--long_documents.py": "20ec2b41cd3b6691164bce096dff16f7bf5be674f922cb637120c0347e60d0b6", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--multilingual.py": "131e7dc978d3f2f7df395b6f1b4a9150051c0ca93c6dc5c386e58d46c8fdc573", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--paraphrases.py": "1e7d9da36e6634ca2d2b11dc97468bd671df133345dcb76859e1dc3cb77dc664", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--poisoning.py": "48460691ac0086c47102eec85387ac03bee9190ac83e3dafc4babc79b71d9bd7", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--scope_boundaries.py": "b96207e9b1fd09f49218102a5b88fde5b9656604df4cfd314e86426e3b6d6075", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--temporal_history.py": "7a196ff9a1db05b0c8f3a83086ae44cdc580dc58e4acc217d1db2575d9711b88", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--unsupported_questions.py": "724564b5b75b9425b6889faae6d5e650bd5c940016c2b96054e5359d9d8b0887", + "eval/datasets/coding_memory_v1/oracles/atlas-west--code_relationships.py": "14295f735bcac4d4ae738eedfbd8fad4593afc914bc835233ec35e2263d43613", + "eval/datasets/coding_memory_v1/oracles/atlas-west--condition_values.py": "8ac70d9ca0c9122567bb9986d2cc5798104966df20e262b8087920e8fb5d82a2", + "eval/datasets/coding_memory_v1/oracles/atlas-west--corrections.py": "89d6a1a7781465c311830b7e769d2a76df41ab5c703ff662b3df1cc4c9a01668", + "eval/datasets/coding_memory_v1/oracles/atlas-west--long_documents.py": "38e67a26f69707089f852657a810ef1fca0395beb5511fff67c30f21ed63df57", + "eval/datasets/coding_memory_v1/oracles/atlas-west--multilingual.py": "bccf6579681d45940542ccb1f936ea1b225f4cf551a3ef31f3f8b1a026856e51", + "eval/datasets/coding_memory_v1/oracles/atlas-west--paraphrases.py": "89c8ce16c682553b27652e176b67a06f3228ae6209fbc8a7264260680f5651a9", + "eval/datasets/coding_memory_v1/oracles/atlas-west--poisoning.py": "fe9beb97d27eacdd87056fa1c9b04c62e2facae9354e765b912de60b35021621", + "eval/datasets/coding_memory_v1/oracles/atlas-west--scope_boundaries.py": "2eb3b1130c54644fcbade52da8f50cad1376a07b51856a962522913cbcbb7649", + "eval/datasets/coding_memory_v1/oracles/atlas-west--temporal_history.py": "116ee20af475da329cb535b0a02bd19ea1e7518b5b780ec12ba396ec896cc116", + "eval/datasets/coding_memory_v1/oracles/atlas-west--unsupported_questions.py": "080969e026215b9fe4ede6d0b4d02e9143e1293bea5d7383681e478426ddf121", + "eval/datasets/coding_memory_v1/oracles/borealis-green--code_relationships.py": "3965671e5e2432c8236c250f7982d4f478d8f1fe1268ffe57c555cf5fbbcd414", + "eval/datasets/coding_memory_v1/oracles/borealis-green--condition_values.py": "92994990327445258984ee6bf1d95f47359ff4b194e1f36e193980a523e6c5e0", + "eval/datasets/coding_memory_v1/oracles/borealis-green--corrections.py": "c5b473f962deacd6d59ea9967626e029888abbdb48f320704bcb6de876ce3f46", + "eval/datasets/coding_memory_v1/oracles/borealis-green--long_documents.py": "54aee2c1031c17b5678db2b0955eda8fafe5990aa9e52f02936584a9b75b9ab1", + "eval/datasets/coding_memory_v1/oracles/borealis-green--multilingual.py": "c458ac5c63e440e3d9486d096278759920d636f73e1901258679251afd86eb60", + "eval/datasets/coding_memory_v1/oracles/borealis-green--paraphrases.py": "250d027660f268cef1caa745cf3155de6e2f4adfaed02ba675eaa83224ffeee8", + "eval/datasets/coding_memory_v1/oracles/borealis-green--poisoning.py": "978f16eb5033c602ec09ed57ba0667edec9ac3e26accc1ce1456bc893ac9e6a7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--scope_boundaries.py": "4b73a2e5dc5ac815c14e08a34acefd2ad426282cfae379ca2fd3060a3784c9b7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--temporal_history.py": "6636d511bbcca51ca85c4eb0ec5ae956b3baaa5f9af89458ceb86329115743bd", + "eval/datasets/coding_memory_v1/oracles/borealis-green--unsupported_questions.py": "5cd4f70627bc60572c720a797bff122ef9bf219f32d265f694affa33b1f9f4fe", + "eval/datasets/coding_memory_v1/oracles/borealis-north--code_relationships.py": "769903aeac3ce360d845ddf1a6e89192737dbb460e1f2e251230b74d40763dd6", + "eval/datasets/coding_memory_v1/oracles/borealis-north--condition_values.py": "f6e69f525fd240a09152989b9d8a529e9abe076e7fc2c98d10bd84f9c6da2b56", + "eval/datasets/coding_memory_v1/oracles/borealis-north--corrections.py": "987ece1c7507a69a973c1e051b27c1d3b104ecda79df48959e49a62da31aa137", + "eval/datasets/coding_memory_v1/oracles/borealis-north--long_documents.py": "011134140cc486a3c089b407adbfbf5b958e1f8c1bffd572c29b8cd5d7f07f7a", + "eval/datasets/coding_memory_v1/oracles/borealis-north--multilingual.py": "1d29536a4a5836f64f56adcd1a965db85bc3371a12ad5bbb5644520c9d9606c8", + "eval/datasets/coding_memory_v1/oracles/borealis-north--paraphrases.py": "09a5fad90c24f75f2f448854c8778aab896c67854c97f884c2d689ead808583e", + "eval/datasets/coding_memory_v1/oracles/borealis-north--poisoning.py": "c1bec2ed9b31103e39db9dbab2be8db401cb0874bb3ce8573a0841a054e28a46", + "eval/datasets/coding_memory_v1/oracles/borealis-north--scope_boundaries.py": "faf51b368d7ba9406442edde29e290c931e67bff2799783dfd27f2226020e15b", + "eval/datasets/coding_memory_v1/oracles/borealis-north--temporal_history.py": "da52f43530149a4a293065674623fa49f83b37cd84b9871044b3bf32762fd8c1", + "eval/datasets/coding_memory_v1/oracles/borealis-north--unsupported_questions.py": "be0abc698692c9fe82f40f76a4694c472882a53843894dddd631ab1ab77aae45", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--code_relationships.py": "9497b7d2373bb9f858e994f7919cff72e7e3c4c4eaa1efda287524b1a182d1f4", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--condition_values.py": "aea13e4b7721019e7bc1f54878bb25b9f27a8a5044fe444e86ba5460deb13e09", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--corrections.py": "bfd446d431afb6c05ad9d8775b90887947b85981037756e05262f3b101d41e7b", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--long_documents.py": "eae829a374c0cd6237fac4ec52fec0d98d7340ec0b307b9b0b0c90c116d4b472", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--multilingual.py": "e821f91999b5f12cff53fdaa956af4e0bb2f929497f95b4e2ceb57a6621e58f7", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--paraphrases.py": "1a99c15898831a1c9aacab951868101d57e59e91ed90a2777015a26dbcc3043c", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--poisoning.py": "411877fc07b053201a63aa4e45cb499344abccb0a562c236d53a672078b1eb63", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--scope_boundaries.py": "b198dfb636910953ba372edf1cd6db382d4e5725bf7f820171be8c63f9fedf7d", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--temporal_history.py": "3de5efd6ef661572191c6aa426fb10caf9f4bed4aa495b6298815aab3acdce22", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--unsupported_questions.py": "baf5dd85e86a97dedb0b395b5c574ea5ffcdad7a46bbbe9787cfdc33d6c7a06c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--code_relationships.py": "48e53b3a561f91fdf4eedb2d63aad65eece8ae80188bb3d5bdcaf184fb0b6945", + "eval/datasets/coding_memory_v1/oracles/borealis-west--condition_values.py": "2dd7a524bd2a2aa2fbf212246880d4e4ecf03f503b70f25179f3ab6bab28a07a", + "eval/datasets/coding_memory_v1/oracles/borealis-west--corrections.py": "7d3080e05544e10243040fe0a969a8c524e4262f8f5c38abdc3d8e06c67fdabd", + "eval/datasets/coding_memory_v1/oracles/borealis-west--long_documents.py": "fc42e935879e7a81f6eef9fe72f8683244501ae10654008a7863d397ee73058c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--multilingual.py": "19181c442ce5f6941485190ecf050e455914dae988f86efa42665cdef0d835a2", + "eval/datasets/coding_memory_v1/oracles/borealis-west--paraphrases.py": "f7a5cb842aae3d2bc8d62ea40325b332a8bd4f013b76bac8bf154fedb3dbcbe1", + "eval/datasets/coding_memory_v1/oracles/borealis-west--poisoning.py": "285a2526a6be4e556a564899e9a376ae1286fef6f0ad22eb9289fba1905a2b68", + "eval/datasets/coding_memory_v1/oracles/borealis-west--scope_boundaries.py": "fb994823743ff5b4853b142c17779778bdb11296958e033e5c6be598833a4cf5", + "eval/datasets/coding_memory_v1/oracles/borealis-west--temporal_history.py": "f30a74c85ad654a7450e20d07baceb3b4fb2a56b454d7b43b854bef3cdb2cee6", + "eval/datasets/coding_memory_v1/oracles/borealis-west--unsupported_questions.py": "01cbbd0b21a745720514aea6a21a98a3cccdbf0c0518bd5508019433b964776b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--code_relationships.py": "8b08e7c65289515a9eee2ae5f4cd60ce94350e9a561225bef0e8f8815ea28f79", + "eval/datasets/coding_memory_v1/oracles/cinder-green--condition_values.py": "92e7d75d38f5dbcc685075e947005a9ae5a410207e7f17aa770b034b8690cbe5", + "eval/datasets/coding_memory_v1/oracles/cinder-green--corrections.py": "424cbf0924a8cbc1a59a6d7bc82b5527e41f52c8ee9f558ea3e398ab4d913919", + "eval/datasets/coding_memory_v1/oracles/cinder-green--long_documents.py": "2a52df9cef3ee66357847322794a382c927b828c6ab1a2819a799ff55d53657b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--multilingual.py": "e47e791dd15b045a6a958ca114b1359ca8537e160274b015214746a2564363c6", + "eval/datasets/coding_memory_v1/oracles/cinder-green--paraphrases.py": "9e92a79ec00231cb381ce58e389dfdb2520a17ecf1e9c2e39e79501449e9ddd0", + "eval/datasets/coding_memory_v1/oracles/cinder-green--poisoning.py": "33213e6f194332969da88f4748c8f26ef93219b6c4bc710a142082f8147ccfcc", + "eval/datasets/coding_memory_v1/oracles/cinder-green--scope_boundaries.py": "8d2489da1fba137981e45e42c843f9cbd17e851c82ddcdc5904b4a86af0d9692", + "eval/datasets/coding_memory_v1/oracles/cinder-green--temporal_history.py": "29403fd08f0de7da3dfcc6c181e1f448a5c5264e95ff3924f3066508d85468b1", + "eval/datasets/coding_memory_v1/oracles/cinder-green--unsupported_questions.py": "ba21014188f9ae849e0bb79babe163194703c4cf01f0600f4c9f71058e7fed56", + "eval/datasets/coding_memory_v1/oracles/cinder-north--code_relationships.py": "46280659557bd08afff185352438bb63dfd308dabf5c7c1862c2f442bd171d48", + "eval/datasets/coding_memory_v1/oracles/cinder-north--condition_values.py": "6c62d673b1b6cb4b5c89ff2af4ecf57c2c9d73074a01ab92b8fde57815cab783", + "eval/datasets/coding_memory_v1/oracles/cinder-north--corrections.py": "8245b196072389517fad6d76ed7709d7e12eb52e08732e4ddcfc40fc1d986879", + "eval/datasets/coding_memory_v1/oracles/cinder-north--long_documents.py": "6790c7b89d80ab909d9e1a31b59bfa5cd199cddabed2e159daf7c5c049ff9a43", + "eval/datasets/coding_memory_v1/oracles/cinder-north--multilingual.py": "9532bbd14506cac0edcc09f474e7c96a402903de947e0e76f5c8aab4bff37646", + "eval/datasets/coding_memory_v1/oracles/cinder-north--paraphrases.py": "cc904350ae7d40e26d91d482ac15d87ec8022d4c82905021dd38003c5fa2d067", + "eval/datasets/coding_memory_v1/oracles/cinder-north--poisoning.py": "e8e451c49c98744b4a484141f86d337db4ec5326264b1500893a20c3451c5ae4", + "eval/datasets/coding_memory_v1/oracles/cinder-north--scope_boundaries.py": "50d42fc48aa70d55b6a3b39c9bf17437726f37e1e5ae9870d415fccad92c7bae", + "eval/datasets/coding_memory_v1/oracles/cinder-north--temporal_history.py": "14b1336fbaed11cad455f588bbe078effc31f5f357f670e1f189ec3d78b172f5", + "eval/datasets/coding_memory_v1/oracles/cinder-north--unsupported_questions.py": "0a2f740700a990d22b4c3051aa3e4260e3df4ce65931d419052f74e05c750a67", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--code_relationships.py": "0e29053f11fe618c01fa90a274688f18ba8a7f3cfea56757a96d5a5bc95b61a8", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--condition_values.py": "ca57ac4e22e9b4739217020d7792ac642326935b8db9305ead2ec5bea2a6e456", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--corrections.py": "9edbfaa58a99776e835c325e50a77df5b4b302b3ddd0932dc2a349a77b4100b5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--long_documents.py": "4b3fbe7380201285ac4b4a1ec4d8238c5663b97af01cbdc8ffff8fdf2a9467c5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--multilingual.py": "b0bba5ecf669f3368ef29373b755dc1296502665584574c771ebf4664debb5ce", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--paraphrases.py": "e146f7aa1ffabf3b313251b59c59e1836c0cd17901d07fc6ef5334eaccf8bf36", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--poisoning.py": "692ee07e750fb08652a1ca6bc6dcbbef77219701585f1336c6037dae5a7c5767", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--scope_boundaries.py": "8ca0b911d38a72e4ecce6871ba3d0c7dbab433b0541cb64b116f7a88d521554c", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--temporal_history.py": "6ba5400c5435af64c80a7366fdf49fea132f1011f9d84f9d0cc5f2f2f30a67ac", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--unsupported_questions.py": "1d3324db0a085be30ce3dff1a2ec3866b8592a5ef6b43f39211a2e3a59fc1cd6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--code_relationships.py": "0149333a3fb0f8d60939bf927921305eae447f7511c74f042ff3c880eadff825", + "eval/datasets/coding_memory_v1/oracles/cinder-west--condition_values.py": "3158243f9f7f0b92aaee4164379159b46143acd11fc3d41a708630c1d33ea22c", + "eval/datasets/coding_memory_v1/oracles/cinder-west--corrections.py": "a9fbb89aa629a23e7a1fddf4fca09da40365bbc7a9a6192d805e498fe17f93ff", + "eval/datasets/coding_memory_v1/oracles/cinder-west--long_documents.py": "3c702c653a8ddff84eb5c24a77567aa63d2069c48ed174bcf29065c0ddb30ec6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--multilingual.py": "b8f5f7e00e6edac3f8e0b7e8bc09ea6c7d661370fa2226eb1795306ce3c634a7", + "eval/datasets/coding_memory_v1/oracles/cinder-west--paraphrases.py": "10361be87e9d9cb98d2ff1bbc18252178d475a5c5f2efb77bc81dea05109df05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--poisoning.py": "889a5a43604f7d1677ee0f28683abfc48a8a597b052f558c1b4d19c5f33444ec", + "eval/datasets/coding_memory_v1/oracles/cinder-west--scope_boundaries.py": "b84e78812baaa92422226c06d78cfe7c1be260e2bfcf9c5bb1ed73f2f3cc136b", + "eval/datasets/coding_memory_v1/oracles/cinder-west--temporal_history.py": "9d99a981fca0c801a0a52e2af24cd4262dad72f4f34cd84894784285d241bd05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--unsupported_questions.py": "43b8f854961d9cca5cb83b53b9e07d22388d0c7db406dc8e4f8cfdaa5f89fffd", + "eval/datasets/coding_memory_v1/oracles/delta-green--code_relationships.py": "97a08f2bf9b1a11f95a062f7df27d69db3e9dbc421837347acfe62111af02885", + "eval/datasets/coding_memory_v1/oracles/delta-green--condition_values.py": "5e53695288b84a526c61b748b170f6d6219f94a942edc0887ea6157535ad8d52", + "eval/datasets/coding_memory_v1/oracles/delta-green--corrections.py": "c6d16232ebe6bdb0b5c94db1ba4f108257b47ee8f8b96cda5f8e17212022b542", + "eval/datasets/coding_memory_v1/oracles/delta-green--long_documents.py": "bedb6f495437beada344ce6cdd92954108aa4c639622fd1cc294d2a1139b26d9", + "eval/datasets/coding_memory_v1/oracles/delta-green--multilingual.py": "dbf84f4e8c016c5e60fdac5fd3ac2faf79fb0534f5c2ac534491acc31d5f3530", + "eval/datasets/coding_memory_v1/oracles/delta-green--paraphrases.py": "ea8f00c86e8fbc2ab10a448f48019146181d0e55438def6f47f41f0ef3181be4", + "eval/datasets/coding_memory_v1/oracles/delta-green--poisoning.py": "4eb4e289e944e7762c39ce85a8fc2582e310de6a86cbc1cc36b44112653140ea", + "eval/datasets/coding_memory_v1/oracles/delta-green--scope_boundaries.py": "2fe9b96deecfb488430abd9657adc6b3ea092b18f32c41c1669d29175ec6e860", + "eval/datasets/coding_memory_v1/oracles/delta-green--temporal_history.py": "531cbb953400584356cb6525bc1a2e559f7ec3867d845c736d8026a046b91e7d", + "eval/datasets/coding_memory_v1/oracles/delta-green--unsupported_questions.py": "edebf25c2168411fdefae1307a71d829224dba3dbc7ea000054416e52123d5a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--code_relationships.py": "9357ad0d5f6a1cc787f980d0d506b07808538179f71ae3e8ce1c3eb655d24e35", + "eval/datasets/coding_memory_v1/oracles/delta-north--condition_values.py": "4199f7409696a260b1531f4ec7cfd15555b4d58d06b0b8a88b1c7621fe7d328b", + "eval/datasets/coding_memory_v1/oracles/delta-north--corrections.py": "b8bd58db7c5ae93d33e6223cc34f0e09d58831361ac013ec08277fe2c102ac17", + "eval/datasets/coding_memory_v1/oracles/delta-north--long_documents.py": "0f08b744446b1c52e8fe86626ab05c171377f17c46e604cb2ea647ed5d0daddd", + "eval/datasets/coding_memory_v1/oracles/delta-north--multilingual.py": "ada9eb404190d05637cea59e3f8ed541aea2c9e0f9be0d166885d6789351f7a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--paraphrases.py": "04ec2e8308f47f46e38c89f4a2fe44deef4a0b20a1c8517395ad00983bf7361c", + "eval/datasets/coding_memory_v1/oracles/delta-north--poisoning.py": "d72ea7b98db47e4de03884e2786206dc3da5cc08e5203c86b1d38a2d48c2fd47", + "eval/datasets/coding_memory_v1/oracles/delta-north--scope_boundaries.py": "cedb3234b22a40a7b889f50cfb5751fbba31e46f541b19feb2c4759c8007bac3", + "eval/datasets/coding_memory_v1/oracles/delta-north--temporal_history.py": "2f7c1bd4ebc051eee411d11251aff2ee5fee602a0800410bc0dbd2e86e99628b", + "eval/datasets/coding_memory_v1/oracles/delta-north--unsupported_questions.py": "f1f0b9858c806956122144c6e769f3baf9f87f07ff92eec98eb58d8019e6fba2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--code_relationships.py": "79579639a60d96365781e853d1319a2bf85d9a2b4d8639410da7e3c1efc364b2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--condition_values.py": "27defbfe7c237f971ae29e8f000f098eae32a11f3afad06f2bf3b27af432d902", + "eval/datasets/coding_memory_v1/oracles/delta-violet--corrections.py": "b3b685a5c33d1086e8ab4258d26c5ec9aa7396b8250a250351f0a6057fcf2075", + "eval/datasets/coding_memory_v1/oracles/delta-violet--long_documents.py": "4a5ce75372c8762bcd7986f8ceef454800c3636124ffd9de3a8315d210ae85f1", + "eval/datasets/coding_memory_v1/oracles/delta-violet--multilingual.py": "7ef19f25e97a24522b79a9d7e7f3d2d9e395a1fc2c60564e2f66081533bdacb5", + "eval/datasets/coding_memory_v1/oracles/delta-violet--paraphrases.py": "b6e00019bead0a5bc0facdac886b48fccfd3cccaa254267fda780e933d57904f", + "eval/datasets/coding_memory_v1/oracles/delta-violet--poisoning.py": "3e3e1e1fe04ae3e0c615ca21e794fead5d06f887d6fe7347fb9122684c8b8017", + "eval/datasets/coding_memory_v1/oracles/delta-violet--scope_boundaries.py": "336ae66910d533344712a2d87126f53df48d43eae9e7d17797938c3f9c560204", + "eval/datasets/coding_memory_v1/oracles/delta-violet--temporal_history.py": "a81cb5d2a5eb521dfd161ffbd21bd366777b1239f2d3412acc77b0a9c7c7d82b", + "eval/datasets/coding_memory_v1/oracles/delta-violet--unsupported_questions.py": "3341895608073374b98e67a88489abb9020fed5bb692231a0a61e15c8de0ddf1", + "eval/datasets/coding_memory_v1/oracles/delta-west--code_relationships.py": "e8f17f3838cb74e1ade0cfd6edf540dc086507b51ca67c2020ed490d75dbffe5", + "eval/datasets/coding_memory_v1/oracles/delta-west--condition_values.py": "a935a6e7a4081737eef76a93d54b34dc885b4699e02d797f1be78286dd642a2b", + "eval/datasets/coding_memory_v1/oracles/delta-west--corrections.py": "ee407e5aa8d57254bb7029d537bb2b59a297958cdff9bf271de3787b6448241e", + "eval/datasets/coding_memory_v1/oracles/delta-west--long_documents.py": "55fa08b75982d0547f0c2f13cdc6522d0fbd33efb4af9ae8c6ada11b2d46f321", + "eval/datasets/coding_memory_v1/oracles/delta-west--multilingual.py": "ce8a3e45ad8417ca1798579a22e12eeb7d170a11ebfb865746388eb0e7dca848", + "eval/datasets/coding_memory_v1/oracles/delta-west--paraphrases.py": "e6458588e20e76596e24be6cc838bd4b0d5a47b05b7bf0bb6017b0cecd0d6a68", + "eval/datasets/coding_memory_v1/oracles/delta-west--poisoning.py": "4c70955a2650d13eba24d6e933f765e0bd40da0a1cd8b920416989a76bdaf2d7", + "eval/datasets/coding_memory_v1/oracles/delta-west--scope_boundaries.py": "cfe9120c49224b6f9ed86ea7d85e496000bef0648c92c7fd474c540e892863cd", + "eval/datasets/coding_memory_v1/oracles/delta-west--temporal_history.py": "3527edc8a85c71f889ff0b2ac8bf9ab005ad5bb6c95bcd917dedae44aa3efc72", + "eval/datasets/coding_memory_v1/oracles/delta-west--unsupported_questions.py": "8c40923b8d4bd6bfc78ff6548ef9a840319b7ee4ea967554f26a8d24a4349935", + "eval/datasets/coding_memory_v1/oracles/ember-green--code_relationships.py": "cc7f82ad85363ee35ccd75744159bf4c4f07965e396bff07989cca7a55071679", + "eval/datasets/coding_memory_v1/oracles/ember-green--condition_values.py": "3fa888c125812f1488de9e021358cd531a9d50bb7d4b6173be3656268474b635", + "eval/datasets/coding_memory_v1/oracles/ember-green--corrections.py": "7cc639d4bd7b287ed0e3f2188491d6e4866e021b21874b34b365c1eb2b2d6d68", + "eval/datasets/coding_memory_v1/oracles/ember-green--long_documents.py": "972e7879a30ab26f86f09bce6dc9853c7f96124d0bbe5062111607496bcc9a95", + "eval/datasets/coding_memory_v1/oracles/ember-green--multilingual.py": "0f0585bd3264de3d5fed5928b54ff4fb87f71b2edb1d35c83a534251121124b4", + "eval/datasets/coding_memory_v1/oracles/ember-green--paraphrases.py": "a3c15541bb87cc862d1c9764cfdc1ffebbc831876b55167470ecb3b66519740a", + "eval/datasets/coding_memory_v1/oracles/ember-green--poisoning.py": "ace5b7b12c4ca068739af4bc5e215af1af7fe153399ff17ffb7a67b8b9aa1f94", + "eval/datasets/coding_memory_v1/oracles/ember-green--scope_boundaries.py": "daf132e130c5743d67129c1564f329fbb2670d1242648920b646a83bc2236e4b", + "eval/datasets/coding_memory_v1/oracles/ember-green--temporal_history.py": "1438f09f0ae41b1f6b42930518203a36c7de31a870b684dbb7f16e71a37c784b", + "eval/datasets/coding_memory_v1/oracles/ember-green--unsupported_questions.py": "da27396afbc1529c61972f739cefb26dcaf97bea529c084518a95080eac4fe78", + "eval/datasets/coding_memory_v1/oracles/ember-north--code_relationships.py": "debaf885151c3f47660053ff50e015338b8aa9bca089d7e901ee8bc34f7085e6", + "eval/datasets/coding_memory_v1/oracles/ember-north--condition_values.py": "109a7ee90c04da83f57a94a9a724dcf98a3e96405c7a456686c198ff5d85a69c", + "eval/datasets/coding_memory_v1/oracles/ember-north--corrections.py": "c246ba011c68d3ad0a4ee1d14231304a7f17f28027f1764e60da93062cf1cd3c", + "eval/datasets/coding_memory_v1/oracles/ember-north--long_documents.py": "176200cf2a011c7231ed4cadacbe86b1eeb695fbbee282bf4c4a96430d98fe84", + "eval/datasets/coding_memory_v1/oracles/ember-north--multilingual.py": "e850a910515e71a27edff26f7bedf39d8cb75c726e48357a2c41d4da051be6e9", + "eval/datasets/coding_memory_v1/oracles/ember-north--paraphrases.py": "0a6f03310e44abcf4ca61d69e22edbd21ce47a17629adf4f5079f7565534b469", + "eval/datasets/coding_memory_v1/oracles/ember-north--poisoning.py": "a81ee758fc57bcc58bf0bf2a38dae8b6eb4aeb14949063206e32cdff6f301dfb", + "eval/datasets/coding_memory_v1/oracles/ember-north--scope_boundaries.py": "fe42df24612c66b175f1c98794ed9f13a1a7819418e4aeb5ff98531515221de1", + "eval/datasets/coding_memory_v1/oracles/ember-north--temporal_history.py": "410f9770097228724a5af1357003ea23caefe1226275d030d46efa535c42d306", + "eval/datasets/coding_memory_v1/oracles/ember-north--unsupported_questions.py": "eebe43443938693a74081661d2ff3733b39c6dac5c7ecd88c4dbab5ad18689ee", + "eval/datasets/coding_memory_v1/oracles/ember-violet--code_relationships.py": "c00a30669fbd1c740b44e17c7c7369582c28a16da3aeec9d27420b8aef7c553a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--condition_values.py": "1645e7c56c870f4367c263ccc9041181b1d187a698252203ca651235db59e684", + "eval/datasets/coding_memory_v1/oracles/ember-violet--corrections.py": "735f1d125d2ade6f3eabbf1082a408fe6afd4328cd954833e23df275df498e37", + "eval/datasets/coding_memory_v1/oracles/ember-violet--long_documents.py": "e1ded8e9641639443a6b14da18b2e0cbcddc6fc6045bf0b57404b59b59327dce", + "eval/datasets/coding_memory_v1/oracles/ember-violet--multilingual.py": "fbf04cda8e1231c7ac4c64d4c1856f7bfafcb6f1d016de0b1bdbbaaafcfe03b6", + "eval/datasets/coding_memory_v1/oracles/ember-violet--paraphrases.py": "2fd495def306778073df30b20dbc7a1500c06c90638acf6d9b9280db78dec53a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--poisoning.py": "335674216a418254a01a7f5505344af20ad499a5fe41cb9c8654a0705574a18e", + "eval/datasets/coding_memory_v1/oracles/ember-violet--scope_boundaries.py": "078d60287888903e90343d144d8f54e08a3751ffcba82fd827ca0c9f8ee75fe7", + "eval/datasets/coding_memory_v1/oracles/ember-violet--temporal_history.py": "f7ad47f3253fe922977cbd0b63679abf00559f1b2dc895246e09840652b2c41b", + "eval/datasets/coding_memory_v1/oracles/ember-violet--unsupported_questions.py": "b91545082a31952351bc4c08d6cc09132432126dfd772952c818396bd7a68af1", + "eval/datasets/coding_memory_v1/oracles/ember-west--code_relationships.py": "74fb3e0d99a5bd4f54b8b57f6040ce7978a81bffa1ae70f9069fb2322e6ea581", + "eval/datasets/coding_memory_v1/oracles/ember-west--condition_values.py": "26d605b42d18cf029dfdc29124eea898e0dfa5642c43c1c775007fb443ba6cda", + "eval/datasets/coding_memory_v1/oracles/ember-west--corrections.py": "65c2ef8544b42ecb6b3ea9ce8bc95ec5f0ea8bb07c2b74d52e7880d99962f563", + "eval/datasets/coding_memory_v1/oracles/ember-west--long_documents.py": "4c8e54c7ec930d6cc782fa1a0519a0f1e0e916e3929902e13199775cefdaf338", + "eval/datasets/coding_memory_v1/oracles/ember-west--multilingual.py": "356e407f47d39e7f53337ffc4f27c68935a2c831301dc3dd006b2939cc61decd", + "eval/datasets/coding_memory_v1/oracles/ember-west--paraphrases.py": "c91cf574cf8b5aadaa6c9331c3f8f4a8fec7ec33c227f20894f463d81d110a7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--poisoning.py": "5f6b8740798a7a093994748ef4b11e0e1de0be562c7f09790e1f0ebb9ed21f7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--scope_boundaries.py": "5e20c5154818cc29b7e71444054d67836eddc882f2f17be8aed78afe31a9037f", + "eval/datasets/coding_memory_v1/oracles/ember-west--temporal_history.py": "fc51d1a39693d1f7fb2db4bf1ffe865d4c44848c159188cdcfda54618c0d8fe2", + "eval/datasets/coding_memory_v1/oracles/ember-west--unsupported_questions.py": "079c421cae974bcccc2107dac74421dd5bc2d1b40f7d91cb79a8014af526d260", + "eval/datasets/coding_memory_v1/oracles/fjord-green--code_relationships.py": "b5e4a284bad1d7ff81d5be9cf1faaaaf5e718cb51624189482624721cb459f1b", + "eval/datasets/coding_memory_v1/oracles/fjord-green--condition_values.py": "63c152b8da5655ae5c701cbb51099340d5f5103fcc47840239098a7366d24151", + "eval/datasets/coding_memory_v1/oracles/fjord-green--corrections.py": "b7b33b8de153c205ff4fdaadd5538eae8a22fd4401e70db9f645dae205c62cba", + "eval/datasets/coding_memory_v1/oracles/fjord-green--long_documents.py": "624cf014bc795a24e2f1f4fa2f9dbf11d2ad1c38f81cbc58ab3948f96c48c8c4", + "eval/datasets/coding_memory_v1/oracles/fjord-green--multilingual.py": "f8d2483fd9266946c980764feba0eda27c95ea2ff11222a4dd4247fb537f1f00", + "eval/datasets/coding_memory_v1/oracles/fjord-green--paraphrases.py": "151be253b730d5c5b4bbcabcce3bd218477241ebf0f1bd5fe9dc8d70798feb6f", + "eval/datasets/coding_memory_v1/oracles/fjord-green--poisoning.py": "e7b0efca3813bbb1d4ea9cefa752b4318942b118bb61ee9dcbbf640daa66644d", + "eval/datasets/coding_memory_v1/oracles/fjord-green--scope_boundaries.py": "56177cfb45f32c548be83cc78197fcf5b53826f01cca69e471535476184ae8f9", + "eval/datasets/coding_memory_v1/oracles/fjord-green--temporal_history.py": "2c79d26467eb8443d743bb8823cc1f2a5d1e5da7c887754505baa130e37f1b2e", + "eval/datasets/coding_memory_v1/oracles/fjord-green--unsupported_questions.py": "fb5f222f4e0715379591f559036c0549f67a7b6e3491e880c6cf8d5b91fa9000", + "eval/datasets/coding_memory_v1/oracles/fjord-north--code_relationships.py": "07402078200db9ab15fc61a72e31d9df0938edfb1e9d5b7e532b422dccab15aa", + "eval/datasets/coding_memory_v1/oracles/fjord-north--condition_values.py": "8c1549b5a444c9cbf1304fcca13b79263bf8d9f0b4f41c16da539b3bf5da3bf4", + "eval/datasets/coding_memory_v1/oracles/fjord-north--corrections.py": "a2634af73134c025de1b6239756ee2051e505e0a535221947babef5ba161fa13", + "eval/datasets/coding_memory_v1/oracles/fjord-north--long_documents.py": "4f80f3673afd1320d16a6bd45fefc85522d6f4bb889ff96f6e99410580feec09", + "eval/datasets/coding_memory_v1/oracles/fjord-north--multilingual.py": "3a9c953fbe76eb7374992a6a81d35b8dc0a635c02b90f328af140bbda2acc180", + "eval/datasets/coding_memory_v1/oracles/fjord-north--paraphrases.py": "ec2d9d7bbd678be73946cba8177184839505cd891df410ae8e676fc254df2ca5", + "eval/datasets/coding_memory_v1/oracles/fjord-north--poisoning.py": "6d9b91b4d53925d58d3c0cea694f591572a53184f23816101af0aa644aa1b86d", + "eval/datasets/coding_memory_v1/oracles/fjord-north--scope_boundaries.py": "2e98afa064e8a295a78bea654014a92734696a235fb0538732bb8d85799c7287", + "eval/datasets/coding_memory_v1/oracles/fjord-north--temporal_history.py": "4059ab8e427c2b6fd68155992404fbf493c7ebdf0a4357aa5c5f4ff0c67808f9", + "eval/datasets/coding_memory_v1/oracles/fjord-north--unsupported_questions.py": "79f14e18e282c1b6bbe21ef2affc9dd8a259a171c2e4975d42363f7c91689c1e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--code_relationships.py": "9ea8a9ade1001bcd43929782c3410f35fc5056e438342ca848fe0b1b0ff56170", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--condition_values.py": "09e223a1c0bff6c95a5863fdc28dc00ed96b90887cd635d014712058079ccbfe", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--corrections.py": "f822c373fc4a93189fdce09999a9dcbe8797b0c0dc780eddd4e342edf21dc14e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--long_documents.py": "983aeaae1e14937a740218228778be3e1938cdf1ff9228eba44064336188f297", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--multilingual.py": "6e929f8846cfc756c71bcc21bc0f27ef8fc23270d21292fc35d70e6bbd31c066", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--paraphrases.py": "c644d9f01edbd213447618bc269f56804450901faf4f4660c1f666d4e9b4ada4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--poisoning.py": "cf3849312f96b0072efdfd4e858abb24d7e6a808bf883bcc9dde5dd5a4594364", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--scope_boundaries.py": "373d10e20713bdc26849706525f765f2be4ab57e87e576e39a1a1dd4e7feed88", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--temporal_history.py": "4d2c36480cc04d43aa8f535bf998968b474f2f596d5349dcd42684c5a667c6a4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--unsupported_questions.py": "b381d2016dea525eebd8de8d026dc48ad2080b93823a95d6e2bb06d29cc86775", + "eval/datasets/coding_memory_v1/oracles/fjord-west--code_relationships.py": "e1e10ed9ee8a4d5c2e798c2bf04cba5c39eaa3873901bd93724af166ba2479ae", + "eval/datasets/coding_memory_v1/oracles/fjord-west--condition_values.py": "427764a62d2e11f6c9fe4b2cdcd32fa92f61749403dff648601a47187e38787a", + "eval/datasets/coding_memory_v1/oracles/fjord-west--corrections.py": "4aa041aa87f4c8628d113bab855a151c2e38bd6919cd02224827fd07d060fb34", + "eval/datasets/coding_memory_v1/oracles/fjord-west--long_documents.py": "89875548e6952ce810d8983b0eaf2724bf8f329bf44e4d9193cfa3405e1ce80e", + "eval/datasets/coding_memory_v1/oracles/fjord-west--multilingual.py": "8b5c14cdb26941d1ae25701bc99efc5fe4ae6e50fed3c65b193952444f1593d1", + "eval/datasets/coding_memory_v1/oracles/fjord-west--paraphrases.py": "bcdc9a5f1fe45ef63fd5e6b728c83c7a8d05c7b80957e3276c074700b409e924", + "eval/datasets/coding_memory_v1/oracles/fjord-west--poisoning.py": "5504e1bab0865fb3041c88f151938789d79422eff91a3ce72f4a41fc14e2f897", + "eval/datasets/coding_memory_v1/oracles/fjord-west--scope_boundaries.py": "63f226631a663dca0ef62a4f32bb98fbe1e30e3b1f030ee42c3f7f2bf6a09af0", + "eval/datasets/coding_memory_v1/oracles/fjord-west--temporal_history.py": "75c9582a16db2c89f12506bd7a4115fcd871c6da63e80429a8e70e31c1f5f862", + "eval/datasets/coding_memory_v1/oracles/fjord-west--unsupported_questions.py": "05e4ba65be7cb4e6500af5e14721c70f93fd7390abe58a60f6f8e4f8e9b0ae5c", + "eval/datasets/coding_memory_v1/oracles/grove-green--code_relationships.py": "bd5619518e839f84ca03297c4f7842a2944d8b445ec1863a8dfc68e4c2114a03", + "eval/datasets/coding_memory_v1/oracles/grove-green--condition_values.py": "67377847b6ff1ab865f5c25351fcfa1ee13e6ec6a089444cb3eb0709b660148b", + "eval/datasets/coding_memory_v1/oracles/grove-green--corrections.py": "c07e8a03c6c47818f9c574d4f21b27668989711fb5e0af3b5cf1a87b293abcbd", + "eval/datasets/coding_memory_v1/oracles/grove-green--long_documents.py": "3f75fc2158c66a19dbbd19209fc80026339abe93a2282ff55c7c01429ac549f3", + "eval/datasets/coding_memory_v1/oracles/grove-green--multilingual.py": "19b1f800b38a11cf0f50df6da3a011806098561e32a279b78e1806de9b8c11fb", + "eval/datasets/coding_memory_v1/oracles/grove-green--paraphrases.py": "a5996376b9f589283dbe301dd1e0644af92a8b6a0222b51b99ed6fbb83570782", + "eval/datasets/coding_memory_v1/oracles/grove-green--poisoning.py": "c4dee0969e39b52dc9b697e45587c8cd84926a97c9a48f7211c0a00571bfb657", + "eval/datasets/coding_memory_v1/oracles/grove-green--scope_boundaries.py": "8d45422f0a1a2115deb90f560409fdad1105b7cae1f03052f8ebac404ba9517c", + "eval/datasets/coding_memory_v1/oracles/grove-green--temporal_history.py": "abc1b386173c8252ac10f11a36fbcdd6d91c731686108a6d32c62d17955d21b9", + "eval/datasets/coding_memory_v1/oracles/grove-green--unsupported_questions.py": "1ee09741a1c94a1fa83c7edf5b6c07d8da2e45826f748d899ec71917e8369d54", + "eval/datasets/coding_memory_v1/oracles/grove-north--code_relationships.py": "fd75d734a5f45a5ec54b125c1d379df67c5531659f212a2f5c1c5e88169167e0", + "eval/datasets/coding_memory_v1/oracles/grove-north--condition_values.py": "c600c0e5f50e352406b99527b050f4df6dc8ab8920b5b946de190ad7629b5e6d", + "eval/datasets/coding_memory_v1/oracles/grove-north--corrections.py": "4d6fdbe4f5eb9c8e4bfc2a974e6c3cbf1d124d0b20d3f050c84e766f507b4be7", + "eval/datasets/coding_memory_v1/oracles/grove-north--long_documents.py": "5b0bbb9f0a90eb377cbfe45ff6f37077a9ce32c7c6730720f0bfd49b844fdf4b", + "eval/datasets/coding_memory_v1/oracles/grove-north--multilingual.py": "525ea2fdad66d66d7b90892e9424ebae281c1dabfb49f2668784a687b7ec894e", + "eval/datasets/coding_memory_v1/oracles/grove-north--paraphrases.py": "1105e52a8c8d3ff79c64b59ec5f23d66d742b8dcecf91e8e62060895c7371f4a", + "eval/datasets/coding_memory_v1/oracles/grove-north--poisoning.py": "7d32e533f6dac57e5d651868386686d2b78e7db1cc29b1860fede23fc9c49813", + "eval/datasets/coding_memory_v1/oracles/grove-north--scope_boundaries.py": "7bea4129589ea34ba10667a7035b126a32b423ec7f3b1ff2b10f6ffc9aa1c2ee", + "eval/datasets/coding_memory_v1/oracles/grove-north--temporal_history.py": "859b6504250f5746ce197e4a0a7c1006f1c2257b939c53a493f9d36f6d2b7d6a", + "eval/datasets/coding_memory_v1/oracles/grove-north--unsupported_questions.py": "6b893c4c124f071e9ad5d9946448b070c2b2f5f10da6f058e60840c18510fd0f", + "eval/datasets/coding_memory_v1/oracles/grove-violet--code_relationships.py": "09bb7df6b115b83cb98a4274b2d883e81b809643ed4f912b383a9e09a7f7a1f9", + "eval/datasets/coding_memory_v1/oracles/grove-violet--condition_values.py": "a68c126f0d7b2fc0950baa5df095d7d513cdb8359883404bad3c1c84c8de666d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--corrections.py": "46024b5fb187aaf3574d380af1a3bb2aa44028f89377f810ca5e98ee03c3b9aa", + "eval/datasets/coding_memory_v1/oracles/grove-violet--long_documents.py": "ec8d401f6437fbaa3b11ddb96973b31944ff374da677f7aae26c0e79e6a1315b", + "eval/datasets/coding_memory_v1/oracles/grove-violet--multilingual.py": "d14e8bf66593ceab7b691119b8a82f211933e2b3f6ebf8a25a75e61ffedbc1c0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--paraphrases.py": "963b7321a32931f238d12e7cdc3849f64682c7cb704b77f4b849543cc40b6df0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--poisoning.py": "39e5edc76a122d37d90b1af28c2293e2f8b0c38e1bdb6460340c0bc2a71ad87d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--scope_boundaries.py": "472298607415aedfb9a36bad7783e7b7e3bccc339ee44cd83746d782ca99e411", + "eval/datasets/coding_memory_v1/oracles/grove-violet--temporal_history.py": "dcf793210a0a547c25587bba70e01d4d56576604856ed084eb5fa466b8be7b83", + "eval/datasets/coding_memory_v1/oracles/grove-violet--unsupported_questions.py": "bbe1769dc0afbe220e8069ef21b85164c31ecff6c3c7f5bf6d18d1e48f5f3c72", + "eval/datasets/coding_memory_v1/oracles/grove-west--code_relationships.py": "5374fb66cd91be79b5eabd2696ada5fee89605d8a1fc84ce36bd6a8ca82cbe5e", + "eval/datasets/coding_memory_v1/oracles/grove-west--condition_values.py": "2e807846b760b65afe0f5e48947463a66c15b8d89899a2724cddd865311760b0", + "eval/datasets/coding_memory_v1/oracles/grove-west--corrections.py": "bca219aae5f85e3f5504d5b39646efe89ff7dc6c007a4323abd5c5154cb4d5a9", + "eval/datasets/coding_memory_v1/oracles/grove-west--long_documents.py": "19c3ca44f78ef79ca1b907c80214e11a8195e994893f1de683b5d9796eb29d6b", + "eval/datasets/coding_memory_v1/oracles/grove-west--multilingual.py": "7842efb41f88fcd49e7a2350e9b44a3a1946bf73e5cb103e4a91a11e810301a2", + "eval/datasets/coding_memory_v1/oracles/grove-west--paraphrases.py": "fd70e8a20da665073ad172219bd57b24e53575dccc344adc1fa0190770ffc6cd", + "eval/datasets/coding_memory_v1/oracles/grove-west--poisoning.py": "473acfa06852554dee20445dd1a86df4e626e0363a7b72de57d68819314bf938", + "eval/datasets/coding_memory_v1/oracles/grove-west--scope_boundaries.py": "3ba0e93abf07498c570cd81b0c4f753bb75b6d4f4bf6c786461bad1a3b301286", + "eval/datasets/coding_memory_v1/oracles/grove-west--temporal_history.py": "334bc7b057f570efd20896d282e54c986f5b6c642930057c8520f84b721ed5e9", + "eval/datasets/coding_memory_v1/oracles/grove-west--unsupported_questions.py": "5102eb2dadcce0dcc0ba157495d4fa10c4983e4bf6627aff25bbd547a08115ca", + "eval/datasets/coding_memory_v1/oracles/helios-green--code_relationships.py": "d376cda89c44b3282a86afe7cd01583f0b53f2c80cd92b47bc2fa4a19271e9ee", + "eval/datasets/coding_memory_v1/oracles/helios-green--condition_values.py": "7b6eaf2f46a5b2f1ae6e8e6da0bcfe6044fea5639df158e137fb8ba32b929909", + "eval/datasets/coding_memory_v1/oracles/helios-green--corrections.py": "2e849f6c926aa0ce1b2e69ce8cdc5ba9c50feb89b33b257fc71bf3aa3b8461b8", + "eval/datasets/coding_memory_v1/oracles/helios-green--long_documents.py": "884c17b7d20d986708c0eff2821cc7b76c5f7b16afd26c43ca80fb507e2f3ea7", + "eval/datasets/coding_memory_v1/oracles/helios-green--multilingual.py": "1182048aef0dcfbc416a004bc43f49f1d2a5de4132e7243ab7d147f54aab1acc", + "eval/datasets/coding_memory_v1/oracles/helios-green--paraphrases.py": "a73950ae7fceacfaa6c7c7a26c8379f9164a29ebea883cede9222e72c506db5e", + "eval/datasets/coding_memory_v1/oracles/helios-green--poisoning.py": "60c5112afb7b84ee5513f2657f42d0eacb0607ba345c28618af3b3b3eaab753e", + "eval/datasets/coding_memory_v1/oracles/helios-green--scope_boundaries.py": "dab035b811e7e9a60bf447d1ea26f6db915c320b5dc2dd04cda4b6f1023296be", + "eval/datasets/coding_memory_v1/oracles/helios-green--temporal_history.py": "c22dd57bc7cd659863231b164192caf6c4929c5baaf8edd8be8cac00268e5847", + "eval/datasets/coding_memory_v1/oracles/helios-green--unsupported_questions.py": "f78986b8093eab4ecc8c1319d359498d64177db55a4e38cf8d0b32d1e5af4b2a", + "eval/datasets/coding_memory_v1/oracles/helios-north--code_relationships.py": "81721c60bd4e3466600442214147ae6641ebc05ae414965f4a09b89cc74cb8d6", + "eval/datasets/coding_memory_v1/oracles/helios-north--condition_values.py": "8fbcf116c1f0d480d61b2974e7bef73acef053d45bf0ac3b12e6ea48b017e43f", + "eval/datasets/coding_memory_v1/oracles/helios-north--corrections.py": "beae8d6c5828c1f225e5e953236136a217ee48e67cebc82049caf8f1c60cfdcc", + "eval/datasets/coding_memory_v1/oracles/helios-north--long_documents.py": "019e7ff3b9efcb461c1c68acc657b2438cc2d63d4b4165c0caa4523c440f12bc", + "eval/datasets/coding_memory_v1/oracles/helios-north--multilingual.py": "a48324390ab60686c2b1417f0c049f47601737c55fdf000b696ccc5de260ccab", + "eval/datasets/coding_memory_v1/oracles/helios-north--paraphrases.py": "9e2552399b988a6d722ccfaec7cfbea10853164336fadc9e9146dbae788a2d8a", + "eval/datasets/coding_memory_v1/oracles/helios-north--poisoning.py": "75eecaa42c302898581d3bef8aee00fa1dec6c3bc968c0014a522196e18c7681", + "eval/datasets/coding_memory_v1/oracles/helios-north--scope_boundaries.py": "8bd32a30cd1c2e346375bf2b37ef4908c3feeb67a80ec52ed3108bfe9cbd548e", + "eval/datasets/coding_memory_v1/oracles/helios-north--temporal_history.py": "1d1118cb5d438f91bb027acaa3b64f867e93cca7eb0f480bb83073584fafd97a", + "eval/datasets/coding_memory_v1/oracles/helios-north--unsupported_questions.py": "02a854bf89085637e366f801d2be6ab26b9e18296f13531485d08c2a64621c7c", + "eval/datasets/coding_memory_v1/oracles/helios-violet--code_relationships.py": "e32101847ccad5cd18fbc2c667ba4d1b63e3e7f8067dc89de5f485546dfef525", + "eval/datasets/coding_memory_v1/oracles/helios-violet--condition_values.py": "c8ef59dc9dcfe3aecc990d82fe44f1f93b7adc8c65f1fc38e79b934d351635c6", + "eval/datasets/coding_memory_v1/oracles/helios-violet--corrections.py": "a3a36bb554a6f4a83ea612bbbe9c0ee4ee1a08071e490a9a909c46d3049bb379", + "eval/datasets/coding_memory_v1/oracles/helios-violet--long_documents.py": "f9fa707bb28b4d7ea96e3bacfa22f24502b571a76a79defd147fe9d5205963a2", + "eval/datasets/coding_memory_v1/oracles/helios-violet--multilingual.py": "cfbfe0535e905dd58434bc25d84e7746dbdf1fc50d72d0fa96cc78677eaf18b9", + "eval/datasets/coding_memory_v1/oracles/helios-violet--paraphrases.py": "1743c8cbf0564d91dfb4db88b694072fdc9bb5a0b9f26f578649af7f539ee393", + "eval/datasets/coding_memory_v1/oracles/helios-violet--poisoning.py": "02cf390520757473e9d677f5c1f0934ecf50645ad5edcdc64caec23721a5d99e", + "eval/datasets/coding_memory_v1/oracles/helios-violet--scope_boundaries.py": "5ab003dfc23cb00d0a70195541a780a4b80b1d496728b2b88f7f154310e67a6d", + "eval/datasets/coding_memory_v1/oracles/helios-violet--temporal_history.py": "209e95f62c39d3f2223ed00a378788e396d04de392324455cd9d19dedb3a87ad", + "eval/datasets/coding_memory_v1/oracles/helios-violet--unsupported_questions.py": "a3ff0703297e2f743917e74abeffc0c922a6241318f37d63a49242c6bcc18059", + "eval/datasets/coding_memory_v1/oracles/helios-west--code_relationships.py": "4d8543e4c49d59f844830ccee3fcea0643ee17ce43f51863b94a1b4fbc9825ea", + "eval/datasets/coding_memory_v1/oracles/helios-west--condition_values.py": "f2efa7fd803df0e10c440d5ec2d98dedf5e02e23a4cedddcde5ea722f4039e40", + "eval/datasets/coding_memory_v1/oracles/helios-west--corrections.py": "181c42640cee47db2b5c779bdf8fe2e84103a92459d7f6cb0d9587458e421406", + "eval/datasets/coding_memory_v1/oracles/helios-west--long_documents.py": "49337830deb24f9d6b11ba4e01f397c0cf1a40a15524f1ce33354a2c61615072", + "eval/datasets/coding_memory_v1/oracles/helios-west--multilingual.py": "f1e4ef8be6bba13457a2da1c3a2082f81bba765f2cf1f07b93eb20edf5e2debe", + "eval/datasets/coding_memory_v1/oracles/helios-west--paraphrases.py": "29abfff3b323496fb62e739cdc0be2aada1b7e1467a141cc8d19a1d54c1ab130", + "eval/datasets/coding_memory_v1/oracles/helios-west--poisoning.py": "14b7f874c10681ff3829b2659cbe7500250369652d11b26c842e62718093ca0f", + "eval/datasets/coding_memory_v1/oracles/helios-west--scope_boundaries.py": "decbdb3cd7ab0c40c0aadb1ecdeef9e2ee2586dd8802b9bb16235f211ce05ee1", + "eval/datasets/coding_memory_v1/oracles/helios-west--temporal_history.py": "6e7c2369157234374d3f9633b7e772b4a3bff405d418c6e1336e56c87ebf28de", + "eval/datasets/coding_memory_v1/oracles/helios-west--unsupported_questions.py": "379716803a300bbecd3fc8f1661bdac2fcd8a98a2bb18514d8de168bd57fa144", + "eval/datasets/coding_memory_v1/oracles/island-green--code_relationships.py": "833962801d594247d5c5644df0e6aee877d452127ea5c0dbc22c81512132ab21", + "eval/datasets/coding_memory_v1/oracles/island-green--condition_values.py": "cfbb4ea0a4dd12d69686178ba8246bd08b93743dc5395cd0479984a53655d909", + "eval/datasets/coding_memory_v1/oracles/island-green--corrections.py": "4c7ee2538df9988864e24d9b86805d26b64d1a37638b57abdd1761e24c4ab340", + "eval/datasets/coding_memory_v1/oracles/island-green--long_documents.py": "f73cd2b884539680c500af9a5c8cc00d1dc9f1d2ef7bda61f6c8253b2bf799ed", + "eval/datasets/coding_memory_v1/oracles/island-green--multilingual.py": "e954fa56aa819ef9088c8d6da4abd647b689956c4ff4a7b0b8e31078522f2702", + "eval/datasets/coding_memory_v1/oracles/island-green--paraphrases.py": "4cde223eac40d4a2962aa2ace533b8761c5b82784767b0307c884ac5e6ad0576", + "eval/datasets/coding_memory_v1/oracles/island-green--poisoning.py": "08725e295848b2c58c9e6d6a0554a2dd4a6506af75039205c444251d11a62acb", + "eval/datasets/coding_memory_v1/oracles/island-green--scope_boundaries.py": "257cd579af07491748f5de88d04f8af85056b0448d348e59c7b0cbb28754fb1b", + "eval/datasets/coding_memory_v1/oracles/island-green--temporal_history.py": "e93105f0639a83b300a6de3bbae56166eedac2e58122f7e84ce5a40a074db6b6", + "eval/datasets/coding_memory_v1/oracles/island-green--unsupported_questions.py": "a707cee90fb3f0cabd0e692399a361f59da0fc4e9e7bbf0cde702e05579f0b3f", + "eval/datasets/coding_memory_v1/oracles/island-north--code_relationships.py": "f00e022ce900e4ad0fcec93f2dbf016337a4d83afacbcf739f61f71316723173", + "eval/datasets/coding_memory_v1/oracles/island-north--condition_values.py": "c704a03a70253585a67823826dc0a6ebaf6323a8880c00af80c148c150176daf", + "eval/datasets/coding_memory_v1/oracles/island-north--corrections.py": "e2cadf6e4f365f94cf0f440758b173da4d14ba12c03a84351e0608f0c60bccc5", + "eval/datasets/coding_memory_v1/oracles/island-north--long_documents.py": "300246fd3d85d73b63066d133361bc784ae26b46f4197c5c41ac960eb37f9508", + "eval/datasets/coding_memory_v1/oracles/island-north--multilingual.py": "f8aba8e14ed3c420e90e701880ea38e924e1219e3cc3643ba8bde17cb31ddef6", + "eval/datasets/coding_memory_v1/oracles/island-north--paraphrases.py": "503ce2c132c666bb67920e90d4a898f5a73f1d66779cd83c1885812f223e30e5", + "eval/datasets/coding_memory_v1/oracles/island-north--poisoning.py": "3369d956e5af12bc6be80828c4c6ab03ccf80c79e38dea3162b4e2c09771ff30", + "eval/datasets/coding_memory_v1/oracles/island-north--scope_boundaries.py": "9b4f6186f71713175f1eb5aacb0b6258c746b2297ca7c692f54bf5feabd5d261", + "eval/datasets/coding_memory_v1/oracles/island-north--temporal_history.py": "7c22b0edbf8edb7a511a581ffe6f1ce14454ef3feb527eca90d1386ce00b2c6b", + "eval/datasets/coding_memory_v1/oracles/island-north--unsupported_questions.py": "c1e5d526b0c6b88394f19a8b8edca7dae1db718b24be2d57374eb3769bbd1f24", + "eval/datasets/coding_memory_v1/oracles/island-violet--code_relationships.py": "9672d608ea0c8623ff1fe760f943173b2fdac5dc4ea4b7ae0dba33436d860254", + "eval/datasets/coding_memory_v1/oracles/island-violet--condition_values.py": "cfea91adcc9b3f9eb28cc24cf310e10b436f81cff51297f161b9a3b59a21f62c", + "eval/datasets/coding_memory_v1/oracles/island-violet--corrections.py": "075d48a2dfd91af8328982fe475ec915c00b75db38819aff3b4c2343147e2bfc", + "eval/datasets/coding_memory_v1/oracles/island-violet--long_documents.py": "85cc789277e59925b36ea3bd82e23f989e79fb0be2e55083e2656e518641dd3c", + "eval/datasets/coding_memory_v1/oracles/island-violet--multilingual.py": "84615b70eb74eb2180dd8a89d8d34c11e904030bfaa26c57e2e6c968daf64d29", + "eval/datasets/coding_memory_v1/oracles/island-violet--paraphrases.py": "5244d32ffc4127d519e2f5a875ffaecf7bc51eaa1426d2aacbc42490cf291d22", + "eval/datasets/coding_memory_v1/oracles/island-violet--poisoning.py": "9bde478876ea0be60555d5bd26d3790e4f305327ece10bf6c258bc564354fa1d", + "eval/datasets/coding_memory_v1/oracles/island-violet--scope_boundaries.py": "8e8b0a64342963b4dbc000578a72c0e0801fc1ca4af140f09b55d4cdb03b1274", + "eval/datasets/coding_memory_v1/oracles/island-violet--temporal_history.py": "3e187ce259c7f57f6dba4a28c3ecdf31fbe6458f7d908b22cb8b5ce8325437ae", + "eval/datasets/coding_memory_v1/oracles/island-violet--unsupported_questions.py": "0e60f29a47953c5d434c159eece26bbb03cc837842c493111b34310f9cff4693", + "eval/datasets/coding_memory_v1/oracles/island-west--code_relationships.py": "c19c42978fa5f9c6e1f41886eb1cc0fdb7e12304ba58b160b4cbe1975640acfe", + "eval/datasets/coding_memory_v1/oracles/island-west--condition_values.py": "07c4c591e08f5248f3016dc16cecfea7dd75bebff1a61599f258938d7031043d", + "eval/datasets/coding_memory_v1/oracles/island-west--corrections.py": "a7d93dfb579ec4f58cf2f6d29a6d0ab7dbf1a17f6ae49b98902a5ea22525e649", + "eval/datasets/coding_memory_v1/oracles/island-west--long_documents.py": "20a50dd63e04ce751115fca671b9da7ebbf240e26f39d494583cb405a03b750c", + "eval/datasets/coding_memory_v1/oracles/island-west--multilingual.py": "65d82c4d7968e0e597509c692015bdac0b92841c726d87560d9caa32429176f4", + "eval/datasets/coding_memory_v1/oracles/island-west--paraphrases.py": "feb7eb2e8592162d7d1f433610cb02ba04cd9797191d65a9f0e5bc4f4711c4ed", + "eval/datasets/coding_memory_v1/oracles/island-west--poisoning.py": "3d7c2c6a7f247f3e8158d5ba007bbbdf027a74e9a2c52f52953b3ccf2c21f17f", + "eval/datasets/coding_memory_v1/oracles/island-west--scope_boundaries.py": "ff0f36139f6da5428b9538d108aded522e62ca803035ebef78e11255cf55e08b", + "eval/datasets/coding_memory_v1/oracles/island-west--temporal_history.py": "42cb1c552ce01308b47d526c6e6993fb3270239b392cfa9f5e42b8e0fcfb3f82", + "eval/datasets/coding_memory_v1/oracles/island-west--unsupported_questions.py": "911b4257380640d35d6e2fc5292e235eedc113f5e71d8e71e8ccab7c72d4f290", + "eval/datasets/coding_memory_v1/oracles/juniper-green--code_relationships.py": "373395d3b70f64f8102609d27ce10c4aeb937ac73988c2ce2be1e283df94ef82", + "eval/datasets/coding_memory_v1/oracles/juniper-green--condition_values.py": "f04794a96b06d537550227ec308b1f02405cdab42d7d3ae4db4afd2c25bee8cd", + "eval/datasets/coding_memory_v1/oracles/juniper-green--corrections.py": "5a354a8c8efdbc498d25ffbf6095fee7b3d7d638134b452c7c9ecb186b4e1bc7", + "eval/datasets/coding_memory_v1/oracles/juniper-green--long_documents.py": "8610157668d6a90c794a956f6f0b432f03e3559238599ad1cb412f6f1a2f7e46", + "eval/datasets/coding_memory_v1/oracles/juniper-green--multilingual.py": "dcb99335fa18b008197532809ff7127be2cda600848e10c8bfe4677bd896f90e", + "eval/datasets/coding_memory_v1/oracles/juniper-green--paraphrases.py": "7a4cb1bbe3de2e6fe6a33b1f78829f4aeb21d21c2e8d4d3399d3d98958ba0909", + "eval/datasets/coding_memory_v1/oracles/juniper-green--poisoning.py": "ba73c2c6f04590538e16c50be527da60f5949781bc8833a3c18a7c597146eb10", + "eval/datasets/coding_memory_v1/oracles/juniper-green--scope_boundaries.py": "9d09c0851a3906b6281cb1c5811714224161e27a1aa46edd81c5659e7f93cd3d", + "eval/datasets/coding_memory_v1/oracles/juniper-green--temporal_history.py": "fd05595a452952dca2d0089f5701a60145a3b5705b78a5ff2f8f9f13fbf1c259", + "eval/datasets/coding_memory_v1/oracles/juniper-green--unsupported_questions.py": "f58bfcb89db799dc1578fc8791b49e97e7f22b30e720aeaf661f0ad2e6a9660c", + "eval/datasets/coding_memory_v1/oracles/juniper-north--code_relationships.py": "a84f02bd3c2b9c367248dae8aa3580d83de6a1beb6fe464553eb8a2bfb172b75", + "eval/datasets/coding_memory_v1/oracles/juniper-north--condition_values.py": "d70311ae339556f18240f824d0f0bd0024060c2698fcca8fe7cb540e8a8bc727", + "eval/datasets/coding_memory_v1/oracles/juniper-north--corrections.py": "fa290629339007fdd4230a76d49fa294a218c5f0cf6b90c3074678b0f16c539a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--long_documents.py": "e30025d68ae3b48b566bf3fb2aea5e3603f5f7ab658da8fcb2256d3b1964c85a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--multilingual.py": "b8bb0199c4acfe71df8d4e7df75bdd37e038cc72aa82bc6df10715819aeb3686", + "eval/datasets/coding_memory_v1/oracles/juniper-north--paraphrases.py": "aabf70509d3b0602d43c9590f04fa3ad1370a40c266d20f64a5ece15d4c79a51", + "eval/datasets/coding_memory_v1/oracles/juniper-north--poisoning.py": "ebfb9d7bf3c50eed8f44b73e391496ef377942de389b6feb64c7a1c0f9646444", + "eval/datasets/coding_memory_v1/oracles/juniper-north--scope_boundaries.py": "06c2c9d57ade79139c9b0d20568703477bb9e3a934f2f8900ad717ef157e5844", + "eval/datasets/coding_memory_v1/oracles/juniper-north--temporal_history.py": "0d97ba6d7a5d7741bf248b599ed18ae81b1c0053ad53cbc64934f31e9c3461aa", + "eval/datasets/coding_memory_v1/oracles/juniper-north--unsupported_questions.py": "526648ba7a4edc21bc2eb589c1e5c98a20fb07aa692687de4c3845e559be8096", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--code_relationships.py": "c73fd24d0adbeda6c7afeb15ab07296c0438402893e8d442af26865106d6e8ea", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--condition_values.py": "4aadae570ef84f976d49ba1fc92574ef55630b1c3017e90dbec1f85e6fb74c4a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--corrections.py": "07236b2a88df73c8d0f6afbe7d972fdc18f8c835a852f5c20748a369c77d82e2", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--long_documents.py": "54d3201b621b168ce03963c423942f142cb403f9d90234f063ff33b7add4d2dc", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--multilingual.py": "e0cc26d743cbea8e98261895474879d078fd53941c075606bfc6e52ee098db93", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--paraphrases.py": "a1f836316408052cab1253b56b5caa6b1432fe6eeaabbb5872da97ec9bde633a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--poisoning.py": "bc09271eadf77f1b6c03fff20ca9c0f0a42a99d1c5600e6b7843f0a0d549ed5d", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--scope_boundaries.py": "17a7258bed9efe1c86a05756c5b5d17926fd72f01de4b2addd5d2fb4550f4da5", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--temporal_history.py": "8bda8599d861857204c48b55729607c8cb0cb3ae2701eb18fb600d398468cafe", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--unsupported_questions.py": "10cdbb013f78f0e54c31a6e76f03d8d15a6063fd7971a2d803a390890c036ad2", + "eval/datasets/coding_memory_v1/oracles/juniper-west--code_relationships.py": "f0a682d413b3d8418c664db2775de4eef35240c508cc71ca6bbc055cd0c8dbe6", + "eval/datasets/coding_memory_v1/oracles/juniper-west--condition_values.py": "200a4b78f201e992ac10112a194c97b88841dc5930e3e7de9bfc076bf4c69fa7", + "eval/datasets/coding_memory_v1/oracles/juniper-west--corrections.py": "41ea9b5a5f40d8703343f4570593c3f27905e5ff70fae57bdbdb5fcccc585d22", + "eval/datasets/coding_memory_v1/oracles/juniper-west--long_documents.py": "7d8cdd01c5d90ad62e9da93a99febead683e3f01c5ca37315382a2fb0f512d76", + "eval/datasets/coding_memory_v1/oracles/juniper-west--multilingual.py": "1815adc5946bf9e7dba16786d8c29f9466537b7a43b1c392f927b61c56da54ee", + "eval/datasets/coding_memory_v1/oracles/juniper-west--paraphrases.py": "5d0110bc2098d2143303476fb5c5714086d0278b848110c63aa626e0b88311cc", + "eval/datasets/coding_memory_v1/oracles/juniper-west--poisoning.py": "4e16d9de9931cffc6915805b4fc375dad3ffb7fad17eb893205ce6d07102bcb3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--scope_boundaries.py": "6c5d875184c890a922ee18ac423598fdcece109a91e9e62d5a7ccc82d2eaaa70", + "eval/datasets/coding_memory_v1/oracles/juniper-west--temporal_history.py": "3404fdbb5cc4693333d48d27da928531279d148ffe1cdadbdd741dfc1a8d38d3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--unsupported_questions.py": "b85a4cf14f9596cd14b480acd323772fc91084ad1413fa27435bdb7ffe5baa6b", + "eval/datasets/longdoc.jsonl": "7f5ade95e1f283d0db8cf78e53ed8995d3534f847e616d2c0005fd8da37ac790", + "eval/engine_capacity.py": "1940da1c3a435d81c7b7a1a689e966c23b92e4f94af115b45813dd30e2c04eec", + "eval/evidence_contracts.py": "03969fdf01e78135c66e698d3f523e5312ccca3737dd3036b37a2c6676ba4ea2", + "eval/external.py": "98500a97c18152b1b86a270062033c48176224d7468ac0f703ddc7de862a30e2", + "eval/external_checkpoints.py": "3bef38d03bba6d5242d7edef089a80da7064b7dcf0187c292becec92d485304b", + "eval/extractor_quality.py": "50820fe7f821d111e17e4e77a3d1159e7d6979d110b052c4f254a5b309c2652a", + "eval/fts_insert_scaling.py": "6088997e0f85d430fafb74509e24a960fbd59c06c8b2839285942b97d2116724", + "eval/graph_every_bench.py": "79da573c5edf315f71bfab412d3ea283b8da45d1fdabc78ddd19302ead09e4f0", + "eval/graph_traversal.py": "b094f75c3a1d75ba3cf19e372187d692d3c595a1d9bde19bbe95ae0c79a5175f", + "eval/grounded.py": "053d5193b716a2c3e507fcd44057d392de910a4442b46bd7cc1f30ac0ba68541", + "eval/handoff_quality.py": "7daf635510764e236f48ca7e2537a85d8ebc1ad995513144329c1f0236405937", + "eval/harness.py": "8c96c26a121dfc2d9ea051a05861af8951c93a732dba9cb13de0de178414b016", + "eval/hosted_evidence.py": "7946cd8c1e3aa291268271b2aa11210d5f09c9b05ba635aa0b64bef07bdcee45", + "eval/hosted_ledger.py": "a53036d12ff671371c148910a816fb20c7e7f3346250a303722352f47b06c476", + "eval/hosted_luna.py": "4dbf02a65eec38bcde92d82952a0b372abbac1f68378d11a04528f4a31a835dc", + "eval/local_benchmark_queue.py": "43fa67b4d653e770822da816511e8e62b3714e60d2edd49ea2a4c5c3d8d20851", + "eval/local_capacity_campaign.py": "ab4935263f9d24c4e38bd4f16164b4c4c07eff91c695809b6fc75299d4f03d62", + "eval/longmemeval_v2.py": "defb4d47f453aa4615a8f101b82df3fadf64f0f9eae0ce1021d86d3750dad437", + "eval/longmemeval_v2_evidence.py": "8486bd4dcfdd8b1f7a14c32fe4f427c980ccdcc3aa2eb018d7dfc40305412eff", + "eval/longmemeval_v2_matrix.py": "ca085cd59481813cce5dbdfbc94f40f67173ac3a1bc3dce6f6d3e09eb7b08153", + "eval/metrics.py": "16857e2cf6ed339cb57a26c9bfa1879444b4d279bd972e5a9fa644ed1308afe0", + "eval/native_coverage_scaling.py": "0d318c116241050fc0c7bdbbb5646ca67944d7c304ccd9a462834e0553ffa90a", + "eval/performance.py": "dccc55c26dc396f9fee98defd152900cf8aabeb5d6198bc711e0eb8f472ecc57", + "eval/performance_engine.py": "3d37cf0a5989c8fa6e8b6ab7ae0b2e0d5410a8b922d2f3130c1a7794d93dcbb1", + "eval/planned_recall.py": "f9a87291ecb181045b98ca65fe55db820bf7cee4ae4f4d087ca3458afdd7837e", + "eval/proactive_ranking.py": "8610541f1d547f9c0eb46d078dbcaa670c0a97157acc37f96ec08b482cb7a6ab", + "eval/productivity.py": "6d4644ebdc44472aeb3879963774fab276bfa269b781139c46ded48774a22717", + "eval/public_readiness.py": "5ce8a18d0bfe09e75e88548a589b8fc6d2cbf04c0f8cd1ce51cd9519136a2751", + "eval/redteam_poisoning.py": "fce120cc3adf2ee966b59cd3ea7f20d242a0af49b52492143543130fe14c0cc8", + "eval/reinforcement.py": "72ed766775a2658eaa728afec51c0ac22d97a90e813111954df66a6ec50f2bef", + "eval/repair_discovery.py": "db05496fbbcb0df86c5cdc2f0c85fb6b6605b0cace6cb44ae2add10b72784b5f", + "eval/resolver_reworded_corrections.py": "a9054778a37b2175b46f04b674b4779e358931eee5d2ae52bbc5f953d234fb9e", + "eval/resource_hierarchy.py": "5ab6c989bb143c4386749c45a33c190447e829c1b5657e8c0aca30f34bd69461", + "eval/rework_statistics.py": "e12c14288797c5cf2dd93d51f606244287bc2f4ff8bd401f1d1b072efd1f9529", + "eval/run_longmemeval_v2.py": "866863d9f8f7ce8f7c3c36741ab324faa5fae417827f907c655eace38de0f5ac", + "eval/task_pairs.py": "fddc54804e8837ec0731813297fb55825458317f898e29176e16f3f5a2f527fd", + "eval/user_journeys.py": "a1c8436d4a6871baff21f9aa4f6ac1545def60d946cd3b1454c3d9cd8661a049", + "eval/vector_scale.py": "3f9c327d9eca1a857512ddc208e972933be1a7d4fa7fa0017aca0cbf8fe7bb6d", + "eval/vector_scale_storage.py": "24040fd1b96b9f9cd43ea37b0b37ea118a02bd096aff77fc67ff8b0df769b1dc", + "eval/vector_scan_plan.py": "34fba3d029bfc78134e8c9c450b019ff56c3bdcbeb921400888077cb44e9b848", + "scripts/export_offline_evidence.py": "4e10c2b3d5f6a2024a7f95f7b87ce47ec2cb4ef31c55611b2e5cf35502ebc0ba" + } + } +} diff --git a/docs/benchmark-evidence/offline-fixtures-v75.json.sha256 b/docs/benchmark-evidence/offline-fixtures-v75.json.sha256 new file mode 100644 index 000000000..0c6bf3c4f --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v75.json.sha256 @@ -0,0 +1 @@ +dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e offline-fixtures-v75.json diff --git a/docs/images/context-efficiency.svg b/docs/images/context-efficiency.svg index d7f99c3be..410f8a3ed 100644 --- a/docs/images/context-efficiency.svg +++ b/docs/images/context-efficiency.svg @@ -1,6 +1,6 @@ Measured context and retrieval boundaries -Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a. +Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e. diff --git a/docs/images/evidence-backed-agent-examples.svg b/docs/images/evidence-backed-agent-examples.svg index 26f634ea7..7913a3204 100644 --- a/docs/images/evidence-backed-agent-examples.svg +++ b/docs/images/evidence-backed-agent-examples.svg @@ -1,6 +1,6 @@ Three evidence-backed Engraphis agent behaviors - A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: 7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a. + A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e. @@ -47,5 +47,5 @@ Reproduce: eval.chunking_eval + eval.grounded - SHA256 7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a + SHA256 dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e diff --git a/engraphis/backends/jev_decision.py b/engraphis/backends/jev_decision.py new file mode 100644 index 000000000..872a9f6c7 --- /dev/null +++ b/engraphis/backends/jev_decision.py @@ -0,0 +1,176 @@ +"""Experimental, opt-in decision adapter; never an authority for core memory writes. + +The caller supplies a configured client and a pinned model. This module neither +imports an optional SDK nor discovers credentials or sibling repositories. No +request is made without explicit per-call authorization. Offline, unavailable, +fallback, uncertain and malformed responses defer to deterministic core behavior. +The adapter is intentionally not wired into the write or grounded-recall paths. +""" +from __future__ import annotations + +import math +import os +from dataclasses import dataclass +from typing import Dict, Optional, Protocol, Sequence, Tuple + +from engraphis.core.interfaces import MemoryRecord + +MAX_STATE_CHARS = 16_000 +_VERDICTS = frozenset(("contradicts_and_supersedes", "reinforces", "orthogonal")) + + +@dataclass(frozen=True) +class DecisionQuestion: + """Dependency-free question accepted by an explicitly injected client.""" + + id: str + prompt: str + kind: str + options: Tuple[str, ...] = () + + def to_dict(self) -> Dict[str, object]: + result: Dict[str, object] = {"id": self.id, "prompt": self.prompt, "type": self.kind} + if self.options: + result["options"] = list(self.options) + return result + + +class ChoiceDecision(Protocol): + selected: str + confidence: float + + +class SupportDecision(Protocol): + probability: float + confidence: float + + +class DecisionBatch(Protocol): + is_fallback: bool + + def get_choice(self, question_id: str) -> Optional[ChoiceDecision]: ... + + def get_noul(self, question_id: str) -> Optional[SupportDecision]: ... + + +class DecisionClient(Protocol): + """Local contract, not an SDK interface; use a separately tested SDK wrapper. + + Caller owns immutable model identity, endpoint, deadlines, data filtering and + credentials. Passing an arbitrary SDK object is not a verified integration. + """ + + @property + def is_configured(self) -> bool: ... + + @property + def allow_fallback(self) -> bool: ... + + def evaluate( + self, state: str, questions: Sequence[DecisionQuestion], *, model: str, + ) -> DecisionBatch: ... + + +def _probability(value: object) -> bool: + return (type(value) in (int, float) and isinstance(value, (int, float)) + and math.isfinite(value) and 0 <= value <= 1) + + +def get_decision_backend( + name: Optional[str] = None, *, client: Optional[DecisionClient] = None, + model: Optional[str] = None, offline_mode: bool = False, +) -> Optional[JevDecisionBackend]: + selected = (name or os.environ.get("ENGRAPHIS_DECISION_BACKEND", "none")).strip().lower() + if selected in ("jev", "typesafe", "system1", "auto"): + backend = JevDecisionBackend(client=client, model=model, offline_mode=offline_mode) + if backend.is_available: + return backend + return None + + +class JevDecisionBackend: + """Advisory decisions only; zero confidence means defer to the core.""" + + identity = "engraphis.backend.jev.v1" + + def __init__( + self, *, client: Optional[DecisionClient] = None, model: Optional[str] = None, + offline_mode: bool = False, + ) -> None: + self.client = client + self.model = model + self.offline_mode = offline_mode + + @property + def is_available(self) -> bool: + if self.offline_mode or self.client is None or not self.model: + return False + if (not self.model.strip() or self.model != self.model.strip() + or self.model.casefold().endswith("latest")): + return False + try: + return self.client.is_configured is True and self.client.allow_fallback is False + except Exception: + return False + + def _evaluate( + self, state: str, question: DecisionQuestion, allow_remote: bool, + ) -> Optional[DecisionBatch]: + if allow_remote is not True or len(state) > MAX_STATE_CHARS or not self.is_available: + return None + client, model = self.client, self.model + if client is None or model is None: + return None + try: + batch = client.evaluate(state, [question], model=model) + return batch if batch.is_fallback is False else None + except Exception: + # Provider exceptions may contain request text or credentials. Do not log them. + return None + + def classify_contradiction( + self, candidate_text: str, existing_memory: MemoryRecord, *, allow_remote: bool = False, + ) -> Tuple[str, float]: + """Return an advisory relationship, or ('orthogonal', 0.0) to defer. + + Even a confident provider response must never authorize invalidation; + deterministic resolution and scope/temporal checks remain authoritative. + """ + if not candidate_text.strip() or not existing_memory.content.strip(): + return "orthogonal", 0.0 + state = (f"EXISTING FACT: {existing_memory.title}\n{existing_memory.content}\n\n" + f"NEW CANDIDATE FACT:\n{candidate_text}") + question = DecisionQuestion( + "verdict", "Classify the relationship between the candidate and existing fact.", + "choice", ("contradicts_and_supersedes", "reinforces", "orthogonal"), + ) + batch = self._evaluate(state, question, allow_remote) + try: + decision = batch.get_choice("verdict") if batch is not None else None + if (decision is not None and decision.selected in _VERDICTS + and _probability(decision.confidence) and decision.confidence > 0.5): + return decision.selected, float(decision.confidence) + except Exception: + pass + return "orthogonal", 0.0 + + def verify_grounded_support( + self, query: str, evidence_text: str, *, allow_remote: bool = False, + ) -> Tuple[bool, float]: + """Return advisory support; absent or uncertain evidence never certifies it.""" + if not query.strip() or not evidence_text.strip(): + return False, 0.0 + state = f"QUERY: {query}\n\nEVIDENCE:\n{evidence_text}" + question = DecisionQuestion( + "has_support", "Does the evidence directly support answering the query?", "noul", + ) + batch = self._evaluate(state, question, allow_remote) + try: + decision = batch.get_noul("has_support") if batch is not None else None + if (decision is not None and _probability(decision.probability) + and _probability(decision.confidence) and decision.confidence > 0.5 + and decision.probability != 0.5): + return decision.probability > 0.5, float(decision.probability) + except Exception: + pass + return False, 0.0 diff --git a/engraphis/classic_assets/dashboard.js b/engraphis/classic_assets/dashboard.js index e21426964..2d111da73 100644 --- a/engraphis/classic_assets/dashboard.js +++ b/engraphis/classic_assets/dashboard.js @@ -618,8 +618,8 @@ window.GSET.frozen=false; function graphNodeRadius(node,base,metric){ const size=Number.isFinite(+base)&&+base>0?+base:3; const normalized=Math.max(0,Math.min(1,Number(metric)||0)); - const radius=size*.45*(.55+Math.min(1.6,normalized*1.9)); - return Math.max(.8,Math.min(size*1.1,radius)); + const radius=size*.45*(.6+Math.min(1.6,normalized*1.9)); + return Math.max(.25,Math.min(size*1.1,radius)); } const ETYPE_TOKEN={person_or_concept:'--entity-concept',mention:'--entity-mention',hashtag:'--entity-hashtag',email:'--entity-email',organization:'--entity-organization',location:'--entity-location'}; const GRAPH_PALETTES={ @@ -1220,7 +1220,7 @@ function loadAllGraphEngine(){ if(typeof EngraphisEveryGraph!=='undefined')return Promise.resolve(); if(!ALL_GRAPH_ENGINE_LOADING){ ALL_GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ - const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1'; + const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-1'; script.onload=()=>{typeof EngraphisEveryGraph==='undefined'?reject(new Error('Every-node graph asset loaded without registering EngraphisEveryGraph')):resolve()}; script.onerror=()=>reject(new Error('Every-node graph asset could not load')); document.head.appendChild(script); @@ -1237,7 +1237,7 @@ function loadGraphEngine(loadAll=false){ GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ const script=document.createElement('script'); const bust=GRAPH_ENGINE_RETRY>0?'&r='+GRAPH_ENGINE_RETRY:''; - script.src='/v2-assets/engraphis-graph.js?v=20260906-galaxy-boundaries-1'+bust; + script.src='/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-1'+bust; /* A 200 that never registers the global is a corrupt/truncated asset, not a success — resolving there would hand graphRenderEngine() an undefined EngraphisGraph. Failed attempts drop the script node and clear the memo so the next call retries with a diff --git a/engraphis/classic_assets/index.html b/engraphis/classic_assets/index.html index 2d4af8f8b..10e2721d8 100644 --- a/engraphis/classic_assets/index.html +++ b/engraphis/classic_assets/index.html @@ -349,6 +349,6 @@ graph view. dashboard.js fetches both on demand from graphRender(); see loadForceGraph() and loadGraphEngine(). scripts/externalize_dashboard_assets.py enforces both halves: they stay out of this file, and the lazy references still have to resolve. --> - + diff --git a/engraphis/dashboard_assets/engraphis-graph-every.js b/engraphis/dashboard_assets/engraphis-graph-every.js index 07befd2f4..e7eb057b8 100644 --- a/engraphis/dashboard_assets/engraphis-graph-every.js +++ b/engraphis/dashboard_assets/engraphis-graph-every.js @@ -8,7 +8,7 @@ (function () { 'use strict'; - const WORKER_URL = '/v2-assets/engraphis-graph-every-worker.js?v=20260925-evidence-mass-1'; + const WORKER_URL = '/v2-assets/engraphis-graph-every-worker.js?v=20260927-unmerged-readiness-1'; const MAX_NODES = 20000; const MAX_LINKS = 200000; const LABEL_MAX = 220; @@ -159,8 +159,8 @@ collapse: false, collapsed: false, focus: -1, hover: -1, hoverPoint: [0, 0], focusPoint: [0, 0], neighbors: null, incidentEdges: null, connectionHighlights: null, ready: false, visibleCount: 0, - frame: 0, labelFrame: 0, flowPaintAt: 0, layoutPending: false, lastLabelKey: '', labelLayout: [], - drag: null, pickGrid: null, pickDirty: true, + frame: 0, labelFrame: 0, flowPaintAt: 0, overlayPaintAt: 0, layoutPending: false, lastLabelKey: '', labelLayout: [], + underlayKey: '', drag: null, pickGrid: null, pickDirty: true, destroyed: false, paused: false, unsupported: !gl, error: null, labelMetrics: new Map(), }; @@ -479,9 +479,13 @@ }); } state.communityRegions = regions.sort((a, b) => b.count - a.count).slice(0, REGION_LIMIT); + state.underlayKey = ''; } function drawRegions() { if (!underlayContext || !state.ready) return; + const key = `${state.camera.x}|${state.camera.y}|${state.camera.scale}|${state.width}|${state.height}|${state.dpr}|${state.styleName}|${state.palette}|${state.colorBy}`; + if (key === state.underlayKey) return; + state.underlayKey = key; if (!state.communityRegions.length) { underlayContext.setTransform(state.dpr, 0, 0, state.dpr, 0, 0); underlayContext.clearRect(0, 0, state.width, state.height); @@ -492,9 +496,9 @@ out and get out of the way of close reading. Strong enough to survive the edge field painted over them. */ const strength = clamp(1 - Math.abs(ratio - 0.9) / 1.4, 0, 1) * 0.26; - if (strength <= 0.005) { underlayContext.clearRect(0, 0, state.width, state.height); return; } underlayContext.setTransform(state.dpr, 0, 0, state.dpr, 0, 0); underlayContext.clearRect(0, 0, state.width, state.height); + if (strength <= 0.005) return; const viewRadius = Math.hypot(state.width / (2 * state.camera.scale), state.height / (2 * state.camera.scale)) + 80; for (const region of state.communityRegions) { const point = screen(region.x, region.y); @@ -586,23 +590,41 @@ /* ── Overlay: decluttered labels + capped relation flow ─────────────────────── */ function labelText(index) { return state.labels[index] || state.ids[index]; } - function drawOverlay(now = 0) { + function drawOverlay(now, force = false) { state.labelFrame = 0; if (!labelContext || state.destroyed || state.paused) return; + const stamp = typeof now === 'number' && now > 0 + ? now + : (typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now()); + if (!force && flowAnimating() && state.overlayPaintAt + && stamp - state.overlayPaintAt < FLOW_FRAME_MS) { + if (flowAnimating() && !state.destroyed && !state.paused) { + state.labelFrame = raf(runOverlayFrame); + } + return; + } + state.overlayPaintAt = stamp; labelContext.setTransform(state.dpr, 0, 0, state.dpr, 0, 0); labelContext.clearRect(0, 0, state.width, state.height); - drawRelationFlow(now); + drawRelationFlow(stamp); drawFocusRing(); drawDeclutteredLabels(); /* Lit paths and their arrows paint above background structure... */ drawHotEdgeDecorations(); /* ...and the hover card paints above absolutely everything. */ drawHoverCardLayer(); + if (flowAnimating() && !state.destroyed && !state.paused) { + state.labelFrame = raf(runOverlayFrame); + } } + function runOverlayFrame(now) { drawOverlay(now); } function scheduleLabels(immediate = false) { if (state.destroyed || state.paused || !labelContext) return; - if (immediate) { if (state.labelFrame) caf(state.labelFrame); state.labelFrame = raf(() => drawOverlay()); return; } - if (!state.labelFrame) state.labelFrame = raf(() => drawOverlay()); + if (state.labelFrame) { + if (!immediate) return; + caf(state.labelFrame); + } + state.labelFrame = raf(nextStamp => drawOverlay(nextStamp, immediate)); } /* Lit-path decorations: the hovered/highlighted node's relations get direction arrows and their relation name, so reading a connection does not require opening anything. */ @@ -788,9 +810,13 @@ const cacheKey = `${font}|${key}`; labelContext.font = font; labelContext.textBaseline = 'middle'; - labelContext.shadowColor = 'rgba(4,8,12,0.85)'; - labelContext.shadowBlur = 3; - labelContext.fillStyle = 'rgba(224,236,241,0.86)'; + const isLight = state.themeColors && state.themeColors.canvas && ( + state.themeColors.canvas === '#fbfaf8' || state.themeColors.canvas === '#f0eee8' + || state.themeColors.canvas.startsWith('#f') || state.themeColors.canvas.startsWith('#e') + ); + labelContext.shadowColor = isLight ? 'rgba(255,255,255,0.95)' : 'rgba(4,8,12,0.85)'; + labelContext.shadowBlur = isLight ? 4 : 3; + labelContext.fillStyle = (state.themeColors && state.themeColors.label) || (isLight ? '#1c1f24' : 'rgba(224,236,241,0.86)'); if (cacheKey === state.lastLabelKey && state.labelLayout.length) { state.labelLayout.forEach(item => labelContext.fillText(item.text, item.x, item.y)); labelContext.shadowColor = 'transparent'; @@ -951,6 +977,7 @@ target.width = Math.max(1, Math.floor(state.width * state.dpr)); target.height = Math.max(1, Math.floor(state.height * state.dpr)); }); + state.underlayKey = ''; state.lastLabelKey = ''; if (state.ready) { schedule(); scheduleLabels(true); } } @@ -1279,7 +1306,8 @@ element.addEventListener('keydown', handleKeydown); const observer = typeof ResizeObserver === 'function' ? new ResizeObserver(resize) : null; - if (observer) observer.observe(element); else window.addEventListener('resize', resize); + if (observer) observer.observe(element); + window.addEventListener('resize', resize); initWebgl(); if (gl && nodeProgram) { @@ -1304,7 +1332,9 @@ const now = typeof performance !== 'undefined' ? performance.now() : 0; draw(now); drawRegions(); - drawOverlay(now); + /* draw() may have queued an overlay frame; the forced paint below supersedes it. */ + if (state.labelFrame) { caf(state.labelFrame); state.labelFrame = 0; } + drawOverlay(now, true); const output = document.createElement('canvas'); output.width = canvas.width; output.height = canvas.height; @@ -1331,7 +1361,7 @@ worker = null; } if (observer) observer.disconnect(); - else window.removeEventListener('resize', resize); + window.removeEventListener('resize', resize); element.removeEventListener('keydown', handleKeydown); if (gl) { [nodeBuffers.position, nodeBuffers.color, nodeBuffers.size, nodeBuffers.flag, @@ -1489,7 +1519,12 @@ return api; }, freeze(value = true) { state.settings.frozen = value !== false; return api.setSettings({ frozen: state.settings.frozen }); }, - pause() { state.paused = true; if (state.frame) { caf(state.frame); state.frame = 0; } return api; }, + pause() { + state.paused = true; + if (state.frame) { caf(state.frame); state.frame = 0; } + if (state.labelFrame) { caf(state.labelFrame); state.labelFrame = 0; } + return api; + }, resume() { state.paused = false; schedule(); scheduleLabels(); return api; }, state() { return { diff --git a/engraphis/dashboard_assets/engraphis-graph.js b/engraphis/dashboard_assets/engraphis-graph.js index c275b32ef..edc751e7c 100644 --- a/engraphis/dashboard_assets/engraphis-graph.js +++ b/engraphis/dashboard_assets/engraphis-graph.js @@ -9,7 +9,7 @@ with both the dashboard adapter and standalone scene payloads. */ (function () { const PRESETS = { - galaxy: { label: 'Galaxy gravity', repel: 100, link: 8, gravity: 120, font: 12, size: 3, linkw: 0.72, labelDensity: 24, curve: 0.12, particles: 0 }, + galaxy: { label: 'Galaxy gravity', repel: 100, link: 8, gravity: 72, font: 12, size: 3, linkw: 0.72, labelDensity: 24, curve: 0.12, particles: 0 }, original: { label: 'Original force', repel: 120, link: 30, gravity: 14, font: 13, size: 3, linkw: 1, labelDensity: 40, curve: 0, particles: 0 }, compact: { label: 'Compact clusters', repel: 42, link: 20, gravity: 26, font: 12, size: 3, linkw: 0.7, labelDensity: 30, curve: 0.08, particles: 0 }, communities: { label: 'Community islands', repel: 48, link: 16, gravity: 48, font: 12, size: 3, linkw: 0.72, labelDensity: 24, curve: 0.12, particles: 0 }, @@ -91,7 +91,7 @@ const GALAXY_EXACT_LIMIT = 64; const GALAXY_BARNES_HUT_THETA = 0.85; const GALAXY_GRAVITY_MAXIMUM = 400; - const GALAXY_GRAVITY_MAX_STRENGTH_GAIN = 1.5; + const GALAXY_GRAVITY_MAX_STRENGTH_GAIN = 1.65; const GALAXY_GRAVITY_STRENGTH_GAIN_START = 200; /* The emergency acceleration cap follows the full visible strength range. Direct callers can still pass pathological values, but those values clamp to the same 0..400 physics ceiling. */ @@ -108,7 +108,7 @@ } /* Keep the established calibration through 200, then make the extended range tighten the field smoothly. Multiplying the normalized high-end span by 1.5 makes the stronger response - arrive 50% sooner while the maximum remains capped at exactly 1.5x. */ + arrive 50% sooner while the maximum remains capped at exactly 1.65x (+43% at max gravity). */ const GALAXY_GRAVITY_RESPONSE_RATE_MULTIPLIER = 1.5; function galaxyGravityStrengthMultiplier(setting) { const raw = Number(setting); @@ -125,10 +125,10 @@ const base = value * (772 + 11 * value) / 2600; const boost = 1 + 0.25 * galaxySmoothstep(value / 48) + 0.25 * galaxySmoothstep((value - 48) / 52); - /* Calibrate the compact Galaxy layout with a 1.875 base-field scale. The independent - carrier clock below keeps central motion calm while the local stellar clock remains - visible; neither clock changes this slider's strictly increasing response. */ - return base * boost * 4 * galaxyGravityStrengthMultiplier(value) * 1.875; + /* Calibrate the compact Galaxy layout with a 2.4375 base-field scale (+30% at baseline). + The independent carrier clock below keeps central motion calm while the local stellar clock + remains visible; neither clock changes this slider's strictly increasing response. */ + return base * boost * 4 * galaxyGravityStrengthMultiplier(value) * 2.4375; } /* Gravity strength is the galaxy-wide black-hole control. The dashboard's Gravity slider flows to the explicit global anchor: zero user gravity is a real zero field, and the @@ -758,8 +758,7 @@ const maxAngularSpeed = 3.5; const angularCappedSpeed = Math.min(circularSpeed, maxAngularSpeed * localRadius); return kinematicCap - ? Math.min(angularCappedSpeed * multiplier, - GALAXY_LOCAL_RELATIVE_SPEED_LIMIT * multiplier) + ? Math.min(GALAXY_LOCAL_RELATIVE_SPEED_LIMIT, angularCappedSpeed * multiplier) : Math.min(GALAXY_LOCAL_RELATIVE_SPEED_LIMIT, angularCappedSpeed) * multiplier; } @@ -823,8 +822,8 @@ return Math.max(2, Math.min(size * 2.7, radius)); } const normalized = Math.max(0, Math.min(1, Number(metric) || 0)); - const radius = size * 0.45 * (0.55 + Math.min(1.6, normalized * 1.9)); - return Math.max(0.8, Math.min(size * 1.1, radius)); + const radius = size * 0.45 * (0.60 + Math.min(1.6, normalized * 1.9)); + return Math.max(0.25, Math.min(size * 1.1, radius)); } function finitePositive(value, fallback, ceiling) { const number = Number(value); @@ -2700,9 +2699,10 @@ open headroom from there. The 4x ceiling keeps direct engine values (up to 8xG/16x mass) presentable. */ const liveDefaultG = 2; - const centralScale = Math.min(4, Math.sqrt(Math.max(0.25, - Number(field.gravitationalConstantMultiplier) || 1) / liveDefaultG) - * Math.sqrt(Math.max(0.25, Number(field.blackHoleMassMultiplier) || 1))); + const gMult = (field && Number(field.gravitationalConstantMultiplier)) || 1; + const mMult = (field && Number(field.blackHoleMassMultiplier)) || 1; + const centralScale = Math.min(4, Math.sqrt(Math.max(0.25, gMult) / liveDefaultG) + * Math.sqrt(Math.max(0.25, mMult))); return Math.min(GALAXY_CARRIER_FRAME_SPEED_LIMIT * centralScale * multiplier, galaxyCarrierOrbitCurve(field, radius).circularSpeed * multiplier); } @@ -8000,6 +8000,45 @@ || left.tier - right.tier); } + function prepareGalaxyOrbitLaneTopology(nodes) { + const values = (nodes || []).filter(node => node && !node.ghost); + const byId = new Map(values.map(node => [String(node.id), node])); + const lanes = new Map(); + values.forEach(node => { + const tier = Number(node.orbit_tier); + const parentId = node.system_anchor_id === undefined + || node.system_anchor_id === null ? '' : String(node.system_anchor_id); + if (!(tier > 0) || !parentId || parentId === String(node.id)) return; + const anchor = byId.get(parentId); + if (!anchor) return; + const measured = Number.isFinite(node.x) && Number.isFinite(node.y) + && Number.isFinite(anchor.x) && Number.isFinite(anchor.y) + ? Math.hypot(node.x - anchor.x, node.y - anchor.y) : 0; + const authoredRadius = finitePositive(node.__galaxyOrbitBaseRadius, + finitePositive(node.orbit_radius, 0, Infinity), Infinity); + const radius = authoredRadius > 0 ? authoredRadius : measured; + if (!(radius > 0)) return; + const key = parentId + ':' + tier + ':' + Math.round(radius * 1000); + if (!lanes.has(key)) { + lanes.set(key, { + anchorId: parentId, anchor, tier, radius: 0, samples: 0, + dynamicRadius: authoredRadius <= 0, members: [], + }); + } + const lane = lanes.get(key); + lane.radius += radius; + lane.samples += 1; + lane.members.push(node); + }); + return [...lanes.values()].map(lane => ({ + anchorId: lane.anchorId, anchor: lane.anchor, tier: lane.tier, + radius: lane.radius / Math.max(1, lane.samples), members: lane.samples, + dynamicRadius: lane.dynamicRadius, memberNodes: lane.members, + x: lane.anchor.x, y: lane.anchor.y, color: lane.anchor.color, + })).sort((left, right) => left.anchorId.localeCompare(right.anchorId) + || left.tier - right.tier); + } + function galaxyStarAnchorIds(lanes) { const connected = new Map(); (lanes || []).forEach(lane => { @@ -8144,6 +8183,13 @@ path: null, asOf: null, ghost: true, sizeBy: 'mass', bridges: false, suggestions: false, collapse: 'auto', renderMode: opts.renderMode === 'full' || opts.renderMode === 'all' ? 'full' : 'overview' }; + function notifyPhysicsState(paused) { + try { + if (el && typeof el.dispatchEvent === 'function') { + el.dispatchEvent(new CustomEvent('engraphisgraphphysicschange', { detail: { paused: !!paused } })); + } + } catch (_) {} + } let raw = { nodes: [], links: [], suggestions: [], communities: [], community_bridges: [], meta: {} }; /* Only anchors with more than two direct orbiting nodes are painted as stars. Smaller systems and singleton communities keep the ordinary node material. */ @@ -8151,6 +8197,31 @@ /* Every visible body with at least one direct orbiter is a primary rendering landmark. This includes planets with moons without incorrectly turning them into stars. */ let galaxyPrimaryNodeIds = new Set(); + let galaxyLaneTopology = null; + function refreshGalaxyLaneTopology(nodes) { + galaxyLaneTopology = prepareGalaxyOrbitLaneTopology(nodes); + galaxyVisibleStarIds = galaxyStarAnchorIds(galaxyLaneTopology); + galaxyPrimaryNodeIds = galaxyPrimaryAnchorIds(galaxyLaneTopology); + } + function currentGalaxyOrbitLanes() { + if (!galaxyLaneTopology) return []; + galaxyLaneTopology.forEach(lane => { + lane.x = lane.anchor.x; + lane.y = lane.anchor.y; + lane.color = lane.anchor.color; + if (!lane.dynamicRadius) return; + let total = 0; + let count = 0; + lane.memberNodes.forEach(node => { + if (!Number.isFinite(node.x) || !Number.isFinite(node.y) + || !Number.isFinite(lane.anchor.x) || !Number.isFinite(lane.anchor.y)) return; + total += Math.hypot(node.x - lane.anchor.x, node.y - lane.anchor.y); + count += 1; + }); + if (count) lane.radius = total / count; + }); + return galaxyLaneTopology; + } const galaxyServerPhase = new Map(); const galaxySavedPhase = new Map(); /* Mode restoration is a transactional hand-off: a same-task freeze must still expose the @@ -8762,12 +8833,16 @@ const gcRaw = Number(state.settings.gravitationalConstant); const lgcRaw = Number(state.settings.localGravitationalConstant); const bhmRaw = Number(state.settings.blackHoleMass); - /* The dashboard adapter emits 0..4 for gravity/local (raw/50) and up to 4.4 for - mass, so clamping at 2 saturated the upper half of all three sliders (PR #177 - review threads at this site). Accept the full emitted engine ranges. */ - const gravityMultiplier = Number.isFinite(gcRaw) ? clamp(gcRaw, 0, 4) : 1; - const massMultiplier = Number.isFinite(bhmRaw) ? clamp(bhmRaw, 0, 4.4) : 1; - const localMultiplier = Number.isFinite(lgcRaw) ? clamp(lgcRaw, 0, 4) : 1; + const springRaw = Number(state.settings.springStiffness); + /* The dashboard adapter emits 0..6.67 for gravity/local (raw/30), 0..5.04 for mass, and + 0..3.13 for spring stiffness. `setSettings` accepts up to 8/8/16/8, so these ceilings + are safety bounds only: clamping below the accepted range silently plateaued the upper + half of every slider (PR #177 review threads at this site). Keep the two ranges equal + so no value the engine accepts is ever dropped here. */ + const gravityMultiplier = Number.isFinite(gcRaw) ? clamp(gcRaw, 0, 8) : 1; + const massMultiplier = Number.isFinite(bhmRaw) ? clamp(bhmRaw, 0, 16) : 1; + const localMultiplier = Number.isFinite(lgcRaw) ? clamp(lgcRaw, 0, 8) : 1; + const springMultiplier = Number.isFinite(springRaw) ? clamp(springRaw, 0, 8) : 1; const baseRepel = mode === 'communities' ? Math.max(10, s.repel * 0.68) : s.repel; /* Galactic gravity is an attractive control. Keep the separate Repel slider on the negative many-body charge, and apply this multiplier to the attractive anchor forces @@ -8780,7 +8855,7 @@ const base = 1 / Math.max(1, Math.min( source && source.degree || 1, target && target.degree || 1 )); - return base * localMultiplier; + return base * localMultiplier * springMultiplier; }); /* Space friction (the dashboard's "damping" slider) maps onto d3's velocityDecay. The slider's 0..15 visible range must reach the full d3 decay range so the lower quarter @@ -9358,6 +9433,7 @@ cancelFrame(galaxyFrame); galaxyFrame = 0; if (resetClock) resetGalaxyClock(); + notifyPhysicsState(true); } function galaxyIntegratorOptions() { @@ -9817,7 +9893,9 @@ galaxyFrames++; invalidate(); if (typeof opts.onPhysics === 'function') opts.onPhysics(physicsDiagnostics()); - if (typeof opts.onPhysicsFrame === 'function') opts.onPhysicsFrame(api.getPhysicsSnapshot()); + if (typeof opts.onPhysicsFrame === 'function') { + opts.onPhysicsFrame(api.getPhysicsSnapshot()); + } } if (galaxyDynamicsEligible()) galaxyFrame = requestFrame(runGalaxyFrame); } @@ -9828,6 +9906,7 @@ cancelGalaxyDynamics(resetClock); return; } + notifyPhysicsState(false); if (!galaxyFrame) galaxyFrame = requestFrame(runGalaxyFrame); } @@ -10012,6 +10091,11 @@ const data = reused ? seeded : next; const fullGraph = state.renderMode === 'full'; const galaxyMode = state.settings.mode === 'galaxy'; + if (!galaxyMode && galaxyLaneTopology) { + galaxyLaneTopology = null; + galaxyVisibleStarIds = new Set(); + galaxyPrimaryNodeIds = new Set(); + } const wasStatic = staticFullLayout; const overGalaxyLiveLimit = !galaxySceneWithinLiveLimit(data); const overFullForceLimit = data.nodes.length > FULL_FORCE_NODE_LIMIT @@ -10158,6 +10242,7 @@ [prePaintHorizon, postOuterHorizon, postStarHorizon] ); } + if (galaxyMode) refreshGalaxyLaneTopology(data.nodes); fg.graphData(data); seeded = data; } else if (staticFullLayout && fullLayoutDirty) { @@ -10297,6 +10382,9 @@ annulus: { innerCorrectedNodes: 0, outerCorrectedNodes: 0, infeasibleNodes: 0 }, }; } + if (galaxyMode && reused && !galaxyLaneTopology) { + refreshGalaxyLaneTopology(data.nodes); + } applyForces(); fg.autoPauseRedraw(!needsContinuousFrames()); /* Bound the simulation the way the classic path does. Without these force-graph keeps its @@ -10511,11 +10599,9 @@ .onRenderFramePre((ctx, scale) => { try { styleBackground(ctx, scale); + const currentData = fg.graphData() || {}; if (state.settings.mode === 'galaxy') { - const currentData = fg.graphData() || {}; - const lanes = galaxyOrbitLaneGeometry(currentData.nodes || []); - galaxyVisibleStarIds = galaxyStarAnchorIds(lanes); - galaxyPrimaryNodeIds = galaxyPrimaryAnchorIds(lanes); + const lanes = currentGalaxyOrbitLanes(); paintGalaxyOrbitLanes(ctx, currentData.nodes || [], scale, state.themeColors.accent, lanes); } else { @@ -10527,7 +10613,7 @@ .onRenderFramePost((ctx, scale) => { try { const currentData = fg.graphData() || {}; - if (Array.isArray(currentData.nodes)) { + if ((state.settings.labels || hilite !== null) && Array.isArray(currentData.nodes)) { for (const node of currentData.nodes) paintNodeLabel(node, ctx, scale); } } catch (e) { /* label pass must never break the render loop */ } @@ -10943,6 +11029,7 @@ const previousGravity = Number(state.settings.gravity); if (layoutChanged) { fullLayoutDirty = true; + galaxyLaneTopology = null; cancelAutoFit(); } /* Capture the pre-patch central multipliers BEFORE Object.assign applies the patch: @@ -10957,6 +11044,7 @@ if (next.orbitPaused !== undefined && previousMode === 'galaxy') { if (state.settings.orbitPaused) cancelGalaxyDynamics(true); else if (wasOrbitPaused) scheduleGalaxyDynamics(true); + notifyPhysicsState(state.settings.orbitPaused); } transitionGalaxyMode(previousMode, state.settings.mode); const nextGravity = Number(state.settings.gravity); @@ -11275,15 +11363,16 @@ delayed zoom-to-fit: callers that also centre a node otherwise start two competing camera animations, and the late fit wins by dragging the selected entity away. */ api.focus = id => { - if (destroyed || !raw.nodes.some(node => node.id === id)) return false; + if (destroyed || !renderedNode(id)) return false; state.focusId = id; hilite = id; hoverSet = new Set([id].concat(adj[id] || [])); clearTimeout(fitTimer); fitTimer = 0; render(false, true); - return true; + return centerRenderedNode(id); }; + api.centerNode = id => centerRenderedNode(id); api.clearFocus = () => { state.focusId = null; hilite = null; @@ -11315,6 +11404,9 @@ api.graphToScreen = (x, y) => { if (!fg.graph2ScreenCoords) return { x: Number(x) || 0, y: Number(y) || 0 }; const point = fg.graph2ScreenCoords(Number(x) || 0, Number(y) || 0); + if (!point || !Number.isFinite(point.x) || !Number.isFinite(point.y)) { + return { x: Number(x) || 0, y: Number(y) || 0 }; + } return { x: point.x, y: point.y }; }; let cachedPhysicsSnapshot = null; @@ -11521,12 +11613,20 @@ raw.nodes.forEach(n => { map[n.id] = n.community || 0; }); return map; }; - api.setGhosts = on => { state.ghost = on === true; render(false, false); }; + api.setGhosts = on => { + state.ghost = on === true; + galaxyLaneTopology = null; + render(false, false); + }; api.setRepoFilter = repo => { state.repo = typeof repo === 'string' ? repo.trim().toLowerCase() : ''; render(false, true); }; - api.setAsOf = date => { state.asOf = asOfValue(date); render(false, true); }; + api.setAsOf = date => { + state.asOf = asOfValue(date); + galaxyLaneTopology = null; + render(false, true); + }; api.setSizeBy = metric => { if (state.settings.mode === 'galaxy') state.sizeBy = 'mass'; else { @@ -11722,7 +11822,7 @@ fallbackCommunityBridges, paintFlowArrow, nodeName, linkEndpoint, asOfValue, materialRecipe, materialTier, paintMaterialDirect, paintMaterialSurface, paintGalaxyAnchorAdornment, - galaxyOrbitLaneGeometry, paintGalaxyOrbitLanes, galaxyOrbitalLinkRole, + prepareGalaxyOrbitLaneTopology, galaxyOrbitLaneGeometry, paintGalaxyOrbitLanes, galaxyOrbitalLinkRole, galaxyAnchorAdornmentEligible, galaxyStarAnchorIds, galaxyPrimaryAnchorIds, renderMaterialSample, sampleMaterialColour, materialCacheStats, clearMaterialCache, setMaterialCanvasFactory diff --git a/engraphis/dashboard_assets/engraphis-spacetime.js b/engraphis/dashboard_assets/engraphis-spacetime.js index 75817537b..51da31b19 100644 --- a/engraphis/dashboard_assets/engraphis-spacetime.js +++ b/engraphis/dashboard_assets/engraphis-spacetime.js @@ -53,6 +53,7 @@ let active = false; let frame = 0; let lastSample = 0; + let lastPaint = 0; let latest = null; let destroyed = false; @@ -68,7 +69,8 @@ } /* A rendering engine that cannot expose its viewport still gets a centred, harmless lens/grid rather than an incorrect coordinate transform. */ - return { x: canvas.width / (2 * devicePixelRatio), y: canvas.height / (2 * devicePixelRatio) }; + const dpr = typeof window !== 'undefined' && window.devicePixelRatio ? window.devicePixelRatio : 1; + return { x: canvas.width / (2 * dpr), y: canvas.height / (2 * dpr) }; }; const screenRadius = physicalCenter => { @@ -218,13 +220,17 @@ trails.forEach((_points, id) => { if (!seen.has(id)) trails.delete(id); }); }; - const draw = stamp => { + const draw = (stamp, force = false) => { if (destroyed) return; + frame = 0; + const paused = Boolean(latest && latest.paused); + if (!force && lastPaint && stamp - lastPaint < SAMPLE_INTERVAL) { + if (active && !document.hidden && !paused) frame = requestAnimationFrame(draw); + return; + } + lastPaint = stamp; const bounds = resize(); ctx.clearRect(0, 0, bounds.width, bounds.height); - if (active && engine && typeof engine.getPhysicsSnapshot === 'function') { - latest = engine.getPhysicsSnapshot() || latest; - } if (active && latest) { sample(stamp); const physicalCenter = snapshotCenter(latest); @@ -236,19 +242,30 @@ /* Paused physics retains one static spacetime paint, then releases the compositor. Local wells and guide rings are deliberately still visible under reduced motion; only sampled velocity trails are suppressed there. */ - if (active && !document.hidden && !(latest && latest.paused)) frame = requestAnimationFrame(draw); + if (active && !document.hidden && !paused) frame = requestAnimationFrame(draw); else frame = 0; }; - const wake = () => { + const wake = (force = false) => { + if (force) lastPaint = 0; if (!frame && !destroyed && active && !document.hidden) frame = requestAnimationFrame(draw); }; const onFrame = event => { - latest = event && event.detail ? event.detail : latest; + const detail = event && event.detail; + if (detail && (Array.isArray(detail.nodes) || detail.center)) latest = detail; + else if (detail && typeof detail.paused === 'boolean') { + latest = { ...(latest || {}), paused: detail.paused }; + wake(true); + return; + } if (active) wake(); }; + const refreshSnapshot = () => { + if (!active || !engine || typeof engine.getPhysicsSnapshot !== 'function') return; + latest = engine.getPhysicsSnapshot() || latest; + }; container.addEventListener('engraphisgraphphysicschange', onFrame); - const onVisibilityChange = () => { if (!document.hidden) wake(); }; + const onVisibilityChange = () => { if (!document.hidden) { refreshSnapshot(); wake(true); } }; document.addEventListener('visibilitychange', onVisibilityChange); const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(resize); if (observer) observer.observe(container); @@ -257,7 +274,8 @@ setEnabled(on) { active = on === true; if (!active) trails.clear(); - wake(); + else { refreshSnapshot(); wake(true); } + return; }, setSnapshot(snapshot) { latest = snapshot || null; if (active) wake(); }, destroy() { diff --git a/engraphis/dashboard_assets/index.html b/engraphis/dashboard_assets/index.html index 145b9c6db..95c9edb5e 100644 --- a/engraphis/dashboard_assets/index.html +++ b/engraphis/dashboard_assets/index.html @@ -314,7 +314,7 @@

Choose a memory

- +
@@ -366,7 +366,7 @@

Explore project connections

- +
@@ -406,23 +406,6 @@

Layout

-
-

Colour

-
- - - -
-
- - - - - - -
-
-

Motion

Relation flowdirection
@@ -435,7 +418,7 @@

Motion

Saved views

- + @@ -448,7 +431,7 @@

Saved views

- + @@ -466,9 +449,9 @@

Saved views

Spacetime · black-hole orbit controls
- - - + + +
@@ -823,6 +806,6 @@

Connected nodes

- + diff --git a/engraphis/dashboard_assets/ledger.js b/engraphis/dashboard_assets/ledger.js index 9855f6f55..cda3ecdb5 100644 --- a/engraphis/dashboard_assets/ledger.js +++ b/engraphis/dashboard_assets/ledger.js @@ -54,7 +54,7 @@ graphOrbitPaused: false, graphSpacetimeOverlay: null, graphIncludeCode: false, - graphSavedView: 'schema', + graphSavedView: '', consolidationReview: null, reviewCsrf: '', hostedLoaded: new Set(), @@ -150,23 +150,23 @@ const GRAPH_FULL_LOAD_TIMEOUT_MS = 90_000; const GRAPH_CONNECTION_MEMORIES_TIMEOUT_MS = 8_000; const GRAPH_PREFERENCES_KEY = 'engraphis-ledger-graph-preferences-v1'; - const GRAPH_PHYSICS_VERSION = 5; + const GRAPH_PHYSICS_VERSION = 6; const GRAPH_CUSTOM_VIEW_KEY = 'engraphis-ledger-graph-custom-view-v1'; const GRAPH_LAYERS = ['temporal', 'entity', 'causal', 'semantic', 'code']; const GRAPH_DEFAULT_LAYERS = { temporal: true, entity: true, causal: true, semantic: true, code: false }; const GRAPH_TUNING = [ { id: 'graph-repel', key: 'repel', fallback: 100 }, { id: 'graph-link', key: 'link', fallback: 8 }, - { id: 'graph-gravity', key: 'gravity', fallback: 120 }, + { id: 'graph-gravity', key: 'gravity', fallback: 72 }, { id: 'graph-node-size', key: 'size', fallback: 3 }, { id: 'graph-text-size', key: 'font', fallback: 12 }, { id: 'graph-line-width', key: 'linkw', fallback: 0.72, precision: 2 }, { id: 'graph-label-density', key: 'labelDensity', fallback: 24 }, ]; const GRAPH_SPACETIME_TUNING = [ - { id: 'graph-gravitational-constant', key: 'gravitationalConstant', fallback: 100 }, - { id: 'graph-black-hole-mass', key: 'blackHoleMass', fallback: 160 }, - { id: 'graph-local-gravitational-constant', key: 'localGravitationalConstant', fallback: 100 }, + { id: 'graph-gravitational-constant', key: 'gravitationalConstant', fallback: 60 }, + { id: 'graph-black-hole-mass', key: 'blackHoleMass', fallback: 96 }, + { id: 'graph-local-gravitational-constant', key: 'localGravitationalConstant', fallback: 60 }, { id: 'graph-space-damping', key: 'damping', fallback: 1, precision: 1 }, { id: 'graph-spring-stiffness', key: 'springStiffness', fallback: 32 }, ]; @@ -174,7 +174,7 @@ original: { repel: 120, link: 30, gravity: 14, font: 13, size: 3, linkw: 1, labelDensity: 40 }, compact: { repel: 42, link: 20, gravity: 26, font: 12, size: 3, linkw: 0.7, labelDensity: 30 }, communities: { repel: 48, link: 16, gravity: 48, font: 12, size: 3, linkw: 0.72, labelDensity: 24 }, - galaxy: { repel: 100, link: 8, gravity: 120, font: 12, size: 3, linkw: 0.72, labelDensity: 24 }, + galaxy: { repel: 100, link: 8, gravity: 72, font: 12, size: 3, linkw: 0.72, labelDensity: 24 }, radial: { repel: 68, link: 26, gravity: 12, font: 13, size: 3, linkw: 0.75, labelDensity: 55 }, constellation: { repel: 34, link: 16, gravity: 38, font: 12, size: 3, linkw: 0.65, labelDensity: 35 }, }; @@ -475,7 +475,7 @@ if (!graphAllAssetsPromise) { const controller = new AbortController(); const attempt = loadScript( - graphAssetSource('/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1'), + graphAssetSource('/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-1'), 'EngraphisEveryGraph', controller.signal, ); graphAllAssetsPromise = attempt; @@ -508,10 +508,10 @@ graphAssetSource('/v2-assets/vendor/force-graph.min.js?v=20260727-final'), 'ForceGraph', controller.signal, )).then(() => loadScript( - graphAssetSource('/v2-assets/engraphis-graph.js?v=20260906-galaxy-boundaries-1'), + graphAssetSource('/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-1'), 'EngraphisGraph', controller.signal, )).then(() => loadScript( - graphAssetSource('/v2-assets/engraphis-spacetime.js?v=20260812-stable-orbit-lanes-7'), + graphAssetSource('/v2-assets/engraphis-spacetime.js?v=20260927-unmerged-readiness-1'), 'EngraphisSpacetime', controller.signal, )); graphAssetsPromise = attempt; @@ -1605,9 +1605,12 @@ importanceControl.value = String(graphSliderInputValue( 'editor-memory-importance', storedImportance, 0.5, )); - importanceControl.setAttribute('aria-valuetext', `${graphSliderResponseValue( + const respVal = graphSliderResponseValue( 'editor-memory-importance', importanceControl.value, 0.5, - ).toFixed(2)} importance`); + ); + importanceControl.setAttribute('aria-valuetext', `${respVal.toFixed(2)} importance`); + const importanceOutput = byId('editor-memory-importance-output'); + if (importanceOutput) importanceOutput.textContent = respVal.toFixed(2); if (state.editorSession.conflicted) { byId('editor-error').textContent = 'This version cannot be revised. Refresh saved versions and choose an editing base; your draft will be retained.'; byId('editor-error').hidden = false; @@ -2362,6 +2365,7 @@ : (item.community != null ? graphCommunityIndex(item.community) : undefined), community_id: item.community_id == null ? item.community : item.community_id, gravity_mass: optionalGraphNumber(item.gravity_mass), + evidence_mass: optionalGraphNumber(item.evidence_mass ?? item.gravity_mass ?? item.mass_score), visual_radius: optionalGraphNumber(item.visual_radius), anchor_role: item.anchor_role || '', x: Number.isFinite(Number(item.x)) ? Number(item.x) : undefined, @@ -2423,6 +2427,20 @@ reveal(); } + function focusGraphNode(id, label = 'Selected entity') { + const engine = state.graphEngine; + if (!engine) return; + let attempted = false; + const focus = () => { + if (state.graphEngine !== engine || attempted) return; + attempted = true; + if (typeof engine.focus === 'function' && engine.focus(id)) return; + if (typeof engine.reveal === 'function' && engine.reveal(id)) return; + showNotice(`${label} is outside the current graph scope.`); + }; + focus(); + } + function cancelGraphConnectionMemoryLoad() { state.graphConnectionsRequest += 1; if (state.graphConnectionsController) state.graphConnectionsController.abort(); @@ -2794,6 +2812,7 @@ const control = byId(id); const raw = Number(value); const safe = Number.isFinite(raw) ? raw : fallback; + if (!control) return safe; const min = Number(control.min); const max = Number(control.max); return Math.min(Number.isFinite(max) ? max : safe, Math.max(Number.isFinite(min) ? min : safe, safe)); @@ -2876,9 +2895,9 @@ return settings; }, {}); return { - gravitationalConstant: controls.gravitationalConstant / 50, + gravitationalConstant: controls.gravitationalConstant / 30, blackHoleMass: graphBlackHoleMassMultiplier(controls.blackHoleMass), - localGravitationalConstant: controls.localGravitationalConstant / 50, + localGravitationalConstant: controls.localGravitationalConstant / 30, damping: controls.damping, springStiffness: controls.springStiffness / 32, orbitPaused: state.graphOrbitPaused, @@ -2963,11 +2982,11 @@ } - const GRAPH_BLACK_HOLE_MASS_BASELINE = 160; + const GRAPH_BLACK_HOLE_MASS_BASELINE = 96; function graphBlackHoleMassMultiplier(controlValue) { const value = number(controlValue); - /* Keep the established lower half and neutral default. Above 160, every +10 slider units - adds exactly +0.10 to the compact central-mass multiplier: 160→1.0, 170→1.1, 180→1.2. + /* Below the 96 baseline the multiplier scales linearly. Above it, every +10 slider units + adds exactly +0.10 to the compact central-mass multiplier: 96→1.0, 106→1.1, 116→1.2. Local stellar wells remain owned exclusively by Local solar gravity. */ return value <= GRAPH_BLACK_HOLE_MASS_BASELINE ? Math.max(0, value / GRAPH_BLACK_HOLE_MASS_BASELINE) @@ -3167,11 +3186,28 @@ && [48, 60].includes(Number(effectiveTuning.repel))) { effectiveTuning.repel = 100; } - /* Physics v5 makes 120 the Galaxy gravity default. Migrate only the exact retired default; + /* Physics v5 made 120 the Galaxy gravity default. Migrate only the exact retired default; a saved 96 in an already-versioned v5 snapshot remains an intentional user choice. */ if (needsPhysicsMigration(5) && preset === 'galaxy' && Number(effectiveTuning.gravity) === 96) { effectiveTuning.gravity = 120; } + /* Physics v6 recalibrates Galaxy gravity to 72 and the spacetime panel to 60/96/60. Move + only the exact retired default vector, so a value the person actually chose survives. */ + if (needsPhysicsMigration(6)) { + if (preset === 'galaxy' && Number(effectiveTuning.gravity) === 120) { + effectiveTuning.gravity = 72; + } + const retiredSpacetimeDefaults = { + gravitationalConstant: 100, blackHoleMass: 160, localGravitationalConstant: 100, + }; + const savedSpacetime = savedSpacetimeTuning && typeof savedSpacetimeTuning === 'object' + ? savedSpacetimeTuning : {}; + Object.keys(retiredSpacetimeDefaults).forEach(key => { + if (Number(savedSpacetime[key]) === retiredSpacetimeDefaults[key]) { + savedSpacetime[key] = GRAPH_SPACETIME_TUNING.find(item => item.key === key).fallback; + } + }); + } syncGraphTuning({ ...graphPresetTuning(preset), ...effectiveTuning, @@ -3214,7 +3250,7 @@ return layers; }, {})); state.graphIncludeCode = graphPreference('includeCode', false) === true; - state.graphSavedView = graphPreference('savedView', 'schema', ['', ...Object.keys(GRAPH_SAVED_VIEWS)]); + state.graphSavedView = graphPreference('savedView', '', ['', ...Object.keys(GRAPH_SAVED_VIEWS)]); syncGraphSavedViews(); if (legacyPhysics) saveGraphPreferences(); } @@ -3260,7 +3296,7 @@ byId('graph-as-of').value = asOf; byId('graph-repo-filter').value = repoFilter; if (typeof view.ghosts === 'boolean') byId('graph-ghosts').checked = view.ghosts; - if (['degree', 'betweenness'].includes(view.size)) byId('graph-size').value = view.size; + if (['degree', 'betweenness', 'evidence_mass'].includes(view.size)) byId('graph-size').value = view.size; if (typeof view.bridges === 'boolean') byId('graph-bridges').checked = view.bridges; if (typeof view.collapse === 'boolean') byId('graph-collapse').checked = view.collapse; if (typeof view.flow === 'boolean') setGraphSwitch('graph-flow', view.flow); @@ -3648,7 +3684,8 @@ state.graphEngine.freeze(true); } if (state.graphSpacetimeOverlay) state.graphSpacetimeOverlay.setEnabled(false); - byId('graph-canvas').setAttribute('aria-busy', 'true'); + const canvasEl = byId('graph-canvas'); + if (canvasEl) canvasEl.setAttribute('aria-busy', 'true'); byId('graph-empty').hidden = false; byId('graph-empty').textContent = fullGraph ? 'Loading all nodes with progressive level of detail…' @@ -3677,6 +3714,7 @@ let candidateOverlay = null; let candidateStats = null; let candidateMetrics = null; + let candidatePhysicsSnapshot = null; const destroyCandidate = () => { if (!candidateEngine) { candidateOverlay = null; @@ -3765,6 +3803,7 @@ const responseIncludeCode = sceneMeta.include_code === false ? false : targetIncludeCode; const codeOverlayDegraded = targetIncludeCode && !responseIncludeCode; const oldHost = byId('graph-canvas'); + if (!oldHost) throw new Error('graph canvas container missing'); // oldEngine was captured before the first await so the failure path // can restore the exact committed renderer even when candidate setup never begins. candidateHost = oldHost.cloneNode(false); @@ -3804,6 +3843,10 @@ && state.graphLoadRequest === request.id) graphMetricsChanged(metrics); else if (state.graphLoadRequest === request.id) candidateMetrics = metrics; }, + onPhysicsFrame: snapshot => { + candidatePhysicsSnapshot = snapshot; + if (candidateOverlay) candidateOverlay.setSnapshot(snapshot); + }, onError: error => { if (state.graphEngine !== candidateEngine || !fullGraph || state.graphLoadRequest !== request.id || state.graphMode !== 'full') return; @@ -3831,7 +3874,8 @@ }, }); candidateEngine.apply(graph => { - graph.setPreset(byId('graph-preset').value); + const preset = byId('graph-preset').value; + graph.setPreset(galaxyQuality && preset === 'every' ? 'galaxy' : preset); graph.setStyle(byId('graph-style').value); graph.setColorBy(byId('graph-color').value); graph.setThemeColors(graphThemeColors()); @@ -3862,6 +3906,7 @@ candidateHost, candidateEngine ); candidateOverlay.setEnabled(galaxyQuality || graphIsGalaxy()); + if (candidatePhysicsSnapshot) candidateOverlay.setSnapshot(candidatePhysicsSnapshot); } // Pending renderers also follow visibility while finite worker preparation finishes. graphLifecycle.track(candidateEngine, candidateOverlay, () => graphOverlayEnabled(galaxyQuality)); @@ -3948,7 +3993,8 @@ destroyCandidate(); window.clearTimeout(timeout); if (state.graphLoadRequest === request.id && state.graphLoadController === controller) { - byId('graph-canvas').setAttribute('aria-busy', 'false'); + const canvasEl = byId('graph-canvas'); + if (canvasEl) canvasEl.setAttribute('aria-busy', 'false'); setGraphLoadControlsBusy(false); } if (state.graphLoadController === controller) state.graphLoadController = null; @@ -5249,6 +5295,8 @@ 'editor-memory-importance', event.target.value, 0.5, ); event.target.setAttribute('aria-valuetext', `${effective.toFixed(2)} importance`); + const importanceOutput = byId('editor-memory-importance-output'); + if (importanceOutput) importanceOutput.textContent = effective.toFixed(2); }); byId('import-button').addEventListener('click', () => byId('import-files').click()); byId('import-files').addEventListener('change', event => importFiles(event.target.files)); @@ -5317,7 +5365,7 @@ byId('graph-repo-filter').addEventListener('input', event => { if (state.graphEngine) state.graphEngine.setRepoFilter(event.target.value); clearGraphSavedView(); - saveGraphPreferences(); + scheduleGraphPreferencesSave(); // Repository-scoped payloads need a server reload, but do not issue a 20k-node request // for every keystroke. The current input is still reflected immediately by the renderer. if (state.graphMode === 'full') { @@ -5509,23 +5557,28 @@ byId('graph-reset-tuning').addEventListener('click', resetGraphTuning); byId('graph-retry').addEventListener('click', retryGraphLoad); byId('graph-bridges').addEventListener('change', event => { + clearGraphSavedView(); if (state.graphEngine) state.graphEngine.setBridges(event.target.checked); saveGraphPreferences(); }); byId('graph-collapse').addEventListener('change', event => { + clearGraphSavedView(); if (state.graphEngine) state.graphEngine.setCollapse(event.target.checked ? 'auto' : false); saveGraphPreferences(); }); byId('graph-as-of').addEventListener('change', event => { + clearGraphSavedView(); if (state.graphEngine) state.graphEngine.setAsOf(graphAsOfTimestamp()); saveGraphPreferences(); loadGraph({ force: true }); }); byId('graph-ghosts').addEventListener('change', event => { + clearGraphSavedView(); if (state.graphEngine) state.graphEngine.setGhosts(event.target.checked); saveGraphPreferences(); }); byId('graph-size').addEventListener('change', event => { + clearGraphSavedView(); if (state.graphEngine) state.graphEngine.setSizeBy(graphSizeBy()); saveGraphPreferences(); }); @@ -5562,7 +5615,7 @@ const id = state.graphConnectionsFocusId; if (!id) return; closeGraphConnections(); - revealGraphNode(id, state.graphConnectionsFocusLabel || 'Selected entity'); + focusGraphNode(id, state.graphConnectionsFocusLabel || 'Selected entity'); }); byId('graph-connections-dialog').addEventListener('click', event => { if (event.target === event.currentTarget) closeGraphConnections(); diff --git a/engraphis/static/dashboard.js b/engraphis/static/dashboard.js index e21426964..2d111da73 100644 --- a/engraphis/static/dashboard.js +++ b/engraphis/static/dashboard.js @@ -618,8 +618,8 @@ window.GSET.frozen=false; function graphNodeRadius(node,base,metric){ const size=Number.isFinite(+base)&&+base>0?+base:3; const normalized=Math.max(0,Math.min(1,Number(metric)||0)); - const radius=size*.45*(.55+Math.min(1.6,normalized*1.9)); - return Math.max(.8,Math.min(size*1.1,radius)); + const radius=size*.45*(.6+Math.min(1.6,normalized*1.9)); + return Math.max(.25,Math.min(size*1.1,radius)); } const ETYPE_TOKEN={person_or_concept:'--entity-concept',mention:'--entity-mention',hashtag:'--entity-hashtag',email:'--entity-email',organization:'--entity-organization',location:'--entity-location'}; const GRAPH_PALETTES={ @@ -1220,7 +1220,7 @@ function loadAllGraphEngine(){ if(typeof EngraphisEveryGraph!=='undefined')return Promise.resolve(); if(!ALL_GRAPH_ENGINE_LOADING){ ALL_GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ - const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1'; + const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-1'; script.onload=()=>{typeof EngraphisEveryGraph==='undefined'?reject(new Error('Every-node graph asset loaded without registering EngraphisEveryGraph')):resolve()}; script.onerror=()=>reject(new Error('Every-node graph asset could not load')); document.head.appendChild(script); @@ -1237,7 +1237,7 @@ function loadGraphEngine(loadAll=false){ GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ const script=document.createElement('script'); const bust=GRAPH_ENGINE_RETRY>0?'&r='+GRAPH_ENGINE_RETRY:''; - script.src='/v2-assets/engraphis-graph.js?v=20260906-galaxy-boundaries-1'+bust; + script.src='/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-1'+bust; /* A 200 that never registers the global is a corrupt/truncated asset, not a success — resolving there would hand graphRenderEngine() an undefined EngraphisGraph. Failed attempts drop the script node and clear the memo so the next call retries with a diff --git a/engraphis/static/index.html b/engraphis/static/index.html index dac1e338d..4c336ba08 100644 --- a/engraphis/static/index.html +++ b/engraphis/static/index.html @@ -349,6 +349,6 @@ graph view. dashboard.js fetches both on demand from graphRender(); see loadForceGraph() and loadGraphEngine(). scripts/externalize_dashboard_assets.py enforces both halves: they stay out of this file, and the lazy references still have to resolve. --> - + diff --git a/scripts/rebind_offline_evidence.py b/scripts/rebind_offline_evidence.py new file mode 100644 index 000000000..1529a733e --- /dev/null +++ b/scripts/rebind_offline_evidence.py @@ -0,0 +1,15 @@ +"""Compatibility entry point for fresh, immutable offline measurements. + +Historical evidence is never rebound. Pass --output with a new artifact path; +the canonical exporter reruns the fixtures and binds the exact evaluated source. +""" +from __future__ import annotations + +if __package__: + from .export_offline_evidence import main +else: + from export_offline_evidence import main + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/e2e/graph-engine.spec.js b/tests/e2e/graph-engine.spec.js index 1c089a9e1..f907d33e6 100644 --- a/tests/e2e/graph-engine.spec.js +++ b/tests/e2e/graph-engine.spec.js @@ -20,7 +20,7 @@ const { test, expect } = require('@playwright/test'); */ const workspace = 'graph-e2e'; -const stellarOrbitAssetVersion = '20260906-galaxy-boundaries-1'; +const stellarOrbitAssetVersion = '20260927-unmerged-readiness-1'; // A small connected store: two clusters joined by one bridge, so communities, the legend and // the bridge detector all have something real to work on. @@ -1885,7 +1885,7 @@ for (const reducedMotion of [false, true]) { expect(diagnostics.renderedNodes).toBe(542); expect(before.collapsed).toBe(false); expect(before.settings).toMatchObject({ - mode: 'galaxy', frozen: false, gravity: 120, repel: 100, link: 8, + mode: 'galaxy', frozen: false, gravity: 72, repel: 100, link: 8, }); expect(diagnostics.orbitalSeparationSetting).toBe(100); expect(diagnostics.orbitalSeparationPadding).toBe(15); @@ -1893,9 +1893,9 @@ for (const reducedMotion of [false, true]) { expect(diagnostics.crossSystemRepulsionStrength).toBe(0); expect(diagnostics.linkSetting).toBe(8); expect(diagnostics.relationOrbitScale).toBeCloseTo(0.25, 12); - expect(diagnostics.gravitySetting).toBe(120); - expect(diagnostics.blackHoleGravity).toBeCloseTo(28.242, 12); - expect(diagnostics.localGravity).toBeCloseTo(146.25, 12); + expect(diagnostics.gravitySetting).toBe(72); + expect(diagnostics.blackHoleGravity).toBeCloseTo(14.938467337278107, 12); + expect(diagnostics.localGravity).toBeCloseTo(190.125, 12); expect(diagnostics.systemOrbitSeedSpeedLimit).toBeCloseTo(23.4, 12); const assetRequests = fetched(session.requested, '/v2-assets/engraphis-graph.js'); @@ -1933,7 +1933,7 @@ test('served Ledger wires normalized spacetime controls, overlay, and orbit paus await expect.poll(() => page.evaluate(() => { const control = document.getElementById('graph-black-hole-mass'); const previous = control.value; - control.value = '170'; + control.value = '106'; control.dispatchEvent(new Event('input', { bubbles: true })); const applied = window.__engraphisGraph.state().settings.blackHoleMass; control.value = previous; @@ -1943,7 +1943,7 @@ test('served Ledger wires normalized spacetime controls, overlay, and orbit paus const massSteps = await page.evaluate(() => { const massControl = document.getElementById('graph-black-hole-mass'); - const samples = [160, 170, 180].map(value => { + const samples = [96, 106, 116].map(value => { massControl.value = String(value); massControl.dispatchEvent(new Event('input', { bubbles: true })); return { @@ -1966,13 +1966,13 @@ test('served Ledger wires normalized spacetime controls, overlay, and orbit paus return samples; }); expect(massSteps).toEqual([ - { control: 160, multiplier: 1 }, - { control: 170, multiplier: 1.1 }, - { control: 180, multiplier: 1.2 }, + { control: 96, multiplier: 1 }, + { control: 106, multiplier: 1.1 }, + { control: 116, multiplier: 1.2 }, ]); await expect.poll(() => page.evaluate(() => window.__engraphisGraph.state().settings)) - .toMatchObject({ gravitationalConstant: 3, blackHoleMass: 1.8, - localGravitationalConstant: 2.5, damping: 2, springStiffness: 2, orbitPaused: false }); + .toMatchObject({ gravitationalConstant: 5, blackHoleMass: 2.44, + localGravitationalConstant: 125 / 30, damping: 2, springStiffness: 2, orbitPaused: false }); const rangeResponse = await page.evaluate(() => { const set = (id, value) => { const control = document.getElementById(id); @@ -2997,7 +2997,7 @@ test('served non-Galaxy spacetime controls keep their full normalized range', as control.value = String(value); control.dispatchEvent(new Event('input', { bubbles: true })); }; - const mass = [20, 40, 160, 460, 500].map(value => { + const mass = [20, 40, 96, 160, 460, 500].map(value => { set('graph-black-hole-mass', value); return { value, multiplier: window.__engraphisGraph.state().settings.blackHoleMass }; }); @@ -3008,13 +3008,13 @@ test('served non-Galaxy spacetime controls keep their full normalized range', as return { mass, damping }; }); - expect(report.mass).toEqual([ - { value: 20, multiplier: 0.125 }, - { value: 40, multiplier: 0.25 }, - { value: 160, multiplier: 1 }, - { value: 460, multiplier: 4 }, - { value: 500, multiplier: 4.4 }, - ]); + const expectedMass = [[20, 20 / 96], [40, 40 / 96], [96, 1], + [160, 1.64], [460, 4.64], [500, 5.04]]; + expect(report.mass).toHaveLength(expectedMass.length); + expectedMass.forEach(([value, multiplier], index) => { + expect(report.mass[index].value).toBe(value); + expect(report.mass[index].multiplier).toBeCloseTo(multiplier, 12); + }); /* The merged engine interpolates damping onto d3's velocityDecay with a size-aware baseline: damping=0 -> 0.05 floor, damping=1 -> the neutral settling baseline (0.38 small / 0.45 large), damping=15 -> 0.85 ceiling. This served graph is small. */ @@ -3533,26 +3533,33 @@ test('Galaxy sliders retain full ranges with orbital-speed and radius response', }); const immediate = await page.evaluate(scene => { const api = window.__engraphisGraph; - const I = window.EngraphisGraph._internals; api.freeze(true); api.setPreset('galaxy'); api.setData(scene); api.setScope({ showUnlinked: true, minDegree: 0 }); const nodes = window.__fg.graphData().nodes; - const radii = () => Object.fromEntries([...I.communityCenters(nodes).entries()] - .filter(([id]) => id !== 'core') - .map(([id, center]) => [id, Math.hypot(center.x, center.y)])); + const anchor = nodes.find(node => node.anchor_role === 'global'); + const stars = new Map(nodes.filter(node => node.anchor_role === 'community') + .map(node => [node.community_id, node])); + const radii = () => Object.fromEntries([...stars.entries()] + .map(([id, star]) => [id, Math.hypot(star.x - anchor.x, star.y - anchor.y)])); + const offsets = () => nodes.filter(node => stars.has(node.community_id)) + .map(node => { + const star = stars.get(node.community_id); + return [node.id, node.x - star.x, node.y - star.y]; + }); const diameter = () => { const star = nodes.find(node => node.id === 'aurora-star'); const planet = nodes.find(node => node.id === 'aurora-planet'); return Math.hypot(star.x - planet.x, star.y - planet.y); }; const velocities = () => nodes.map(node => [node.id, node.vx, node.vy]); - const before = { radii: radii(), diameter: diameter(), velocities: velocities() }; + const before = { radii: radii(), diameter: diameter(), velocities: velocities(), + offsets: offsets(), diagnostics: api.physicsDiagnostics() }; api.freeze(false); api.setSettings({ gravity: 200, size: 1 }); const after = { radii: radii(), diameter: diameter(), velocities: velocities(), - diagnostics: api.physicsDiagnostics() }; + offsets: offsets(), diagnostics: api.physicsDiagnostics() }; api.freeze(true); return { before, after }; }, blackHoleGalaxyScene); @@ -3583,29 +3590,29 @@ test('Galaxy sliders retain full ranges with orbital-speed and radius response', expect(baseline.curve.setting).toBe(48); expect(strong.curve.setting).toBe(200); - expect(baseline.curve.baseline).toBe(292.5); - expect(baseline.curve.maximum).toBeCloseTo(3343.5, 12); - expect(baseline.curve.localBaseline).toBe(146.25); - expect(baseline.curve.localMaximum).toBeCloseTo(1671.75, 12); + expect(baseline.curve.baseline).toBe(380.25); + expect(baseline.curve.maximum).toBeCloseTo(4346.55, 12); + expect(baseline.curve.localBaseline).toBe(190.125); + expect(baseline.curve.localMaximum).toBeCloseTo(2173.275, 12); expect(baseline.curve.localBaseline).toBe(baseline.curve.baseline * 0.5); expect(baseline.curve.localMaximum).toBe(baseline.curve.maximum * 0.5); expect(baseline.curve.maximum / baseline.curve.baseline).toBeCloseTo( 11.430769230769231, 12, ); expect(baseline.before.diagnostics.gravitySetting).toBe(48); - expect(baseline.before.diagnostics.effectiveGravity).toBeCloseTo(2.925, 12); + expect(baseline.before.diagnostics.effectiveGravity).toBeCloseTo(3.8025, 12); expect(baseline.before.diagnostics.blackHoleGravity).toBeCloseTo( baseline.curve.baseline * 0.1 ** 2, 12, ); - expect(baseline.before.diagnostics.localGravity).toBe(146.25); + expect(baseline.before.diagnostics.localGravity).toBe(190.125); expect(strong.before.diagnostics.gravitySetting).toBe(200); - expect(strong.before.diagnostics.effectiveGravity).toBeCloseTo(33.435, 12); + expect(strong.before.diagnostics.effectiveGravity).toBeCloseTo(43.4655, 12); expect(strong.before.diagnostics.blackHoleGravity).toBeCloseTo( baseline.curve.maximum * 0.1 ** 2, 12, ); // The visible Galaxy gravity slider owns the central field; local stellar gravity stays on // the calibrated baseline and only the dedicated local control can change it. - expect(strong.before.diagnostics.localGravity).toBe(146.25); + expect(strong.before.diagnostics.localGravity).toBe(190.125); expect(naturalOrbits.before.diagnostics.orbitalSeparationSetting).toBe(100); expect(naturalOrbits.before.diagnostics.orbitalSpeedMultiplier).toBe(1); expect(naturalOrbits.before.diagnostics.orbitalRadiusMultiplier).toBe(1); @@ -3647,11 +3654,18 @@ test('Galaxy sliders retain full ranges with orbital-speed and radius response', expect(physicalField.linkScales).toEqual([1 / 16, 0.25, 25]); for (const [id, radius] of Object.entries(immediate.before.radii)) { expect(immediate.after.radii[id] / radius, id) - .toBeCloseTo(immediateResponse.ratio, 2); + .toBeCloseTo(immediateResponse.ratio, 12); } // The central response translates each solar system as a rigid carrier; its local orbit // geometry remains unchanged while the system moves radially around the black hole. expect(immediate.after.diameter / immediate.before.diameter).toBeCloseTo(1, 12); + expect(immediate.after.diagnostics.steps).toBe(immediate.before.diagnostics.steps); + for (const [index, [id, x, y]] of immediate.before.offsets.entries()) { + const [afterId, afterX, afterY] = immediate.after.offsets[index]; + expect(afterId).toBe(id); + expect(afterX, id).toBeCloseTo(x, 12); + expect(afterY, id).toBeCloseTo(y, 12); + } for (const [index, [id, vx, vy]] of immediate.before.velocities.entries()) { const [afterId, afterVx, afterVy] = immediate.after.velocities[index]; expect(afterId).toBe(id); diff --git a/tests/e2e/ledger.spec.js b/tests/e2e/ledger.spec.js index deabc0398..f7546a5a4 100644 --- a/tests/e2e/ledger.spec.js +++ b/tests/e2e/ledger.spec.js @@ -873,8 +873,6 @@ test('Ledger enters Every node from a loaded overview without losing its scope', await expect(page.locator('#graph-count')).toContainText('3 entities'); await page.locator('[data-graph-preset-choice="compact"]').click(); await expect(page.locator('[data-graph-preset-choice="compact"]')).toHaveAttribute('aria-pressed', 'true'); - await page.locator('[data-graph-color-choice="type"]').click(); - await expect(page.locator('[data-graph-color-choice="type"]')).toHaveAttribute('aria-pressed', 'true'); await page.locator('#graph-flow').click(); await expect(page.locator('#graph-flow')).toHaveAttribute('aria-checked', 'false'); await page.locator('#graph-flow').click(); @@ -888,7 +886,6 @@ test('Ledger enters Every node from a loaded overview without losing its scope', await expect(page.locator('#graph-count')).toContainText('0 visible of 3 entities'); await page.locator('#graph-tune-min-degree').fill('1'); await expect(page.locator('#graph-count')).toContainText('2 visible of 3 entities'); - await page.locator('[data-graph-palette-choice="ocean"]').click(); const persistedInAllMode = await page.evaluate(() => JSON.parse( localStorage.getItem('engraphis-ledger-graph-preferences-v1') || '{}', )); @@ -951,6 +948,25 @@ test('Ledger keeps authored Galaxy coordinates on the orbit renderer in Every-no // Every-node WebGL canvas is reserved for non-Galaxy complete scenes. await expect(page.locator('.engraphis-all-canvas')).toHaveCount(0); await expect(page.locator('.graph-spacetime-overlay')).toHaveCount(1); + await page.locator('[data-graph-preset-choice="compact"]').click(); + await page.evaluate(() => { + const create = window.EngraphisGraph.create; + window.__reloadedGraphPresets = []; + window.EngraphisGraph.create = function(...args) { + const api = create.apply(this, args); + const setPreset = api.setPreset; + api.setPreset = function(preset) { + window.__reloadedGraphPresets.push(preset); + return setPreset.call(this, preset); + }; + return api; + }; + }); + await page.getByRole('button', { name: 'Reload data', exact: true }).click(); + await expect(page.locator('#graph-canvas')).toHaveAttribute('aria-busy', 'false'); + await expect.poll(() => page.evaluate(() => window.__reloadedGraphPresets)).toContain('compact'); + expect(await page.evaluate(() => window.__reloadedGraphPresets)).not.toContain('galaxy'); + await expect(page.locator('[data-graph-preset-choice="compact"]')).toHaveAttribute('aria-pressed', 'true'); }); test('Ledger keeps the committed Every-node renderer visible when a superseded load resolves', async ({ page }) => { @@ -1011,14 +1027,14 @@ test('Ledger cache-busts a graph renderer that fetched but did not register', as await expect(page.locator('#graph-empty')).toContainText('Graph unavailable'); expect(rendererRequests).toHaveLength(1); const first = new URL(rendererRequests[0]); - expect(first.searchParams.get('v')).toBe('20260906-galaxy-boundaries-1'); + expect(first.searchParams.get('v')).toBe('20260927-unmerged-readiness-1'); expect(first.searchParams.has('retry')).toBe(false); await page.getByRole('button', { name: 'Reload data' }).click(); await expect(page.locator('#graph-count')).toContainText('3 entities · 1 relations'); expect(rendererRequests).toHaveLength(2); const second = new URL(rendererRequests[1]); - expect(second.searchParams.get('v')).toBe('20260906-galaxy-boundaries-1'); + expect(second.searchParams.get('v')).toBe('20260927-unmerged-readiness-1'); expect(second.searchParams.get('retry')).toBe('1'); }); @@ -1036,7 +1052,7 @@ test('Ledger applies each Galaxy preference migration once', async ({ page }) => await page.goto('/'); await expect(page.locator('#graph-repel')).toHaveValue('100'); await expect(page.locator('#graph-link')).toHaveValue('8'); - await expect(page.locator('#graph-gravity')).toHaveValue('120'); + await expect(page.locator('#graph-gravity')).toHaveValue('72'); // A first-time dashboard may use the new HTML default without manufacturing preferences. expect(await readPreferences()).toBeNull(); @@ -1051,7 +1067,7 @@ test('Ledger applies each Galaxy preference migration once', async ({ page }) => }); await expect(page.locator('#graph-repel')).toHaveValue('100'); await expect(page.locator('#graph-link')).toHaveValue('8'); - await expect(page.locator('#graph-gravity')).toHaveValue('120'); + await expect(page.locator('#graph-gravity')).toHaveValue('72'); await writePreferences({ preset: 'galaxy', style: 'solar', tuning: { repel: 48, link: 8, gravity: 0 }, @@ -1061,7 +1077,7 @@ test('Ledger applies each Galaxy preference migration once', async ({ page }) => await expect(page.locator('#graph-repel')).toHaveValue('100'); await expect(page.locator('#graph-gravity')).toHaveValue('0'); const migrated = await readPreferences(); - expect(migrated.physicsVersion).toBe(5); + expect(migrated.physicsVersion).toBe(6); expect(migrated.preset).toBe('galaxy'); expect(migrated.style).toBe('solar'); expect(migrated.tuning.repel).toBe(100); @@ -1075,10 +1091,11 @@ test('Ledger applies each Galaxy preference migration once', async ({ page }) => preset: 'galaxy', style: 'solar', tuning: { repel: 100, link: 8, gravity: 96 }, }); await page.reload(); - await expect(page.locator('#graph-gravity')).toHaveValue('120'); + // v5 raised the retired 96 default to 120; v6 recalibrates that same default to 72. + await expect(page.locator('#graph-gravity')).toHaveValue('72'); const migratedGravity = await readPreferences(); - expect(migratedGravity.physicsVersion).toBe(5); - expect(migratedGravity.tuning.gravity).toBe(120); + expect(migratedGravity.physicsVersion).toBe(6); + expect(migratedGravity.tuning.gravity).toBe(72); await writePreferences({ preset: 'galaxy', style: 'galaxy', tuning: { repel: 73, link: 21, gravity: 0 }, @@ -1088,7 +1105,7 @@ test('Ledger applies each Galaxy preference migration once', async ({ page }) => await expect(page.locator('#graph-link')).toHaveValue('21'); await expect(page.locator('#graph-gravity')).toHaveValue('0'); const custom = await readPreferences(); - expect(custom.physicsVersion).toBe(5); + expect(custom.physicsVersion).toBe(6); expect(custom.tuning.repel).toBe(73); expect(custom.tuning.link).toBe(21); expect(custom.tuning.gravity).toBe(0); @@ -1101,16 +1118,23 @@ test('Ledger applies each Galaxy preference migration once', async ({ page }) => }); await page.reload(); await expect(page.locator('#graph-repel')).toHaveValue(String(repel)); - const expectedGravity = physicsVersion < 5 ? 120 : 96; + // Version 4 used 96 by default; in version 5 it is an explicit custom choice. + const expectedGravity = physicsVersion < 5 ? 72 : 96; await expect(page.locator('#graph-gravity')).toHaveValue(String(expectedGravity)); const saved = await readPreferences(); - expect(saved.physicsVersion).toBe(5); + expect(saved.physicsVersion).toBe(6); expect(saved.tuning.repel).toBe(repel); expect(saved.tuning.gravity).toBe(expectedGravity); } } - // The v3 reset applies only to snapshots older than v3, even after a v5 upgrade. + // A genuinely chosen value that is not a retired default is never rewritten. + await writePreferences({ physicsVersion: 5, preset: 'galaxy', tuning: { repel: 100, gravity: 150 } }); + await page.reload(); + await expect(page.locator('#graph-gravity')).toHaveValue('150'); + expect((await readPreferences()).tuning.gravity).toBe(150); + + // The v3 reset applies only to snapshots older than v3, even after a v6 upgrade. for (const physicsVersion of [3, 4]) { const spacetimeTuning = { gravitationalConstant: 200, blackHoleMass: 500, localGravitationalConstant: 200, damping: 0, springStiffness: 100 }; @@ -1888,8 +1912,7 @@ test('Explore uses the visual explorer controls and applies their state', async await expect(page.locator('#graph-link-label')).toHaveText('Link distance · tight ↔ loose'); await expect(page.locator('#graph-link')).toHaveValue('8'); await expect(page.locator('#graph-gravity-label')).toHaveText('Galactic gravity · loose ↔ tight'); - await expect(page.locator('#graph-gravity')).toHaveValue('120'); - await expect(page.getByRole('button', { name: 'Schema drift' })).toHaveAttribute('aria-pressed', 'true'); + await expect(page.locator('#graph-gravity')).toHaveValue('72'); await expect(page.getByRole('button', { name: 'Operations' })).toBeVisible(); await expect(page.getByRole('button', { name: 'People' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Code ↔ memory' })).toBeVisible(); @@ -1899,10 +1922,6 @@ test('Explore uses the visual explorer controls and applies their state', async await expect(page.getByRole('button', { name: 'Every node' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Unlinked nodes' })).toHaveAttribute('aria-pressed', 'true'); await expect(page.locator('#graph-count')).toContainText('3 entities · 1 relations'); - const paletteNotice = page.locator('#notice-banner'); - await page.locator('[data-graph-palette-choice="ember"]').click(); - await expect(paletteNotice).toHaveText('ember palette applied to the graph.'); - await expect(paletteNotice).toBeHidden({ timeout: 4500 }); const hideUnlinkedRequest = page.waitForRequest(request => { const url = new URL(request.url()); return url.pathname === '/api/graph/scene' && url.searchParams.get('connected_only') === 'true'; @@ -1951,8 +1970,7 @@ test('Explore uses the visual explorer controls and applies their state', async await expect(page.locator('#graph-canvas')).toHaveAttribute('data-graph-style', 'galaxy'); await page.getByRole('button', { name: 'Compact' }).click(); await expect(page.locator('#graph-mode')).toContainText('Compact'); - await page.getByRole('button', { name: 'Type' }).click(); - await expect(page.getByRole('button', { name: 'Type' })).toHaveAttribute('aria-pressed', 'true'); + await expect(page.locator('#graph-color')).toHaveValue('community'); const flow = page.getByRole('switch', { name: 'Relation flow' }); await flow.click(); @@ -2025,7 +2043,7 @@ test('Explore uses the visual explorer controls and applies their state', async await revealAdvancedGraphControls(page); await expect(page.getByRole('button', { name: 'Galaxy', exact: true })).toHaveAttribute('aria-pressed', 'true'); await expect(page.getByRole('button', { name: 'Compact' })).toHaveAttribute('aria-pressed', 'true'); - await expect(page.getByRole('button', { name: 'Type' })).toHaveAttribute('aria-pressed', 'true'); + await expect(page.locator('#graph-color')).toHaveValue('community'); await expect(page.locator('#graph-flow-speed')).toHaveValue('45'); await expect(page.getByRole('switch', { name: 'Relation flow' })).toHaveAttribute('aria-checked', 'false'); await expect(page.getByRole('switch', { name: 'Freeze simulation' })).toHaveAttribute('aria-checked', 'false'); @@ -2256,7 +2274,8 @@ test('a custom graph view restores every saved control and server filter', async await expect(page.getByRole('button', { name: 'Galaxy', exact: true })).toHaveAttribute('aria-pressed', 'true'); await expect(page.getByRole('button', { name: 'Radial' })).toHaveAttribute('aria-pressed', 'true'); - await expect(page.getByRole('button', { name: 'Type' })).toHaveAttribute('aria-pressed', 'true'); + await expect(page.locator('#graph-color')).toHaveValue('type'); + await expect(page.locator('#graph-palette')).toHaveValue('ocean'); await expect(page.locator('#graph-flow-speed')).toHaveValue('67'); await expect(page.locator('#graph-repel')).toHaveValue('80'); await expect(page.getByRole('switch', { name: 'Relation flow' })).toHaveAttribute('aria-checked', 'false'); diff --git a/tests/e2e/ledger_sliders_themes.spec.js b/tests/e2e/ledger_sliders_themes.spec.js index 1004f2ddf..4d8c6dd2e 100644 --- a/tests/e2e/ledger_sliders_themes.spec.js +++ b/tests/e2e/ledger_sliders_themes.spec.js @@ -324,13 +324,23 @@ test.describe('Ledger Dashboard Sliders, Gravity Physics, Themes, and Options', expect(currentStyle).toBe(s); } - // Palettes + // Colour by / palette. The advanced drawer's colour chips are gone, so the engine + // contract is asserted directly: every mode and palette must still reach the renderer. + const colourModes = ['type', 'connections', 'community']; + for (const mode of colourModes) { + expect(await page.evaluate(value => { + window.__engraphisGraph.setColorBy(value); + return window.__engraphisGraph.state().colorBy; + }, mode)).toBe(mode); + } const palettes = ['aurora', 'ocean', 'ember', 'contrast', 'theme']; for (const pal of palettes) { - await page.locator(`[data-graph-palette-choice="${pal}"]`).click(); - const currentPal = await page.evaluate(() => window.__engraphisGraph.state().palette); - expect(currentPal).toBe(pal); + expect(await page.evaluate(value => { + window.__engraphisGraph.setPalette(value); + return window.__engraphisGraph.state().palette; + }, pal)).toBe(pal); } + await page.evaluate(() => window.__engraphisGraph.setColorBy('community')); // 8. Test Action Buttons await page.locator('#graph-reheat').click(); @@ -346,7 +356,7 @@ test.describe('Ledger Dashboard Sliders, Gravity Physics, Themes, and Options', })); expect(defaults.repel).toBe(100); expect(defaults.link).toBe(8); - expect(defaults.gravity).toBe(120); + expect(defaults.gravity).toBe(72); // 9. Test Memory Importance Slider in Library View await page.locator('.nav-item[data-view="library"]').click(); diff --git a/tests/test_benchmark_evidence.py b/tests/test_benchmark_evidence.py index 79468537a..03d6f6549 100644 --- a/tests/test_benchmark_evidence.py +++ b/tests/test_benchmark_evidence.py @@ -33,8 +33,8 @@ ROOT = Path(__file__).resolve().parents[1] -PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v74.json" -PUBLIC_OFFLINE_SHA = "7a5dafabf4efe515819599cd183153ad30ae13ce25e866a27543876fc9f5a39a" +PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v75.json" +PUBLIC_OFFLINE_SHA = "dc901f5d0fc9209f96793c4ce5d63e8c4f32f3d6b25754303549680f8dd8a78e" @pytest.fixture(scope="module") diff --git a/tests/test_documentation_contracts.py b/tests/test_documentation_contracts.py index 304f79af8..65d1d970a 100644 --- a/tests/test_documentation_contracts.py +++ b/tests/test_documentation_contracts.py @@ -106,7 +106,7 @@ def test_core_backend_imports_stay_behind_outer_composition_root() -> None: def test_benchmark_text_alternatives_match_registered_fixture_boundary() -> None: """The current image and its alt text expose only current registered boundaries.""" - registry = json.loads(_read("docs/benchmark-evidence/offline-fixtures-v74.json")) + registry = json.loads(_read("docs/benchmark-evidence/offline-fixtures-v75.json")) measurements = {run["id"]: run["result"] for run in registry["runs"]} payload = measurements["offline-performance"] readme = _read("README.md") diff --git a/tests/test_graph_engine_asset.py b/tests/test_graph_engine_asset.py index 0bc1efdc9..d4cb4f9ad 100644 --- a/tests/test_graph_engine_asset.py +++ b/tests/test_graph_engine_asset.py @@ -225,6 +225,96 @@ def test_every_node_visibility_response_refreshes_webgl_node_buffers() -> None: assert handler.index("uploadNodePositions()") < handler.index("uploadEdges()") +@requires_node +def test_galaxy_lane_cache_preserves_star_and_primary_classification() -> None: + report = _run_engine( + """ + const api = G.create(el, { reducedMotion: () => true }); + const nodes = [ + { id: 'center', anchor_role: 'global', community_id: 'core', gravity_mass: 8, + x: 0, y: 0, vx: 0, vy: 0 }, + { id: 'star', anchor_role: 'community', system_anchor_id: 'star', + community_id: 'star-system', gravity_mass: 4, x: 180, y: 0, vx: 0, vy: 0 }, + { id: 'p1', system_anchor_id: 'star', orbit_tier: 1, orbit_radius: 30, + community_id: 'star-system', gravity_mass: 1, x: 210, y: 0, vx: 0, vy: 0 }, + { id: 'p2', system_anchor_id: 'star', orbit_tier: 1, orbit_radius: 30, + community_id: 'star-system', gravity_mass: 1, x: 210, y: 0, vx: 0, vy: 0 }, + { id: 'p3', system_anchor_id: 'star', orbit_tier: 1, orbit_radius: 30, + community_id: 'star-system', gravity_mass: 1, x: 210, y: 0, vx: 0, vy: 0 }, + ]; + api.setData({ nodes, links: [ + { source: 'center', target: 'star', layer: 'semantic' }, + { source: 'star', target: 'p1', layer: 'semantic' }, + { source: 'star', target: 'p2', layer: 'semantic' }, + { source: 'star', target: 'p3', layer: 'semantic' }, + ] }); + const lanes = I.prepareGalaxyOrbitLaneTopology(store.graphData.nodes); + const stars = I.galaxyStarAnchorIds(lanes); + const primaries = I.galaxyPrimaryAnchorIds(lanes); + emit({ lanes: lanes.map(lane => ({ anchorId: lane.anchorId, members: lane.members, + radius: lane.radius })), stars: [...stars], primaries: [...primaries] }); + """ + ) + assert report["lanes"] == [{"anchorId": "star", "members": 3, "radius": 30.0}] + assert report["stars"] == ["star"] + assert report["primaries"] == ["star"] + + +@requires_node +def test_hidden_labels_skip_the_entire_post_render_node_scan() -> None: + report = _run_engine( + """ + let fills = 0; + const ctx = { + save() {}, restore() {}, fillText() { fills += 1; }, beginPath() {}, arc() {}, + fill() {}, stroke() {}, createRadialGradient() { return { addColorStop() {} }; }, + createLinearGradient() { return { addColorStop() {} }; }, + }; + const api = G.create(el, { reducedMotion: () => true }); + api.setData(chain(20)); + store.onRenderFramePost(ctx, 1); + const hidden = fills; + api.setSettings({ labels: true, labelDensity: 3 }); + store.onRenderFramePost(ctx, 1); + const shown = fills - hidden; + emit({ hidden, shown }); + """ + ) + assert report["hidden"] == 0 + assert report["shown"] == 6 + + +def test_every_node_overlay_keeps_a_bounded_self_rescheduling_flow_clock() -> None: + source = EVERY_ASSET.read_text(encoding="utf-8") + overlay = source[source.index("function drawOverlay("):source.index("/* Lit-path decorations", source.index("function drawOverlay("))] + assert overlay.count("state.labelFrame = raf(runOverlayFrame);") == 2 + assert "stamp - state.overlayPaintAt < FLOW_FRAME_MS" in overlay + assert "if (flowAnimating() && !state.destroyed && !state.paused)" in overlay + # A synchronous export must not skip the overlay because of the flow throttle. + export = source[source.index("function exportImageCanvas("):source.index("function destroyGraph()")] + assert "drawOverlay(now, true);" in export + # Pausing must release the overlay clock, not wait for a pending callback to notice. + pause = source[source.index("pause() {", source.index("const api =")):source.index("resume()", source.index("const api ="))] + assert "state.labelFrame" in pause and "caf(state.labelFrame)" in pause + + +def test_every_node_underlay_cache_includes_backing_scale() -> None: + source = EVERY_ASSET.read_text(encoding="utf-8") + regions = source[source.index("function drawRegions("):source.index("/* ── Picking", source.index("function drawRegions("))] + assert "${state.dpr}" in regions.split("if (key === state.underlayKey) return;", 1)[0] + lifecycle = source[source.index("const observer ="):source.index("initWebgl();", source.index("const observer ="))] + assert "observer.observe(element)" in lifecycle + assert "window.addEventListener('resize', resize)" in lifecycle + destroy = source[source.index("function destroyGraph()"):source.index("const api =", source.index("function destroyGraph()"))] + assert "window.removeEventListener('resize', resize)" in destroy + + +def test_authored_galaxy_candidate_keeps_the_physics_snapshot_source_active() -> None: + source = PRIMARY_LEDGER.read_text(encoding="utf-8") + assert "graph.setPreset(galaxyQuality && preset === 'every' ? 'galaxy' : preset);" in source + assert "onPhysicsFrame: snapshot =>" in source + + def test_v1_graph_asset_is_only_a_compatibility_adapter() -> None: """New renderer code stays on the v2 dashboard surface, not the legacy server.""" adapter = LEGACY_ADAPTER.read_text(encoding="utf-8") @@ -381,7 +471,7 @@ def test_graph_engine_deep_link_reaches_the_next_engine_after_a_lazy_load() -> N report = _run_routing("loads") assert report["appended"] == [ - "/v2-assets/engraphis-graph.js?v=20260906-galaxy-boundaries-1" + "/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-1" ] # It waits rather than rendering something wrong in the meantime. assert report["beforeSettle"] == {"engine": 0, "classic": 0} @@ -396,7 +486,7 @@ def test_classic_route_reaches_the_canonical_engine_without_a_query_flag() -> No report = _run_routing("classic") assert report["appended"] == [ - "/v2-assets/engraphis-graph.js?v=20260906-galaxy-boundaries-1" + "/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-1" ] assert report["beforeSettle"] == {"engine": 0, "classic": 0} assert report["engine"] == 1 @@ -410,7 +500,7 @@ def test_show_all_lazily_loads_its_renderer_after_the_main_engine_is_ready() -> report = _run_routing("all-loaded") assert report["appended"] == [ - "/v2-assets/engraphis-graph-every.js?v=20260925-evidence-mass-1" + "/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-1" ] assert report["beforeSettle"] == {"engine": 0, "classic": 0} assert report["engine"] == 1 @@ -861,8 +951,8 @@ def test_gravity_slider_response_has_exact_endpoints_and_scales_every_physics_la }; const boost = 1 + 0.25 * smoothstep(value / 48) + 0.25 * smoothstep((value - 48) / 52); - const highEndGain = 1 + 0.5 * smoothstep((value - 200) / 200 * 1.5); - return base * boost * 4 * highEndGain * 1.875; + const highEndGain = 1 + 0.65 * smoothstep((value - 200) / 200 * 1.5); + return base * boost * 4 * highEndGain * 2.4375; }; const fullRange = Array.from({ length: 401 }, (_, setting) => setting); const centralCap = (gravity, explicit) => { @@ -937,27 +1027,27 @@ def test_gravity_slider_response_has_exact_endpoints_and_scales_every_physics_la }); """ ) - assert report["endpoints"][:2] == [225, 810] - assert report["endpoints"][2] == pytest.approx(2571.9230769230767) - assert report["endpoints"][3] == pytest.approx(13427.307692307693) + assert report["endpoints"][:2] == pytest.approx([292.5, 1053]) + assert report["endpoints"][2] == pytest.approx(3343.5) + assert report["endpoints"][3] == pytest.approx(19201.05) assert report["split"]["blackHole"] == pytest.approx( - [292.5, 1053, 3343.5, 17455.5] + [380.25, 1368.9, 4346.55, 24961.365] ) assert report["split"]["local"] == pytest.approx( - [146.25, 526.5, 1671.75, 8727.75] + [190.125, 684.45, 2173.275, 12480.6825] ) assert report["split"]["local"] == [ value * 0.5 for value in report["split"]["blackHole"] ] - assert report["clamps"] == pytest.approx([0, 13427.307692307693, 0, 0]) + assert report["clamps"] == pytest.approx([0, 19201.05, 0, 0]) assert report["layoutCompactness"] == pytest.approx([1.75, 1.5616, 0.965, 0.18]) assert all( right < left for left, right in zip(report["layoutCompactness"], report["layoutCompactness"][1:]) ) - assert report["caps"] == pytest.approx([12.1875, 43.875, 1]) - assert report["compatibilityCaps"] == pytest.approx([12.1875, 43.875]) - assert report["localCaps"] == pytest.approx([6.09375, 21.9375]) + assert report["caps"] == pytest.approx([15.84375, 57.0375, 1]) + assert report["compatibilityCaps"] == pytest.approx([15.84375, 57.0375]) + assert report["localCaps"] == pytest.approx([7.921875, 28.51875]) assert report["response"][0] == 0 assert all( right > left @@ -971,7 +1061,7 @@ def test_gravity_slider_response_has_exact_endpoints_and_scales_every_physics_la source = ASSET.read_text(encoding="utf-8") assert "const GALAXY_FAR_FIELD_ENVELOPE_SCALE = 2;" in source assert "const GALAXY_GRAVITY_MAXIMUM = 400;" in source - assert "const GALAXY_GRAVITY_MAX_STRENGTH_GAIN = 1.5;" in source + assert "const GALAXY_GRAVITY_MAX_STRENGTH_GAIN = 1.65;" in source assert "const GALAXY_GRAVITY_RESPONSE_RATE_MULTIPLIER = 1.5;" in source @@ -1171,7 +1261,7 @@ def test_default_orbital_speed_preserves_cached_star_relative_direction() -> Non assert math.copysign(1, report["repairedTangent"]) == report["cachedDirection"] assert abs(report["repairedTangent"]) > 1e-5 assert report["repairedRadius"] == pytest.approx(report["initialRadius"]) - assert report["stellarSpeedGain"] == pytest.approx(math.sqrt(5265 / 750)) + assert report["stellarSpeedGain"] == pytest.approx(math.sqrt(6844.5 / 750)) assert report["starAfter"] == pytest.approx(report["starBefore"]) @@ -1448,7 +1538,11 @@ def test_orbital_speed_scales_live_carrier_and_kinematic_phase_rates() -> None: assert report["naturalKinematic"]["systemTravel"] > 0 assert report["naturalKinematic"]["localTravel"] > 0 assert report["kinematicSystemRatio"] > 1.8 - assert report["kinematicLocalRatio"] > 1.25 + assert report["kinematicLocalRatio"] > 1.20 + # Local motion must track the system orbit rather than diverge from it: a kinematic local + # clock that ignores the system ratio would ping-pong satellites while carriers turn. This + # keeps the response monotone without pinning a brittle exact product. + assert report["kinematicLocalRatio"] < report["kinematicSystemRatio"] assert report["naturalCarrier"] > 0 assert report["carrierRatio"] == pytest.approx(2.5, rel=0.02) @@ -2077,7 +2171,7 @@ def test_black_hole_field_is_twice_local_gravity_and_uses_only_anchor_mass() -> }); """ ) - assert report["constants"] == [292.5, 146.25] + assert report["constants"] == [380.25, 190.125] assert report["accelerationRatio"] == pytest.approx(2, rel=1e-12) assert report["masses"] == [8, 101, 109] @@ -2419,43 +2513,53 @@ def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes() - viewport: { x: 450, y: 300, zoom: 1 }, }); let current = snapshot(180); + let snapshotReads = 0; const engine = { - getPhysicsSnapshot: () => current, + getPhysicsSnapshot: () => { snapshotReads += 1; return current; }, graphToScreen: (x, y) => ({ x: x + 450, y: y + 300 }), }; new Function('window', source)(window); const overlay = window.EngraphisSpacetime.create(container, engine); overlay.setEnabled(true); - frames.shift()(40); // samples the 160 fastest bodies - frames.shift()(80); // paints their trails - const small = { ...calls, canvasCount: container.children.length }; + overlay.setSnapshot(current); + frames.shift()(40); // immediate enable paint samples the 160 fastest bodies + const afterEnable = calls.linearGradients; + frames.shift()(72); // unchanged 16ms rAF is throttled without repainting + const afterThrottled = calls.linearGradients; + frames.shift()(108); // next 36ms physics-rate frame paints their trails + const small = { ...calls, canvasCount: container.children.length, afterEnable, afterThrottled }; reduceMotion = true; - frames.shift()(96); // local wells stay visible; trails do not repaint under reduced motion + frames.shift()(142); // local wells stay visible; trails do not repaint under reduced motion const reduced = { ...calls, queued: frames.length }; current = snapshot(601); reduceMotion = false; - frames.shift()(120); + overlay.setSnapshot(current); + frames.shift()(176); const dense = { ...calls }; - current = { ...snapshot(180), paused: true }; - frames.shift()(160); // final static paint, then no idle orbit overlay rAF - const paused = { queued: frames.length, ellipses: calls.ellipses }; + listeners.engraphisgraphphysicschange({ detail: { paused: true } }); + frames.shift()(210); // final static paint, then no idle orbit overlay rAF + const paused = { queued: frames.length, ellipses: calls.ellipses, snapshotReads }; overlay.destroy(); - emit({ small, reduced, dense, paused, childrenAfterDestroy: container.children.length, + emit({ small, reduced, dense, paused, snapshotReads, childrenAfterDestroy: container.children.length, listenerDetached: !listeners.engraphisgraphphysicschange, visibilityDetached: !documentListeners.visibilitychange }); """ ) assert report["small"]["canvasCount"] == 1 assert report["small"]["arcs"] > 0 and report["small"]["lines"] > 0 - # Both sampled frames paint the 24 highest-mass local stars, with two guide rings each. + # The 72ms frame is throttled; only the 40ms and 108ms paints occur. assert report["small"]["ellipses"] == 24 * 2 * 2 # Reduced motion removes velocity blur, not the static local solar-system guide rings. assert report["reduced"]["ellipses"] == report["small"]["ellipses"] + 24 * 2 # One capped canvas pass renders at most the 160 selected velocity trails; a >600-node # graph clears them rather than paying a linear trail cost in the next paint. - assert 0 < report["small"]["linearGradients"] <= 160 + assert report["small"]["afterEnable"] == 0 + assert report["small"]["afterThrottled"] == 0 + assert report["small"]["linearGradients"] == 160 assert report["dense"]["linearGradients"] == report["small"]["linearGradients"] assert report["paused"]["queued"] == 0 + assert report["paused"]["ellipses"] == report["dense"]["ellipses"] + 24 * 2 + assert report["snapshotReads"] == 1 assert report["listenerDetached"] is True assert report["visibilityDetached"] is True @@ -2643,7 +2747,7 @@ def test_gravity_zero_leaves_the_galactic_field_weak_and_stellar_floor_intact() "blackHole": 0, "compatibilityLocal": 0, "stellar": 0, - "defaultStellar": pytest.approx(5265.0), + "defaultStellar": pytest.approx(6844.5), } before, after = report["before"], report["after"] assert math.hypot(before["relative"]["vx"], before["relative"]["vy"]) > 1 @@ -2993,7 +3097,7 @@ def test_legacy_system_halo_and_anchor_integrator_preserve_free_system_com() -> assert report["pinned"][1]["ax"] == pytest.approx(report["expectedPinned"], rel=1e-12) assert report["pinned"][1]["ay"] == pytest.approx(0, abs=1e-12) assert report["seedLaw"][0] == pytest.approx(report["seedLaw"][1], rel=1e-12) - assert max(report["capped"]) == pytest.approx(363.65625) + assert max(report["capped"]) == pytest.approx(520.0284375) assert report["cappedMomentum"] == pytest.approx(0, abs=1e-9) assert report["finite"] is True @@ -7835,6 +7939,8 @@ def test_reduced_motion_has_exact_dual_scale_orbit_parity_and_star_surface_safet const planet = nodes.find(node => node.id === `${id}-planet`); return [id, Math.atan2(planet.y - star.y, planet.x - star.x)]; })); + const localTravel = new Map(systemIds.map(id => [id, 0])); + let localPrevious = new Map(localBefore); const seededMomentum = ['vx', 'vy'].map(axis => nodes.reduce((sum, node) => sum + node.gravity_mass * node[axis], 0)); let clearance = Infinity, maximumSpeed = 0, envelope = 0; @@ -7847,6 +7953,9 @@ def test_reduced_motion_has_exact_dual_scale_orbit_parity_and_star_surface_safet const planet = nodes.find(node => node.id === `${id}-planet`); clearance = Math.min(clearance, Math.hypot(planet.x - star.x, planet.y - star.y) - star.radius - planet.radius - options.systemAnchorExclusionPadding); + const angle = Math.atan2(planet.y - star.y, planet.x - star.x); + localTravel.set(id, localTravel.get(id) + Math.abs(delta(angle, localPrevious.get(id)))); + localPrevious.set(id, angle); }); } return { @@ -7854,11 +7963,7 @@ def test_reduced_motion_has_exact_dual_scale_orbit_parity_and_star_surface_safet const center = centers().get(id); return delta(Math.atan2(center.y, center.x), globalBefore.get(id)); }), - local: systemIds.map(id => { - const star = nodes.find(node => node.id === `${id}-star`); - const planet = nodes.find(node => node.id === `${id}-planet`); - return delta(Math.atan2(planet.y - star.y, planet.x - star.x), localBefore.get(id)); - }), + local: systemIds.map(id => localTravel.get(id)), seededMomentum, clearance, maximumSpeed, envelope, bounded: nodes.slice(1).every(node => Math.hypot(node.x, node.y) + node.radius <= envelope + 1e-8), @@ -8553,7 +8658,7 @@ def test_galaxy_is_default_and_consumes_the_complete_scene_contract() -> None: """ ) assert report["mode"] == "galaxy" - assert report["settings"] == {"repel": 100, "link": 8, "gravity": 120} + assert report["settings"] == {"repel": 100, "link": 8, "gravity": 72} assert report["sizeBy"] == "mass" assert report["forces"] == { "charge": True, @@ -8574,9 +8679,9 @@ def radius(mass: float) -> float: assert report["d3Budget"] == [0, 0, 0] assert report["diagnostics"]["timestep"] == pytest.approx(0.032) assert report["diagnostics"]["velocityDecay"] == pytest.approx(0.0004) - assert report["diagnostics"]["gravitySetting"] == 120 - assert report["diagnostics"]["blackHoleGravity"] == pytest.approx(14.121) - assert report["diagnostics"]["localGravity"] == pytest.approx(146.25) + assert report["diagnostics"]["gravitySetting"] == 72 + assert report["diagnostics"]["blackHoleGravity"] == pytest.approx(7.469234, abs=1e-5) + assert report["diagnostics"]["localGravity"] == pytest.approx(190.125) assert report["diagnostics"]["linkSetting"] == 8 assert report["diagnostics"]["relationOrbitScale"] == pytest.approx(0.25) assert report["diagnostics"]["orbitalSeparationSetting"] == 100 @@ -9008,7 +9113,11 @@ def test_explorer_exports_its_visible_data_and_reports_bridge_metrics() -> None: api.setBridges(true); api.setRepoFilter('engraphis'); const filtered = api.exportData(); - api.focus('a'); + const visibleFocus = api.focus('a'); + api.clearFocus(); + const hiddenFocus = api.focus('c'); + const afterHiddenFocus = api.state(); + const afterHiddenExport = api.exportData(); api.clearFocus(); api.setRepoFilter(''); api.setAsOf(250); @@ -9017,12 +9126,18 @@ def test_explorer_exports_its_visible_data_and_reports_bridge_metrics() -> None: api.setGhosts(true); const withGhosts = api.exportData(); emit({ - bridges: reports[reports.length - 1].bridges, + bridges: reports[reports.length - 1].bridges, visibleFocus, hiddenFocus, + afterHiddenFocus, afterHiddenExport, filtered, state: api.state(), withoutGhosts, withGhosts, }); """ ) assert report["bridges"] == 2 + assert report["visibleFocus"] is True + assert report["hiddenFocus"] is False + assert report["afterHiddenFocus"]["focusId"] is None + assert report["afterHiddenFocus"]["highlight"] is None + assert [node["id"] for node in report["afterHiddenExport"]["nodes"]] == ["a", "b"] assert [node["id"] for node in report["filtered"]["nodes"]] == ["a", "b"] assert [(link["source"], link["target"]) for link in report["filtered"]["links"]] == [ ("a", "b") @@ -10450,10 +10565,10 @@ def test_primary_graph_dependencies_are_lazy_retryable_and_csp_clean() -> None: assert asset not in markup assert 'id="graph-repel" type="range" min="0" max="400" value="100"' in markup assert 'id="graph-link" type="range" min="4" max="80" value="8"' in markup - assert 'id="graph-gravity" type="range" min="0" max="400" value="120"' in markup + assert 'id="graph-gravity" type="range" min="0" max="400" value="72"' in markup assert "{ id: 'graph-repel', key: 'repel', fallback: 100 }" in source assert "{ id: 'graph-link', key: 'link', fallback: 8 }" in source - assert "{ id: 'graph-gravity', key: 'gravity', fallback: 120 }" in source + assert "{ id: 'graph-gravity', key: 'gravity', fallback: 72 }" in source loader_start = source.index("function ensureGraphAssets") loader = source[ @@ -10462,10 +10577,10 @@ def test_primary_graph_dependencies_are_lazy_retryable_and_csp_clean() -> None: d3 = loader.index("'/v2-assets/vendor/d3.min.js?v=20260727-final'") force_graph = loader.index("'/v2-assets/vendor/force-graph.min.js?v=20260727-final'") renderer = loader.index( - "'/v2-assets/engraphis-graph.js?v=20260906-galaxy-boundaries-1'" + "'/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-1'" ) assert d3 < force_graph < renderer - assert '/v2-assets/ledger.js?v=20260906-galaxy-boundaries-1' in markup + assert '/v2-assets/ledger.js?v=20260927-unmerged-readiness-1' in markup assert "if (graphAssetsPromise === attempt) releaseGraphAssetsAttempt(attempt)" in loader assert "graphAssetsRetry = Math.min(graphAssetsRetry + 1, 10)" in loader all_loader = source[source.index("function ensureGraphAllAsset()"): @@ -10862,18 +10977,20 @@ def test_spacetime_sliders_reach_d3_forces_in_non_galaxy_mode() -> None: f"setSettings({{{key}: ...}}) raised: {entry['error']}" ) assert entry['reheated'] is True, f"setSettings({{{key}: ...}}) did not reheat" - # These are numeric observations from the stubbed D3 forces, not source-shape checks: - # Galactic gravity is attractive; the multiplier consumes the adapter's full 0..4 range - # (150 raw -> 3.0, no 2.0 plateau), so compact's 0.26 origin-centering strength triples - # while the separate repel control keeps charge at -42. + # These are numeric observations from the stubbed D3 forces, not source-shape checks. + # Non-Galaxy centering is `max(0.24, gravity / 100) * massMultiplier * gravityMultiplier`, + # and the per-link spring scale is `(1 / min(degree, degree)) * local * spring`. This scene + # runs the compact preset, so `gravity` is 26 and the base is 0.26. `setSettings` accepts the + # spacetime multipliers up to 8/8/16, so each slider value below must arrive at the force + # unclamped: the old 4/4/4.4 ceiling plateaued the upper half of all three sliders. + centering_base = max(0.24, 26 / 100) assert report['gravitationalConstant']['chargeStrength'] == pytest.approx(-42) - # Engine value 150 saturates at the 4.0 ceiling (0.26 * 4). - assert report['gravitationalConstant']['xStrength'] == pytest.approx(0.26 * 4) - assert report['gravitationalConstant']['yStrength'] == pytest.approx(0.26 * 4) - # The local multiplier likewise saturates at 4 (unit link strength * 4). - assert report['localGravitationalConstant']['linkStrength'] == pytest.approx(4) - assert report['blackHoleMass']['xStrength'] == pytest.approx(0.26 * 4.4) - assert report['blackHoleMass']['yStrength'] == pytest.approx(0.26 * 4.4) + assert report['gravitationalConstant']['xStrength'] == pytest.approx(centering_base * 8) + assert report['gravitationalConstant']['yStrength'] == pytest.approx(centering_base * 8) + # n0 has degree 1, so the reciprocal base is 1 and only the local multiplier scales it. + assert report['localGravitationalConstant']['linkStrength'] == pytest.approx(8) + assert report['blackHoleMass']['xStrength'] == pytest.approx(centering_base * 16) + assert report['blackHoleMass']['yStrength'] == pytest.approx(centering_base * 16) # damping is a *multiplier* on the size-aware baseline (0.38 small / 0.45 large). At the # upper end of the slider (15) the d3 velocityDecay reaches the 0.85 ceiling. At the lower # end (0) it reaches the 0.05 floor. The D3 stubs expose the normal strength() getter, so @@ -10901,7 +11018,7 @@ def test_black_hole_mass_reaches_centering_forces_in_every_non_galaxy_layout() - """Black-hole mass must modulate the D3 centering strength in every non-Galaxy layout. The normalized engine value arrives in ``applyForces()`` as ``massMultiplier`` - (clamped to the adapter's full 0.125..4.4 interval). Communities and radial consumed it, + (clamped to the adapter's full 0.125..5.04 interval). Communities and radial consumed it, but compact/original (the default overview branch) and constellation ignored it, so dragging the Black hole mass slider changed nothing visible in those modes (PR #185, thread 3902779917). This pins the multiplier on the x/y centering forces with the d3 @@ -10951,13 +11068,13 @@ def test_black_hole_mass_reaches_centering_forces_in_every_non_galaxy_layout() - strong_x, strong_y = entry['strong'] assert weak_x is not None and weak_y is not None, f"{mode}: x/y forces missing" base = 0.98 if mode == 'compact' else 0.18 - # The centering strength must carry the mass multiplier: mass 1 -> 1.0x, - # mass 400 normalizes to engine setting 16; applyForces clamps the - # multiplier at the adapter's 4.4 ceiling, so the response saturates there. + # The centering strength must carry the mass multiplier: mass 1 -> 1.0x and the + # engine value 16 is inside the adapter's uncapped range, so the response is 16x + # with no saturation plateau anywhere in the slider's travel. assert weak_x == pytest.approx(base) assert weak_y == pytest.approx(base) - assert strong_x == pytest.approx(base * 4.4) - assert strong_y == pytest.approx(base * 4.4) + assert strong_x == pytest.approx(base * 16) + assert strong_y == pytest.approx(base * 16) @@ -11667,8 +11784,9 @@ def test_legacy_node_geometry_is_bounded_like_ledger_for_all_styles() -> None: The material painter is shared across four styles, so a geometry regression here affects every theme even when the newer Ledger engine is correct. Keep the two legacy copies in - lockstep and pin the compact radius contract: normalized degree emphasis, a 0.8 minimum, - and a size-slider-relative 1.1 maximum. + lockstep and pin the compact radius contract: normalized degree emphasis, a 0.25 minimum + (a low-evidence entity must stay hit-testable instead of collapsing below a pixel), and a + size-slider-relative 1.1 maximum. """ classic = CLASSIC_DASHBOARD.read_text(encoding="utf-8") static = DASHBOARD.read_text(encoding="utf-8") @@ -11677,7 +11795,7 @@ def test_legacy_node_geometry_is_bounded_like_ledger_for_all_styles() -> None: assert static[static.index("function graphNodeRadius("):static.index("const ETYPE_TOKEN", static.index("function graphNodeRadius("))] == classic[helper_start:helper_end] assert "const maxDegree=Math.max(1,...nodes.map(node=>node.degree||0));" in classic assert "graphNodeRadius(node,window.GSET.size,(node.degree||0)/maxDegree)" in classic - assert "return Math.max(.8,Math.min(size*1.1,radius));" in classic + assert "return Math.max(.25,Math.min(size*1.1,radius));" in classic assert "Math.sqrt(node.val)" not in classic assert "Math.sqrt(node.val)" not in static diff --git a/tests/test_graph_every_asset.py b/tests/test_graph_every_asset.py index 4a69ffd6b..2ace89779 100644 --- a/tests/test_graph_every_asset.py +++ b/tests/test_graph_every_asset.py @@ -347,7 +347,7 @@ def test_renderer_export_is_synchronous_and_composites_every_layer() -> None: renderer = RENDERER.read_text(encoding="utf-8") body = renderer[renderer.index("function exportImageCanvas"):renderer.index("function destroyGraph")] assert "caf(state.labelFrame)" in body # pending overlay frame must not leak stale paint - assert "drawOverlay(now)" in body # overlay painted synchronously + assert "drawOverlay(now, true)" in body # bypass the flow throttle during export assert "context.drawImage(underlay, 0, 0)" in body assert "context.drawImage(canvas, 0, 0)" in body assert "context.drawImage(labels, 0, 0)" in body diff --git a/tests/test_graph_render_scheduling.py b/tests/test_graph_render_scheduling.py new file mode 100644 index 000000000..91df0bb38 --- /dev/null +++ b/tests/test_graph_render_scheduling.py @@ -0,0 +1,107 @@ +"""Execute renderer functions to protect frame ordering and canvas invalidation.""" +from __future__ import annotations + +import json +import shutil +import subprocess +from pathlib import Path + +import pytest + +ROOT = Path(__file__).resolve().parents[1] +NODE = shutil.which("node") +pytestmark = pytest.mark.skipif(NODE is None, reason="node is not installed") +HARNESS = r""" +const fs = require('fs'), vm = require('vm'); +const source = fs.readFileSync('engraphis/dashboard_assets/engraphis-graph-every.js', 'utf8'); +function load(context, names) { + vm.createContext(context); + for (const name of names) { + const start = source.indexOf(' function ' + name + '('); + if (start < 0) throw new Error('missing renderer function: ' + name); + const end = source.indexOf('\n function ', start + 1); + vm.runInContext(source.slice(start, end < 0 ? undefined : end), context); + } +} +""" + + +def run_node(script: str) -> dict: + result = subprocess.run( + [NODE, "-e", HARNESS + script], cwd=ROOT, check=True, + capture_output=True, text=True, timeout=20, + ) + return json.loads(result.stdout) + + +def test_slow_frames_do_not_starve_labels_and_immediate_updates_bypass_throttle(): + result = run_node(r""" +const queue = new Map(); let nextId = 0, paints = 0; +const ctx = { + state: { labelFrame: 0, destroyed: false, paused: false, overlayPaintAt: 0, + width: 800, height: 600, dpr: 1 }, + labelContext: { setTransform() {}, clearRect() {} }, FLOW_FRAME_MS: 34, + raf: fn => { queue.set(++nextId, fn); return nextId; }, caf: id => queue.delete(id), + flowAnimating: () => true, drawRelationFlow() {}, drawFocusRing() {}, + drawDeclutteredLabels: () => { paints++; }, drawHotEdgeDecorations() {}, drawHoverCardLayer() {}, +}; +load(ctx, ['drawOverlay', 'runOverlayFrame', 'scheduleLabels']); +// Match the main draw loop's order: register its next frame, then request labels. +function mainFrame() { ctx.raf(mainFrame); ctx.scheduleLabels(); } +ctx.raf(mainFrame); +for (let tick = 1; tick <= 20; tick++) { + for (const [id, callback] of [...queue]) { + if (!queue.delete(id)) continue; + callback(tick * 50); + } +} +const slowPaints = paints, queued = queue.size; +ctx.scheduleLabels(true); +const immediateId = ctx.state.labelFrame, callback = queue.get(immediateId); +queue.delete(immediateId); callback(1001); +console.log(JSON.stringify({ slowPaints, queued, immediatePaints: paints - slowPaints })); +""") + assert result["slowPaints"] >= 10 + assert result["queued"] <= 2 + assert result["immediatePaints"] == 1 + + +def test_same_size_resize_repaints_the_cleared_region_canvas(): + result = run_node(r""" +let painted = false, paintCalls = 0; +const backing = () => ({ set width(_) { painted = false; }, set height(_) { painted = false; } }); +const ctx = { + state: { ready: true, camera: { x: 0, y: 0, scale: 1 }, width: 800, height: 600, + dpr: 1, styleName: 'galaxy', palette: 'ocean', colorBy: 'community', underlayKey: '', + communityRegions: [{ x: 0, y: 0, r: 30, tint: [1, 0, 0], count: 3 }] }, + underlay: backing(), canvas: backing(), labels: backing(), + underlayContext: { setTransform() {}, clearRect() { painted = false; }, + createRadialGradient() { return { addColorStop() {} }; }, beginPath() {}, arc() {}, + fill() { painted = true; paintCalls++; }, stroke() {} }, + element: { getBoundingClientRect: () => ({ width: 800, height: 600 }) }, + window: { devicePixelRatio: 1 }, zoomRatio: () => 1, screen: () => [400, 300], + clamp: (value, min, max) => Math.max(min, Math.min(max, value)), + schedule() {}, scheduleLabels() {}, +}; +load(ctx, ['drawRegions', 'resize']); +ctx.drawRegions(); const before = painted; +ctx.resize(); const cleared = !painted; +ctx.drawRegions(); +console.log(JSON.stringify({ before, cleared, repainted: painted, paintCalls })); +""") + assert result == {"before": True, "cleared": True, "repainted": True, "paintCalls": 2} + + +def test_authored_cached_orbit_radius_survives_satellite_motion(): + result = run_node(r""" +const window = {}; +new Function('window', fs.readFileSync('engraphis/dashboard_assets/engraphis-graph.js', 'utf8'))(window); +const nodes = [{ id: 'star', x: 0, y: 0 }, ...[31, 32, 33].map((x, i) => ({ + id: 'p' + i, system_anchor_id: 'star', orbit_tier: 1, + orbit_radius: 30, __galaxyOrbitBaseRadius: 30, x, y: 0, +}))]; +const lanes = window.EngraphisGraph._internals.prepareGalaxyOrbitLaneTopology(nodes); +console.log(JSON.stringify({ lanes: lanes.map(({ radius, members, dynamicRadius }) => + ({ radius, members, dynamicRadius })) })); +""") + assert result["lanes"] == [{"radius": 30, "members": 3, "dynamicRadius": False}] diff --git a/tests/test_jev_backend.py b/tests/test_jev_backend.py new file mode 100644 index 000000000..3dd98b1b9 --- /dev/null +++ b/tests/test_jev_backend.py @@ -0,0 +1,130 @@ +"""The experimental adapter is offline-safe and never trusts fallback decisions.""" +from __future__ import annotations + +import subprocess +import sys +from types import SimpleNamespace + +import pytest + +from engraphis.backends.jev_decision import MAX_STATE_CHARS, JevDecisionBackend, get_decision_backend +from engraphis.core.interfaces import MemoryRecord, MemoryType, Scope + + +class FakeClient: + is_configured = True + allow_fallback = False + + def __init__(self, *, fallback=False, confidence=0.9, probability=0.9, verdict="reinforces"): + self.calls = [] + self.batch = SimpleNamespace( + is_fallback=fallback, + get_choice=lambda _: SimpleNamespace(selected=verdict, confidence=confidence), + get_noul=lambda _: SimpleNamespace(probability=probability, confidence=confidence), + ) + + def evaluate(self, state, questions, *, model): + self.calls.append((state, [question.to_dict() for question in questions], model)) + return self.batch + + +def memory(): + return MemoryRecord( + id="mem_1", scope=Scope.WORKSPACE, workspace_id="ws_1", mtype=MemoryType.SEMANTIC, + title="Database", content="We use Postgres for primary user data storage.", + ) + + +def backend(client, **kwargs): + return JevDecisionBackend(client=client, model="test-model-1.0", **kwargs) + + +def test_import_never_discovers_optional_sdk_or_sibling_checkout(): + script = """ +import importlib.abc, sys +class DenySdk(importlib.abc.MetaPathFinder): + def find_spec(self, fullname, *args): + if fullname == 'jev_decision': + raise AssertionError('optional SDK import attempted') +sys.meta_path.insert(0, DenySdk()) +before = list(sys.path) +from engraphis.backends.jev_decision import JevDecisionBackend +assert sys.path == before +assert not JevDecisionBackend().is_available +assert JevDecisionBackend().verify_grounded_support('database?', '') == (False, 0.0) +""" + subprocess.run([sys.executable, "-c", script], check=True, capture_output=True, text=True) + + +def test_factory_requires_an_explicit_client_and_model(monkeypatch): + monkeypatch.setenv("ENGRAPHIS_DECISION_BACKEND", "jev") + assert get_decision_backend() is None + assert get_decision_backend(client=FakeClient()) is None + assert get_decision_backend(client=FakeClient(), model="jev-latest") is None + assert get_decision_backend(client=FakeClient(), model="jev-latest ") is None + assert get_decision_backend(client=FakeClient(), model="JEV-LATEST") is None + assert get_decision_backend("none", client=FakeClient(), model="test-model-1.0") is None + result = get_decision_backend(client=FakeClient(), model="test-model-1.0") + assert result is not None and result.identity == "engraphis.backend.jev.v1" + + +def test_offline_and_unapproved_requests_never_call_client(): + client = FakeClient() + for adapter, approved in ((backend(client), False), (backend(client, offline_mode=True), True)): + assert adapter.verify_grounded_support("database?", "Postgres", allow_remote=approved) == (False, 0.0) + assert adapter.classify_contradiction("Use SQLite", memory(), allow_remote=approved) == ("orthogonal", 0.0) + assert client.calls == [] + + +def test_explicitly_authorized_valid_response_is_advisory(): + client = FakeClient() + adapter = backend(client) + assert adapter.verify_grounded_support("database?", "Postgres", allow_remote=True) == (True, 0.9) + assert adapter.classify_contradiction("Use Postgres", memory(), allow_remote=True) == ("reinforces", 0.9) + assert all(call[2] == "test-model-1.0" for call in client.calls) + assert client.calls[1][1][0]["options"] == ["contradicts_and_supersedes", "reinforces", "orthogonal"] + + +@pytest.mark.parametrize("field,value", [ + ("confidence", float("nan")), ("confidence", float("inf")), ("confidence", True), + ("confidence", -0.1), ("confidence", 1.1), ("confidence", 0.5), + ("probability", float("nan")), ("probability", float("inf")), ("probability", True), + ("probability", -0.1), ("probability", 1.1), ("probability", 0.5), +]) +def test_invalid_or_uncertain_support_never_certifies_evidence(field, value): + adapter = backend(FakeClient(**{field: value})) + assert adapter.verify_grounded_support("database?", "Postgres", allow_remote=True) == (False, 0.0) + if field == "confidence": + assert adapter.classify_contradiction("Use SQLite", memory(), allow_remote=True) == ("orthogonal", 0.0) + + +def test_fallbacks_and_unknown_verdicts_cannot_authorize_a_decision(): + for client in (FakeClient(fallback=True), FakeClient(verdict="delete_everything")): + assert backend(client).classify_contradiction("Use SQLite", memory(), allow_remote=True) == ("orthogonal", 0.0) + assert backend(FakeClient(fallback=True)).verify_grounded_support( + "database?", "Bananas are yellow.", allow_remote=True, + ) == (False, 0.0) + client = FakeClient() + client.allow_fallback = True + assert not backend(client).is_available + + +def test_missing_malformed_and_failed_responses_defer_without_logging_payloads(caplog): + for batch in (None, SimpleNamespace(is_fallback=False)): + client = FakeClient() + client.batch = batch + assert backend(client).verify_grounded_support("database?", "Postgres", allow_remote=True) == (False, 0.0) + class FailingClient(FakeClient): + def evaluate(self, *args, **kwargs): + raise RuntimeError("private request content") + adapter = backend(FailingClient()) + assert adapter.verify_grounded_support("database?", "Postgres", allow_remote=True) == (False, 0.0) + assert adapter.classify_contradiction("Use SQLite", memory(), allow_remote=True) == ("orthogonal", 0.0) + assert "private request content" not in caplog.text + + +@pytest.mark.parametrize("query,evidence", [("", "Postgres"), ("database?", " "), ("database?", "x" * MAX_STATE_CHARS)]) +def test_empty_and_oversized_inputs_do_not_leave_the_process(query, evidence): + client = FakeClient() + assert backend(client).verify_grounded_support(query, evidence, allow_remote=True) == (False, 0.0) + assert client.calls == [] diff --git a/tests/test_ledger_sliders_and_physics.py b/tests/test_ledger_sliders_and_physics.py index bc9ac59ca..c71e56641 100644 --- a/tests/test_ledger_sliders_and_physics.py +++ b/tests/test_ledger_sliders_and_physics.py @@ -97,20 +97,20 @@ {"id": "graph-flow-speed", "min": 0, "max": 100, "fallback": 45, "has_output": True}, {"id": "graph-repel", "min": 0, "max": 400, "fallback": 100, "has_output": True}, {"id": "graph-link", "min": 4, "max": 80, "fallback": 8, "has_output": True}, - {"id": "graph-gravity", "min": 0, "max": 400, "fallback": 120, "has_output": True}, + {"id": "graph-gravity", "min": 0, "max": 400, "fallback": 72, "has_output": True}, {"id": "graph-node-size", "min": 1, "max": 12, "fallback": 3, "has_output": True}, {"id": "graph-text-size", "min": 6, "max": 24, "fallback": 12, "has_output": True}, {"id": "graph-line-width", "min": 0.1, "max": 2.0, "fallback": 0.72, "has_output": True}, {"id": "graph-label-density", "min": 1, "max": 100, "fallback": 24, "has_output": True}, {"id": "graph-tune-min-degree", "min": 0, "max": 12, "fallback": 1, "has_output": True}, {"id": "graph-depth", "min": 1, "max": 4, "fallback": 2, "has_output": True}, - {"id": "graph-gravitational-constant", "min": 0, "max": 200, "fallback": 100, "has_output": True}, - {"id": "graph-black-hole-mass", "min": 20, "max": 500, "fallback": 160, "has_output": True}, - {"id": "graph-local-gravitational-constant", "min": 0, "max": 200, "fallback": 100, "has_output": True}, + {"id": "graph-gravitational-constant", "min": 0, "max": 200, "fallback": 60, "has_output": True}, + {"id": "graph-black-hole-mass", "min": 20, "max": 500, "fallback": 96, "has_output": True}, + {"id": "graph-local-gravitational-constant", "min": 0, "max": 200, "fallback": 60, "has_output": True}, {"id": "graph-space-damping", "min": 0, "max": 15, "fallback": 1.0, "has_output": True}, {"id": "graph-spring-stiffness", "min": 0, "max": 100, "fallback": 32, "has_output": True}, {"id": "graph-min-degree", "min": 0, "max": 12, "fallback": 1, "has_output": True}, - {"id": "editor-memory-importance", "min": 0, "max": 1, "fallback": 0.5, "has_output": False}, + {"id": "editor-memory-importance", "min": 0, "max": 1, "fallback": 0.5, "has_output": True}, ] From 28ec6febf37514bdf274aafc04d669620dd1e047 Mon Sep 17 00:00:00 2001 From: Coding-Dev-Tools Date: Sun, 27 Sep 2026 02:47:49 -0400 Subject: [PATCH 3/6] fix(graph): refresh standalone snapshots and bind visible evidence --- docs/images/context-efficiency.svg | 2 +- .../dashboard_assets/engraphis-spacetime.js | 25 ++++++++++++++----- tests/test_documentation_contracts.py | 8 +++++- tests/test_graph_engine_asset.py | 13 ++++++---- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/docs/images/context-efficiency.svg b/docs/images/context-efficiency.svg index 410f8a3ed..47c315fef 100644 --- a/docs/images/context-efficiency.svg +++ b/docs/images/context-efficiency.svg @@ -105,7 +105,7 @@ mcp transport not measured SOURCE ARTIFACT -7a5dafabf4ef +dc901f5d0fc9 SHA-256 prefix Artifact-driven local measurements diff --git a/engraphis/dashboard_assets/engraphis-spacetime.js b/engraphis/dashboard_assets/engraphis-spacetime.js index 51da31b19..33a6062aa 100644 --- a/engraphis/dashboard_assets/engraphis-spacetime.js +++ b/engraphis/dashboard_assets/engraphis-spacetime.js @@ -55,6 +55,7 @@ let lastSample = 0; let lastPaint = 0; let latest = null; + let pushedSnapshots = false; let destroyed = false; const physicalToScreen = point => { @@ -223,11 +224,14 @@ const draw = (stamp, force = false) => { if (destroyed) return; frame = 0; - const paused = Boolean(latest && latest.paused); if (!force && lastPaint && stamp - lastPaint < SAMPLE_INTERVAL) { - if (active && !document.hidden && !paused) frame = requestAnimationFrame(draw); + if (active && !document.hidden && !(latest && latest.paused)) frame = requestAnimationFrame(draw); return; } + // Standalone getter consumers still need a current snapshot. Ledger pushes + // each physics frame, so it avoids a redundant read during cosmetic paints. + if (!pushedSnapshots) refreshSnapshot(); + const paused = Boolean(latest && latest.paused); lastPaint = stamp; const bounds = resize(); ctx.clearRect(0, 0, bounds.width, bounds.height); @@ -252,7 +256,10 @@ }; const onFrame = event => { const detail = event && event.detail; - if (detail && (Array.isArray(detail.nodes) || detail.center)) latest = detail; + if (detail && (Array.isArray(detail.nodes) || detail.center)) { + latest = detail; + pushedSnapshots = true; + } else if (detail && typeof detail.paused === 'boolean') { latest = { ...(latest || {}), paused: detail.paused }; wake(true); @@ -261,7 +268,7 @@ if (active) wake(); }; const refreshSnapshot = () => { - if (!active || !engine || typeof engine.getPhysicsSnapshot !== 'function') return; + if (!active || pushedSnapshots || !engine || typeof engine.getPhysicsSnapshot !== 'function') return; latest = engine.getPhysicsSnapshot() || latest; }; container.addEventListener('engraphisgraphphysicschange', onFrame); @@ -270,14 +277,20 @@ const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(resize); if (observer) observer.observe(container); return { - setEngine(next) { engine = next || engine; }, + setEngine(next) { + if (next && next !== engine) { engine = next; pushedSnapshots = false; latest = null; } + }, setEnabled(on) { active = on === true; if (!active) trails.clear(); else { refreshSnapshot(); wake(true); } return; }, - setSnapshot(snapshot) { latest = snapshot || null; if (active) wake(); }, + setSnapshot(snapshot) { + latest = snapshot || null; + pushedSnapshots = snapshot != null; + if (active) wake(); + }, destroy() { destroyed = true; cancelAnimationFrame(frame); diff --git a/tests/test_documentation_contracts.py b/tests/test_documentation_contracts.py index 65d1d970a..f4234b8ef 100644 --- a/tests/test_documentation_contracts.py +++ b/tests/test_documentation_contracts.py @@ -1,6 +1,7 @@ from __future__ import annotations import ast +import hashlib import json import re import xml.etree.ElementTree as ET @@ -106,13 +107,18 @@ def test_core_backend_imports_stay_behind_outer_composition_root() -> None: def test_benchmark_text_alternatives_match_registered_fixture_boundary() -> None: """The current image and its alt text expose only current registered boundaries.""" - registry = json.loads(_read("docs/benchmark-evidence/offline-fixtures-v75.json")) + registry_path = ROOT / "docs/benchmark-evidence/offline-fixtures-v75.json" + registry_bytes = registry_path.read_bytes() + registry = json.loads(registry_bytes) measurements = {run["id"]: run["result"] for run in registry["runs"]} payload = measurements["offline-performance"] readme = _read("README.md") svg_text = _read("docs/images/context-efficiency.svg") svg_root = ET.fromstring(svg_text) namespace = {"svg": "http://www.w3.org/2000/svg"} + visible_labels = {"".join(node.itertext()).strip() + for node in svg_root.findall(".//svg:text", namespace)} + assert hashlib.sha256(registry_bytes).hexdigest()[:12] in visible_labels description_node = svg_root.find("svg:desc", namespace) assert description_node is not None description = " ".join("".join(description_node.itertext()).lower().split()) diff --git a/tests/test_graph_engine_asset.py b/tests/test_graph_engine_asset.py index d4cb4f9ad..aade1c413 100644 --- a/tests/test_graph_engine_asset.py +++ b/tests/test_graph_engine_asset.py @@ -2464,10 +2464,12 @@ def test_slingshot_capture_preserves_authored_star_and_high_speed_release_escape @requires_node -def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes() -> None: +@pytest.mark.parametrize("push_snapshots", [False, True]) +def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes(push_snapshots) -> None: """The visual layer is one bounded canvas, not a hidden second graph implementation.""" report = _run_spacetime_node( """ + const pushSnapshots = PUSH_SNAPSHOTS; const calls = { arcs: 0, ellipses: 0, lines: 0, gradients: 0, linearGradients: 0 }; const gradient = { addColorStop() {} }; const ctx = { @@ -2521,7 +2523,7 @@ def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes() - new Function('window', source)(window); const overlay = window.EngraphisSpacetime.create(container, engine); overlay.setEnabled(true); - overlay.setSnapshot(current); + if (pushSnapshots) overlay.setSnapshot(current); frames.shift()(40); // immediate enable paint samples the 160 fastest bodies const afterEnable = calls.linearGradients; frames.shift()(72); // unchanged 16ms rAF is throttled without repainting @@ -2533,9 +2535,10 @@ def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes() - const reduced = { ...calls, queued: frames.length }; current = snapshot(601); reduceMotion = false; - overlay.setSnapshot(current); + if (pushSnapshots) overlay.setSnapshot(current); frames.shift()(176); const dense = { ...calls }; + current = { ...current, paused: true }; listeners.engraphisgraphphysicschange({ detail: { paused: true } }); frames.shift()(210); // final static paint, then no idle orbit overlay rAF const paused = { queued: frames.length, ellipses: calls.ellipses, snapshotReads }; @@ -2543,7 +2546,7 @@ def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes() - emit({ small, reduced, dense, paused, snapshotReads, childrenAfterDestroy: container.children.length, listenerDetached: !listeners.engraphisgraphphysicschange, visibilityDetached: !documentListeners.visibilitychange }); - """ + """.replace("PUSH_SNAPSHOTS", "true" if push_snapshots else "false") ) assert report["small"]["canvasCount"] == 1 assert report["small"]["arcs"] > 0 and report["small"]["lines"] > 0 @@ -2559,7 +2562,7 @@ def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes() - assert report["dense"]["linearGradients"] == report["small"]["linearGradients"] assert report["paused"]["queued"] == 0 assert report["paused"]["ellipses"] == report["dense"]["ellipses"] + 24 * 2 - assert report["snapshotReads"] == 1 + assert report["snapshotReads"] == (1 if push_snapshots else 6) assert report["listenerDetached"] is True assert report["visibilityDetached"] is True From cd424cfd99ce8177cb1094a8bbf65fc1f72b0b96 Mon Sep 17 00:00:00 2001 From: Coding-Dev-Tools Date: Sun, 27 Sep 2026 05:54:19 -0400 Subject: [PATCH 4/6] fix: finish MCP startup and graph overlay lifecycle hardening --- BENCHMARKS.md | 10 +- README.md | 5 +- docs/MCP_TOOLS.md | 14 + .../offline-fixtures-v79.json | 691 ++++++++++++++++++ .../offline-fixtures-v79.json.sha256 | 1 + docs/images/context-efficiency.svg | 4 +- .../images/evidence-backed-agent-examples.svg | 4 +- engraphis/classic_assets/dashboard.js | 4 +- engraphis/classic_assets/index.html | 2 +- .../dashboard_assets/engraphis-graph-every.js | 2 +- .../dashboard_assets/engraphis-spacetime.js | 21 +- engraphis/dashboard_assets/index.html | 2 +- engraphis/dashboard_assets/ledger.js | 6 +- engraphis/mcp_http_cli.py | 15 +- engraphis/mcp_server.py | 41 ++ engraphis/static/dashboard.js | 4 +- engraphis/static/index.html | 2 +- tests/e2e/graph-engine.spec.js | 2 +- tests/e2e/ledger.spec.js | 4 +- tests/test_benchmark_evidence.py | 4 +- tests/test_documentation_contracts.py | 2 +- tests/test_graph_engine_asset.py | 109 ++- tests/test_mcp_server.py | 187 ++++- 23 files changed, 1086 insertions(+), 50 deletions(-) create mode 100644 docs/benchmark-evidence/offline-fixtures-v79.json create mode 100644 docs/benchmark-evidence/offline-fixtures-v79.json.sha256 diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 55ed7e6ce..a60c20017 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -94,14 +94,14 @@ interpretation and do not count as additional benchmark-quality gains. ### Public numeric evidence registry Every exact public aggregate retained below comes from the checked-in, public-safe -[`offline-fixtures-v77.json`](docs/benchmark-evidence/offline-fixtures-v77.json) artifact. Its +[`offline-fixtures-v79.json`](docs/benchmark-evidence/offline-fixtures-v79.json) artifact. Its SHA-256 is -`d8fd03aed3a738e6581a5e4ee5859a2328cf907e41c3b2a3532542691a1b37d4`, also recorded in the +`484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c`, also recorded in the adjacent `.sha256` file. The artifact contains no raw questions, answers, prompts, customer data, or per-record content fingerprints. The fixture-suite digest is -`313c9567d88a1ff60664c9f2f74cb3a3073b14bb5ffd43990946eb5e94d39e4a`. The artifact defines +`3f671b833301609801fd4dec5373838ad8cbb6c853e48ff959bf2b00d4d15264`. The artifact defines the digest algorithm and records the SHA-256 of every suite and dataset file. Each evidence ID also binds its exact command through `sha256(UTF-8 exact command)`: @@ -123,10 +123,10 @@ Historical LoCoMo, graph, handoff, consolidation, and security figures remain pr source artifacts but are omitted from the current chart until each has a matching immutable, public-safe artifact. The chart labels coding outcomes, external datasets, and operational capacity as pending evaluation tracks rather than implying scores. Regenerate it with -`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v77.json --output docs/images/context-efficiency.svg` after selecting the report to publish. +`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v79.json --output docs/images/context-efficiency.svg` after selecting the report to publish. The companion examples are also generated from that artifact with -`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v77.json --output docs/images/evidence-backed-agent-examples.svg`. +`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v79.json --output docs/images/evidence-backed-agent-examples.svg`. The historical-to-executable mapping is in [`docs/BENCHMARK_CHANGE_COVERAGE.md`](docs/BENCHMARK_CHANGE_COVERAGE.md). diff --git a/README.md b/README.md index 30e9a5420..de4fcc7f8 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,9 @@ neither is an end-to-end question-answer score. Coding outcomes, external datase operational capacity remain separate pending evaluation tracks until their artifacts are selected. These values are evidence IDs `offline-chunking` and `offline-performance` in -[`offline-fixtures-v77.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v77.json), +[`offline-fixtures-v79.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v79.json), SHA-256 -`d8fd03aed3a738e6581a5e4ee5859a2328cf907e41c3b2a3532542691a1b37d4`. +`484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c`. [`BENCHMARKS.md`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/BENCHMARKS.md#public-numeric-evidence-registry) records the matching suite digest, exact commands, and per-command config digests. The offline fixture registry intentionally excludes external, model-dependent, consolidation, productivity, @@ -798,6 +798,7 @@ file. It never searches the working directory for `.env`, and explicit process v | `ENGRAPHIS_HTTP_INDEX_ROOT` | First `ENGRAPHIS_INDEX_ROOTS` entry, or current directory | Single root for dashboard and REST `POST /api/code/index`; submitted paths resolve beneath it. An explicit root (or fallback entry) must be absolute; an explicit HTTP root is included in the engine-approved set. MCP and CLI indexing continue to use `ENGRAPHIS_INDEX_ROOTS`. | | `ENGRAPHIS_DB_KEY` | Not set | Encrypt the database at rest (SQLCipher). Or use `ENGRAPHIS_DB_KEY_FILE` | | `ENGRAPHIS_EMBED_MODEL` | `sentence-transformers/all-MiniLM-L6-v2` | sentence-transformers model | +| `ENGRAPHIS_MCP_PRELOAD_EMBEDDER` | `auto` | Standalone MCP launchers import optional semantic dependencies on the launcher thread on Windows before serving requests. Set `0` to disable or `1` to enable on any platform; model loading and backend fallback policy remain unchanged. | | `ENGRAPHIS_EMBED_REVISION` | Not set | Optional immutable lowercase 40-hex Hugging Face commit for the embedding model. Loaded Hub commits or local artifact manifests identify persistent vector spaces; unresolved mutable identities keep vector recall fail-closed. | | `ENGRAPHIS_RERANK_MODEL` | Not set | Optional sentence-transformers cross-encoder reranker | | `ENGRAPHIS_RERANK_REVISION` | Not set | Optional immutable lowercase 40-hex Hugging Face commit for the reranker | diff --git a/docs/MCP_TOOLS.md b/docs/MCP_TOOLS.md index f917d9136..79eb4a0bb 100644 --- a/docs/MCP_TOOLS.md +++ b/docs/MCP_TOOLS.md @@ -49,6 +49,20 @@ Hosts which already own chat history should use `POST /api/adaptive-context`, no The gateway works in general MCP clients without native deferred tool search; clients that explicitly support OpenAI's deferred `tool_search` can apply it as an optional host optimization. +### Standalone semantic startup + +On Windows, the standalone stdio and HTTP launchers import optional semantic dependencies +on the launcher thread before serving MCP requests. This prevents the first semantic tool +call from stalling during a native dependency import in a worker thread. Models are still +loaded lazily, and exact-backend validation retains its normal failure policy. Dependency +import diagnostics go to stderr so stdout stays reserved for the stdio protocol. + +`ENGRAPHIS_MCP_PRELOAD_EMBEDDER=auto` enables this startup step on Windows when a semantic +embedding or reranking model is configured. Configured sources are validated before +optional imports, including the immutable revision policy. Set `0` to disable it or `1` to +enable it on other platforms. An unavailable optional dependency is left to the configured +backend fallback policy. + ## Classic direct-tool inventory The following inventory applies to the Classic compatibility server. Start with diff --git a/docs/benchmark-evidence/offline-fixtures-v79.json b/docs/benchmark-evidence/offline-fixtures-v79.json new file mode 100644 index 000000000..1d68f1160 --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v79.json @@ -0,0 +1,691 @@ +{ + "environment": { + "embedding": "deterministic", + "numpy": "2.4.5", + "platform": "win32", + "python": "3.12.10", + "vector_backend": "numpy" + }, + "generated_on": "2026-09-27", + "privacy": { + "contains_answers": false, + "contains_customer_data": false, + "contains_per_record_fingerprints": false, + "contains_prompts": false, + "contains_raw_questions": false + }, + "runs": [ + { + "boundary": "Deterministic offline retrieval fixture; normalized-character token estimator; not external QA or provider billing.", + "command": "python -m eval.chunking_eval --dataset eval/datasets/longdoc.jsonl --k 5", + "config_digest": "c1c8196aa7e1568ef3844a9fb2d76b87f342c39108e32d6ad144b885a76143b8", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-chunking", + "result": { + "chunked": { + "max_stored_tokens": 59, + "mean_context_tokens": 214.3, + "mean_evidence_tokens": 42.4, + "memories": 24, + "recall_at_k": 1.0 + }, + "context_reduction_pct": 71.1, + "documents": 6, + "k": 5, + "questions": 18, + "token_counter": "engraphis.chars4.v1", + "whole": { + "max_stored_tokens": 213, + "mean_context_tokens": 740.3, + "mean_evidence_tokens": 162.2, + "memories": 6, + "recall_at_k": 1.0 + } + } + }, + { + "boundary": "Deterministic offline CodeMem fixture; serialized JSON-shape payload proxies, not MCP transport responses, provider billing, or latency claims.", + "command": "python -m eval.performance --dataset eval/datasets/codemem.jsonl --k 5 --iterations 10 --json", + "config_digest": "bbe4aca81e58d4830e50a8fc7729a1d15b71d97a6299bccd79432b7f119677d7", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-performance", + "result": { + "answer_token_recall": 1.0, + "compact_serialized_payload_tokens": 11138, + "dataset_cases": 14, + "full_serialized_payload_tokens": 24590, + "hit_at_k": 1.0, + "k": 5, + "max_context_tokens": 108, + "mean_context_tokens": 85.38, + "memories": 44, + "packed_quality": { + "answer_token_recall": 1.0, + "hit_at_k": 1.0, + "recall_at_k": 1.0, + "sample_count": 26 + }, + "payload_boundary": { + "kind": "serialized_json_shape_proxy", + "mcp_envelope_serialized": false, + "token_counter": "engraphis.regex.v1", + "transport_measured": false + }, + "quality_scope": { + "packed": "packed_quality fields score only chunks admitted to reader context", + "retrieved": "legacy quality fields score all candidate chunks returned before context packing" + }, + "questions": 26, + "recall_at_k": 1.0, + "saved_serialized_payload_tokens": 13452, + "serialized_payload_savings_ratio": 0.5471, + "timed_recalls": 260, + "token_budget": 1500, + "token_counter": "engraphis.regex.v1" + } + }, + { + "boundary": "Deterministic offline support/abstention fixture; not a frontier-model answer-quality score.", + "command": "python -m eval.grounded", + "config_digest": "590442e51e3642c10489165759919dc86ffac62c182937330c153e7f8d5fc26f", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-grounded", + "result": { + "abstained": 6, + "answerable": 5, + "decision_accuracy": 1.0, + "grounded": 5, + "off_topic": 6, + "quarantine_hits": 1, + "quarantined": 1 + } + } + ], + "schema": "engraphis-public-offline-fixtures/v1", + "suite": { + "digest": "3f671b833301609801fd4dec5373838ad8cbb6c853e48ff959bf2b00d4d15264", + "digest_method": "sha256(canonical compact JSON mapping each sorted path to its file SHA-256)", + "files": { + "engraphis/__init__.py": "a2c5d147ea025e6249d99f4ae2752576c8b1df382393ec450a3ef1b03fcf315a", + "engraphis/ai_context.py": "4dfd5d39eb95d05c591d1981e9e855eced73232f53efd9fe9966e0e08957d030", + "engraphis/app.py": "44d68ad8c0ff46baed01978c9b04e40b8be5031609d5a69e205b7f05da3777fb", + "engraphis/backends/__init__.py": "a9f22b9278362904166614081f1df78469d453601b298ce4e8afdba8a3722b25", + "engraphis/backends/codegraph.py": "83e723a91068d23694092fbe00157fcb2597061d453eb36f955bf55bc5b4d35e", + "engraphis/backends/embedder_api.py": "56a6bceea4f757325dcea987b0339e41d3875634b1ae5103f0537a358cf5878b", + "engraphis/backends/embedder_deterministic.py": "ec8b23de7e7e8273416125f5876ca96f55e4ae7881841bae55783ab0ba9130ad", + "engraphis/backends/embedder_st.py": "e1c20fd980e07060387e3f9fa37fe02a916959fc8abce4e6067a62699c726de1", + "engraphis/backends/encrypted_db.py": "25f6c1480d296a88f317213700a8b3c81e2732399bfac464b0d893465b25e846", + "engraphis/backends/extractor.py": "f2e3455ab7f14caee1d5b5c4ef071e498e90118f1b0ddcb8510c969583b0fc57", + "engraphis/backends/graph_extractor.py": "88561efa0d3fabc447a0a005b10e36261379d46218cf62d905e6928cd2fda676", + "engraphis/backends/jev_decision.py": "bdbe491d34805b0c8c52e4b8519d5f899110040187a6801df181ff5e44be965f", + "engraphis/backends/model_source.py": "8c3c7681f95214a2bbabd8de222e5ee11f42fe13402d27365654ae75fb363d4e", + "engraphis/backends/postgres_schema.py": "8468578c3add701d30d5eaa36d768ded2375d116e55f1836e09f6107a07a267e", + "engraphis/backends/query_planner.py": "bbdd77afc9b5523421b85b2ae63c8da7f5a7b777265450e0d21708a83e7bb23c", + "engraphis/backends/reranker.py": "747761d6cbfa421388974bcfd98d844f92391d80f4bf6a4feca00b0c7a6908ca", + "engraphis/backends/resources.py": "47cc867c3aecc8bd95fa284bc5bb04715f3339c19a0a11512973ef6171c95944", + "engraphis/backends/retention.py": "381d9371e3951d762f8b55eb54711de5697642acb39de99a714f246c059ecbd0", + "engraphis/backends/sync_folder.py": "e4f70a92a17f6a365910670df041e6e3ca421d44ada2827917cd66b4dc067bfa", + "engraphis/backends/sync_relay.py": "b8b9ad265453aba17ba7c27a355e12a793469b3e44cb217943c6fad9382a3006", + "engraphis/backends/vector_numpy.py": "c598831bea547824cfe08844816fa79857d3617cb0631238f95dad955a424f72", + "engraphis/backends/vector_sqlitevec.py": "6148e14ceaacc19239b64c642a3fba0e98797c78cec356210157afadf475a08b", + "engraphis/build_info.py": "624c22471e56d4c4047160808c4245488292af611564d1a63ca437605bbb414f", + "engraphis/classic_assets/__init__.py": "a7c1d52b285e3faa670ce231814b5758754aa0fbd05e1428e74c20c3ec51a4f1", + "engraphis/cloud_authz.py": "e80500579cb3a1d5fbf30814dc94e3e3967e50b311e8ed2fa56afcc13f7eb565", + "engraphis/cloud_features.py": "90e876f8993d99f01760cd01ae9fb63140e3f65036706e8fb0c8224560416330", + "engraphis/cloud_session.py": "7c83d7b85665c05aa4da2597a6b4ad2b951f1f8f4af20105d9d1750b9b123c2d", + "engraphis/commercial.py": "184f312066a9e682e51a0abeff042f1c0e8eed2d47470157b23930b5a17633aa", + "engraphis/config.py": "a46f3a335fad343e7df32942be91c04094fbafaf14b8b11f5fc433ef74743226", + "engraphis/core/__init__.py": "dd5143729c3939237f04636f437032b1f2d3a5f7d82c91bbc2a5a283c3f0ebaa", + "engraphis/core/adaptive_context.py": "cc5ce48109bb0d5230a5b2b8424b829c853feec5b5d5b82596413f2279b0c9f9", + "engraphis/core/browsing.py": "cfae752d52ef51b17c4ffbe44dde62d5b0e1ed0ca34ec0e1788f3991d94bf05f", + "engraphis/core/codegraph_export.py": "4641074258d7b23498f92dd45053a0fbb111863eaad2001c08e5e3c2dc2fd54f", + "engraphis/core/conflicts.py": "28530be25a4af0bffd8f609b965b33ca7f93199a70887789b2148fda8a61a486", + "engraphis/core/consolidate.py": "f66eedfe08319a64b761261ccf1c99b163eba564d6d4060534bf8c575aecf232", + "engraphis/core/context.py": "8cc15746e4de88bce7d34db8c11dfaa545f17305788e2167a286179171717fb9", + "engraphis/core/diagnostics.py": "5ba449bdf5087d8ccb5808379596e695c8f405da497372e99f2bac509f96e8e4", + "engraphis/core/documents.py": "84385db39ba44e06b58b4b26dbf954228ff4abed7230f28a7280166fa6457861", + "engraphis/core/engine.py": "f1ab3940f7a185f1e12b1a0b49857db8873c83313e8741822a3c80d818e59599", + "engraphis/core/evidence.py": "97912b52a3d22de909218f83c09c92572ed695d7b3c2117e5330271c6d84a7bd", + "engraphis/core/fsutil.py": "6db770fa8bd3e1a57dfa70eb8e8bc46d48c2dc53ead1b0b43eeecf085ef58cfc", + "engraphis/core/graph_layers.py": "64d74ab01c77119f6343ba6f1d6a84f9653f1a5d34d47ce7966f3ac31b29d2ea", + "engraphis/core/graph_policy.py": "ec5b373d01adb2de87df31d9f543130018e9a73faaaed239a184f14a32646615", + "engraphis/core/graph_scene.py": "d10465f5b87ed2af9382a8feb2cfbb6fba3a6157b13e1af50980bca52e857a83", + "engraphis/core/graphrank.py": "1279a58396104d3f906bfd5ec75b32efedfefe52201467bf19d80be3517017a5", + "engraphis/core/grounded.py": "ac40057dc37aa907e09c68e6b8cd54a989525fb310097df2970858708870ba3e", + "engraphis/core/ids.py": "e47eeadfaf560bc7638e1879fc491fa82d981cd42b9e4b05ef87033b2d7dfa60", + "engraphis/core/interfaces.py": "be11f909f0f59aca774b4cf7aeacf831123a5dc3fc1b889c47435b959e981266", + "engraphis/core/mutations.py": "dbb46a97686994e1652b2698e50c3309ff428d7258d6e8e53cbad7bb55b459aa", + "engraphis/core/obsidian.py": "991267c153cb7c4c40f7fe8f50aa71688892e250aaaf383b22c9e5910dc263b7", + "engraphis/core/poisoning.py": "5bc67169ee8032f3777f2d3969dcf71821437bd473ce4f917c4b41a50e845fb6", + "engraphis/core/query_planner.py": "249062d67392ab7c203cc71e9040e99bee91bf570604e90949149a93cb652120", + "engraphis/core/read_snapshots.py": "be08e63a88bd38ed91d61b28657a65201c38994856db2798b209a73151dd202a", + "engraphis/core/recall.py": "34959532fac07089ca8654fad0a1e945b11791918b3890420380ac7a9b78ccac", + "engraphis/core/resolve.py": "f01a6f55e44320ab04b97e516342f20155668863b2fc4765305e066d87586524", + "engraphis/core/retention_policy.py": "864c03bdb6e743cd0002c706de471e920f1fa1f1a9918ab343ef4c2042b47429", + "engraphis/core/retrieval_policy.py": "d169eb442115bd06c1e1da776fa6c1849e0795e658edd732a8d6821326b46b03", + "engraphis/core/savings.py": "cfbcfc7e476f4e28028555cd519696e23099f6210cf0b733225832aeaa0bc7dc", + "engraphis/core/schema.py": "ac273d3f0383995be815bbd866f2a36ea1398f30833aed57b8d4459afc87096b", + "engraphis/core/scoring.py": "f5b6ac291edf0968b3de83cb1951a97d5bfd8a8d079199cb2ef95bba0884c89a", + "engraphis/core/secrets.py": "a4835ba06e2616156528df6365ca1aba6cba0c97cdf834a709d2797a371099d2", + "engraphis/core/store.py": "2bcfda14325c6a846a45d87a7511a445d197618570eca0cf7f0c833596c2260c", + "engraphis/core/sync.py": "69f75b50fdb1ec9352f92460c89efeec8d72ca642bd10beb29474a8c62b4f58a", + "engraphis/core/textutil.py": "acd65031729fa5d91d09527b8eb52518b83cfce77a55e6b7ae2d94686e35c1a6", + "engraphis/core/user_model.py": "3147ec8ee7cfd855783f639874b63f331cdc822bd8bd9298cfb326dd18666026", + "engraphis/core/vector_repair.py": "a8c1812de4e3ed288eda3e54a505e136d6ebd3ec296788bcbb8804b11e13cfc8", + "engraphis/core/vector_search.py": "75800052e573e9af01c6fd098eaf8647c3c45cd7eb2601dae05d42359e19b234", + "engraphis/dashboard_app.py": "9305c9c72c43027b2b79c0ce559d398fc232929968d6ea03c37065e3227c8d51", + "engraphis/dashboard_assets/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "engraphis/device_connect.py": "c8cd0a22e9fd2d92a65bd74047cc3a8b7159bfc9a297cb639c1c7f1699f8802e", + "engraphis/document_import.py": "94fa0ca340ad0ebd060b143f46657798a81c440a11b82aa46fefa83fb65295dc", + "engraphis/engines/__init__.py": "111232af583889195c5f5a60298e32484348608e81d2bdd822fd3ecd2a33c1e4", + "engraphis/engines/embedder.py": "998b65dd566966bb6581fd9f09cdf46c58a3923ef5df3073ccdaa541153a3581", + "engraphis/engines/ingest.py": "1a5d4b52c13e533864329f9fff11c0f6ebc299ff7093a9d9275e5c9626a39ce2", + "engraphis/engines/intelligence.py": "b561589b98deb98271f104dfec6276aeba13c4815e627259be5f8769f2e7ad82", + "engraphis/engines/recall.py": "f979580d065599c07acbc3add59f71e52d9a186a2104b0e257daa7959ea88d26", + "engraphis/engines/reweight.py": "91ec5815f5d356a7068c36133d24405334450f361f902f99275bed3ccebffd49", + "engraphis/engines/thoughts.py": "4adb9c8a9bcfe736cb42fff9b5ce24631da6ec473d178e83f1c176fde3b8b814", + "engraphis/factory.py": "3b8765834cb04b052b89a9964b357b4ffb9c41a0f769bf1261768033653f708d", + "engraphis/graphdata.py": "195e583a4d4aefe97d8cff635cabea1ff9cd3f11c54ad392d951765d89910863", + "engraphis/hosted_client.py": "9c67aff6881c29704498f4ca99f836009be4ea58a248d74459c536dac7341a88", + "engraphis/http_security.py": "596981e96741fd47064d03db409605bbb435f062c0c6ef69b040aacdd8763a20", + "engraphis/inspector/__init__.py": "720cac28b8a6019d0a0c53809d5905b7d6eb9d4ecbac767505904c6ec3c39071", + "engraphis/inspector/app.py": "8aefe8a935397dde3c6466e691a7e6a7203ebe42e07aa00c332b733465e59e04", + "engraphis/licensing.py": "7e73c28b0e1c3536e2080a129af614f838d2cae3ec3a48a3d8ed7e5153c9e935", + "engraphis/llm/__init__.py": "f3096d2ddd652b99e6fc0b4c5a8786d9bbaba41b259df0b44ce93b57bde3a8b1", + "engraphis/llm/client.py": "304330bf7a45b0eef8f5beabee419b971d205c55f686de86c26d91fea69d172e", + "engraphis/local_auth.py": "b0ad3a1926d417a2aaa6c44a7dbf6e51f575290ddfa27875b78a03db176623c3", + "engraphis/logging_setup.py": "f7d2edc756458a852e0401453e9c71b785aba08fa7859aacbdc23fb30dc7982a", + "engraphis/managed_processing.py": "6d33cdfd10800d9552fcfae3c2b071d2b39fe10fb69d1a8e5d9ed6026882197e", + "engraphis/mcp_classic_cli.py": "778122b121a1c654b8f85810fad05d9c8d7799cf13903d7dc274938b51008da0", + "engraphis/mcp_cli.py": "ed2d997438d727180842dc5fb3f6776f5a5d97974f690ee7229264be1ff61957", + "engraphis/mcp_http_cli.py": "5a04bcaae4531a6ea116a827bb65c5df3bd6d07ea336f65ff3ed45034972c396", + "engraphis/mcp_server.py": "79a5e563770f149e08e53e8d05aa4e7b31a43f954abc87d4c79e19d29d2b8208", + "engraphis/models.py": "6e76e97db0aca3805c6f582ea78cc6e1c0ccd2665e16fd8ab81eb91b94141b51", + "engraphis/netutil.py": "2e0f8a9095f6f31dcb5b96d323f023b9214369d59e1c488125a7d443a55972ff", + "engraphis/observability.py": "a3a6945bf33a0d8e216da56ca7efec0031b82dc64a66cff36f0b2161f5db4981", + "engraphis/obsidian_import.py": "c7cf4b5e993afce3ffb45f01637804719cb9e7cd2461ffe629c055be5975721f", + "engraphis/private_state.py": "7485570efcaee8a1dc00b64ebfdc23178517235ae17609aa78db8bdda7e45fe3", + "engraphis/read_only_api.py": "7d9d306919b30cf712fa59219059bb87be8328ec515487e55d76dcc1f0b80c38", + "engraphis/redirector.py": "5ba964b81f09008c9369180cb49d247519000763274aabc5e046215b12fa641d", + "engraphis/routes/__init__.py": "f0d59080212cfa0d9b50877bca28e5832d1ae917899500d52c68b1c8821231af", + "engraphis/routes/memory.py": "9ca066e1762eeeaafd9790ed57d730efcaceb57742dbe0c830ad8764500ff9e5", + "engraphis/routes/v2_api.py": "45c02594fe4c357975e739beaaa666a3742b461fd873e60ef2415b62ee90bb85", + "engraphis/routes/vault.py": "1a7eee7c1a7c7aa11091042756aa2739a3eb963647020f40584a6a38da1988af", + "engraphis/service.py": "d2eab019c50c090024a15a38af5e56324a18eaa475b6dacef4dde9f5a031cb94", + "engraphis/service_context.py": "3de9289f49a977cdc206285ac42a9953a104eb1d1b1bc8ea77febd75c7cd82ab", + "engraphis/static/__init__.py": "1fff4c4e2554e7f5fcf3eace269feba09827524917193a4dd65df95bae64ad1f", + "engraphis/stores/__init__.py": "48ee4326c8f28eecf46f558b7aea21adb779226a7038299017ab90196d5d84be", + "engraphis/stores/graph.py": "ebf603b54cf8450e7c9a7319bd05db2f39fcda8491f5969d6af3e8da61571bc2", + "engraphis/stores/ledger.py": "df5cbb30d977decc0a9c3a2365c9c115cfbb5fe951bae48446436661c80e5d30", + "engraphis/stores/vaults.py": "2c986129b9d1e7aab33e18a3b9a278eb5ad2236895587f69b5816a5d96796bc3", + "engraphis/stores/vectors.py": "45a1baca381fc647548cc89424eb36d5853f7562c275b191b35b99339a190b7d", + "engraphis/update_check.py": "ffbf5ef682fb15177915073ebc0b5eab4dee9092bbf0f58d36a8a54c6605ccf4", + "eval/__init__.py": "639f0c6d9d6aac8ff6dc605a34a0a301058905cc53bff4eaed5912247f0e7c56", + "eval/ablation.py": "16f159dee75d2f96cc42f230c2403fa19ea0bda7091c4823660da553463a194a", + "eval/adversarial_memory_security.py": "35dd8d981bcbad50e9815465be420b05b62a9dea28a78eb6cc1e09ec51c320c4", + "eval/agent_benchmarks.py": "8e88943e45a1b2083b366cbb0329326ef918b119a2366ed395c404c2b7ef98b0", + "eval/benchmark.py": "b71832affdf87d23bc1db7b522a669a7888571b3989b03a235c70f5da9952bd6", + "eval/benchmark_analysis.py": "1200791425d029695fee0b7da1f188a8962f337aa31eb4217d50e4503641d2b3", + "eval/benchmark_campaign.py": "033dbebfb47df5fcd3a6588b29ea4ab5fd44d4387ae45334379278ab30f3e57f", + "eval/campaign_adapters.py": "3e1db1183358331143d2d560b3a122d5e6b817f02c597ac7b4cc2ed8b7ce04e8", + "eval/campaign_api.py": "323be4e1d9520e8047ab54c9cbb158013785402b06ee4e93e55227971c54bf95", + "eval/campaign_candidate.py": "88541840d16c3b7368586ed0ee3566054214b1f594826b746b28d0e407cb812a", + "eval/campaign_continuation.py": "7f77a20ac8f85cd96729bba0cf45872c98a3421af005bd735434b7b416dd7e1f", + "eval/campaign_ledger.py": "ba3079ba541cb1f70929a76f147d2bc5e8b264103a1cd7faad97685e0ecc7790", + "eval/campaign_oracle.py": "9ea5479786efd9caa2b59e612e891a93dd34b500a2b36aa20bcf749fb6d4d48a", + "eval/campaign_storage.py": "ebcd1f4aeceaa5ff9304494c64dd31fe31637ceb107d8cc39fa292e3b14055d4", + "eval/capacity_matrix.py": "8c25bd97754c1d7a8468a687042a3c87cc9c0299cf01c19b80dacfec2be4e552", + "eval/chunking_eval.py": "a16544353940c0a8c40cea3b9932d3399b35ea5994b809b78f5dbe4a952c467f", + "eval/code_agent_ab.py": "d98bba6b77700ff6bf86ff0d2cf518a67e5a2676ef51bbddabbb2ff26e1f3aaa", + "eval/code_arm.py": "d211166fce1b8a4173848e1617873b7e84aadeff43746effe7483c54bbdb6f1d", + "eval/codex_oauth.py": "f235fca482de4201d1850bbfb583765ac5f1a057b4ad7e2d504d036bfc03f391", + "eval/coding_acceptance.py": "4b39cbcb60d7fba503cca597399cf9d04ad9567a43cdb950015ccf552e6a2773", + "eval/coding_corpus.py": "7b5205e8544578fe99d9d9cf6cfc34e40e5d1d049238d502ff7bc6f3c14948f5", + "eval/consolidation_ranking.py": "917b578d4e0bcb929bf1a1a37611acf7716a520c076abf4ade0d8d12a1c455de", + "eval/context_economy.py": "709ac7cc866855f96d7717ab2bea12e8b0d3a140d15fb978a2a929ad085931f2", + "eval/context_efficiency_guardrails.py": "22afd1a6fe17219e74701dc587ec35f569a5bf22bea270944525f51746723f14", + "eval/datasets/codemem.jsonl": "341313023c22850a2e14f02742b571ad1deca824f886a1654a59541304c01f3c", + "eval/datasets/coding_memory_v1/oracles/atlas-green--code_relationships.py": "969aa71235e0ae3cb764b9ee12b789184cedb5fea6fcc0d86e5dcb2c0498fa56", + "eval/datasets/coding_memory_v1/oracles/atlas-green--condition_values.py": "648702646fb62990168e98fba0dc6a27be128876548fa7035a59d71aee9da02d", + "eval/datasets/coding_memory_v1/oracles/atlas-green--corrections.py": "c7132c7fe39b7afbdf11065037369c0f3c38a22e69d8742e8afddfd5785d2e61", + "eval/datasets/coding_memory_v1/oracles/atlas-green--long_documents.py": "65dffb25944cb612872655f12db16af73f7a095e7abcf6a7cc5d31dc91f083b1", + "eval/datasets/coding_memory_v1/oracles/atlas-green--multilingual.py": "ff49874a691bfc30c082695ee6d3c89b9f2e1e5eecf086026110770d8e1b0452", + "eval/datasets/coding_memory_v1/oracles/atlas-green--paraphrases.py": "dbdcf5d7abf136aa5816df8465bfde842284aef5ef002e955cee05ae69d574ca", + "eval/datasets/coding_memory_v1/oracles/atlas-green--poisoning.py": "58b8ca4a37f55c4d112640414dc82620e32e643ab0aa539260884a5ecc50740f", + "eval/datasets/coding_memory_v1/oracles/atlas-green--scope_boundaries.py": "c1e92b10b40004c95abd3dfbada1a38fe0ce56300ecddca8360b51a1e6671458", + "eval/datasets/coding_memory_v1/oracles/atlas-green--temporal_history.py": "a64e4e5a29ce1040cf53e94571491325347f443d72a93f05bcf87c2878665952", + "eval/datasets/coding_memory_v1/oracles/atlas-green--unsupported_questions.py": "c8b415052ea7320e1df3c5475a676d4dd24602c45dbf1868fba6880846e029ee", + "eval/datasets/coding_memory_v1/oracles/atlas-north--code_relationships.py": "bb4305d15a81b4b4ef80b374acb59fee6fc32b213b101dd4b173ac4144d8570d", + "eval/datasets/coding_memory_v1/oracles/atlas-north--condition_values.py": "4bc5b1aff48ef6ad5ece1bd915f6949f72d365bb4815c4d82515b438bc644112", + "eval/datasets/coding_memory_v1/oracles/atlas-north--corrections.py": "7851502a9bc842f840bee1001e42140ee1df08be2730b563b1b197285d14742c", + "eval/datasets/coding_memory_v1/oracles/atlas-north--long_documents.py": "6204123eded20fc0c7aa59b312f8b5bd29aa88a720f7318e32b3c6a17651b57b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--multilingual.py": "5c989b34fdad1e076b61ffb1f7a1371dc635f44a537abc743b765d5f6009004e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--paraphrases.py": "fd189285d0cde9991dea461af9cd18b4203656a69da1298494fccf972ed8a58b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--poisoning.py": "66305d69419736bdbb11a896543933604d898cd5394d94eedda8b92e632a09ac", + "eval/datasets/coding_memory_v1/oracles/atlas-north--scope_boundaries.py": "d9fbbe3924b5178f32f1937485af3b8db242a0e3a08c7bf41a3d2a57f34a8879", + "eval/datasets/coding_memory_v1/oracles/atlas-north--temporal_history.py": "7e7be0d6e558a71d3baad14a8812a6c998ad25e3f52c997a301333e0711f820e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--unsupported_questions.py": "91f574dd678bf244a1fa6f9708e945259bb8ff8e2eb213426be5c3b187be3c3b", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--code_relationships.py": "d0998e13db38d1fae9be6d254431b4fe592f89eb03ee25705f4c70985cd48c89", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--condition_values.py": "f97610aee190dca03b01aa48ffe4aa3f75e099a59fdd867db98f743f4a376729", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--corrections.py": "b7c31f7a9a1f978321ca5445997e0d284deea770c85f6d81a80204e548ad53ea", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--long_documents.py": "20ec2b41cd3b6691164bce096dff16f7bf5be674f922cb637120c0347e60d0b6", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--multilingual.py": "131e7dc978d3f2f7df395b6f1b4a9150051c0ca93c6dc5c386e58d46c8fdc573", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--paraphrases.py": "1e7d9da36e6634ca2d2b11dc97468bd671df133345dcb76859e1dc3cb77dc664", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--poisoning.py": "48460691ac0086c47102eec85387ac03bee9190ac83e3dafc4babc79b71d9bd7", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--scope_boundaries.py": "b96207e9b1fd09f49218102a5b88fde5b9656604df4cfd314e86426e3b6d6075", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--temporal_history.py": "7a196ff9a1db05b0c8f3a83086ae44cdc580dc58e4acc217d1db2575d9711b88", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--unsupported_questions.py": "724564b5b75b9425b6889faae6d5e650bd5c940016c2b96054e5359d9d8b0887", + "eval/datasets/coding_memory_v1/oracles/atlas-west--code_relationships.py": "14295f735bcac4d4ae738eedfbd8fad4593afc914bc835233ec35e2263d43613", + "eval/datasets/coding_memory_v1/oracles/atlas-west--condition_values.py": "8ac70d9ca0c9122567bb9986d2cc5798104966df20e262b8087920e8fb5d82a2", + "eval/datasets/coding_memory_v1/oracles/atlas-west--corrections.py": "89d6a1a7781465c311830b7e769d2a76df41ab5c703ff662b3df1cc4c9a01668", + "eval/datasets/coding_memory_v1/oracles/atlas-west--long_documents.py": "38e67a26f69707089f852657a810ef1fca0395beb5511fff67c30f21ed63df57", + "eval/datasets/coding_memory_v1/oracles/atlas-west--multilingual.py": "bccf6579681d45940542ccb1f936ea1b225f4cf551a3ef31f3f8b1a026856e51", + "eval/datasets/coding_memory_v1/oracles/atlas-west--paraphrases.py": "89c8ce16c682553b27652e176b67a06f3228ae6209fbc8a7264260680f5651a9", + "eval/datasets/coding_memory_v1/oracles/atlas-west--poisoning.py": "fe9beb97d27eacdd87056fa1c9b04c62e2facae9354e765b912de60b35021621", + "eval/datasets/coding_memory_v1/oracles/atlas-west--scope_boundaries.py": "2eb3b1130c54644fcbade52da8f50cad1376a07b51856a962522913cbcbb7649", + "eval/datasets/coding_memory_v1/oracles/atlas-west--temporal_history.py": "116ee20af475da329cb535b0a02bd19ea1e7518b5b780ec12ba396ec896cc116", + "eval/datasets/coding_memory_v1/oracles/atlas-west--unsupported_questions.py": "080969e026215b9fe4ede6d0b4d02e9143e1293bea5d7383681e478426ddf121", + "eval/datasets/coding_memory_v1/oracles/borealis-green--code_relationships.py": "3965671e5e2432c8236c250f7982d4f478d8f1fe1268ffe57c555cf5fbbcd414", + "eval/datasets/coding_memory_v1/oracles/borealis-green--condition_values.py": "92994990327445258984ee6bf1d95f47359ff4b194e1f36e193980a523e6c5e0", + "eval/datasets/coding_memory_v1/oracles/borealis-green--corrections.py": "c5b473f962deacd6d59ea9967626e029888abbdb48f320704bcb6de876ce3f46", + "eval/datasets/coding_memory_v1/oracles/borealis-green--long_documents.py": "54aee2c1031c17b5678db2b0955eda8fafe5990aa9e52f02936584a9b75b9ab1", + "eval/datasets/coding_memory_v1/oracles/borealis-green--multilingual.py": "c458ac5c63e440e3d9486d096278759920d636f73e1901258679251afd86eb60", + "eval/datasets/coding_memory_v1/oracles/borealis-green--paraphrases.py": "250d027660f268cef1caa745cf3155de6e2f4adfaed02ba675eaa83224ffeee8", + "eval/datasets/coding_memory_v1/oracles/borealis-green--poisoning.py": "978f16eb5033c602ec09ed57ba0667edec9ac3e26accc1ce1456bc893ac9e6a7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--scope_boundaries.py": "4b73a2e5dc5ac815c14e08a34acefd2ad426282cfae379ca2fd3060a3784c9b7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--temporal_history.py": "6636d511bbcca51ca85c4eb0ec5ae956b3baaa5f9af89458ceb86329115743bd", + "eval/datasets/coding_memory_v1/oracles/borealis-green--unsupported_questions.py": "5cd4f70627bc60572c720a797bff122ef9bf219f32d265f694affa33b1f9f4fe", + "eval/datasets/coding_memory_v1/oracles/borealis-north--code_relationships.py": "769903aeac3ce360d845ddf1a6e89192737dbb460e1f2e251230b74d40763dd6", + "eval/datasets/coding_memory_v1/oracles/borealis-north--condition_values.py": "f6e69f525fd240a09152989b9d8a529e9abe076e7fc2c98d10bd84f9c6da2b56", + "eval/datasets/coding_memory_v1/oracles/borealis-north--corrections.py": "987ece1c7507a69a973c1e051b27c1d3b104ecda79df48959e49a62da31aa137", + "eval/datasets/coding_memory_v1/oracles/borealis-north--long_documents.py": "011134140cc486a3c089b407adbfbf5b958e1f8c1bffd572c29b8cd5d7f07f7a", + "eval/datasets/coding_memory_v1/oracles/borealis-north--multilingual.py": "1d29536a4a5836f64f56adcd1a965db85bc3371a12ad5bbb5644520c9d9606c8", + "eval/datasets/coding_memory_v1/oracles/borealis-north--paraphrases.py": "09a5fad90c24f75f2f448854c8778aab896c67854c97f884c2d689ead808583e", + "eval/datasets/coding_memory_v1/oracles/borealis-north--poisoning.py": "c1bec2ed9b31103e39db9dbab2be8db401cb0874bb3ce8573a0841a054e28a46", + "eval/datasets/coding_memory_v1/oracles/borealis-north--scope_boundaries.py": "faf51b368d7ba9406442edde29e290c931e67bff2799783dfd27f2226020e15b", + "eval/datasets/coding_memory_v1/oracles/borealis-north--temporal_history.py": "da52f43530149a4a293065674623fa49f83b37cd84b9871044b3bf32762fd8c1", + "eval/datasets/coding_memory_v1/oracles/borealis-north--unsupported_questions.py": "be0abc698692c9fe82f40f76a4694c472882a53843894dddd631ab1ab77aae45", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--code_relationships.py": "9497b7d2373bb9f858e994f7919cff72e7e3c4c4eaa1efda287524b1a182d1f4", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--condition_values.py": "aea13e4b7721019e7bc1f54878bb25b9f27a8a5044fe444e86ba5460deb13e09", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--corrections.py": "bfd446d431afb6c05ad9d8775b90887947b85981037756e05262f3b101d41e7b", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--long_documents.py": "eae829a374c0cd6237fac4ec52fec0d98d7340ec0b307b9b0b0c90c116d4b472", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--multilingual.py": "e821f91999b5f12cff53fdaa956af4e0bb2f929497f95b4e2ceb57a6621e58f7", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--paraphrases.py": "1a99c15898831a1c9aacab951868101d57e59e91ed90a2777015a26dbcc3043c", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--poisoning.py": "411877fc07b053201a63aa4e45cb499344abccb0a562c236d53a672078b1eb63", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--scope_boundaries.py": "b198dfb636910953ba372edf1cd6db382d4e5725bf7f820171be8c63f9fedf7d", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--temporal_history.py": "3de5efd6ef661572191c6aa426fb10caf9f4bed4aa495b6298815aab3acdce22", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--unsupported_questions.py": "baf5dd85e86a97dedb0b395b5c574ea5ffcdad7a46bbbe9787cfdc33d6c7a06c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--code_relationships.py": "48e53b3a561f91fdf4eedb2d63aad65eece8ae80188bb3d5bdcaf184fb0b6945", + "eval/datasets/coding_memory_v1/oracles/borealis-west--condition_values.py": "2dd7a524bd2a2aa2fbf212246880d4e4ecf03f503b70f25179f3ab6bab28a07a", + "eval/datasets/coding_memory_v1/oracles/borealis-west--corrections.py": "7d3080e05544e10243040fe0a969a8c524e4262f8f5c38abdc3d8e06c67fdabd", + "eval/datasets/coding_memory_v1/oracles/borealis-west--long_documents.py": "fc42e935879e7a81f6eef9fe72f8683244501ae10654008a7863d397ee73058c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--multilingual.py": "19181c442ce5f6941485190ecf050e455914dae988f86efa42665cdef0d835a2", + "eval/datasets/coding_memory_v1/oracles/borealis-west--paraphrases.py": "f7a5cb842aae3d2bc8d62ea40325b332a8bd4f013b76bac8bf154fedb3dbcbe1", + "eval/datasets/coding_memory_v1/oracles/borealis-west--poisoning.py": "285a2526a6be4e556a564899e9a376ae1286fef6f0ad22eb9289fba1905a2b68", + "eval/datasets/coding_memory_v1/oracles/borealis-west--scope_boundaries.py": "fb994823743ff5b4853b142c17779778bdb11296958e033e5c6be598833a4cf5", + "eval/datasets/coding_memory_v1/oracles/borealis-west--temporal_history.py": "f30a74c85ad654a7450e20d07baceb3b4fb2a56b454d7b43b854bef3cdb2cee6", + "eval/datasets/coding_memory_v1/oracles/borealis-west--unsupported_questions.py": "01cbbd0b21a745720514aea6a21a98a3cccdbf0c0518bd5508019433b964776b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--code_relationships.py": "8b08e7c65289515a9eee2ae5f4cd60ce94350e9a561225bef0e8f8815ea28f79", + "eval/datasets/coding_memory_v1/oracles/cinder-green--condition_values.py": "92e7d75d38f5dbcc685075e947005a9ae5a410207e7f17aa770b034b8690cbe5", + "eval/datasets/coding_memory_v1/oracles/cinder-green--corrections.py": "424cbf0924a8cbc1a59a6d7bc82b5527e41f52c8ee9f558ea3e398ab4d913919", + "eval/datasets/coding_memory_v1/oracles/cinder-green--long_documents.py": "2a52df9cef3ee66357847322794a382c927b828c6ab1a2819a799ff55d53657b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--multilingual.py": "e47e791dd15b045a6a958ca114b1359ca8537e160274b015214746a2564363c6", + "eval/datasets/coding_memory_v1/oracles/cinder-green--paraphrases.py": "9e92a79ec00231cb381ce58e389dfdb2520a17ecf1e9c2e39e79501449e9ddd0", + "eval/datasets/coding_memory_v1/oracles/cinder-green--poisoning.py": "33213e6f194332969da88f4748c8f26ef93219b6c4bc710a142082f8147ccfcc", + "eval/datasets/coding_memory_v1/oracles/cinder-green--scope_boundaries.py": "8d2489da1fba137981e45e42c843f9cbd17e851c82ddcdc5904b4a86af0d9692", + "eval/datasets/coding_memory_v1/oracles/cinder-green--temporal_history.py": "29403fd08f0de7da3dfcc6c181e1f448a5c5264e95ff3924f3066508d85468b1", + "eval/datasets/coding_memory_v1/oracles/cinder-green--unsupported_questions.py": "ba21014188f9ae849e0bb79babe163194703c4cf01f0600f4c9f71058e7fed56", + "eval/datasets/coding_memory_v1/oracles/cinder-north--code_relationships.py": "46280659557bd08afff185352438bb63dfd308dabf5c7c1862c2f442bd171d48", + "eval/datasets/coding_memory_v1/oracles/cinder-north--condition_values.py": "6c62d673b1b6cb4b5c89ff2af4ecf57c2c9d73074a01ab92b8fde57815cab783", + "eval/datasets/coding_memory_v1/oracles/cinder-north--corrections.py": "8245b196072389517fad6d76ed7709d7e12eb52e08732e4ddcfc40fc1d986879", + "eval/datasets/coding_memory_v1/oracles/cinder-north--long_documents.py": "6790c7b89d80ab909d9e1a31b59bfa5cd199cddabed2e159daf7c5c049ff9a43", + "eval/datasets/coding_memory_v1/oracles/cinder-north--multilingual.py": "9532bbd14506cac0edcc09f474e7c96a402903de947e0e76f5c8aab4bff37646", + "eval/datasets/coding_memory_v1/oracles/cinder-north--paraphrases.py": "cc904350ae7d40e26d91d482ac15d87ec8022d4c82905021dd38003c5fa2d067", + "eval/datasets/coding_memory_v1/oracles/cinder-north--poisoning.py": "e8e451c49c98744b4a484141f86d337db4ec5326264b1500893a20c3451c5ae4", + "eval/datasets/coding_memory_v1/oracles/cinder-north--scope_boundaries.py": "50d42fc48aa70d55b6a3b39c9bf17437726f37e1e5ae9870d415fccad92c7bae", + "eval/datasets/coding_memory_v1/oracles/cinder-north--temporal_history.py": "14b1336fbaed11cad455f588bbe078effc31f5f357f670e1f189ec3d78b172f5", + "eval/datasets/coding_memory_v1/oracles/cinder-north--unsupported_questions.py": "0a2f740700a990d22b4c3051aa3e4260e3df4ce65931d419052f74e05c750a67", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--code_relationships.py": "0e29053f11fe618c01fa90a274688f18ba8a7f3cfea56757a96d5a5bc95b61a8", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--condition_values.py": "ca57ac4e22e9b4739217020d7792ac642326935b8db9305ead2ec5bea2a6e456", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--corrections.py": "9edbfaa58a99776e835c325e50a77df5b4b302b3ddd0932dc2a349a77b4100b5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--long_documents.py": "4b3fbe7380201285ac4b4a1ec4d8238c5663b97af01cbdc8ffff8fdf2a9467c5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--multilingual.py": "b0bba5ecf669f3368ef29373b755dc1296502665584574c771ebf4664debb5ce", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--paraphrases.py": "e146f7aa1ffabf3b313251b59c59e1836c0cd17901d07fc6ef5334eaccf8bf36", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--poisoning.py": "692ee07e750fb08652a1ca6bc6dcbbef77219701585f1336c6037dae5a7c5767", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--scope_boundaries.py": "8ca0b911d38a72e4ecce6871ba3d0c7dbab433b0541cb64b116f7a88d521554c", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--temporal_history.py": "6ba5400c5435af64c80a7366fdf49fea132f1011f9d84f9d0cc5f2f2f30a67ac", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--unsupported_questions.py": "1d3324db0a085be30ce3dff1a2ec3866b8592a5ef6b43f39211a2e3a59fc1cd6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--code_relationships.py": "0149333a3fb0f8d60939bf927921305eae447f7511c74f042ff3c880eadff825", + "eval/datasets/coding_memory_v1/oracles/cinder-west--condition_values.py": "3158243f9f7f0b92aaee4164379159b46143acd11fc3d41a708630c1d33ea22c", + "eval/datasets/coding_memory_v1/oracles/cinder-west--corrections.py": "a9fbb89aa629a23e7a1fddf4fca09da40365bbc7a9a6192d805e498fe17f93ff", + "eval/datasets/coding_memory_v1/oracles/cinder-west--long_documents.py": "3c702c653a8ddff84eb5c24a77567aa63d2069c48ed174bcf29065c0ddb30ec6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--multilingual.py": "b8f5f7e00e6edac3f8e0b7e8bc09ea6c7d661370fa2226eb1795306ce3c634a7", + "eval/datasets/coding_memory_v1/oracles/cinder-west--paraphrases.py": "10361be87e9d9cb98d2ff1bbc18252178d475a5c5f2efb77bc81dea05109df05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--poisoning.py": "889a5a43604f7d1677ee0f28683abfc48a8a597b052f558c1b4d19c5f33444ec", + "eval/datasets/coding_memory_v1/oracles/cinder-west--scope_boundaries.py": "b84e78812baaa92422226c06d78cfe7c1be260e2bfcf9c5bb1ed73f2f3cc136b", + "eval/datasets/coding_memory_v1/oracles/cinder-west--temporal_history.py": "9d99a981fca0c801a0a52e2af24cd4262dad72f4f34cd84894784285d241bd05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--unsupported_questions.py": "43b8f854961d9cca5cb83b53b9e07d22388d0c7db406dc8e4f8cfdaa5f89fffd", + "eval/datasets/coding_memory_v1/oracles/delta-green--code_relationships.py": "97a08f2bf9b1a11f95a062f7df27d69db3e9dbc421837347acfe62111af02885", + "eval/datasets/coding_memory_v1/oracles/delta-green--condition_values.py": "5e53695288b84a526c61b748b170f6d6219f94a942edc0887ea6157535ad8d52", + "eval/datasets/coding_memory_v1/oracles/delta-green--corrections.py": "c6d16232ebe6bdb0b5c94db1ba4f108257b47ee8f8b96cda5f8e17212022b542", + "eval/datasets/coding_memory_v1/oracles/delta-green--long_documents.py": "bedb6f495437beada344ce6cdd92954108aa4c639622fd1cc294d2a1139b26d9", + "eval/datasets/coding_memory_v1/oracles/delta-green--multilingual.py": "dbf84f4e8c016c5e60fdac5fd3ac2faf79fb0534f5c2ac534491acc31d5f3530", + "eval/datasets/coding_memory_v1/oracles/delta-green--paraphrases.py": "ea8f00c86e8fbc2ab10a448f48019146181d0e55438def6f47f41f0ef3181be4", + "eval/datasets/coding_memory_v1/oracles/delta-green--poisoning.py": "4eb4e289e944e7762c39ce85a8fc2582e310de6a86cbc1cc36b44112653140ea", + "eval/datasets/coding_memory_v1/oracles/delta-green--scope_boundaries.py": "2fe9b96deecfb488430abd9657adc6b3ea092b18f32c41c1669d29175ec6e860", + "eval/datasets/coding_memory_v1/oracles/delta-green--temporal_history.py": "531cbb953400584356cb6525bc1a2e559f7ec3867d845c736d8026a046b91e7d", + "eval/datasets/coding_memory_v1/oracles/delta-green--unsupported_questions.py": "edebf25c2168411fdefae1307a71d829224dba3dbc7ea000054416e52123d5a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--code_relationships.py": "9357ad0d5f6a1cc787f980d0d506b07808538179f71ae3e8ce1c3eb655d24e35", + "eval/datasets/coding_memory_v1/oracles/delta-north--condition_values.py": "4199f7409696a260b1531f4ec7cfd15555b4d58d06b0b8a88b1c7621fe7d328b", + "eval/datasets/coding_memory_v1/oracles/delta-north--corrections.py": "b8bd58db7c5ae93d33e6223cc34f0e09d58831361ac013ec08277fe2c102ac17", + "eval/datasets/coding_memory_v1/oracles/delta-north--long_documents.py": "0f08b744446b1c52e8fe86626ab05c171377f17c46e604cb2ea647ed5d0daddd", + "eval/datasets/coding_memory_v1/oracles/delta-north--multilingual.py": "ada9eb404190d05637cea59e3f8ed541aea2c9e0f9be0d166885d6789351f7a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--paraphrases.py": "04ec2e8308f47f46e38c89f4a2fe44deef4a0b20a1c8517395ad00983bf7361c", + "eval/datasets/coding_memory_v1/oracles/delta-north--poisoning.py": "d72ea7b98db47e4de03884e2786206dc3da5cc08e5203c86b1d38a2d48c2fd47", + "eval/datasets/coding_memory_v1/oracles/delta-north--scope_boundaries.py": "cedb3234b22a40a7b889f50cfb5751fbba31e46f541b19feb2c4759c8007bac3", + "eval/datasets/coding_memory_v1/oracles/delta-north--temporal_history.py": "2f7c1bd4ebc051eee411d11251aff2ee5fee602a0800410bc0dbd2e86e99628b", + "eval/datasets/coding_memory_v1/oracles/delta-north--unsupported_questions.py": "f1f0b9858c806956122144c6e769f3baf9f87f07ff92eec98eb58d8019e6fba2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--code_relationships.py": "79579639a60d96365781e853d1319a2bf85d9a2b4d8639410da7e3c1efc364b2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--condition_values.py": "27defbfe7c237f971ae29e8f000f098eae32a11f3afad06f2bf3b27af432d902", + "eval/datasets/coding_memory_v1/oracles/delta-violet--corrections.py": "b3b685a5c33d1086e8ab4258d26c5ec9aa7396b8250a250351f0a6057fcf2075", + "eval/datasets/coding_memory_v1/oracles/delta-violet--long_documents.py": "4a5ce75372c8762bcd7986f8ceef454800c3636124ffd9de3a8315d210ae85f1", + "eval/datasets/coding_memory_v1/oracles/delta-violet--multilingual.py": "7ef19f25e97a24522b79a9d7e7f3d2d9e395a1fc2c60564e2f66081533bdacb5", + "eval/datasets/coding_memory_v1/oracles/delta-violet--paraphrases.py": "b6e00019bead0a5bc0facdac886b48fccfd3cccaa254267fda780e933d57904f", + "eval/datasets/coding_memory_v1/oracles/delta-violet--poisoning.py": "3e3e1e1fe04ae3e0c615ca21e794fead5d06f887d6fe7347fb9122684c8b8017", + "eval/datasets/coding_memory_v1/oracles/delta-violet--scope_boundaries.py": "336ae66910d533344712a2d87126f53df48d43eae9e7d17797938c3f9c560204", + "eval/datasets/coding_memory_v1/oracles/delta-violet--temporal_history.py": "a81cb5d2a5eb521dfd161ffbd21bd366777b1239f2d3412acc77b0a9c7c7d82b", + "eval/datasets/coding_memory_v1/oracles/delta-violet--unsupported_questions.py": "3341895608073374b98e67a88489abb9020fed5bb692231a0a61e15c8de0ddf1", + "eval/datasets/coding_memory_v1/oracles/delta-west--code_relationships.py": "e8f17f3838cb74e1ade0cfd6edf540dc086507b51ca67c2020ed490d75dbffe5", + "eval/datasets/coding_memory_v1/oracles/delta-west--condition_values.py": "a935a6e7a4081737eef76a93d54b34dc885b4699e02d797f1be78286dd642a2b", + "eval/datasets/coding_memory_v1/oracles/delta-west--corrections.py": "ee407e5aa8d57254bb7029d537bb2b59a297958cdff9bf271de3787b6448241e", + "eval/datasets/coding_memory_v1/oracles/delta-west--long_documents.py": "55fa08b75982d0547f0c2f13cdc6522d0fbd33efb4af9ae8c6ada11b2d46f321", + "eval/datasets/coding_memory_v1/oracles/delta-west--multilingual.py": "ce8a3e45ad8417ca1798579a22e12eeb7d170a11ebfb865746388eb0e7dca848", + "eval/datasets/coding_memory_v1/oracles/delta-west--paraphrases.py": "e6458588e20e76596e24be6cc838bd4b0d5a47b05b7bf0bb6017b0cecd0d6a68", + "eval/datasets/coding_memory_v1/oracles/delta-west--poisoning.py": "4c70955a2650d13eba24d6e933f765e0bd40da0a1cd8b920416989a76bdaf2d7", + "eval/datasets/coding_memory_v1/oracles/delta-west--scope_boundaries.py": "cfe9120c49224b6f9ed86ea7d85e496000bef0648c92c7fd474c540e892863cd", + "eval/datasets/coding_memory_v1/oracles/delta-west--temporal_history.py": "3527edc8a85c71f889ff0b2ac8bf9ab005ad5bb6c95bcd917dedae44aa3efc72", + "eval/datasets/coding_memory_v1/oracles/delta-west--unsupported_questions.py": "8c40923b8d4bd6bfc78ff6548ef9a840319b7ee4ea967554f26a8d24a4349935", + "eval/datasets/coding_memory_v1/oracles/ember-green--code_relationships.py": "cc7f82ad85363ee35ccd75744159bf4c4f07965e396bff07989cca7a55071679", + "eval/datasets/coding_memory_v1/oracles/ember-green--condition_values.py": "3fa888c125812f1488de9e021358cd531a9d50bb7d4b6173be3656268474b635", + "eval/datasets/coding_memory_v1/oracles/ember-green--corrections.py": "7cc639d4bd7b287ed0e3f2188491d6e4866e021b21874b34b365c1eb2b2d6d68", + "eval/datasets/coding_memory_v1/oracles/ember-green--long_documents.py": "972e7879a30ab26f86f09bce6dc9853c7f96124d0bbe5062111607496bcc9a95", + "eval/datasets/coding_memory_v1/oracles/ember-green--multilingual.py": "0f0585bd3264de3d5fed5928b54ff4fb87f71b2edb1d35c83a534251121124b4", + "eval/datasets/coding_memory_v1/oracles/ember-green--paraphrases.py": "a3c15541bb87cc862d1c9764cfdc1ffebbc831876b55167470ecb3b66519740a", + "eval/datasets/coding_memory_v1/oracles/ember-green--poisoning.py": "ace5b7b12c4ca068739af4bc5e215af1af7fe153399ff17ffb7a67b8b9aa1f94", + "eval/datasets/coding_memory_v1/oracles/ember-green--scope_boundaries.py": "daf132e130c5743d67129c1564f329fbb2670d1242648920b646a83bc2236e4b", + "eval/datasets/coding_memory_v1/oracles/ember-green--temporal_history.py": "1438f09f0ae41b1f6b42930518203a36c7de31a870b684dbb7f16e71a37c784b", + "eval/datasets/coding_memory_v1/oracles/ember-green--unsupported_questions.py": "da27396afbc1529c61972f739cefb26dcaf97bea529c084518a95080eac4fe78", + "eval/datasets/coding_memory_v1/oracles/ember-north--code_relationships.py": "debaf885151c3f47660053ff50e015338b8aa9bca089d7e901ee8bc34f7085e6", + "eval/datasets/coding_memory_v1/oracles/ember-north--condition_values.py": "109a7ee90c04da83f57a94a9a724dcf98a3e96405c7a456686c198ff5d85a69c", + "eval/datasets/coding_memory_v1/oracles/ember-north--corrections.py": "c246ba011c68d3ad0a4ee1d14231304a7f17f28027f1764e60da93062cf1cd3c", + "eval/datasets/coding_memory_v1/oracles/ember-north--long_documents.py": "176200cf2a011c7231ed4cadacbe86b1eeb695fbbee282bf4c4a96430d98fe84", + "eval/datasets/coding_memory_v1/oracles/ember-north--multilingual.py": "e850a910515e71a27edff26f7bedf39d8cb75c726e48357a2c41d4da051be6e9", + "eval/datasets/coding_memory_v1/oracles/ember-north--paraphrases.py": "0a6f03310e44abcf4ca61d69e22edbd21ce47a17629adf4f5079f7565534b469", + "eval/datasets/coding_memory_v1/oracles/ember-north--poisoning.py": "a81ee758fc57bcc58bf0bf2a38dae8b6eb4aeb14949063206e32cdff6f301dfb", + "eval/datasets/coding_memory_v1/oracles/ember-north--scope_boundaries.py": "fe42df24612c66b175f1c98794ed9f13a1a7819418e4aeb5ff98531515221de1", + "eval/datasets/coding_memory_v1/oracles/ember-north--temporal_history.py": "410f9770097228724a5af1357003ea23caefe1226275d030d46efa535c42d306", + "eval/datasets/coding_memory_v1/oracles/ember-north--unsupported_questions.py": "eebe43443938693a74081661d2ff3733b39c6dac5c7ecd88c4dbab5ad18689ee", + "eval/datasets/coding_memory_v1/oracles/ember-violet--code_relationships.py": "c00a30669fbd1c740b44e17c7c7369582c28a16da3aeec9d27420b8aef7c553a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--condition_values.py": "1645e7c56c870f4367c263ccc9041181b1d187a698252203ca651235db59e684", + "eval/datasets/coding_memory_v1/oracles/ember-violet--corrections.py": "735f1d125d2ade6f3eabbf1082a408fe6afd4328cd954833e23df275df498e37", + "eval/datasets/coding_memory_v1/oracles/ember-violet--long_documents.py": "e1ded8e9641639443a6b14da18b2e0cbcddc6fc6045bf0b57404b59b59327dce", + "eval/datasets/coding_memory_v1/oracles/ember-violet--multilingual.py": "fbf04cda8e1231c7ac4c64d4c1856f7bfafcb6f1d016de0b1bdbbaaafcfe03b6", + "eval/datasets/coding_memory_v1/oracles/ember-violet--paraphrases.py": "2fd495def306778073df30b20dbc7a1500c06c90638acf6d9b9280db78dec53a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--poisoning.py": "335674216a418254a01a7f5505344af20ad499a5fe41cb9c8654a0705574a18e", + "eval/datasets/coding_memory_v1/oracles/ember-violet--scope_boundaries.py": "078d60287888903e90343d144d8f54e08a3751ffcba82fd827ca0c9f8ee75fe7", + "eval/datasets/coding_memory_v1/oracles/ember-violet--temporal_history.py": "f7ad47f3253fe922977cbd0b63679abf00559f1b2dc895246e09840652b2c41b", + "eval/datasets/coding_memory_v1/oracles/ember-violet--unsupported_questions.py": "b91545082a31952351bc4c08d6cc09132432126dfd772952c818396bd7a68af1", + "eval/datasets/coding_memory_v1/oracles/ember-west--code_relationships.py": "74fb3e0d99a5bd4f54b8b57f6040ce7978a81bffa1ae70f9069fb2322e6ea581", + "eval/datasets/coding_memory_v1/oracles/ember-west--condition_values.py": "26d605b42d18cf029dfdc29124eea898e0dfa5642c43c1c775007fb443ba6cda", + "eval/datasets/coding_memory_v1/oracles/ember-west--corrections.py": "65c2ef8544b42ecb6b3ea9ce8bc95ec5f0ea8bb07c2b74d52e7880d99962f563", + "eval/datasets/coding_memory_v1/oracles/ember-west--long_documents.py": "4c8e54c7ec930d6cc782fa1a0519a0f1e0e916e3929902e13199775cefdaf338", + "eval/datasets/coding_memory_v1/oracles/ember-west--multilingual.py": "356e407f47d39e7f53337ffc4f27c68935a2c831301dc3dd006b2939cc61decd", + "eval/datasets/coding_memory_v1/oracles/ember-west--paraphrases.py": "c91cf574cf8b5aadaa6c9331c3f8f4a8fec7ec33c227f20894f463d81d110a7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--poisoning.py": "5f6b8740798a7a093994748ef4b11e0e1de0be562c7f09790e1f0ebb9ed21f7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--scope_boundaries.py": "5e20c5154818cc29b7e71444054d67836eddc882f2f17be8aed78afe31a9037f", + "eval/datasets/coding_memory_v1/oracles/ember-west--temporal_history.py": "fc51d1a39693d1f7fb2db4bf1ffe865d4c44848c159188cdcfda54618c0d8fe2", + "eval/datasets/coding_memory_v1/oracles/ember-west--unsupported_questions.py": "079c421cae974bcccc2107dac74421dd5bc2d1b40f7d91cb79a8014af526d260", + "eval/datasets/coding_memory_v1/oracles/fjord-green--code_relationships.py": "b5e4a284bad1d7ff81d5be9cf1faaaaf5e718cb51624189482624721cb459f1b", + "eval/datasets/coding_memory_v1/oracles/fjord-green--condition_values.py": "63c152b8da5655ae5c701cbb51099340d5f5103fcc47840239098a7366d24151", + "eval/datasets/coding_memory_v1/oracles/fjord-green--corrections.py": "b7b33b8de153c205ff4fdaadd5538eae8a22fd4401e70db9f645dae205c62cba", + "eval/datasets/coding_memory_v1/oracles/fjord-green--long_documents.py": "624cf014bc795a24e2f1f4fa2f9dbf11d2ad1c38f81cbc58ab3948f96c48c8c4", + "eval/datasets/coding_memory_v1/oracles/fjord-green--multilingual.py": "f8d2483fd9266946c980764feba0eda27c95ea2ff11222a4dd4247fb537f1f00", + "eval/datasets/coding_memory_v1/oracles/fjord-green--paraphrases.py": "151be253b730d5c5b4bbcabcce3bd218477241ebf0f1bd5fe9dc8d70798feb6f", + "eval/datasets/coding_memory_v1/oracles/fjord-green--poisoning.py": "e7b0efca3813bbb1d4ea9cefa752b4318942b118bb61ee9dcbbf640daa66644d", + "eval/datasets/coding_memory_v1/oracles/fjord-green--scope_boundaries.py": "56177cfb45f32c548be83cc78197fcf5b53826f01cca69e471535476184ae8f9", + "eval/datasets/coding_memory_v1/oracles/fjord-green--temporal_history.py": "2c79d26467eb8443d743bb8823cc1f2a5d1e5da7c887754505baa130e37f1b2e", + "eval/datasets/coding_memory_v1/oracles/fjord-green--unsupported_questions.py": "fb5f222f4e0715379591f559036c0549f67a7b6e3491e880c6cf8d5b91fa9000", + "eval/datasets/coding_memory_v1/oracles/fjord-north--code_relationships.py": "07402078200db9ab15fc61a72e31d9df0938edfb1e9d5b7e532b422dccab15aa", + "eval/datasets/coding_memory_v1/oracles/fjord-north--condition_values.py": "8c1549b5a444c9cbf1304fcca13b79263bf8d9f0b4f41c16da539b3bf5da3bf4", + "eval/datasets/coding_memory_v1/oracles/fjord-north--corrections.py": "a2634af73134c025de1b6239756ee2051e505e0a535221947babef5ba161fa13", + "eval/datasets/coding_memory_v1/oracles/fjord-north--long_documents.py": "4f80f3673afd1320d16a6bd45fefc85522d6f4bb889ff96f6e99410580feec09", + "eval/datasets/coding_memory_v1/oracles/fjord-north--multilingual.py": "3a9c953fbe76eb7374992a6a81d35b8dc0a635c02b90f328af140bbda2acc180", + "eval/datasets/coding_memory_v1/oracles/fjord-north--paraphrases.py": "ec2d9d7bbd678be73946cba8177184839505cd891df410ae8e676fc254df2ca5", + "eval/datasets/coding_memory_v1/oracles/fjord-north--poisoning.py": "6d9b91b4d53925d58d3c0cea694f591572a53184f23816101af0aa644aa1b86d", + "eval/datasets/coding_memory_v1/oracles/fjord-north--scope_boundaries.py": "2e98afa064e8a295a78bea654014a92734696a235fb0538732bb8d85799c7287", + "eval/datasets/coding_memory_v1/oracles/fjord-north--temporal_history.py": "4059ab8e427c2b6fd68155992404fbf493c7ebdf0a4357aa5c5f4ff0c67808f9", + "eval/datasets/coding_memory_v1/oracles/fjord-north--unsupported_questions.py": "79f14e18e282c1b6bbe21ef2affc9dd8a259a171c2e4975d42363f7c91689c1e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--code_relationships.py": "9ea8a9ade1001bcd43929782c3410f35fc5056e438342ca848fe0b1b0ff56170", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--condition_values.py": "09e223a1c0bff6c95a5863fdc28dc00ed96b90887cd635d014712058079ccbfe", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--corrections.py": "f822c373fc4a93189fdce09999a9dcbe8797b0c0dc780eddd4e342edf21dc14e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--long_documents.py": "983aeaae1e14937a740218228778be3e1938cdf1ff9228eba44064336188f297", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--multilingual.py": "6e929f8846cfc756c71bcc21bc0f27ef8fc23270d21292fc35d70e6bbd31c066", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--paraphrases.py": "c644d9f01edbd213447618bc269f56804450901faf4f4660c1f666d4e9b4ada4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--poisoning.py": "cf3849312f96b0072efdfd4e858abb24d7e6a808bf883bcc9dde5dd5a4594364", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--scope_boundaries.py": "373d10e20713bdc26849706525f765f2be4ab57e87e576e39a1a1dd4e7feed88", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--temporal_history.py": "4d2c36480cc04d43aa8f535bf998968b474f2f596d5349dcd42684c5a667c6a4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--unsupported_questions.py": "b381d2016dea525eebd8de8d026dc48ad2080b93823a95d6e2bb06d29cc86775", + "eval/datasets/coding_memory_v1/oracles/fjord-west--code_relationships.py": "e1e10ed9ee8a4d5c2e798c2bf04cba5c39eaa3873901bd93724af166ba2479ae", + "eval/datasets/coding_memory_v1/oracles/fjord-west--condition_values.py": "427764a62d2e11f6c9fe4b2cdcd32fa92f61749403dff648601a47187e38787a", + "eval/datasets/coding_memory_v1/oracles/fjord-west--corrections.py": "4aa041aa87f4c8628d113bab855a151c2e38bd6919cd02224827fd07d060fb34", + "eval/datasets/coding_memory_v1/oracles/fjord-west--long_documents.py": "89875548e6952ce810d8983b0eaf2724bf8f329bf44e4d9193cfa3405e1ce80e", + "eval/datasets/coding_memory_v1/oracles/fjord-west--multilingual.py": "8b5c14cdb26941d1ae25701bc99efc5fe4ae6e50fed3c65b193952444f1593d1", + "eval/datasets/coding_memory_v1/oracles/fjord-west--paraphrases.py": "bcdc9a5f1fe45ef63fd5e6b728c83c7a8d05c7b80957e3276c074700b409e924", + "eval/datasets/coding_memory_v1/oracles/fjord-west--poisoning.py": "5504e1bab0865fb3041c88f151938789d79422eff91a3ce72f4a41fc14e2f897", + "eval/datasets/coding_memory_v1/oracles/fjord-west--scope_boundaries.py": "63f226631a663dca0ef62a4f32bb98fbe1e30e3b1f030ee42c3f7f2bf6a09af0", + "eval/datasets/coding_memory_v1/oracles/fjord-west--temporal_history.py": "75c9582a16db2c89f12506bd7a4115fcd871c6da63e80429a8e70e31c1f5f862", + "eval/datasets/coding_memory_v1/oracles/fjord-west--unsupported_questions.py": "05e4ba65be7cb4e6500af5e14721c70f93fd7390abe58a60f6f8e4f8e9b0ae5c", + "eval/datasets/coding_memory_v1/oracles/grove-green--code_relationships.py": "bd5619518e839f84ca03297c4f7842a2944d8b445ec1863a8dfc68e4c2114a03", + "eval/datasets/coding_memory_v1/oracles/grove-green--condition_values.py": "67377847b6ff1ab865f5c25351fcfa1ee13e6ec6a089444cb3eb0709b660148b", + "eval/datasets/coding_memory_v1/oracles/grove-green--corrections.py": "c07e8a03c6c47818f9c574d4f21b27668989711fb5e0af3b5cf1a87b293abcbd", + "eval/datasets/coding_memory_v1/oracles/grove-green--long_documents.py": "3f75fc2158c66a19dbbd19209fc80026339abe93a2282ff55c7c01429ac549f3", + "eval/datasets/coding_memory_v1/oracles/grove-green--multilingual.py": "19b1f800b38a11cf0f50df6da3a011806098561e32a279b78e1806de9b8c11fb", + "eval/datasets/coding_memory_v1/oracles/grove-green--paraphrases.py": "a5996376b9f589283dbe301dd1e0644af92a8b6a0222b51b99ed6fbb83570782", + "eval/datasets/coding_memory_v1/oracles/grove-green--poisoning.py": "c4dee0969e39b52dc9b697e45587c8cd84926a97c9a48f7211c0a00571bfb657", + "eval/datasets/coding_memory_v1/oracles/grove-green--scope_boundaries.py": "8d45422f0a1a2115deb90f560409fdad1105b7cae1f03052f8ebac404ba9517c", + "eval/datasets/coding_memory_v1/oracles/grove-green--temporal_history.py": "abc1b386173c8252ac10f11a36fbcdd6d91c731686108a6d32c62d17955d21b9", + "eval/datasets/coding_memory_v1/oracles/grove-green--unsupported_questions.py": "1ee09741a1c94a1fa83c7edf5b6c07d8da2e45826f748d899ec71917e8369d54", + "eval/datasets/coding_memory_v1/oracles/grove-north--code_relationships.py": "fd75d734a5f45a5ec54b125c1d379df67c5531659f212a2f5c1c5e88169167e0", + "eval/datasets/coding_memory_v1/oracles/grove-north--condition_values.py": "c600c0e5f50e352406b99527b050f4df6dc8ab8920b5b946de190ad7629b5e6d", + "eval/datasets/coding_memory_v1/oracles/grove-north--corrections.py": "4d6fdbe4f5eb9c8e4bfc2a974e6c3cbf1d124d0b20d3f050c84e766f507b4be7", + "eval/datasets/coding_memory_v1/oracles/grove-north--long_documents.py": "5b0bbb9f0a90eb377cbfe45ff6f37077a9ce32c7c6730720f0bfd49b844fdf4b", + "eval/datasets/coding_memory_v1/oracles/grove-north--multilingual.py": "525ea2fdad66d66d7b90892e9424ebae281c1dabfb49f2668784a687b7ec894e", + "eval/datasets/coding_memory_v1/oracles/grove-north--paraphrases.py": "1105e52a8c8d3ff79c64b59ec5f23d66d742b8dcecf91e8e62060895c7371f4a", + "eval/datasets/coding_memory_v1/oracles/grove-north--poisoning.py": "7d32e533f6dac57e5d651868386686d2b78e7db1cc29b1860fede23fc9c49813", + "eval/datasets/coding_memory_v1/oracles/grove-north--scope_boundaries.py": "7bea4129589ea34ba10667a7035b126a32b423ec7f3b1ff2b10f6ffc9aa1c2ee", + "eval/datasets/coding_memory_v1/oracles/grove-north--temporal_history.py": "859b6504250f5746ce197e4a0a7c1006f1c2257b939c53a493f9d36f6d2b7d6a", + "eval/datasets/coding_memory_v1/oracles/grove-north--unsupported_questions.py": "6b893c4c124f071e9ad5d9946448b070c2b2f5f10da6f058e60840c18510fd0f", + "eval/datasets/coding_memory_v1/oracles/grove-violet--code_relationships.py": "09bb7df6b115b83cb98a4274b2d883e81b809643ed4f912b383a9e09a7f7a1f9", + "eval/datasets/coding_memory_v1/oracles/grove-violet--condition_values.py": "a68c126f0d7b2fc0950baa5df095d7d513cdb8359883404bad3c1c84c8de666d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--corrections.py": "46024b5fb187aaf3574d380af1a3bb2aa44028f89377f810ca5e98ee03c3b9aa", + "eval/datasets/coding_memory_v1/oracles/grove-violet--long_documents.py": "ec8d401f6437fbaa3b11ddb96973b31944ff374da677f7aae26c0e79e6a1315b", + "eval/datasets/coding_memory_v1/oracles/grove-violet--multilingual.py": "d14e8bf66593ceab7b691119b8a82f211933e2b3f6ebf8a25a75e61ffedbc1c0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--paraphrases.py": "963b7321a32931f238d12e7cdc3849f64682c7cb704b77f4b849543cc40b6df0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--poisoning.py": "39e5edc76a122d37d90b1af28c2293e2f8b0c38e1bdb6460340c0bc2a71ad87d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--scope_boundaries.py": "472298607415aedfb9a36bad7783e7b7e3bccc339ee44cd83746d782ca99e411", + "eval/datasets/coding_memory_v1/oracles/grove-violet--temporal_history.py": "dcf793210a0a547c25587bba70e01d4d56576604856ed084eb5fa466b8be7b83", + "eval/datasets/coding_memory_v1/oracles/grove-violet--unsupported_questions.py": "bbe1769dc0afbe220e8069ef21b85164c31ecff6c3c7f5bf6d18d1e48f5f3c72", + "eval/datasets/coding_memory_v1/oracles/grove-west--code_relationships.py": "5374fb66cd91be79b5eabd2696ada5fee89605d8a1fc84ce36bd6a8ca82cbe5e", + "eval/datasets/coding_memory_v1/oracles/grove-west--condition_values.py": "2e807846b760b65afe0f5e48947463a66c15b8d89899a2724cddd865311760b0", + "eval/datasets/coding_memory_v1/oracles/grove-west--corrections.py": "bca219aae5f85e3f5504d5b39646efe89ff7dc6c007a4323abd5c5154cb4d5a9", + "eval/datasets/coding_memory_v1/oracles/grove-west--long_documents.py": "19c3ca44f78ef79ca1b907c80214e11a8195e994893f1de683b5d9796eb29d6b", + "eval/datasets/coding_memory_v1/oracles/grove-west--multilingual.py": "7842efb41f88fcd49e7a2350e9b44a3a1946bf73e5cb103e4a91a11e810301a2", + "eval/datasets/coding_memory_v1/oracles/grove-west--paraphrases.py": "fd70e8a20da665073ad172219bd57b24e53575dccc344adc1fa0190770ffc6cd", + "eval/datasets/coding_memory_v1/oracles/grove-west--poisoning.py": "473acfa06852554dee20445dd1a86df4e626e0363a7b72de57d68819314bf938", + "eval/datasets/coding_memory_v1/oracles/grove-west--scope_boundaries.py": "3ba0e93abf07498c570cd81b0c4f753bb75b6d4f4bf6c786461bad1a3b301286", + "eval/datasets/coding_memory_v1/oracles/grove-west--temporal_history.py": "334bc7b057f570efd20896d282e54c986f5b6c642930057c8520f84b721ed5e9", + "eval/datasets/coding_memory_v1/oracles/grove-west--unsupported_questions.py": "5102eb2dadcce0dcc0ba157495d4fa10c4983e4bf6627aff25bbd547a08115ca", + "eval/datasets/coding_memory_v1/oracles/helios-green--code_relationships.py": "d376cda89c44b3282a86afe7cd01583f0b53f2c80cd92b47bc2fa4a19271e9ee", + "eval/datasets/coding_memory_v1/oracles/helios-green--condition_values.py": "7b6eaf2f46a5b2f1ae6e8e6da0bcfe6044fea5639df158e137fb8ba32b929909", + "eval/datasets/coding_memory_v1/oracles/helios-green--corrections.py": "2e849f6c926aa0ce1b2e69ce8cdc5ba9c50feb89b33b257fc71bf3aa3b8461b8", + "eval/datasets/coding_memory_v1/oracles/helios-green--long_documents.py": "884c17b7d20d986708c0eff2821cc7b76c5f7b16afd26c43ca80fb507e2f3ea7", + "eval/datasets/coding_memory_v1/oracles/helios-green--multilingual.py": "1182048aef0dcfbc416a004bc43f49f1d2a5de4132e7243ab7d147f54aab1acc", + "eval/datasets/coding_memory_v1/oracles/helios-green--paraphrases.py": "a73950ae7fceacfaa6c7c7a26c8379f9164a29ebea883cede9222e72c506db5e", + "eval/datasets/coding_memory_v1/oracles/helios-green--poisoning.py": "60c5112afb7b84ee5513f2657f42d0eacb0607ba345c28618af3b3b3eaab753e", + "eval/datasets/coding_memory_v1/oracles/helios-green--scope_boundaries.py": "dab035b811e7e9a60bf447d1ea26f6db915c320b5dc2dd04cda4b6f1023296be", + "eval/datasets/coding_memory_v1/oracles/helios-green--temporal_history.py": "c22dd57bc7cd659863231b164192caf6c4929c5baaf8edd8be8cac00268e5847", + "eval/datasets/coding_memory_v1/oracles/helios-green--unsupported_questions.py": "f78986b8093eab4ecc8c1319d359498d64177db55a4e38cf8d0b32d1e5af4b2a", + "eval/datasets/coding_memory_v1/oracles/helios-north--code_relationships.py": "81721c60bd4e3466600442214147ae6641ebc05ae414965f4a09b89cc74cb8d6", + "eval/datasets/coding_memory_v1/oracles/helios-north--condition_values.py": "8fbcf116c1f0d480d61b2974e7bef73acef053d45bf0ac3b12e6ea48b017e43f", + "eval/datasets/coding_memory_v1/oracles/helios-north--corrections.py": "beae8d6c5828c1f225e5e953236136a217ee48e67cebc82049caf8f1c60cfdcc", + "eval/datasets/coding_memory_v1/oracles/helios-north--long_documents.py": "019e7ff3b9efcb461c1c68acc657b2438cc2d63d4b4165c0caa4523c440f12bc", + "eval/datasets/coding_memory_v1/oracles/helios-north--multilingual.py": "a48324390ab60686c2b1417f0c049f47601737c55fdf000b696ccc5de260ccab", + "eval/datasets/coding_memory_v1/oracles/helios-north--paraphrases.py": "9e2552399b988a6d722ccfaec7cfbea10853164336fadc9e9146dbae788a2d8a", + "eval/datasets/coding_memory_v1/oracles/helios-north--poisoning.py": "75eecaa42c302898581d3bef8aee00fa1dec6c3bc968c0014a522196e18c7681", + "eval/datasets/coding_memory_v1/oracles/helios-north--scope_boundaries.py": "8bd32a30cd1c2e346375bf2b37ef4908c3feeb67a80ec52ed3108bfe9cbd548e", + "eval/datasets/coding_memory_v1/oracles/helios-north--temporal_history.py": "1d1118cb5d438f91bb027acaa3b64f867e93cca7eb0f480bb83073584fafd97a", + "eval/datasets/coding_memory_v1/oracles/helios-north--unsupported_questions.py": "02a854bf89085637e366f801d2be6ab26b9e18296f13531485d08c2a64621c7c", + "eval/datasets/coding_memory_v1/oracles/helios-violet--code_relationships.py": "e32101847ccad5cd18fbc2c667ba4d1b63e3e7f8067dc89de5f485546dfef525", + "eval/datasets/coding_memory_v1/oracles/helios-violet--condition_values.py": "c8ef59dc9dcfe3aecc990d82fe44f1f93b7adc8c65f1fc38e79b934d351635c6", + "eval/datasets/coding_memory_v1/oracles/helios-violet--corrections.py": "a3a36bb554a6f4a83ea612bbbe9c0ee4ee1a08071e490a9a909c46d3049bb379", + "eval/datasets/coding_memory_v1/oracles/helios-violet--long_documents.py": "f9fa707bb28b4d7ea96e3bacfa22f24502b571a76a79defd147fe9d5205963a2", + "eval/datasets/coding_memory_v1/oracles/helios-violet--multilingual.py": "cfbfe0535e905dd58434bc25d84e7746dbdf1fc50d72d0fa96cc78677eaf18b9", + "eval/datasets/coding_memory_v1/oracles/helios-violet--paraphrases.py": "1743c8cbf0564d91dfb4db88b694072fdc9bb5a0b9f26f578649af7f539ee393", + "eval/datasets/coding_memory_v1/oracles/helios-violet--poisoning.py": "02cf390520757473e9d677f5c1f0934ecf50645ad5edcdc64caec23721a5d99e", + "eval/datasets/coding_memory_v1/oracles/helios-violet--scope_boundaries.py": "5ab003dfc23cb00d0a70195541a780a4b80b1d496728b2b88f7f154310e67a6d", + "eval/datasets/coding_memory_v1/oracles/helios-violet--temporal_history.py": "209e95f62c39d3f2223ed00a378788e396d04de392324455cd9d19dedb3a87ad", + "eval/datasets/coding_memory_v1/oracles/helios-violet--unsupported_questions.py": "a3ff0703297e2f743917e74abeffc0c922a6241318f37d63a49242c6bcc18059", + "eval/datasets/coding_memory_v1/oracles/helios-west--code_relationships.py": "4d8543e4c49d59f844830ccee3fcea0643ee17ce43f51863b94a1b4fbc9825ea", + "eval/datasets/coding_memory_v1/oracles/helios-west--condition_values.py": "f2efa7fd803df0e10c440d5ec2d98dedf5e02e23a4cedddcde5ea722f4039e40", + "eval/datasets/coding_memory_v1/oracles/helios-west--corrections.py": "181c42640cee47db2b5c779bdf8fe2e84103a92459d7f6cb0d9587458e421406", + "eval/datasets/coding_memory_v1/oracles/helios-west--long_documents.py": "49337830deb24f9d6b11ba4e01f397c0cf1a40a15524f1ce33354a2c61615072", + "eval/datasets/coding_memory_v1/oracles/helios-west--multilingual.py": "f1e4ef8be6bba13457a2da1c3a2082f81bba765f2cf1f07b93eb20edf5e2debe", + "eval/datasets/coding_memory_v1/oracles/helios-west--paraphrases.py": "29abfff3b323496fb62e739cdc0be2aada1b7e1467a141cc8d19a1d54c1ab130", + "eval/datasets/coding_memory_v1/oracles/helios-west--poisoning.py": "14b7f874c10681ff3829b2659cbe7500250369652d11b26c842e62718093ca0f", + "eval/datasets/coding_memory_v1/oracles/helios-west--scope_boundaries.py": "decbdb3cd7ab0c40c0aadb1ecdeef9e2ee2586dd8802b9bb16235f211ce05ee1", + "eval/datasets/coding_memory_v1/oracles/helios-west--temporal_history.py": "6e7c2369157234374d3f9633b7e772b4a3bff405d418c6e1336e56c87ebf28de", + "eval/datasets/coding_memory_v1/oracles/helios-west--unsupported_questions.py": "379716803a300bbecd3fc8f1661bdac2fcd8a98a2bb18514d8de168bd57fa144", + "eval/datasets/coding_memory_v1/oracles/island-green--code_relationships.py": "833962801d594247d5c5644df0e6aee877d452127ea5c0dbc22c81512132ab21", + "eval/datasets/coding_memory_v1/oracles/island-green--condition_values.py": "cfbb4ea0a4dd12d69686178ba8246bd08b93743dc5395cd0479984a53655d909", + "eval/datasets/coding_memory_v1/oracles/island-green--corrections.py": "4c7ee2538df9988864e24d9b86805d26b64d1a37638b57abdd1761e24c4ab340", + "eval/datasets/coding_memory_v1/oracles/island-green--long_documents.py": "f73cd2b884539680c500af9a5c8cc00d1dc9f1d2ef7bda61f6c8253b2bf799ed", + "eval/datasets/coding_memory_v1/oracles/island-green--multilingual.py": "e954fa56aa819ef9088c8d6da4abd647b689956c4ff4a7b0b8e31078522f2702", + "eval/datasets/coding_memory_v1/oracles/island-green--paraphrases.py": "4cde223eac40d4a2962aa2ace533b8761c5b82784767b0307c884ac5e6ad0576", + "eval/datasets/coding_memory_v1/oracles/island-green--poisoning.py": "08725e295848b2c58c9e6d6a0554a2dd4a6506af75039205c444251d11a62acb", + "eval/datasets/coding_memory_v1/oracles/island-green--scope_boundaries.py": "257cd579af07491748f5de88d04f8af85056b0448d348e59c7b0cbb28754fb1b", + "eval/datasets/coding_memory_v1/oracles/island-green--temporal_history.py": "e93105f0639a83b300a6de3bbae56166eedac2e58122f7e84ce5a40a074db6b6", + "eval/datasets/coding_memory_v1/oracles/island-green--unsupported_questions.py": "a707cee90fb3f0cabd0e692399a361f59da0fc4e9e7bbf0cde702e05579f0b3f", + "eval/datasets/coding_memory_v1/oracles/island-north--code_relationships.py": "f00e022ce900e4ad0fcec93f2dbf016337a4d83afacbcf739f61f71316723173", + "eval/datasets/coding_memory_v1/oracles/island-north--condition_values.py": "c704a03a70253585a67823826dc0a6ebaf6323a8880c00af80c148c150176daf", + "eval/datasets/coding_memory_v1/oracles/island-north--corrections.py": "e2cadf6e4f365f94cf0f440758b173da4d14ba12c03a84351e0608f0c60bccc5", + "eval/datasets/coding_memory_v1/oracles/island-north--long_documents.py": "300246fd3d85d73b63066d133361bc784ae26b46f4197c5c41ac960eb37f9508", + "eval/datasets/coding_memory_v1/oracles/island-north--multilingual.py": "f8aba8e14ed3c420e90e701880ea38e924e1219e3cc3643ba8bde17cb31ddef6", + "eval/datasets/coding_memory_v1/oracles/island-north--paraphrases.py": "503ce2c132c666bb67920e90d4a898f5a73f1d66779cd83c1885812f223e30e5", + "eval/datasets/coding_memory_v1/oracles/island-north--poisoning.py": "3369d956e5af12bc6be80828c4c6ab03ccf80c79e38dea3162b4e2c09771ff30", + "eval/datasets/coding_memory_v1/oracles/island-north--scope_boundaries.py": "9b4f6186f71713175f1eb5aacb0b6258c746b2297ca7c692f54bf5feabd5d261", + "eval/datasets/coding_memory_v1/oracles/island-north--temporal_history.py": "7c22b0edbf8edb7a511a581ffe6f1ce14454ef3feb527eca90d1386ce00b2c6b", + "eval/datasets/coding_memory_v1/oracles/island-north--unsupported_questions.py": "c1e5d526b0c6b88394f19a8b8edca7dae1db718b24be2d57374eb3769bbd1f24", + "eval/datasets/coding_memory_v1/oracles/island-violet--code_relationships.py": "9672d608ea0c8623ff1fe760f943173b2fdac5dc4ea4b7ae0dba33436d860254", + "eval/datasets/coding_memory_v1/oracles/island-violet--condition_values.py": "cfea91adcc9b3f9eb28cc24cf310e10b436f81cff51297f161b9a3b59a21f62c", + "eval/datasets/coding_memory_v1/oracles/island-violet--corrections.py": "075d48a2dfd91af8328982fe475ec915c00b75db38819aff3b4c2343147e2bfc", + "eval/datasets/coding_memory_v1/oracles/island-violet--long_documents.py": "85cc789277e59925b36ea3bd82e23f989e79fb0be2e55083e2656e518641dd3c", + "eval/datasets/coding_memory_v1/oracles/island-violet--multilingual.py": "84615b70eb74eb2180dd8a89d8d34c11e904030bfaa26c57e2e6c968daf64d29", + "eval/datasets/coding_memory_v1/oracles/island-violet--paraphrases.py": "5244d32ffc4127d519e2f5a875ffaecf7bc51eaa1426d2aacbc42490cf291d22", + "eval/datasets/coding_memory_v1/oracles/island-violet--poisoning.py": "9bde478876ea0be60555d5bd26d3790e4f305327ece10bf6c258bc564354fa1d", + "eval/datasets/coding_memory_v1/oracles/island-violet--scope_boundaries.py": "8e8b0a64342963b4dbc000578a72c0e0801fc1ca4af140f09b55d4cdb03b1274", + "eval/datasets/coding_memory_v1/oracles/island-violet--temporal_history.py": "3e187ce259c7f57f6dba4a28c3ecdf31fbe6458f7d908b22cb8b5ce8325437ae", + "eval/datasets/coding_memory_v1/oracles/island-violet--unsupported_questions.py": "0e60f29a47953c5d434c159eece26bbb03cc837842c493111b34310f9cff4693", + "eval/datasets/coding_memory_v1/oracles/island-west--code_relationships.py": "c19c42978fa5f9c6e1f41886eb1cc0fdb7e12304ba58b160b4cbe1975640acfe", + "eval/datasets/coding_memory_v1/oracles/island-west--condition_values.py": "07c4c591e08f5248f3016dc16cecfea7dd75bebff1a61599f258938d7031043d", + "eval/datasets/coding_memory_v1/oracles/island-west--corrections.py": "a7d93dfb579ec4f58cf2f6d29a6d0ab7dbf1a17f6ae49b98902a5ea22525e649", + "eval/datasets/coding_memory_v1/oracles/island-west--long_documents.py": "20a50dd63e04ce751115fca671b9da7ebbf240e26f39d494583cb405a03b750c", + "eval/datasets/coding_memory_v1/oracles/island-west--multilingual.py": "65d82c4d7968e0e597509c692015bdac0b92841c726d87560d9caa32429176f4", + "eval/datasets/coding_memory_v1/oracles/island-west--paraphrases.py": "feb7eb2e8592162d7d1f433610cb02ba04cd9797191d65a9f0e5bc4f4711c4ed", + "eval/datasets/coding_memory_v1/oracles/island-west--poisoning.py": "3d7c2c6a7f247f3e8158d5ba007bbbdf027a74e9a2c52f52953b3ccf2c21f17f", + "eval/datasets/coding_memory_v1/oracles/island-west--scope_boundaries.py": "ff0f36139f6da5428b9538d108aded522e62ca803035ebef78e11255cf55e08b", + "eval/datasets/coding_memory_v1/oracles/island-west--temporal_history.py": "42cb1c552ce01308b47d526c6e6993fb3270239b392cfa9f5e42b8e0fcfb3f82", + "eval/datasets/coding_memory_v1/oracles/island-west--unsupported_questions.py": "911b4257380640d35d6e2fc5292e235eedc113f5e71d8e71e8ccab7c72d4f290", + "eval/datasets/coding_memory_v1/oracles/juniper-green--code_relationships.py": "373395d3b70f64f8102609d27ce10c4aeb937ac73988c2ce2be1e283df94ef82", + "eval/datasets/coding_memory_v1/oracles/juniper-green--condition_values.py": "f04794a96b06d537550227ec308b1f02405cdab42d7d3ae4db4afd2c25bee8cd", + "eval/datasets/coding_memory_v1/oracles/juniper-green--corrections.py": "5a354a8c8efdbc498d25ffbf6095fee7b3d7d638134b452c7c9ecb186b4e1bc7", + "eval/datasets/coding_memory_v1/oracles/juniper-green--long_documents.py": "8610157668d6a90c794a956f6f0b432f03e3559238599ad1cb412f6f1a2f7e46", + "eval/datasets/coding_memory_v1/oracles/juniper-green--multilingual.py": "dcb99335fa18b008197532809ff7127be2cda600848e10c8bfe4677bd896f90e", + "eval/datasets/coding_memory_v1/oracles/juniper-green--paraphrases.py": "7a4cb1bbe3de2e6fe6a33b1f78829f4aeb21d21c2e8d4d3399d3d98958ba0909", + "eval/datasets/coding_memory_v1/oracles/juniper-green--poisoning.py": "ba73c2c6f04590538e16c50be527da60f5949781bc8833a3c18a7c597146eb10", + "eval/datasets/coding_memory_v1/oracles/juniper-green--scope_boundaries.py": "9d09c0851a3906b6281cb1c5811714224161e27a1aa46edd81c5659e7f93cd3d", + "eval/datasets/coding_memory_v1/oracles/juniper-green--temporal_history.py": "fd05595a452952dca2d0089f5701a60145a3b5705b78a5ff2f8f9f13fbf1c259", + "eval/datasets/coding_memory_v1/oracles/juniper-green--unsupported_questions.py": "f58bfcb89db799dc1578fc8791b49e97e7f22b30e720aeaf661f0ad2e6a9660c", + "eval/datasets/coding_memory_v1/oracles/juniper-north--code_relationships.py": "a84f02bd3c2b9c367248dae8aa3580d83de6a1beb6fe464553eb8a2bfb172b75", + "eval/datasets/coding_memory_v1/oracles/juniper-north--condition_values.py": "d70311ae339556f18240f824d0f0bd0024060c2698fcca8fe7cb540e8a8bc727", + "eval/datasets/coding_memory_v1/oracles/juniper-north--corrections.py": "fa290629339007fdd4230a76d49fa294a218c5f0cf6b90c3074678b0f16c539a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--long_documents.py": "e30025d68ae3b48b566bf3fb2aea5e3603f5f7ab658da8fcb2256d3b1964c85a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--multilingual.py": "b8bb0199c4acfe71df8d4e7df75bdd37e038cc72aa82bc6df10715819aeb3686", + "eval/datasets/coding_memory_v1/oracles/juniper-north--paraphrases.py": "aabf70509d3b0602d43c9590f04fa3ad1370a40c266d20f64a5ece15d4c79a51", + "eval/datasets/coding_memory_v1/oracles/juniper-north--poisoning.py": "ebfb9d7bf3c50eed8f44b73e391496ef377942de389b6feb64c7a1c0f9646444", + "eval/datasets/coding_memory_v1/oracles/juniper-north--scope_boundaries.py": "06c2c9d57ade79139c9b0d20568703477bb9e3a934f2f8900ad717ef157e5844", + "eval/datasets/coding_memory_v1/oracles/juniper-north--temporal_history.py": "0d97ba6d7a5d7741bf248b599ed18ae81b1c0053ad53cbc64934f31e9c3461aa", + "eval/datasets/coding_memory_v1/oracles/juniper-north--unsupported_questions.py": "526648ba7a4edc21bc2eb589c1e5c98a20fb07aa692687de4c3845e559be8096", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--code_relationships.py": "c73fd24d0adbeda6c7afeb15ab07296c0438402893e8d442af26865106d6e8ea", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--condition_values.py": "4aadae570ef84f976d49ba1fc92574ef55630b1c3017e90dbec1f85e6fb74c4a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--corrections.py": "07236b2a88df73c8d0f6afbe7d972fdc18f8c835a852f5c20748a369c77d82e2", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--long_documents.py": "54d3201b621b168ce03963c423942f142cb403f9d90234f063ff33b7add4d2dc", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--multilingual.py": "e0cc26d743cbea8e98261895474879d078fd53941c075606bfc6e52ee098db93", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--paraphrases.py": "a1f836316408052cab1253b56b5caa6b1432fe6eeaabbb5872da97ec9bde633a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--poisoning.py": "bc09271eadf77f1b6c03fff20ca9c0f0a42a99d1c5600e6b7843f0a0d549ed5d", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--scope_boundaries.py": "17a7258bed9efe1c86a05756c5b5d17926fd72f01de4b2addd5d2fb4550f4da5", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--temporal_history.py": "8bda8599d861857204c48b55729607c8cb0cb3ae2701eb18fb600d398468cafe", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--unsupported_questions.py": "10cdbb013f78f0e54c31a6e76f03d8d15a6063fd7971a2d803a390890c036ad2", + "eval/datasets/coding_memory_v1/oracles/juniper-west--code_relationships.py": "f0a682d413b3d8418c664db2775de4eef35240c508cc71ca6bbc055cd0c8dbe6", + "eval/datasets/coding_memory_v1/oracles/juniper-west--condition_values.py": "200a4b78f201e992ac10112a194c97b88841dc5930e3e7de9bfc076bf4c69fa7", + "eval/datasets/coding_memory_v1/oracles/juniper-west--corrections.py": "41ea9b5a5f40d8703343f4570593c3f27905e5ff70fae57bdbdb5fcccc585d22", + "eval/datasets/coding_memory_v1/oracles/juniper-west--long_documents.py": "7d8cdd01c5d90ad62e9da93a99febead683e3f01c5ca37315382a2fb0f512d76", + "eval/datasets/coding_memory_v1/oracles/juniper-west--multilingual.py": "1815adc5946bf9e7dba16786d8c29f9466537b7a43b1c392f927b61c56da54ee", + "eval/datasets/coding_memory_v1/oracles/juniper-west--paraphrases.py": "5d0110bc2098d2143303476fb5c5714086d0278b848110c63aa626e0b88311cc", + "eval/datasets/coding_memory_v1/oracles/juniper-west--poisoning.py": "4e16d9de9931cffc6915805b4fc375dad3ffb7fad17eb893205ce6d07102bcb3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--scope_boundaries.py": "6c5d875184c890a922ee18ac423598fdcece109a91e9e62d5a7ccc82d2eaaa70", + "eval/datasets/coding_memory_v1/oracles/juniper-west--temporal_history.py": "3404fdbb5cc4693333d48d27da928531279d148ffe1cdadbdd741dfc1a8d38d3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--unsupported_questions.py": "b85a4cf14f9596cd14b480acd323772fc91084ad1413fa27435bdb7ffe5baa6b", + "eval/datasets/longdoc.jsonl": "7f5ade95e1f283d0db8cf78e53ed8995d3534f847e616d2c0005fd8da37ac790", + "eval/engine_capacity.py": "1940da1c3a435d81c7b7a1a689e966c23b92e4f94af115b45813dd30e2c04eec", + "eval/evidence_contracts.py": "03969fdf01e78135c66e698d3f523e5312ccca3737dd3036b37a2c6676ba4ea2", + "eval/external.py": "98500a97c18152b1b86a270062033c48176224d7468ac0f703ddc7de862a30e2", + "eval/external_checkpoints.py": "484e298039bfa04eef86bd7145428c312aaeaf059f5bdf8da7ae29d1150008d7", + "eval/extractor_quality.py": "50820fe7f821d111e17e4e77a3d1159e7d6979d110b052c4f254a5b309c2652a", + "eval/fts_insert_scaling.py": "6088997e0f85d430fafb74509e24a960fbd59c06c8b2839285942b97d2116724", + "eval/graph_every_bench.py": "79da573c5edf315f71bfab412d3ea283b8da45d1fdabc78ddd19302ead09e4f0", + "eval/graph_traversal.py": "b094f75c3a1d75ba3cf19e372187d692d3c595a1d9bde19bbe95ae0c79a5175f", + "eval/grounded.py": "053d5193b716a2c3e507fcd44057d392de910a4442b46bd7cc1f30ac0ba68541", + "eval/handoff_quality.py": "7daf635510764e236f48ca7e2537a85d8ebc1ad995513144329c1f0236405937", + "eval/harness.py": "8c96c26a121dfc2d9ea051a05861af8951c93a732dba9cb13de0de178414b016", + "eval/hosted_evidence.py": "7946cd8c1e3aa291268271b2aa11210d5f09c9b05ba635aa0b64bef07bdcee45", + "eval/hosted_ledger.py": "a53036d12ff671371c148910a816fb20c7e7f3346250a303722352f47b06c476", + "eval/hosted_luna.py": "4dbf02a65eec38bcde92d82952a0b372abbac1f68378d11a04528f4a31a835dc", + "eval/local_benchmark_queue.py": "43fa67b4d653e770822da816511e8e62b3714e60d2edd49ea2a4c5c3d8d20851", + "eval/local_capacity_campaign.py": "ab4935263f9d24c4e38bd4f16164b4c4c07eff91c695809b6fc75299d4f03d62", + "eval/longmemeval_v2.py": "defb4d47f453aa4615a8f101b82df3fadf64f0f9eae0ce1021d86d3750dad437", + "eval/longmemeval_v2_evidence.py": "8486bd4dcfdd8b1f7a14c32fe4f427c980ccdcc3aa2eb018d7dfc40305412eff", + "eval/longmemeval_v2_matrix.py": "ca085cd59481813cce5dbdfbc94f40f67173ac3a1bc3dce6f6d3e09eb7b08153", + "eval/metrics.py": "16857e2cf6ed339cb57a26c9bfa1879444b4d279bd972e5a9fa644ed1308afe0", + "eval/native_coverage_scaling.py": "0d318c116241050fc0c7bdbbb5646ca67944d7c304ccd9a462834e0553ffa90a", + "eval/performance.py": "dccc55c26dc396f9fee98defd152900cf8aabeb5d6198bc711e0eb8f472ecc57", + "eval/performance_engine.py": "3d37cf0a5989c8fa6e8b6ab7ae0b2e0d5410a8b922d2f3130c1a7794d93dcbb1", + "eval/planned_recall.py": "f9a87291ecb181045b98ca65fe55db820bf7cee4ae4f4d087ca3458afdd7837e", + "eval/proactive_ranking.py": "8610541f1d547f9c0eb46d078dbcaa670c0a97157acc37f96ec08b482cb7a6ab", + "eval/productivity.py": "6d4644ebdc44472aeb3879963774fab276bfa269b781139c46ded48774a22717", + "eval/public_readiness.py": "5ce8a18d0bfe09e75e88548a589b8fc6d2cbf04c0f8cd1ce51cd9519136a2751", + "eval/redteam_poisoning.py": "fce120cc3adf2ee966b59cd3ea7f20d242a0af49b52492143543130fe14c0cc8", + "eval/reinforcement.py": "72ed766775a2658eaa728afec51c0ac22d97a90e813111954df66a6ec50f2bef", + "eval/repair_discovery.py": "db05496fbbcb0df86c5cdc2f0c85fb6b6605b0cace6cb44ae2add10b72784b5f", + "eval/resolver_reworded_corrections.py": "a9054778a37b2175b46f04b674b4779e358931eee5d2ae52bbc5f953d234fb9e", + "eval/resource_hierarchy.py": "5ab6c989bb143c4386749c45a33c190447e829c1b5657e8c0aca30f34bd69461", + "eval/rework_statistics.py": "e12c14288797c5cf2dd93d51f606244287bc2f4ff8bd401f1d1b072efd1f9529", + "eval/run_longmemeval_v2.py": "866863d9f8f7ce8f7c3c36741ab324faa5fae417827f907c655eace38de0f5ac", + "eval/task_pairs.py": "fddc54804e8837ec0731813297fb55825458317f898e29176e16f3f5a2f527fd", + "eval/user_journeys.py": "a1c8436d4a6871baff21f9aa4f6ac1545def60d946cd3b1454c3d9cd8661a049", + "eval/vector_scale.py": "3f9c327d9eca1a857512ddc208e972933be1a7d4fa7fa0017aca0cbf8fe7bb6d", + "eval/vector_scale_storage.py": "24040fd1b96b9f9cd43ea37b0b37ea118a02bd096aff77fc67ff8b0df769b1dc", + "eval/vector_scan_plan.py": "34fba3d029bfc78134e8c9c450b019ff56c3bdcbeb921400888077cb44e9b848", + "scripts/export_offline_evidence.py": "4e10c2b3d5f6a2024a7f95f7b87ce47ec2cb4ef31c55611b2e5cf35502ebc0ba" + } + } +} diff --git a/docs/benchmark-evidence/offline-fixtures-v79.json.sha256 b/docs/benchmark-evidence/offline-fixtures-v79.json.sha256 new file mode 100644 index 000000000..7209831ed --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v79.json.sha256 @@ -0,0 +1 @@ +484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c offline-fixtures-v79.json diff --git a/docs/images/context-efficiency.svg b/docs/images/context-efficiency.svg index 8cdfe7192..8f6003e9e 100644 --- a/docs/images/context-efficiency.svg +++ b/docs/images/context-efficiency.svg @@ -1,6 +1,6 @@ Measured context and retrieval boundaries -Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 d8fd03aed3a738e6581a5e4ee5859a2328cf907e41c3b2a3532542691a1b37d4. +Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c. @@ -105,7 +105,7 @@ mcp transport not measured SOURCE ARTIFACT -d8fd03aed3a7 +484c9ab9a62c SHA-256 prefix Artifact-driven local measurements diff --git a/docs/images/evidence-backed-agent-examples.svg b/docs/images/evidence-backed-agent-examples.svg index 1ccdb7aa7..eb2197713 100644 --- a/docs/images/evidence-backed-agent-examples.svg +++ b/docs/images/evidence-backed-agent-examples.svg @@ -1,6 +1,6 @@ Three evidence-backed Engraphis agent behaviors - A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: d8fd03aed3a738e6581a5e4ee5859a2328cf907e41c3b2a3532542691a1b37d4. + A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: 484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c. @@ -47,5 +47,5 @@ Reproduce: eval.chunking_eval + eval.grounded - SHA256 d8fd03aed3a738e6581a5e4ee5859a2328cf907e41c3b2a3532542691a1b37d4 + SHA256 484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c diff --git a/engraphis/classic_assets/dashboard.js b/engraphis/classic_assets/dashboard.js index e08325ed6..6b498008f 100644 --- a/engraphis/classic_assets/dashboard.js +++ b/engraphis/classic_assets/dashboard.js @@ -1220,7 +1220,7 @@ function loadAllGraphEngine(){ if(typeof EngraphisEveryGraph!=='undefined')return Promise.resolve(); if(!ALL_GRAPH_ENGINE_LOADING){ ALL_GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ - const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-2'; + const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-3'; script.onload=()=>{typeof EngraphisEveryGraph==='undefined'?reject(new Error('Every-node graph asset loaded without registering EngraphisEveryGraph')):resolve()}; script.onerror=()=>reject(new Error('Every-node graph asset could not load')); document.head.appendChild(script); @@ -1237,7 +1237,7 @@ function loadGraphEngine(loadAll=false){ GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ const script=document.createElement('script'); const bust=GRAPH_ENGINE_RETRY>0?'&r='+GRAPH_ENGINE_RETRY:''; - script.src='/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-2'+bust; + script.src='/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-3'+bust; /* A 200 that never registers the global is a corrupt/truncated asset, not a success — resolving there would hand graphRenderEngine() an undefined EngraphisGraph. Failed attempts drop the script node and clear the memo so the next call retries with a diff --git a/engraphis/classic_assets/index.html b/engraphis/classic_assets/index.html index a38f359ae..9e9424f62 100644 --- a/engraphis/classic_assets/index.html +++ b/engraphis/classic_assets/index.html @@ -349,6 +349,6 @@ graph view. dashboard.js fetches both on demand from graphRender(); see loadForceGraph() and loadGraphEngine(). scripts/externalize_dashboard_assets.py enforces both halves: they stay out of this file, and the lazy references still have to resolve. --> - + diff --git a/engraphis/dashboard_assets/engraphis-graph-every.js b/engraphis/dashboard_assets/engraphis-graph-every.js index f2210a656..d5680c07c 100644 --- a/engraphis/dashboard_assets/engraphis-graph-every.js +++ b/engraphis/dashboard_assets/engraphis-graph-every.js @@ -8,7 +8,7 @@ (function () { 'use strict'; - const WORKER_URL = '/v2-assets/engraphis-graph-every-worker.js?v=20260927-unmerged-readiness-2'; + const WORKER_URL = '/v2-assets/engraphis-graph-every-worker.js?v=20260927-unmerged-readiness-3'; const MAX_NODES = 20000; const MAX_LINKS = 200000; const LABEL_MAX = 220; diff --git a/engraphis/dashboard_assets/engraphis-spacetime.js b/engraphis/dashboard_assets/engraphis-spacetime.js index 33a6062aa..91814c557 100644 --- a/engraphis/dashboard_assets/engraphis-spacetime.js +++ b/engraphis/dashboard_assets/engraphis-spacetime.js @@ -278,15 +278,28 @@ if (observer) observer.observe(container); return { setEngine(next) { - if (next && next !== engine) { engine = next; pushedSnapshots = false; latest = null; } + if (destroyed || !next || next === engine) return; + engine = next; + pushedSnapshots = false; + latest = null; + if (active) wake(true); }, setEnabled(on) { + if (destroyed) return; active = on === true; - if (!active) trails.clear(); - else { refreshSnapshot(); wake(true); } - return; + if (!active) { + cancelAnimationFrame(frame); + frame = 0; + trails.clear(); + const bounds = resize(); + ctx.clearRect(0, 0, bounds.width, bounds.height); + return; + } + refreshSnapshot(); + wake(true); }, setSnapshot(snapshot) { + if (destroyed) return; latest = snapshot || null; pushedSnapshots = snapshot != null; if (active) wake(); diff --git a/engraphis/dashboard_assets/index.html b/engraphis/dashboard_assets/index.html index e7267ce81..0551d6b45 100644 --- a/engraphis/dashboard_assets/index.html +++ b/engraphis/dashboard_assets/index.html @@ -806,6 +806,6 @@

Connected nodes

- + diff --git a/engraphis/dashboard_assets/ledger.js b/engraphis/dashboard_assets/ledger.js index 24cd0a6c5..b0dfb8b41 100644 --- a/engraphis/dashboard_assets/ledger.js +++ b/engraphis/dashboard_assets/ledger.js @@ -475,7 +475,7 @@ if (!graphAllAssetsPromise) { const controller = new AbortController(); const attempt = loadScript( - graphAssetSource('/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-2'), + graphAssetSource('/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-3'), 'EngraphisEveryGraph', controller.signal, ); graphAllAssetsPromise = attempt; @@ -508,10 +508,10 @@ graphAssetSource('/v2-assets/vendor/force-graph.min.js?v=20260727-final'), 'ForceGraph', controller.signal, )).then(() => loadScript( - graphAssetSource('/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-2'), + graphAssetSource('/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-3'), 'EngraphisGraph', controller.signal, )).then(() => loadScript( - graphAssetSource('/v2-assets/engraphis-spacetime.js?v=20260927-unmerged-readiness-2'), + graphAssetSource('/v2-assets/engraphis-spacetime.js?v=20260927-unmerged-readiness-3'), 'EngraphisSpacetime', controller.signal, )); graphAssetsPromise = attempt; diff --git a/engraphis/mcp_http_cli.py b/engraphis/mcp_http_cli.py index ad90967c6..79740cb28 100644 --- a/engraphis/mcp_http_cli.py +++ b/engraphis/mcp_http_cli.py @@ -136,15 +136,11 @@ def main(argv=None) -> None: # Import only after --help and dependency validation: FastMCP registers tools at # module import time, so importing it eagerly would make even help unusable. - from engraphis.mcp_server import mcp - - # The eager exact-backend check may be absent from test mocks that replace - # engraphis.mcp_server with a minimal stand-in; fall back to a no-op so - # those tests stay green while production callers always run the check. - try: - from engraphis.mcp_server import _eager_exact_backend_check - except ImportError: - _eager_exact_backend_check = lambda: None # noqa: E731 + from engraphis.mcp_server import ( + _eager_exact_backend_check, + _preload_sentence_transformers, + mcp, + ) server = mcp if args.classic: @@ -163,6 +159,7 @@ def main(argv=None) -> None: # healthy process can answer any request. Spec-compliant clients handle the # absent GET SSE stream (the server answers 405 and clients skip it). server.settings.stateless_http = True + _preload_sentence_transformers() _eager_exact_backend_check() server.run(transport=args.transport) diff --git a/engraphis/mcp_server.py b/engraphis/mcp_server.py index 7ad88e814..abf6bac51 100644 --- a/engraphis/mcp_server.py +++ b/engraphis/mcp_server.py @@ -25,6 +25,7 @@ import hashlib import hmac +import importlib import json import logging import math @@ -56,6 +57,7 @@ "Install it with: pip install \"engraphis[mcp]\" (or: pip install mcp)" ) +from engraphis.backends.model_source import validate_model_source from engraphis.config import settings from engraphis.core.context import RegexTokenCounter from engraphis.core.poisoning import prompt_eligible @@ -3235,6 +3237,44 @@ def _start_background_warmup() -> None: thread.start() +def _preload_sentence_transformers() -> None: + """Import semantic dependencies on the launcher thread before serving MCP. + + On Windows, a first native import in an MCP worker or warmup thread can stall + the first tool call. Keep model construction lazy; this imports only the + optional package. The factory still decides whether a failed import may + fall back or must fail under exact-backend mode. + """ + policy = os.environ.get("ENGRAPHIS_MCP_PRELOAD_EMBEDDER", "auto").strip().lower() + if policy in {"0", "false", "no", "off"}: + return + if policy not in {"1", "true", "yes", "on"} and sys.platform != "win32": + return + sources = [ + (getattr(settings, "embed_model", ""), getattr(settings, "embed_revision", None)), + (getattr(settings, "rerank_model", ""), getattr(settings, "rerank_revision", None)), + ] + if not any(str(model or "").strip() for model, _revision in sources): + return + # Strict provenance must fail before optional loaders are imported, even when + # ordinary backend failures are allowed to fall back to offline behavior. + for model, revision in sources: + validate_model_source( + model, revision, + require_immutable_models=getattr(settings, "require_immutable_models", False), + loader="MCP semantic dependency preload", + ) + + try: + # Dependencies may print during import; stdout is the JSON-RPC wire. + from contextlib import redirect_stdout + + with redirect_stdout(sys.stderr): + importlib.import_module("sentence_transformers") + except Exception as exc: # noqa: BLE001 - optional dependency; factory owns policy + logger.debug("MCP embedding dependency preload skipped (%s)", type(exc).__name__) + + async def _safe_run_stdio_async(server: FastMCP) -> None: """Run stdio transport with pure wire protocol isolation. @@ -3253,6 +3293,7 @@ async def _safe_run_stdio_async(server: FastMCP) -> None: # dependency may write diagnostics to stdout while it imports; stdio MCP # reserves that stream exclusively for JSON-RPC frames. sys.stdout = sys.stderr + _preload_sentence_transformers() _eager_exact_backend_check() _start_background_warmup() if real_stdout_buffer is not None and real_stdin_buffer is not None: diff --git a/engraphis/static/dashboard.js b/engraphis/static/dashboard.js index e08325ed6..6b498008f 100644 --- a/engraphis/static/dashboard.js +++ b/engraphis/static/dashboard.js @@ -1220,7 +1220,7 @@ function loadAllGraphEngine(){ if(typeof EngraphisEveryGraph!=='undefined')return Promise.resolve(); if(!ALL_GRAPH_ENGINE_LOADING){ ALL_GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ - const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-2'; + const script=document.createElement('script');script.src='/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-3'; script.onload=()=>{typeof EngraphisEveryGraph==='undefined'?reject(new Error('Every-node graph asset loaded without registering EngraphisEveryGraph')):resolve()}; script.onerror=()=>reject(new Error('Every-node graph asset could not load')); document.head.appendChild(script); @@ -1237,7 +1237,7 @@ function loadGraphEngine(loadAll=false){ GRAPH_ENGINE_LOADING=new Promise((resolve,reject)=>{ const script=document.createElement('script'); const bust=GRAPH_ENGINE_RETRY>0?'&r='+GRAPH_ENGINE_RETRY:''; - script.src='/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-2'+bust; + script.src='/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-3'+bust; /* A 200 that never registers the global is a corrupt/truncated asset, not a success — resolving there would hand graphRenderEngine() an undefined EngraphisGraph. Failed attempts drop the script node and clear the memo so the next call retries with a diff --git a/engraphis/static/index.html b/engraphis/static/index.html index a03b22412..bb02ff139 100644 --- a/engraphis/static/index.html +++ b/engraphis/static/index.html @@ -349,6 +349,6 @@ graph view. dashboard.js fetches both on demand from graphRender(); see loadForceGraph() and loadGraphEngine(). scripts/externalize_dashboard_assets.py enforces both halves: they stay out of this file, and the lazy references still have to resolve. --> - + diff --git a/tests/e2e/graph-engine.spec.js b/tests/e2e/graph-engine.spec.js index 91a02aed0..bf5058d80 100644 --- a/tests/e2e/graph-engine.spec.js +++ b/tests/e2e/graph-engine.spec.js @@ -20,7 +20,7 @@ const { test, expect } = require('@playwright/test'); */ const workspace = 'graph-e2e'; -const stellarOrbitAssetVersion = '20260927-unmerged-readiness-2'; +const stellarOrbitAssetVersion = '20260927-unmerged-readiness-3'; // A small connected store: two clusters joined by one bridge, so communities, the legend and // the bridge detector all have something real to work on. diff --git a/tests/e2e/ledger.spec.js b/tests/e2e/ledger.spec.js index fb0aedf0b..6208d5d28 100644 --- a/tests/e2e/ledger.spec.js +++ b/tests/e2e/ledger.spec.js @@ -1027,14 +1027,14 @@ test('Ledger cache-busts a graph renderer that fetched but did not register', as await expect(page.locator('#graph-empty')).toContainText('Graph unavailable'); expect(rendererRequests).toHaveLength(1); const first = new URL(rendererRequests[0]); - expect(first.searchParams.get('v')).toBe('20260927-unmerged-readiness-2'); + expect(first.searchParams.get('v')).toBe('20260927-unmerged-readiness-3'); expect(first.searchParams.has('retry')).toBe(false); await page.getByRole('button', { name: 'Reload data' }).click(); await expect(page.locator('#graph-count')).toContainText('3 entities · 1 relations'); expect(rendererRequests).toHaveLength(2); const second = new URL(rendererRequests[1]); - expect(second.searchParams.get('v')).toBe('20260927-unmerged-readiness-2'); + expect(second.searchParams.get('v')).toBe('20260927-unmerged-readiness-3'); expect(second.searchParams.get('retry')).toBe('1'); }); diff --git a/tests/test_benchmark_evidence.py b/tests/test_benchmark_evidence.py index 77ed4bd1a..543c12e3d 100644 --- a/tests/test_benchmark_evidence.py +++ b/tests/test_benchmark_evidence.py @@ -33,8 +33,8 @@ ROOT = Path(__file__).resolve().parents[1] -PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v77.json" -PUBLIC_OFFLINE_SHA = "d8fd03aed3a738e6581a5e4ee5859a2328cf907e41c3b2a3532542691a1b37d4" +PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v79.json" +PUBLIC_OFFLINE_SHA = "484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c" @pytest.fixture(scope="module") diff --git a/tests/test_documentation_contracts.py b/tests/test_documentation_contracts.py index 6123b41f1..b73441ffa 100644 --- a/tests/test_documentation_contracts.py +++ b/tests/test_documentation_contracts.py @@ -107,7 +107,7 @@ def test_core_backend_imports_stay_behind_outer_composition_root() -> None: def test_benchmark_text_alternatives_match_registered_fixture_boundary() -> None: """The current image and its alt text expose only current registered boundaries.""" - registry_path = ROOT / "docs/benchmark-evidence/offline-fixtures-v77.json" + registry_path = ROOT / "docs/benchmark-evidence/offline-fixtures-v79.json" registry_bytes = registry_path.read_bytes() registry = json.loads(registry_bytes) measurements = {run["id"]: run["result"] for run in registry["runs"]} diff --git a/tests/test_graph_engine_asset.py b/tests/test_graph_engine_asset.py index ad14deab2..50bf3e78c 100644 --- a/tests/test_graph_engine_asset.py +++ b/tests/test_graph_engine_asset.py @@ -471,7 +471,7 @@ def test_graph_engine_deep_link_reaches_the_next_engine_after_a_lazy_load() -> N report = _run_routing("loads") assert report["appended"] == [ - "/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-2" + "/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-3" ] # It waits rather than rendering something wrong in the meantime. assert report["beforeSettle"] == {"engine": 0, "classic": 0} @@ -486,7 +486,7 @@ def test_classic_route_reaches_the_canonical_engine_without_a_query_flag() -> No report = _run_routing("classic") assert report["appended"] == [ - "/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-2" + "/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-3" ] assert report["beforeSettle"] == {"engine": 0, "classic": 0} assert report["engine"] == 1 @@ -500,7 +500,7 @@ def test_show_all_lazily_loads_its_renderer_after_the_main_engine_is_ready() -> report = _run_routing("all-loaded") assert report["appended"] == [ - "/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-2" + "/v2-assets/engraphis-graph-every.js?v=20260927-unmerged-readiness-3" ] assert report["beforeSettle"] == {"engine": 0, "classic": 0} assert report["engine"] == 1 @@ -2567,6 +2567,105 @@ def test_spacetime_canvas_warps_the_grid_and_bounds_trails_without_dom_nodes(pus assert report["visibilityDetached"] is True +@requires_node +@pytest.mark.parametrize("replace_paused_engine", [False, True]) +def test_spacetime_lifecycle_clears_disabled_canvas_and_wakes_replacements(replace_paused_engine) -> None: + report = _run_spacetime_node( + """ + const replacePausedEngine = REPLACE_PAUSED_ENGINE; + const frames = new Map(); + let nextFrame = 0, clears = 0, strokes = 0; + const reads = { a: 0, b: 0, c: 0, d: 0 }; + const ctx = new Proxy({}, { + get(_target, key) { + if (key === 'clearRect') return () => { clears++; }; + if (key === 'stroke') return () => { strokes++; }; + return () => ({ addColorStop() {} }); + }, + set() { return true; }, + }); + globalThis.requestAnimationFrame = callback => { + const id = ++nextFrame; + frames.set(id, callback); + return id; + }; + globalThis.cancelAnimationFrame = id => frames.delete(id); + globalThis.window = { devicePixelRatio: 1 }; + globalThis.document = { + hidden: false, addEventListener() {}, removeEventListener() {}, + createElement: () => ({ + width: 0, height: 0, setAttribute() {}, remove() {}, + getContext: () => ctx, + }), + }; + const container = { + clientWidth: 900, clientHeight: 600, appendChild() {}, + addEventListener() {}, removeEventListener() {}, + }; + const tick = stamp => { + const entry = frames.entries().next().value; + if (!entry) return false; + frames.delete(entry[0]); + entry[1](stamp); + return true; + }; + const snapshot = paused => ({ + paused, nodes: [], systemAnchors: [], + center: { x: 0, y: 0, radius: 11 }, + viewport: { x: 450, y: 300, zoom: 1 }, + }); + const engine = (key, paused) => ({ + getPhysicsSnapshot() { reads[key]++; return snapshot(paused); }, + }); + new Function('window', source)(window); + const overlay = window.EngraphisSpacetime.create(container, engine('a', replacePausedEngine)); + if (replacePausedEngine) overlay.setSnapshot(snapshot(true)); + overlay.setEnabled(true); + tick(100); + const first = { frames: frames.size, clears, strokes, aReads: reads.a }; + let replacementQueued = null; + if (replacePausedEngine) { + overlay.setEngine(engine('b', false)); + replacementQueued = frames.size; + tick(140); + } + const beforeDisable = { frames: frames.size, clears, strokes, bReads: reads.b }; + overlay.setEnabled(false); + const disabled = { frames: frames.size, clears, strokes, reads: { ...reads } }; + tick(replacePausedEngine ? 156 : 116); + tick(190); + const afterTicks = { frames: frames.size, clears, strokes, reads: { ...reads } }; + overlay.setEngine(engine('c', true)); + overlay.setEngine(null); + const disabledReplacement = { frames: frames.size, cReads: reads.c }; + overlay.setEnabled(true); + tick(220); + const reenabled = { frames: frames.size, cReads: reads.c }; + overlay.destroy(); + overlay.setEngine(engine('d', false)); + overlay.setEnabled(true); + overlay.setSnapshot(snapshot(false)); + const destroyed = { frames: frames.size, cReads: reads.c, dReads: reads.d }; + emit({ first, replacementQueued, beforeDisable, disabled, afterTicks, + disabledReplacement, reenabled, destroyed }); + """.replace("REPLACE_PAUSED_ENGINE", "true" if replace_paused_engine else "false") + ) + assert report["first"]["frames"] == (0 if replace_paused_engine else 1) + assert report["first"]["aReads"] == (0 if replace_paused_engine else 2) + assert report["first"]["strokes"] > 0 + if replace_paused_engine: + assert report["replacementQueued"] == 1 + assert report["beforeDisable"]["bReads"] == 1 + assert report["beforeDisable"]["frames"] == 1 + assert report["disabled"]["clears"] == report["beforeDisable"]["clears"] + 1 + assert report["disabled"]["strokes"] == report["beforeDisable"]["strokes"] + assert report["disabled"]["frames"] == 0 + assert report["afterTicks"] == report["disabled"] + assert report["disabledReplacement"] == {"frames": 0, "cReads": 0} + assert report["reenabled"] == {"frames": 0, "cReads": 2} + assert report["destroyed"] == {"frames": 0, "cReads": 2, "dReads": 0} + + @requires_node def test_advanced_spacetime_controls_pause_live_orbits_and_drag_release_is_bounded() -> None: """The public controls drive one observable physics state, including slingshot release.""" @@ -10580,10 +10679,10 @@ def test_primary_graph_dependencies_are_lazy_retryable_and_csp_clean() -> None: d3 = loader.index("'/v2-assets/vendor/d3.min.js?v=20260727-final'") force_graph = loader.index("'/v2-assets/vendor/force-graph.min.js?v=20260727-final'") renderer = loader.index( - "'/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-2'" + "'/v2-assets/engraphis-graph.js?v=20260927-unmerged-readiness-3'" ) assert d3 < force_graph < renderer - assert '/v2-assets/ledger.js?v=20260927-unmerged-readiness-2' in markup + assert '/v2-assets/ledger.js?v=20260927-unmerged-readiness-3' in markup assert "if (graphAssetsPromise === attempt) releaseGraphAssetsAttempt(attempt)" in loader assert "graphAssetsRetry = Math.min(graphAssetsRetry + 1, 10)" in loader all_loader = source[source.index("function ensureGraphAllAsset()"): diff --git a/tests/test_mcp_server.py b/tests/test_mcp_server.py index daaa8f1bd..fdb2a060f 100644 --- a/tests/test_mcp_server.py +++ b/tests/test_mcp_server.py @@ -299,7 +299,8 @@ def server(): fake_module = types.ModuleType("engraphis.mcp_server") fake_module.mcp = smart_server fake_module.classic_mcp = classic_server - fake_module._eager_exact_backend_check = lambda: None + fake_module._preload_sentence_transformers = lambda: runs.append("preload") + fake_module._eager_exact_backend_check = lambda: runs.append("exact") monkeypatch.setitem(sys.modules, "engraphis.mcp_server", fake_module) monkeypatch.setattr(mcp_http_cli, "_dependency_error", lambda: "") @@ -315,7 +316,7 @@ def server(): # with every restart, and the next client request then 404s ("Session # terminated"), parking gateway clients with zero registered tools. assert selected.settings.stateless_http is True - assert runs == [{"transport": "streamable-http"}] + assert runs == ["preload", "exact", {"transport": "streamable-http"}] middleware = TransportSecurityMiddleware(selected.settings.transport_security) def request(request_host, request_origin): @@ -659,7 +660,7 @@ def test_mcp_server_module_entrypoint_runs_stdio_handshake(tmp_path): input=payload, text=True, capture_output=True, - timeout=15, + timeout=45, check=False, ) @@ -693,6 +694,47 @@ def test_mcp_server_module_entrypoint_serves_first_tool_call(tmp_path): assert result["content"] +@pytest.mark.skipif(sys.platform != "win32", reason="Windows native import startup") +def test_stdio_first_semantic_tool_call_completes_with_cached_model(tmp_path): + """A fresh MCP process must complete its first semantic tool call.""" + from scripts.smoke_installed_product import _Mcp + + pytest.importorskip("sentence_transformers") + hub = pytest.importorskip("huggingface_hub") + try: + hub.snapshot_download( + "sentence-transformers/all-MiniLM-L6-v2", local_files_only=True, + ) + except Exception: + pytest.skip("semantic model is not cached locally") + + env = os.environ.copy() + env.update({ + "ENGRAPHIS_DB_PATH": str(tmp_path / "stdio-semantic-first-tool.db"), + "ENGRAPHIS_EMBED_MODEL": "local:sentence-transformers/all-MiniLM-L6-v2", + "ENGRAPHIS_EXTRACTOR": "none", + "ENGRAPHIS_GRAPH_EXTRACTOR": "none", + "ENGRAPHIS_VECTOR_BACKEND": "numpy", + "ENGRAPHIS_MCP_WARMUP": "1", + "ENGRAPHIS_MCP_PRELOAD_EMBEDDER": "auto", + "HF_HUB_OFFLINE": "1", + "TRANSFORMERS_OFFLINE": "1", + }) + with _Mcp([sys.executable, "-m", "engraphis.mcp_cli"], env, ROOT, 45) as client: + started = client.call("engraphis_session", { + "action": "start", "workspace": "default", "repo": "engraphis", + "agent": "startup-test", "goal": "Verify semantic first call", + "token_budget": 64, + }) + assert started["context_status"] == "available" + assert started["semantic_support"] is True + ended = client.call("engraphis_session", { + "action": "end", "session_id": started["session_id"], + "summary": "Fresh semantic startup verified", "open_threads": [], + }) + assert ended["status"] == "summarized" + + def test_classic_mcp_entrypoint_preserves_historical_server_identity(tmp_path): payload = json.dumps({ "jsonrpc": "2.0", @@ -721,7 +763,7 @@ def test_classic_mcp_entrypoint_preserves_historical_server_identity(tmp_path): input=payload, text=True, capture_output=True, - timeout=15, + timeout=45, check=False, ) @@ -1431,6 +1473,143 @@ def test_service_singleton_is_thread_safe(): assert inst is instances[0] +@pytest.mark.parametrize("platform,policy,model,reranker,expected", [ + ("win32", "auto", "local:model", "", True), + ("win32", "auto", "", "local:reranker", True), + ("win32", "auto", "local:model", "local:reranker", True), + ("linux", "auto", "local:model", "", False), + ("win32", "off", "local:model", "local:reranker", False), + ("linux", "on", "local:model", "", True), + ("win32", "auto", "", "", False), + ("win32", "on", "", "", False), +]) +def test_semantic_preload_policy_preserves_the_protocol( + monkeypatch, capsys, platform, policy, model, reranker, expected, +): + import io + from types import SimpleNamespace + import engraphis.mcp_server as server + + diagnostics = io.StringIO() + imported = [] + + def import_package(name): + imported.append(name) + print("optional dependency diagnostic") + + monkeypatch.setenv("ENGRAPHIS_MCP_PRELOAD_EMBEDDER", policy) + monkeypatch.setattr(server, "settings", SimpleNamespace( + embed_model=model, rerank_model=reranker, require_immutable_models=True, + )) + monkeypatch.setattr(server, "sys", SimpleNamespace(platform=platform, stderr=diagnostics)) + monkeypatch.setattr(server, "importlib", SimpleNamespace(import_module=import_package)) + server._preload_sentence_transformers() + assert imported == (["sentence_transformers"] if expected else []) + assert diagnostics.getvalue() == ("optional dependency diagnostic\n" if expected else "") + assert capsys.readouterr().out == "" + + +def test_semantic_preload_failure_defers_to_backend_policy(monkeypatch, caplog, capsys): + import io + from types import SimpleNamespace + import engraphis.mcp_server as server + + def unavailable(_name): + raise ImportError("private dependency path must not enter diagnostics") + + monkeypatch.setenv("ENGRAPHIS_MCP_PRELOAD_EMBEDDER", "on") + monkeypatch.setattr(server, "settings", SimpleNamespace(embed_model="local:model")) + monkeypatch.setattr(server, "sys", SimpleNamespace(platform="win32", stderr=io.StringIO())) + monkeypatch.setattr(server, "importlib", SimpleNamespace(import_module=unavailable)) + with caplog.at_level(logging.DEBUG, logger=server.logger.name): + server._preload_sentence_transformers() + assert "preload skipped (ImportError)" in caplog.text + assert "private dependency path" not in caplog.text + assert capsys.readouterr().out == "" + + +@pytest.mark.parametrize("configured", ["embed", "rerank"]) +@pytest.mark.parametrize("model,revision,allowed", [ + ("org/model", None, False), + ("org/model", "main", False), + ("org/model", "A" * 40, False), + ("org/model", "a" * 39, False), + ("org/model", "a" * 40, True), + ("local:cached-model", None, True), +]) +def test_semantic_preload_validates_sources_before_optional_imports( + monkeypatch, configured, model, revision, allowed, +): + import io + from types import SimpleNamespace + import engraphis.mcp_server as server + + imported = [] + settings = SimpleNamespace( + embed_model="", rerank_model="", require_immutable_models=True, + ) + setattr(settings, configured + "_model", model) + setattr(settings, configured + "_revision", revision) + monkeypatch.setenv("ENGRAPHIS_MCP_PRELOAD_EMBEDDER", "on") + monkeypatch.setattr(server, "settings", settings) + monkeypatch.setattr(server, "sys", SimpleNamespace(platform="win32", stderr=io.StringIO())) + monkeypatch.setattr(server, "importlib", SimpleNamespace(import_module=imported.append)) + if allowed: + server._preload_sentence_transformers() + assert imported == ["sentence_transformers"] + else: + with pytest.raises(ValueError, match="lowercase 40-character commit revision"): + server._preload_sentence_transformers() + assert imported == [] + + +def test_stdio_startup_validates_before_warming_or_serving(monkeypatch): + import io + from contextlib import asynccontextmanager + from types import SimpleNamespace + import anyio + import mcp.server.stdio as stdio + import engraphis.mcp_server as server + + events = [] + diagnostics = io.StringIO() + monkeypatch.setattr(server, "sys", SimpleNamespace( + stdin=io.StringIO(), stdout=io.StringIO(), stderr=diagnostics, + )) + + def preload(): + assert server.sys.stdout is diagnostics + events.append("preload") + + @asynccontextmanager + async def transport(**kwargs): + events.append("transport") + yield "reader", "writer" + + async def serve(reader, writer, options): + assert (reader, writer, options) == ("reader", "writer", "options") + events.append("serve") + + monkeypatch.setattr(server, "_preload_sentence_transformers", preload) + monkeypatch.setattr(server, "_eager_exact_backend_check", lambda: events.append("exact")) + monkeypatch.setattr(server, "_start_background_warmup", lambda: events.append("warmup")) + monkeypatch.setattr(stdio, "stdio_server", transport) + fake_server = SimpleNamespace(_mcp_server=SimpleNamespace( + run=serve, create_initialization_options=lambda: "options", + )) + anyio.run(server._safe_run_stdio_async, fake_server) + assert events == ["preload", "exact", "warmup", "transport", "serve"] + + def invalid_policy(): + raise ValueError("invalid model provenance") + + events.clear() + monkeypatch.setattr(server, "_preload_sentence_transformers", invalid_policy) + with pytest.raises(ValueError, match="invalid model provenance"): + anyio.run(server._safe_run_stdio_async, fake_server) + assert events == [] + + def test_background_warmup_honors_env(monkeypatch): import engraphis.mcp_server as server called = [] From 1b09828ea058e6595e34688a31488b4d266c42f2 Mon Sep 17 00:00:00 2001 From: Coding-Dev-Tools Date: Sun, 27 Sep 2026 06:06:00 -0400 Subject: [PATCH 5/6] test: exercise required MCP startup hooks in packaging fixture --- tests/test_packaging.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/test_packaging.py b/tests/test_packaging.py index 629413559..ac7378ba1 100644 --- a/tests/test_packaging.py +++ b/tests/test_packaging.py @@ -83,7 +83,11 @@ def test_http_mcp_cli_configures_the_packaged_transport(monkeypatch): "_transport_security", lambda host, port: security_calls.append((host, port)) or transport_security, ) - monkeypatch.setitem(sys.modules, "engraphis.mcp_server", types.SimpleNamespace(mcp=fake_mcp)) + fake_module = types.ModuleType("engraphis.mcp_server") + fake_module.mcp = fake_mcp + fake_module._preload_sentence_transformers = lambda: calls.append("preload") + fake_module._eager_exact_backend_check = lambda: calls.append("exact") + monkeypatch.setitem(sys.modules, "engraphis.mcp_server", fake_module) mcp_http_cli.main(["--host", "::1", "--port", "9876", "--transport", "sse"]) @@ -91,7 +95,7 @@ def test_http_mcp_cli_configures_the_packaged_transport(monkeypatch): assert fake_mcp.settings.port == 9876 assert fake_mcp.settings.transport_security is transport_security assert security_calls == [("::1", 9876)] - assert calls == ["sse"] + assert calls == ["preload", "exact", "sse"] def test_http_mcp_console_entrypoint_is_packaged_and_client_neutral(): From 0562e6642e33e81f972f6fe45f568deef03f87f7 Mon Sep 17 00:00:00 2001 From: Coding-Dev-Tools Date: Sun, 27 Sep 2026 06:49:38 -0400 Subject: [PATCH 6/6] release: prepare 1.7.8 with refreshed source-bound evidence --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 2 +- .claude-plugin/skill-assets.sha256 | 4 +- BENCHMARKS.md | 10 +- CHANGELOG.md | 14 + README.md | 4 +- .../offline-fixtures-v80.json | 691 ++++++++++++++++++ .../offline-fixtures-v80.json.sha256 | 1 + docs/images/context-efficiency.svg | 4 +- .../images/evidence-backed-agent-examples.svg | 4 +- engraphis/__init__.py | 4 +- engraphis/commercial_manifest.json | 2 +- eval/campaign_adapters.py | 2 +- pyproject.toml | 2 +- tests/test_benchmark_evidence.py | 4 +- tests/test_documentation_contracts.py | 2 +- 16 files changed, 729 insertions(+), 23 deletions(-) create mode 100644 docs/benchmark-evidence/offline-fixtures-v80.json create mode 100644 docs/benchmark-evidence/offline-fixtures-v80.json.sha256 diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6293512ef..5ff3765d3 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "engraphis-memory", "source": "./", "description": "Discipline for giving agents durable, scoped, explainable memory across sessions and repos with the Engraphis MCP tools.", - "version": "1.7.7" + "version": "1.7.8" } ] } diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 08c19693b..f92ba300e 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "engraphis-memory", - "version": "1.7.7", + "version": "1.7.8", "description": "Give agents durable, scoped, explainable memory across sessions and repos via the Engraphis MCP tools. Use when you learn something worth keeping, need prior context before acting, or ask why/how a fact changed. Covers remember/recall, why/timeline, forget/pin/correct, sessions, and code search.", "author": { "name": "The Engraphis Authors", diff --git a/.claude-plugin/skill-assets.sha256 b/.claude-plugin/skill-assets.sha256 index 812e64407..d713b2a54 100644 --- a/.claude-plugin/skill-assets.sha256 +++ b/.claude-plugin/skill-assets.sha256 @@ -1,5 +1,5 @@ -d0620f9a4f1c071ed9c1105cae296f9f1d32a673fa7bca6cc1a85ce22b393c57 .claude-plugin/marketplace.json -c8057476dc560c4dff1ecafbd357b470cbcd7e2c712eb3558f84b4571403753b .claude-plugin/plugin.json +df65a383a1ff80572fb6ebd9a807dca6d1ffc0f99f373971262de035b8e3622d .claude-plugin/marketplace.json +a03b5c38d836651d2c5c52173d21a5adeacfbbc4b80aac991c2154b6e060e174 .claude-plugin/plugin.json 4bc8979b9ffeb97190960e551dbf4ddc6f7aeeb7b86894fd2298a59ff0001efa skills/engraphis-memory/SKILL.md 055655db84af07561d002f0c69744313d8413c39f3e873f941f0fa0b1e76dc66 skills/engraphis-memory/references/CONVENTIONS.md 62019760766ff472a76a0f81437898f39e3c1fe2631732b7b7733e50c1ad837f skills/engraphis-memory/references/SCOPING.md diff --git a/BENCHMARKS.md b/BENCHMARKS.md index a60c20017..43eb1b958 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -94,14 +94,14 @@ interpretation and do not count as additional benchmark-quality gains. ### Public numeric evidence registry Every exact public aggregate retained below comes from the checked-in, public-safe -[`offline-fixtures-v79.json`](docs/benchmark-evidence/offline-fixtures-v79.json) artifact. Its +[`offline-fixtures-v80.json`](docs/benchmark-evidence/offline-fixtures-v80.json) artifact. Its SHA-256 is -`484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c`, also recorded in the +`ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2`, also recorded in the adjacent `.sha256` file. The artifact contains no raw questions, answers, prompts, customer data, or per-record content fingerprints. The fixture-suite digest is -`3f671b833301609801fd4dec5373838ad8cbb6c853e48ff959bf2b00d4d15264`. The artifact defines +`431b525443f5b4875646e7f6470d107f584120bdd6ee7f53d0b6484d003fa0f7`. The artifact defines the digest algorithm and records the SHA-256 of every suite and dataset file. Each evidence ID also binds its exact command through `sha256(UTF-8 exact command)`: @@ -123,10 +123,10 @@ Historical LoCoMo, graph, handoff, consolidation, and security figures remain pr source artifacts but are omitted from the current chart until each has a matching immutable, public-safe artifact. The chart labels coding outcomes, external datasets, and operational capacity as pending evaluation tracks rather than implying scores. Regenerate it with -`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v79.json --output docs/images/context-efficiency.svg` after selecting the report to publish. +`python scripts/render_benchmark_report.py --report docs/benchmark-evidence/offline-fixtures-v80.json --output docs/images/context-efficiency.svg` after selecting the report to publish. The companion examples are also generated from that artifact with -`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v79.json --output docs/images/evidence-backed-agent-examples.svg`. +`python -m scripts.render_benchmark_examples --report docs/benchmark-evidence/offline-fixtures-v80.json --output docs/images/evidence-backed-agent-examples.svg`. The historical-to-executable mapping is in [`docs/BENCHMARK_CHANGE_COVERAGE.md`](docs/BENCHMARK_CHANGE_COVERAGE.md). diff --git a/CHANGELOG.md b/CHANGELOG.md index 1443475ed..a2e69ec61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,20 @@ All notable changes to Engraphis are documented here. Format loosely follows ## [Unreleased] +## [1.7.8] - 2026-09-27 + +- Improved graph rendering and overlay scheduling, preserved saved Compact and custom + slider preferences, and corrected orbit radii, focus validation, and worker force limits. +- Hardened Windows MCP startup by preloading configured embedding and reranking + dependencies before background warmup, while retaining exact-backend requirements, + source-integrity validation, and an explicit preload opt-out. +- Added an experimental, explicitly authorized Jev decision adapter with fail-closed + response validation; it does not write memories or participate in grounded recall. +- Corrected API capacity and evidence projections and refreshed immutable offline + evidence and charts against the release source. Offline fixtures do not establish + live hosted-service or full-product qualification. +- Updated the optional Codex SDK to 0.155.1 and pinned CodeQL actions to 4.38.2. + ## [1.7.7] - 2026-09-23 - Cloud Sync shows local encryption-key and dependency readiness before enabling Sync now, diff --git a/README.md b/README.md index de4fcc7f8..9d99cc127 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,9 @@ neither is an end-to-end question-answer score. Coding outcomes, external datase operational capacity remain separate pending evaluation tracks until their artifacts are selected. These values are evidence IDs `offline-chunking` and `offline-performance` in -[`offline-fixtures-v79.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v79.json), +[`offline-fixtures-v80.json`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/docs/benchmark-evidence/offline-fixtures-v80.json), SHA-256 -`484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c`. +`ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2`. [`BENCHMARKS.md`](https://github.com/Coding-Dev-Tools/engraphis/blob/main/BENCHMARKS.md#public-numeric-evidence-registry) records the matching suite digest, exact commands, and per-command config digests. The offline fixture registry intentionally excludes external, model-dependent, consolidation, productivity, diff --git a/docs/benchmark-evidence/offline-fixtures-v80.json b/docs/benchmark-evidence/offline-fixtures-v80.json new file mode 100644 index 000000000..4f3c9dca9 --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v80.json @@ -0,0 +1,691 @@ +{ + "environment": { + "embedding": "deterministic", + "numpy": "2.4.5", + "platform": "win32", + "python": "3.12.10", + "vector_backend": "numpy" + }, + "generated_on": "2026-09-27", + "privacy": { + "contains_answers": false, + "contains_customer_data": false, + "contains_per_record_fingerprints": false, + "contains_prompts": false, + "contains_raw_questions": false + }, + "runs": [ + { + "boundary": "Deterministic offline retrieval fixture; normalized-character token estimator; not external QA or provider billing.", + "command": "python -m eval.chunking_eval --dataset eval/datasets/longdoc.jsonl --k 5", + "config_digest": "c1c8196aa7e1568ef3844a9fb2d76b87f342c39108e32d6ad144b885a76143b8", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-chunking", + "result": { + "chunked": { + "max_stored_tokens": 59, + "mean_context_tokens": 214.3, + "mean_evidence_tokens": 42.4, + "memories": 24, + "recall_at_k": 1.0 + }, + "context_reduction_pct": 71.1, + "documents": 6, + "k": 5, + "questions": 18, + "token_counter": "engraphis.chars4.v1", + "whole": { + "max_stored_tokens": 213, + "mean_context_tokens": 740.3, + "mean_evidence_tokens": 162.2, + "memories": 6, + "recall_at_k": 1.0 + } + } + }, + { + "boundary": "Deterministic offline CodeMem fixture; serialized JSON-shape payload proxies, not MCP transport responses, provider billing, or latency claims.", + "command": "python -m eval.performance --dataset eval/datasets/codemem.jsonl --k 5 --iterations 10 --json", + "config_digest": "bbe4aca81e58d4830e50a8fc7729a1d15b71d97a6299bccd79432b7f119677d7", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-performance", + "result": { + "answer_token_recall": 1.0, + "compact_serialized_payload_tokens": 11138, + "dataset_cases": 14, + "full_serialized_payload_tokens": 24590, + "hit_at_k": 1.0, + "k": 5, + "max_context_tokens": 108, + "mean_context_tokens": 85.38, + "memories": 44, + "packed_quality": { + "answer_token_recall": 1.0, + "hit_at_k": 1.0, + "recall_at_k": 1.0, + "sample_count": 26 + }, + "payload_boundary": { + "kind": "serialized_json_shape_proxy", + "mcp_envelope_serialized": false, + "token_counter": "engraphis.regex.v1", + "transport_measured": false + }, + "quality_scope": { + "packed": "packed_quality fields score only chunks admitted to reader context", + "retrieved": "legacy quality fields score all candidate chunks returned before context packing" + }, + "questions": 26, + "recall_at_k": 1.0, + "saved_serialized_payload_tokens": 13452, + "serialized_payload_savings_ratio": 0.5471, + "timed_recalls": 260, + "token_budget": 1500, + "token_counter": "engraphis.regex.v1" + } + }, + { + "boundary": "Deterministic offline support/abstention fixture; not a frontier-model answer-quality score.", + "command": "python -m eval.grounded", + "config_digest": "590442e51e3642c10489165759919dc86ffac62c182937330c153e7f8d5fc26f", + "config_digest_method": "sha256(UTF-8 exact command)", + "id": "offline-grounded", + "result": { + "abstained": 6, + "answerable": 5, + "decision_accuracy": 1.0, + "grounded": 5, + "off_topic": 6, + "quarantine_hits": 1, + "quarantined": 1 + } + } + ], + "schema": "engraphis-public-offline-fixtures/v1", + "suite": { + "digest": "431b525443f5b4875646e7f6470d107f584120bdd6ee7f53d0b6484d003fa0f7", + "digest_method": "sha256(canonical compact JSON mapping each sorted path to its file SHA-256)", + "files": { + "engraphis/__init__.py": "7d7e5e18c96a9a4f5c0eef6d123e7506736231819d11276b21e598f045fa40dd", + "engraphis/ai_context.py": "4dfd5d39eb95d05c591d1981e9e855eced73232f53efd9fe9966e0e08957d030", + "engraphis/app.py": "44d68ad8c0ff46baed01978c9b04e40b8be5031609d5a69e205b7f05da3777fb", + "engraphis/backends/__init__.py": "a9f22b9278362904166614081f1df78469d453601b298ce4e8afdba8a3722b25", + "engraphis/backends/codegraph.py": "83e723a91068d23694092fbe00157fcb2597061d453eb36f955bf55bc5b4d35e", + "engraphis/backends/embedder_api.py": "56a6bceea4f757325dcea987b0339e41d3875634b1ae5103f0537a358cf5878b", + "engraphis/backends/embedder_deterministic.py": "ec8b23de7e7e8273416125f5876ca96f55e4ae7881841bae55783ab0ba9130ad", + "engraphis/backends/embedder_st.py": "e1c20fd980e07060387e3f9fa37fe02a916959fc8abce4e6067a62699c726de1", + "engraphis/backends/encrypted_db.py": "25f6c1480d296a88f317213700a8b3c81e2732399bfac464b0d893465b25e846", + "engraphis/backends/extractor.py": "f2e3455ab7f14caee1d5b5c4ef071e498e90118f1b0ddcb8510c969583b0fc57", + "engraphis/backends/graph_extractor.py": "88561efa0d3fabc447a0a005b10e36261379d46218cf62d905e6928cd2fda676", + "engraphis/backends/jev_decision.py": "bdbe491d34805b0c8c52e4b8519d5f899110040187a6801df181ff5e44be965f", + "engraphis/backends/model_source.py": "8c3c7681f95214a2bbabd8de222e5ee11f42fe13402d27365654ae75fb363d4e", + "engraphis/backends/postgres_schema.py": "8468578c3add701d30d5eaa36d768ded2375d116e55f1836e09f6107a07a267e", + "engraphis/backends/query_planner.py": "bbdd77afc9b5523421b85b2ae63c8da7f5a7b777265450e0d21708a83e7bb23c", + "engraphis/backends/reranker.py": "747761d6cbfa421388974bcfd98d844f92391d80f4bf6a4feca00b0c7a6908ca", + "engraphis/backends/resources.py": "47cc867c3aecc8bd95fa284bc5bb04715f3339c19a0a11512973ef6171c95944", + "engraphis/backends/retention.py": "381d9371e3951d762f8b55eb54711de5697642acb39de99a714f246c059ecbd0", + "engraphis/backends/sync_folder.py": "e4f70a92a17f6a365910670df041e6e3ca421d44ada2827917cd66b4dc067bfa", + "engraphis/backends/sync_relay.py": "b8b9ad265453aba17ba7c27a355e12a793469b3e44cb217943c6fad9382a3006", + "engraphis/backends/vector_numpy.py": "c598831bea547824cfe08844816fa79857d3617cb0631238f95dad955a424f72", + "engraphis/backends/vector_sqlitevec.py": "6148e14ceaacc19239b64c642a3fba0e98797c78cec356210157afadf475a08b", + "engraphis/build_info.py": "624c22471e56d4c4047160808c4245488292af611564d1a63ca437605bbb414f", + "engraphis/classic_assets/__init__.py": "a7c1d52b285e3faa670ce231814b5758754aa0fbd05e1428e74c20c3ec51a4f1", + "engraphis/cloud_authz.py": "e80500579cb3a1d5fbf30814dc94e3e3967e50b311e8ed2fa56afcc13f7eb565", + "engraphis/cloud_features.py": "90e876f8993d99f01760cd01ae9fb63140e3f65036706e8fb0c8224560416330", + "engraphis/cloud_session.py": "7c83d7b85665c05aa4da2597a6b4ad2b951f1f8f4af20105d9d1750b9b123c2d", + "engraphis/commercial.py": "184f312066a9e682e51a0abeff042f1c0e8eed2d47470157b23930b5a17633aa", + "engraphis/config.py": "a46f3a335fad343e7df32942be91c04094fbafaf14b8b11f5fc433ef74743226", + "engraphis/core/__init__.py": "dd5143729c3939237f04636f437032b1f2d3a5f7d82c91bbc2a5a283c3f0ebaa", + "engraphis/core/adaptive_context.py": "cc5ce48109bb0d5230a5b2b8424b829c853feec5b5d5b82596413f2279b0c9f9", + "engraphis/core/browsing.py": "cfae752d52ef51b17c4ffbe44dde62d5b0e1ed0ca34ec0e1788f3991d94bf05f", + "engraphis/core/codegraph_export.py": "4641074258d7b23498f92dd45053a0fbb111863eaad2001c08e5e3c2dc2fd54f", + "engraphis/core/conflicts.py": "28530be25a4af0bffd8f609b965b33ca7f93199a70887789b2148fda8a61a486", + "engraphis/core/consolidate.py": "f66eedfe08319a64b761261ccf1c99b163eba564d6d4060534bf8c575aecf232", + "engraphis/core/context.py": "8cc15746e4de88bce7d34db8c11dfaa545f17305788e2167a286179171717fb9", + "engraphis/core/diagnostics.py": "5ba449bdf5087d8ccb5808379596e695c8f405da497372e99f2bac509f96e8e4", + "engraphis/core/documents.py": "84385db39ba44e06b58b4b26dbf954228ff4abed7230f28a7280166fa6457861", + "engraphis/core/engine.py": "f1ab3940f7a185f1e12b1a0b49857db8873c83313e8741822a3c80d818e59599", + "engraphis/core/evidence.py": "97912b52a3d22de909218f83c09c92572ed695d7b3c2117e5330271c6d84a7bd", + "engraphis/core/fsutil.py": "6db770fa8bd3e1a57dfa70eb8e8bc46d48c2dc53ead1b0b43eeecf085ef58cfc", + "engraphis/core/graph_layers.py": "64d74ab01c77119f6343ba6f1d6a84f9653f1a5d34d47ce7966f3ac31b29d2ea", + "engraphis/core/graph_policy.py": "ec5b373d01adb2de87df31d9f543130018e9a73faaaed239a184f14a32646615", + "engraphis/core/graph_scene.py": "d10465f5b87ed2af9382a8feb2cfbb6fba3a6157b13e1af50980bca52e857a83", + "engraphis/core/graphrank.py": "1279a58396104d3f906bfd5ec75b32efedfefe52201467bf19d80be3517017a5", + "engraphis/core/grounded.py": "ac40057dc37aa907e09c68e6b8cd54a989525fb310097df2970858708870ba3e", + "engraphis/core/ids.py": "e47eeadfaf560bc7638e1879fc491fa82d981cd42b9e4b05ef87033b2d7dfa60", + "engraphis/core/interfaces.py": "be11f909f0f59aca774b4cf7aeacf831123a5dc3fc1b889c47435b959e981266", + "engraphis/core/mutations.py": "dbb46a97686994e1652b2698e50c3309ff428d7258d6e8e53cbad7bb55b459aa", + "engraphis/core/obsidian.py": "991267c153cb7c4c40f7fe8f50aa71688892e250aaaf383b22c9e5910dc263b7", + "engraphis/core/poisoning.py": "5bc67169ee8032f3777f2d3969dcf71821437bd473ce4f917c4b41a50e845fb6", + "engraphis/core/query_planner.py": "249062d67392ab7c203cc71e9040e99bee91bf570604e90949149a93cb652120", + "engraphis/core/read_snapshots.py": "be08e63a88bd38ed91d61b28657a65201c38994856db2798b209a73151dd202a", + "engraphis/core/recall.py": "34959532fac07089ca8654fad0a1e945b11791918b3890420380ac7a9b78ccac", + "engraphis/core/resolve.py": "f01a6f55e44320ab04b97e516342f20155668863b2fc4765305e066d87586524", + "engraphis/core/retention_policy.py": "864c03bdb6e743cd0002c706de471e920f1fa1f1a9918ab343ef4c2042b47429", + "engraphis/core/retrieval_policy.py": "d169eb442115bd06c1e1da776fa6c1849e0795e658edd732a8d6821326b46b03", + "engraphis/core/savings.py": "cfbcfc7e476f4e28028555cd519696e23099f6210cf0b733225832aeaa0bc7dc", + "engraphis/core/schema.py": "ac273d3f0383995be815bbd866f2a36ea1398f30833aed57b8d4459afc87096b", + "engraphis/core/scoring.py": "f5b6ac291edf0968b3de83cb1951a97d5bfd8a8d079199cb2ef95bba0884c89a", + "engraphis/core/secrets.py": "a4835ba06e2616156528df6365ca1aba6cba0c97cdf834a709d2797a371099d2", + "engraphis/core/store.py": "2bcfda14325c6a846a45d87a7511a445d197618570eca0cf7f0c833596c2260c", + "engraphis/core/sync.py": "69f75b50fdb1ec9352f92460c89efeec8d72ca642bd10beb29474a8c62b4f58a", + "engraphis/core/textutil.py": "acd65031729fa5d91d09527b8eb52518b83cfce77a55e6b7ae2d94686e35c1a6", + "engraphis/core/user_model.py": "3147ec8ee7cfd855783f639874b63f331cdc822bd8bd9298cfb326dd18666026", + "engraphis/core/vector_repair.py": "a8c1812de4e3ed288eda3e54a505e136d6ebd3ec296788bcbb8804b11e13cfc8", + "engraphis/core/vector_search.py": "75800052e573e9af01c6fd098eaf8647c3c45cd7eb2601dae05d42359e19b234", + "engraphis/dashboard_app.py": "9305c9c72c43027b2b79c0ce559d398fc232929968d6ea03c37065e3227c8d51", + "engraphis/dashboard_assets/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "engraphis/device_connect.py": "c8cd0a22e9fd2d92a65bd74047cc3a8b7159bfc9a297cb639c1c7f1699f8802e", + "engraphis/document_import.py": "94fa0ca340ad0ebd060b143f46657798a81c440a11b82aa46fefa83fb65295dc", + "engraphis/engines/__init__.py": "111232af583889195c5f5a60298e32484348608e81d2bdd822fd3ecd2a33c1e4", + "engraphis/engines/embedder.py": "998b65dd566966bb6581fd9f09cdf46c58a3923ef5df3073ccdaa541153a3581", + "engraphis/engines/ingest.py": "1a5d4b52c13e533864329f9fff11c0f6ebc299ff7093a9d9275e5c9626a39ce2", + "engraphis/engines/intelligence.py": "b561589b98deb98271f104dfec6276aeba13c4815e627259be5f8769f2e7ad82", + "engraphis/engines/recall.py": "f979580d065599c07acbc3add59f71e52d9a186a2104b0e257daa7959ea88d26", + "engraphis/engines/reweight.py": "91ec5815f5d356a7068c36133d24405334450f361f902f99275bed3ccebffd49", + "engraphis/engines/thoughts.py": "4adb9c8a9bcfe736cb42fff9b5ce24631da6ec473d178e83f1c176fde3b8b814", + "engraphis/factory.py": "3b8765834cb04b052b89a9964b357b4ffb9c41a0f769bf1261768033653f708d", + "engraphis/graphdata.py": "195e583a4d4aefe97d8cff635cabea1ff9cd3f11c54ad392d951765d89910863", + "engraphis/hosted_client.py": "9c67aff6881c29704498f4ca99f836009be4ea58a248d74459c536dac7341a88", + "engraphis/http_security.py": "596981e96741fd47064d03db409605bbb435f062c0c6ef69b040aacdd8763a20", + "engraphis/inspector/__init__.py": "720cac28b8a6019d0a0c53809d5905b7d6eb9d4ecbac767505904c6ec3c39071", + "engraphis/inspector/app.py": "8aefe8a935397dde3c6466e691a7e6a7203ebe42e07aa00c332b733465e59e04", + "engraphis/licensing.py": "7e73c28b0e1c3536e2080a129af614f838d2cae3ec3a48a3d8ed7e5153c9e935", + "engraphis/llm/__init__.py": "f3096d2ddd652b99e6fc0b4c5a8786d9bbaba41b259df0b44ce93b57bde3a8b1", + "engraphis/llm/client.py": "304330bf7a45b0eef8f5beabee419b971d205c55f686de86c26d91fea69d172e", + "engraphis/local_auth.py": "b0ad3a1926d417a2aaa6c44a7dbf6e51f575290ddfa27875b78a03db176623c3", + "engraphis/logging_setup.py": "f7d2edc756458a852e0401453e9c71b785aba08fa7859aacbdc23fb30dc7982a", + "engraphis/managed_processing.py": "6d33cdfd10800d9552fcfae3c2b071d2b39fe10fb69d1a8e5d9ed6026882197e", + "engraphis/mcp_classic_cli.py": "778122b121a1c654b8f85810fad05d9c8d7799cf13903d7dc274938b51008da0", + "engraphis/mcp_cli.py": "ed2d997438d727180842dc5fb3f6776f5a5d97974f690ee7229264be1ff61957", + "engraphis/mcp_http_cli.py": "5a04bcaae4531a6ea116a827bb65c5df3bd6d07ea336f65ff3ed45034972c396", + "engraphis/mcp_server.py": "79a5e563770f149e08e53e8d05aa4e7b31a43f954abc87d4c79e19d29d2b8208", + "engraphis/models.py": "6e76e97db0aca3805c6f582ea78cc6e1c0ccd2665e16fd8ab81eb91b94141b51", + "engraphis/netutil.py": "2e0f8a9095f6f31dcb5b96d323f023b9214369d59e1c488125a7d443a55972ff", + "engraphis/observability.py": "a3a6945bf33a0d8e216da56ca7efec0031b82dc64a66cff36f0b2161f5db4981", + "engraphis/obsidian_import.py": "c7cf4b5e993afce3ffb45f01637804719cb9e7cd2461ffe629c055be5975721f", + "engraphis/private_state.py": "7485570efcaee8a1dc00b64ebfdc23178517235ae17609aa78db8bdda7e45fe3", + "engraphis/read_only_api.py": "7d9d306919b30cf712fa59219059bb87be8328ec515487e55d76dcc1f0b80c38", + "engraphis/redirector.py": "5ba964b81f09008c9369180cb49d247519000763274aabc5e046215b12fa641d", + "engraphis/routes/__init__.py": "f0d59080212cfa0d9b50877bca28e5832d1ae917899500d52c68b1c8821231af", + "engraphis/routes/memory.py": "9ca066e1762eeeaafd9790ed57d730efcaceb57742dbe0c830ad8764500ff9e5", + "engraphis/routes/v2_api.py": "45c02594fe4c357975e739beaaa666a3742b461fd873e60ef2415b62ee90bb85", + "engraphis/routes/vault.py": "1a7eee7c1a7c7aa11091042756aa2739a3eb963647020f40584a6a38da1988af", + "engraphis/service.py": "d2eab019c50c090024a15a38af5e56324a18eaa475b6dacef4dde9f5a031cb94", + "engraphis/service_context.py": "3de9289f49a977cdc206285ac42a9953a104eb1d1b1bc8ea77febd75c7cd82ab", + "engraphis/static/__init__.py": "1fff4c4e2554e7f5fcf3eace269feba09827524917193a4dd65df95bae64ad1f", + "engraphis/stores/__init__.py": "48ee4326c8f28eecf46f558b7aea21adb779226a7038299017ab90196d5d84be", + "engraphis/stores/graph.py": "ebf603b54cf8450e7c9a7319bd05db2f39fcda8491f5969d6af3e8da61571bc2", + "engraphis/stores/ledger.py": "df5cbb30d977decc0a9c3a2365c9c115cfbb5fe951bae48446436661c80e5d30", + "engraphis/stores/vaults.py": "2c986129b9d1e7aab33e18a3b9a278eb5ad2236895587f69b5816a5d96796bc3", + "engraphis/stores/vectors.py": "45a1baca381fc647548cc89424eb36d5853f7562c275b191b35b99339a190b7d", + "engraphis/update_check.py": "ffbf5ef682fb15177915073ebc0b5eab4dee9092bbf0f58d36a8a54c6605ccf4", + "eval/__init__.py": "639f0c6d9d6aac8ff6dc605a34a0a301058905cc53bff4eaed5912247f0e7c56", + "eval/ablation.py": "16f159dee75d2f96cc42f230c2403fa19ea0bda7091c4823660da553463a194a", + "eval/adversarial_memory_security.py": "35dd8d981bcbad50e9815465be420b05b62a9dea28a78eb6cc1e09ec51c320c4", + "eval/agent_benchmarks.py": "8e88943e45a1b2083b366cbb0329326ef918b119a2366ed395c404c2b7ef98b0", + "eval/benchmark.py": "b71832affdf87d23bc1db7b522a669a7888571b3989b03a235c70f5da9952bd6", + "eval/benchmark_analysis.py": "1200791425d029695fee0b7da1f188a8962f337aa31eb4217d50e4503641d2b3", + "eval/benchmark_campaign.py": "033dbebfb47df5fcd3a6588b29ea4ab5fd44d4387ae45334379278ab30f3e57f", + "eval/campaign_adapters.py": "706f8c464c4fa1f793f07849fdd8e2f825e521c7727c15d8576aa587921779fc", + "eval/campaign_api.py": "323be4e1d9520e8047ab54c9cbb158013785402b06ee4e93e55227971c54bf95", + "eval/campaign_candidate.py": "88541840d16c3b7368586ed0ee3566054214b1f594826b746b28d0e407cb812a", + "eval/campaign_continuation.py": "7f77a20ac8f85cd96729bba0cf45872c98a3421af005bd735434b7b416dd7e1f", + "eval/campaign_ledger.py": "ba3079ba541cb1f70929a76f147d2bc5e8b264103a1cd7faad97685e0ecc7790", + "eval/campaign_oracle.py": "9ea5479786efd9caa2b59e612e891a93dd34b500a2b36aa20bcf749fb6d4d48a", + "eval/campaign_storage.py": "ebcd1f4aeceaa5ff9304494c64dd31fe31637ceb107d8cc39fa292e3b14055d4", + "eval/capacity_matrix.py": "8c25bd97754c1d7a8468a687042a3c87cc9c0299cf01c19b80dacfec2be4e552", + "eval/chunking_eval.py": "a16544353940c0a8c40cea3b9932d3399b35ea5994b809b78f5dbe4a952c467f", + "eval/code_agent_ab.py": "d98bba6b77700ff6bf86ff0d2cf518a67e5a2676ef51bbddabbb2ff26e1f3aaa", + "eval/code_arm.py": "d211166fce1b8a4173848e1617873b7e84aadeff43746effe7483c54bbdb6f1d", + "eval/codex_oauth.py": "f235fca482de4201d1850bbfb583765ac5f1a057b4ad7e2d504d036bfc03f391", + "eval/coding_acceptance.py": "4b39cbcb60d7fba503cca597399cf9d04ad9567a43cdb950015ccf552e6a2773", + "eval/coding_corpus.py": "7b5205e8544578fe99d9d9cf6cfc34e40e5d1d049238d502ff7bc6f3c14948f5", + "eval/consolidation_ranking.py": "917b578d4e0bcb929bf1a1a37611acf7716a520c076abf4ade0d8d12a1c455de", + "eval/context_economy.py": "709ac7cc866855f96d7717ab2bea12e8b0d3a140d15fb978a2a929ad085931f2", + "eval/context_efficiency_guardrails.py": "22afd1a6fe17219e74701dc587ec35f569a5bf22bea270944525f51746723f14", + "eval/datasets/codemem.jsonl": "341313023c22850a2e14f02742b571ad1deca824f886a1654a59541304c01f3c", + "eval/datasets/coding_memory_v1/oracles/atlas-green--code_relationships.py": "969aa71235e0ae3cb764b9ee12b789184cedb5fea6fcc0d86e5dcb2c0498fa56", + "eval/datasets/coding_memory_v1/oracles/atlas-green--condition_values.py": "648702646fb62990168e98fba0dc6a27be128876548fa7035a59d71aee9da02d", + "eval/datasets/coding_memory_v1/oracles/atlas-green--corrections.py": "c7132c7fe39b7afbdf11065037369c0f3c38a22e69d8742e8afddfd5785d2e61", + "eval/datasets/coding_memory_v1/oracles/atlas-green--long_documents.py": "65dffb25944cb612872655f12db16af73f7a095e7abcf6a7cc5d31dc91f083b1", + "eval/datasets/coding_memory_v1/oracles/atlas-green--multilingual.py": "ff49874a691bfc30c082695ee6d3c89b9f2e1e5eecf086026110770d8e1b0452", + "eval/datasets/coding_memory_v1/oracles/atlas-green--paraphrases.py": "dbdcf5d7abf136aa5816df8465bfde842284aef5ef002e955cee05ae69d574ca", + "eval/datasets/coding_memory_v1/oracles/atlas-green--poisoning.py": "58b8ca4a37f55c4d112640414dc82620e32e643ab0aa539260884a5ecc50740f", + "eval/datasets/coding_memory_v1/oracles/atlas-green--scope_boundaries.py": "c1e92b10b40004c95abd3dfbada1a38fe0ce56300ecddca8360b51a1e6671458", + "eval/datasets/coding_memory_v1/oracles/atlas-green--temporal_history.py": "a64e4e5a29ce1040cf53e94571491325347f443d72a93f05bcf87c2878665952", + "eval/datasets/coding_memory_v1/oracles/atlas-green--unsupported_questions.py": "c8b415052ea7320e1df3c5475a676d4dd24602c45dbf1868fba6880846e029ee", + "eval/datasets/coding_memory_v1/oracles/atlas-north--code_relationships.py": "bb4305d15a81b4b4ef80b374acb59fee6fc32b213b101dd4b173ac4144d8570d", + "eval/datasets/coding_memory_v1/oracles/atlas-north--condition_values.py": "4bc5b1aff48ef6ad5ece1bd915f6949f72d365bb4815c4d82515b438bc644112", + "eval/datasets/coding_memory_v1/oracles/atlas-north--corrections.py": "7851502a9bc842f840bee1001e42140ee1df08be2730b563b1b197285d14742c", + "eval/datasets/coding_memory_v1/oracles/atlas-north--long_documents.py": "6204123eded20fc0c7aa59b312f8b5bd29aa88a720f7318e32b3c6a17651b57b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--multilingual.py": "5c989b34fdad1e076b61ffb1f7a1371dc635f44a537abc743b765d5f6009004e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--paraphrases.py": "fd189285d0cde9991dea461af9cd18b4203656a69da1298494fccf972ed8a58b", + "eval/datasets/coding_memory_v1/oracles/atlas-north--poisoning.py": "66305d69419736bdbb11a896543933604d898cd5394d94eedda8b92e632a09ac", + "eval/datasets/coding_memory_v1/oracles/atlas-north--scope_boundaries.py": "d9fbbe3924b5178f32f1937485af3b8db242a0e3a08c7bf41a3d2a57f34a8879", + "eval/datasets/coding_memory_v1/oracles/atlas-north--temporal_history.py": "7e7be0d6e558a71d3baad14a8812a6c998ad25e3f52c997a301333e0711f820e", + "eval/datasets/coding_memory_v1/oracles/atlas-north--unsupported_questions.py": "91f574dd678bf244a1fa6f9708e945259bb8ff8e2eb213426be5c3b187be3c3b", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--code_relationships.py": "d0998e13db38d1fae9be6d254431b4fe592f89eb03ee25705f4c70985cd48c89", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--condition_values.py": "f97610aee190dca03b01aa48ffe4aa3f75e099a59fdd867db98f743f4a376729", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--corrections.py": "b7c31f7a9a1f978321ca5445997e0d284deea770c85f6d81a80204e548ad53ea", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--long_documents.py": "20ec2b41cd3b6691164bce096dff16f7bf5be674f922cb637120c0347e60d0b6", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--multilingual.py": "131e7dc978d3f2f7df395b6f1b4a9150051c0ca93c6dc5c386e58d46c8fdc573", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--paraphrases.py": "1e7d9da36e6634ca2d2b11dc97468bd671df133345dcb76859e1dc3cb77dc664", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--poisoning.py": "48460691ac0086c47102eec85387ac03bee9190ac83e3dafc4babc79b71d9bd7", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--scope_boundaries.py": "b96207e9b1fd09f49218102a5b88fde5b9656604df4cfd314e86426e3b6d6075", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--temporal_history.py": "7a196ff9a1db05b0c8f3a83086ae44cdc580dc58e4acc217d1db2575d9711b88", + "eval/datasets/coding_memory_v1/oracles/atlas-violet--unsupported_questions.py": "724564b5b75b9425b6889faae6d5e650bd5c940016c2b96054e5359d9d8b0887", + "eval/datasets/coding_memory_v1/oracles/atlas-west--code_relationships.py": "14295f735bcac4d4ae738eedfbd8fad4593afc914bc835233ec35e2263d43613", + "eval/datasets/coding_memory_v1/oracles/atlas-west--condition_values.py": "8ac70d9ca0c9122567bb9986d2cc5798104966df20e262b8087920e8fb5d82a2", + "eval/datasets/coding_memory_v1/oracles/atlas-west--corrections.py": "89d6a1a7781465c311830b7e769d2a76df41ab5c703ff662b3df1cc4c9a01668", + "eval/datasets/coding_memory_v1/oracles/atlas-west--long_documents.py": "38e67a26f69707089f852657a810ef1fca0395beb5511fff67c30f21ed63df57", + "eval/datasets/coding_memory_v1/oracles/atlas-west--multilingual.py": "bccf6579681d45940542ccb1f936ea1b225f4cf551a3ef31f3f8b1a026856e51", + "eval/datasets/coding_memory_v1/oracles/atlas-west--paraphrases.py": "89c8ce16c682553b27652e176b67a06f3228ae6209fbc8a7264260680f5651a9", + "eval/datasets/coding_memory_v1/oracles/atlas-west--poisoning.py": "fe9beb97d27eacdd87056fa1c9b04c62e2facae9354e765b912de60b35021621", + "eval/datasets/coding_memory_v1/oracles/atlas-west--scope_boundaries.py": "2eb3b1130c54644fcbade52da8f50cad1376a07b51856a962522913cbcbb7649", + "eval/datasets/coding_memory_v1/oracles/atlas-west--temporal_history.py": "116ee20af475da329cb535b0a02bd19ea1e7518b5b780ec12ba396ec896cc116", + "eval/datasets/coding_memory_v1/oracles/atlas-west--unsupported_questions.py": "080969e026215b9fe4ede6d0b4d02e9143e1293bea5d7383681e478426ddf121", + "eval/datasets/coding_memory_v1/oracles/borealis-green--code_relationships.py": "3965671e5e2432c8236c250f7982d4f478d8f1fe1268ffe57c555cf5fbbcd414", + "eval/datasets/coding_memory_v1/oracles/borealis-green--condition_values.py": "92994990327445258984ee6bf1d95f47359ff4b194e1f36e193980a523e6c5e0", + "eval/datasets/coding_memory_v1/oracles/borealis-green--corrections.py": "c5b473f962deacd6d59ea9967626e029888abbdb48f320704bcb6de876ce3f46", + "eval/datasets/coding_memory_v1/oracles/borealis-green--long_documents.py": "54aee2c1031c17b5678db2b0955eda8fafe5990aa9e52f02936584a9b75b9ab1", + "eval/datasets/coding_memory_v1/oracles/borealis-green--multilingual.py": "c458ac5c63e440e3d9486d096278759920d636f73e1901258679251afd86eb60", + "eval/datasets/coding_memory_v1/oracles/borealis-green--paraphrases.py": "250d027660f268cef1caa745cf3155de6e2f4adfaed02ba675eaa83224ffeee8", + "eval/datasets/coding_memory_v1/oracles/borealis-green--poisoning.py": "978f16eb5033c602ec09ed57ba0667edec9ac3e26accc1ce1456bc893ac9e6a7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--scope_boundaries.py": "4b73a2e5dc5ac815c14e08a34acefd2ad426282cfae379ca2fd3060a3784c9b7", + "eval/datasets/coding_memory_v1/oracles/borealis-green--temporal_history.py": "6636d511bbcca51ca85c4eb0ec5ae956b3baaa5f9af89458ceb86329115743bd", + "eval/datasets/coding_memory_v1/oracles/borealis-green--unsupported_questions.py": "5cd4f70627bc60572c720a797bff122ef9bf219f32d265f694affa33b1f9f4fe", + "eval/datasets/coding_memory_v1/oracles/borealis-north--code_relationships.py": "769903aeac3ce360d845ddf1a6e89192737dbb460e1f2e251230b74d40763dd6", + "eval/datasets/coding_memory_v1/oracles/borealis-north--condition_values.py": "f6e69f525fd240a09152989b9d8a529e9abe076e7fc2c98d10bd84f9c6da2b56", + "eval/datasets/coding_memory_v1/oracles/borealis-north--corrections.py": "987ece1c7507a69a973c1e051b27c1d3b104ecda79df48959e49a62da31aa137", + "eval/datasets/coding_memory_v1/oracles/borealis-north--long_documents.py": "011134140cc486a3c089b407adbfbf5b958e1f8c1bffd572c29b8cd5d7f07f7a", + "eval/datasets/coding_memory_v1/oracles/borealis-north--multilingual.py": "1d29536a4a5836f64f56adcd1a965db85bc3371a12ad5bbb5644520c9d9606c8", + "eval/datasets/coding_memory_v1/oracles/borealis-north--paraphrases.py": "09a5fad90c24f75f2f448854c8778aab896c67854c97f884c2d689ead808583e", + "eval/datasets/coding_memory_v1/oracles/borealis-north--poisoning.py": "c1bec2ed9b31103e39db9dbab2be8db401cb0874bb3ce8573a0841a054e28a46", + "eval/datasets/coding_memory_v1/oracles/borealis-north--scope_boundaries.py": "faf51b368d7ba9406442edde29e290c931e67bff2799783dfd27f2226020e15b", + "eval/datasets/coding_memory_v1/oracles/borealis-north--temporal_history.py": "da52f43530149a4a293065674623fa49f83b37cd84b9871044b3bf32762fd8c1", + "eval/datasets/coding_memory_v1/oracles/borealis-north--unsupported_questions.py": "be0abc698692c9fe82f40f76a4694c472882a53843894dddd631ab1ab77aae45", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--code_relationships.py": "9497b7d2373bb9f858e994f7919cff72e7e3c4c4eaa1efda287524b1a182d1f4", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--condition_values.py": "aea13e4b7721019e7bc1f54878bb25b9f27a8a5044fe444e86ba5460deb13e09", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--corrections.py": "bfd446d431afb6c05ad9d8775b90887947b85981037756e05262f3b101d41e7b", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--long_documents.py": "eae829a374c0cd6237fac4ec52fec0d98d7340ec0b307b9b0b0c90c116d4b472", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--multilingual.py": "e821f91999b5f12cff53fdaa956af4e0bb2f929497f95b4e2ceb57a6621e58f7", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--paraphrases.py": "1a99c15898831a1c9aacab951868101d57e59e91ed90a2777015a26dbcc3043c", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--poisoning.py": "411877fc07b053201a63aa4e45cb499344abccb0a562c236d53a672078b1eb63", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--scope_boundaries.py": "b198dfb636910953ba372edf1cd6db382d4e5725bf7f820171be8c63f9fedf7d", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--temporal_history.py": "3de5efd6ef661572191c6aa426fb10caf9f4bed4aa495b6298815aab3acdce22", + "eval/datasets/coding_memory_v1/oracles/borealis-violet--unsupported_questions.py": "baf5dd85e86a97dedb0b395b5c574ea5ffcdad7a46bbbe9787cfdc33d6c7a06c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--code_relationships.py": "48e53b3a561f91fdf4eedb2d63aad65eece8ae80188bb3d5bdcaf184fb0b6945", + "eval/datasets/coding_memory_v1/oracles/borealis-west--condition_values.py": "2dd7a524bd2a2aa2fbf212246880d4e4ecf03f503b70f25179f3ab6bab28a07a", + "eval/datasets/coding_memory_v1/oracles/borealis-west--corrections.py": "7d3080e05544e10243040fe0a969a8c524e4262f8f5c38abdc3d8e06c67fdabd", + "eval/datasets/coding_memory_v1/oracles/borealis-west--long_documents.py": "fc42e935879e7a81f6eef9fe72f8683244501ae10654008a7863d397ee73058c", + "eval/datasets/coding_memory_v1/oracles/borealis-west--multilingual.py": "19181c442ce5f6941485190ecf050e455914dae988f86efa42665cdef0d835a2", + "eval/datasets/coding_memory_v1/oracles/borealis-west--paraphrases.py": "f7a5cb842aae3d2bc8d62ea40325b332a8bd4f013b76bac8bf154fedb3dbcbe1", + "eval/datasets/coding_memory_v1/oracles/borealis-west--poisoning.py": "285a2526a6be4e556a564899e9a376ae1286fef6f0ad22eb9289fba1905a2b68", + "eval/datasets/coding_memory_v1/oracles/borealis-west--scope_boundaries.py": "fb994823743ff5b4853b142c17779778bdb11296958e033e5c6be598833a4cf5", + "eval/datasets/coding_memory_v1/oracles/borealis-west--temporal_history.py": "f30a74c85ad654a7450e20d07baceb3b4fb2a56b454d7b43b854bef3cdb2cee6", + "eval/datasets/coding_memory_v1/oracles/borealis-west--unsupported_questions.py": "01cbbd0b21a745720514aea6a21a98a3cccdbf0c0518bd5508019433b964776b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--code_relationships.py": "8b08e7c65289515a9eee2ae5f4cd60ce94350e9a561225bef0e8f8815ea28f79", + "eval/datasets/coding_memory_v1/oracles/cinder-green--condition_values.py": "92e7d75d38f5dbcc685075e947005a9ae5a410207e7f17aa770b034b8690cbe5", + "eval/datasets/coding_memory_v1/oracles/cinder-green--corrections.py": "424cbf0924a8cbc1a59a6d7bc82b5527e41f52c8ee9f558ea3e398ab4d913919", + "eval/datasets/coding_memory_v1/oracles/cinder-green--long_documents.py": "2a52df9cef3ee66357847322794a382c927b828c6ab1a2819a799ff55d53657b", + "eval/datasets/coding_memory_v1/oracles/cinder-green--multilingual.py": "e47e791dd15b045a6a958ca114b1359ca8537e160274b015214746a2564363c6", + "eval/datasets/coding_memory_v1/oracles/cinder-green--paraphrases.py": "9e92a79ec00231cb381ce58e389dfdb2520a17ecf1e9c2e39e79501449e9ddd0", + "eval/datasets/coding_memory_v1/oracles/cinder-green--poisoning.py": "33213e6f194332969da88f4748c8f26ef93219b6c4bc710a142082f8147ccfcc", + "eval/datasets/coding_memory_v1/oracles/cinder-green--scope_boundaries.py": "8d2489da1fba137981e45e42c843f9cbd17e851c82ddcdc5904b4a86af0d9692", + "eval/datasets/coding_memory_v1/oracles/cinder-green--temporal_history.py": "29403fd08f0de7da3dfcc6c181e1f448a5c5264e95ff3924f3066508d85468b1", + "eval/datasets/coding_memory_v1/oracles/cinder-green--unsupported_questions.py": "ba21014188f9ae849e0bb79babe163194703c4cf01f0600f4c9f71058e7fed56", + "eval/datasets/coding_memory_v1/oracles/cinder-north--code_relationships.py": "46280659557bd08afff185352438bb63dfd308dabf5c7c1862c2f442bd171d48", + "eval/datasets/coding_memory_v1/oracles/cinder-north--condition_values.py": "6c62d673b1b6cb4b5c89ff2af4ecf57c2c9d73074a01ab92b8fde57815cab783", + "eval/datasets/coding_memory_v1/oracles/cinder-north--corrections.py": "8245b196072389517fad6d76ed7709d7e12eb52e08732e4ddcfc40fc1d986879", + "eval/datasets/coding_memory_v1/oracles/cinder-north--long_documents.py": "6790c7b89d80ab909d9e1a31b59bfa5cd199cddabed2e159daf7c5c049ff9a43", + "eval/datasets/coding_memory_v1/oracles/cinder-north--multilingual.py": "9532bbd14506cac0edcc09f474e7c96a402903de947e0e76f5c8aab4bff37646", + "eval/datasets/coding_memory_v1/oracles/cinder-north--paraphrases.py": "cc904350ae7d40e26d91d482ac15d87ec8022d4c82905021dd38003c5fa2d067", + "eval/datasets/coding_memory_v1/oracles/cinder-north--poisoning.py": "e8e451c49c98744b4a484141f86d337db4ec5326264b1500893a20c3451c5ae4", + "eval/datasets/coding_memory_v1/oracles/cinder-north--scope_boundaries.py": "50d42fc48aa70d55b6a3b39c9bf17437726f37e1e5ae9870d415fccad92c7bae", + "eval/datasets/coding_memory_v1/oracles/cinder-north--temporal_history.py": "14b1336fbaed11cad455f588bbe078effc31f5f357f670e1f189ec3d78b172f5", + "eval/datasets/coding_memory_v1/oracles/cinder-north--unsupported_questions.py": "0a2f740700a990d22b4c3051aa3e4260e3df4ce65931d419052f74e05c750a67", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--code_relationships.py": "0e29053f11fe618c01fa90a274688f18ba8a7f3cfea56757a96d5a5bc95b61a8", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--condition_values.py": "ca57ac4e22e9b4739217020d7792ac642326935b8db9305ead2ec5bea2a6e456", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--corrections.py": "9edbfaa58a99776e835c325e50a77df5b4b302b3ddd0932dc2a349a77b4100b5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--long_documents.py": "4b3fbe7380201285ac4b4a1ec4d8238c5663b97af01cbdc8ffff8fdf2a9467c5", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--multilingual.py": "b0bba5ecf669f3368ef29373b755dc1296502665584574c771ebf4664debb5ce", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--paraphrases.py": "e146f7aa1ffabf3b313251b59c59e1836c0cd17901d07fc6ef5334eaccf8bf36", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--poisoning.py": "692ee07e750fb08652a1ca6bc6dcbbef77219701585f1336c6037dae5a7c5767", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--scope_boundaries.py": "8ca0b911d38a72e4ecce6871ba3d0c7dbab433b0541cb64b116f7a88d521554c", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--temporal_history.py": "6ba5400c5435af64c80a7366fdf49fea132f1011f9d84f9d0cc5f2f2f30a67ac", + "eval/datasets/coding_memory_v1/oracles/cinder-violet--unsupported_questions.py": "1d3324db0a085be30ce3dff1a2ec3866b8592a5ef6b43f39211a2e3a59fc1cd6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--code_relationships.py": "0149333a3fb0f8d60939bf927921305eae447f7511c74f042ff3c880eadff825", + "eval/datasets/coding_memory_v1/oracles/cinder-west--condition_values.py": "3158243f9f7f0b92aaee4164379159b46143acd11fc3d41a708630c1d33ea22c", + "eval/datasets/coding_memory_v1/oracles/cinder-west--corrections.py": "a9fbb89aa629a23e7a1fddf4fca09da40365bbc7a9a6192d805e498fe17f93ff", + "eval/datasets/coding_memory_v1/oracles/cinder-west--long_documents.py": "3c702c653a8ddff84eb5c24a77567aa63d2069c48ed174bcf29065c0ddb30ec6", + "eval/datasets/coding_memory_v1/oracles/cinder-west--multilingual.py": "b8f5f7e00e6edac3f8e0b7e8bc09ea6c7d661370fa2226eb1795306ce3c634a7", + "eval/datasets/coding_memory_v1/oracles/cinder-west--paraphrases.py": "10361be87e9d9cb98d2ff1bbc18252178d475a5c5f2efb77bc81dea05109df05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--poisoning.py": "889a5a43604f7d1677ee0f28683abfc48a8a597b052f558c1b4d19c5f33444ec", + "eval/datasets/coding_memory_v1/oracles/cinder-west--scope_boundaries.py": "b84e78812baaa92422226c06d78cfe7c1be260e2bfcf9c5bb1ed73f2f3cc136b", + "eval/datasets/coding_memory_v1/oracles/cinder-west--temporal_history.py": "9d99a981fca0c801a0a52e2af24cd4262dad72f4f34cd84894784285d241bd05", + "eval/datasets/coding_memory_v1/oracles/cinder-west--unsupported_questions.py": "43b8f854961d9cca5cb83b53b9e07d22388d0c7db406dc8e4f8cfdaa5f89fffd", + "eval/datasets/coding_memory_v1/oracles/delta-green--code_relationships.py": "97a08f2bf9b1a11f95a062f7df27d69db3e9dbc421837347acfe62111af02885", + "eval/datasets/coding_memory_v1/oracles/delta-green--condition_values.py": "5e53695288b84a526c61b748b170f6d6219f94a942edc0887ea6157535ad8d52", + "eval/datasets/coding_memory_v1/oracles/delta-green--corrections.py": "c6d16232ebe6bdb0b5c94db1ba4f108257b47ee8f8b96cda5f8e17212022b542", + "eval/datasets/coding_memory_v1/oracles/delta-green--long_documents.py": "bedb6f495437beada344ce6cdd92954108aa4c639622fd1cc294d2a1139b26d9", + "eval/datasets/coding_memory_v1/oracles/delta-green--multilingual.py": "dbf84f4e8c016c5e60fdac5fd3ac2faf79fb0534f5c2ac534491acc31d5f3530", + "eval/datasets/coding_memory_v1/oracles/delta-green--paraphrases.py": "ea8f00c86e8fbc2ab10a448f48019146181d0e55438def6f47f41f0ef3181be4", + "eval/datasets/coding_memory_v1/oracles/delta-green--poisoning.py": "4eb4e289e944e7762c39ce85a8fc2582e310de6a86cbc1cc36b44112653140ea", + "eval/datasets/coding_memory_v1/oracles/delta-green--scope_boundaries.py": "2fe9b96deecfb488430abd9657adc6b3ea092b18f32c41c1669d29175ec6e860", + "eval/datasets/coding_memory_v1/oracles/delta-green--temporal_history.py": "531cbb953400584356cb6525bc1a2e559f7ec3867d845c736d8026a046b91e7d", + "eval/datasets/coding_memory_v1/oracles/delta-green--unsupported_questions.py": "edebf25c2168411fdefae1307a71d829224dba3dbc7ea000054416e52123d5a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--code_relationships.py": "9357ad0d5f6a1cc787f980d0d506b07808538179f71ae3e8ce1c3eb655d24e35", + "eval/datasets/coding_memory_v1/oracles/delta-north--condition_values.py": "4199f7409696a260b1531f4ec7cfd15555b4d58d06b0b8a88b1c7621fe7d328b", + "eval/datasets/coding_memory_v1/oracles/delta-north--corrections.py": "b8bd58db7c5ae93d33e6223cc34f0e09d58831361ac013ec08277fe2c102ac17", + "eval/datasets/coding_memory_v1/oracles/delta-north--long_documents.py": "0f08b744446b1c52e8fe86626ab05c171377f17c46e604cb2ea647ed5d0daddd", + "eval/datasets/coding_memory_v1/oracles/delta-north--multilingual.py": "ada9eb404190d05637cea59e3f8ed541aea2c9e0f9be0d166885d6789351f7a3", + "eval/datasets/coding_memory_v1/oracles/delta-north--paraphrases.py": "04ec2e8308f47f46e38c89f4a2fe44deef4a0b20a1c8517395ad00983bf7361c", + "eval/datasets/coding_memory_v1/oracles/delta-north--poisoning.py": "d72ea7b98db47e4de03884e2786206dc3da5cc08e5203c86b1d38a2d48c2fd47", + "eval/datasets/coding_memory_v1/oracles/delta-north--scope_boundaries.py": "cedb3234b22a40a7b889f50cfb5751fbba31e46f541b19feb2c4759c8007bac3", + "eval/datasets/coding_memory_v1/oracles/delta-north--temporal_history.py": "2f7c1bd4ebc051eee411d11251aff2ee5fee602a0800410bc0dbd2e86e99628b", + "eval/datasets/coding_memory_v1/oracles/delta-north--unsupported_questions.py": "f1f0b9858c806956122144c6e769f3baf9f87f07ff92eec98eb58d8019e6fba2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--code_relationships.py": "79579639a60d96365781e853d1319a2bf85d9a2b4d8639410da7e3c1efc364b2", + "eval/datasets/coding_memory_v1/oracles/delta-violet--condition_values.py": "27defbfe7c237f971ae29e8f000f098eae32a11f3afad06f2bf3b27af432d902", + "eval/datasets/coding_memory_v1/oracles/delta-violet--corrections.py": "b3b685a5c33d1086e8ab4258d26c5ec9aa7396b8250a250351f0a6057fcf2075", + "eval/datasets/coding_memory_v1/oracles/delta-violet--long_documents.py": "4a5ce75372c8762bcd7986f8ceef454800c3636124ffd9de3a8315d210ae85f1", + "eval/datasets/coding_memory_v1/oracles/delta-violet--multilingual.py": "7ef19f25e97a24522b79a9d7e7f3d2d9e395a1fc2c60564e2f66081533bdacb5", + "eval/datasets/coding_memory_v1/oracles/delta-violet--paraphrases.py": "b6e00019bead0a5bc0facdac886b48fccfd3cccaa254267fda780e933d57904f", + "eval/datasets/coding_memory_v1/oracles/delta-violet--poisoning.py": "3e3e1e1fe04ae3e0c615ca21e794fead5d06f887d6fe7347fb9122684c8b8017", + "eval/datasets/coding_memory_v1/oracles/delta-violet--scope_boundaries.py": "336ae66910d533344712a2d87126f53df48d43eae9e7d17797938c3f9c560204", + "eval/datasets/coding_memory_v1/oracles/delta-violet--temporal_history.py": "a81cb5d2a5eb521dfd161ffbd21bd366777b1239f2d3412acc77b0a9c7c7d82b", + "eval/datasets/coding_memory_v1/oracles/delta-violet--unsupported_questions.py": "3341895608073374b98e67a88489abb9020fed5bb692231a0a61e15c8de0ddf1", + "eval/datasets/coding_memory_v1/oracles/delta-west--code_relationships.py": "e8f17f3838cb74e1ade0cfd6edf540dc086507b51ca67c2020ed490d75dbffe5", + "eval/datasets/coding_memory_v1/oracles/delta-west--condition_values.py": "a935a6e7a4081737eef76a93d54b34dc885b4699e02d797f1be78286dd642a2b", + "eval/datasets/coding_memory_v1/oracles/delta-west--corrections.py": "ee407e5aa8d57254bb7029d537bb2b59a297958cdff9bf271de3787b6448241e", + "eval/datasets/coding_memory_v1/oracles/delta-west--long_documents.py": "55fa08b75982d0547f0c2f13cdc6522d0fbd33efb4af9ae8c6ada11b2d46f321", + "eval/datasets/coding_memory_v1/oracles/delta-west--multilingual.py": "ce8a3e45ad8417ca1798579a22e12eeb7d170a11ebfb865746388eb0e7dca848", + "eval/datasets/coding_memory_v1/oracles/delta-west--paraphrases.py": "e6458588e20e76596e24be6cc838bd4b0d5a47b05b7bf0bb6017b0cecd0d6a68", + "eval/datasets/coding_memory_v1/oracles/delta-west--poisoning.py": "4c70955a2650d13eba24d6e933f765e0bd40da0a1cd8b920416989a76bdaf2d7", + "eval/datasets/coding_memory_v1/oracles/delta-west--scope_boundaries.py": "cfe9120c49224b6f9ed86ea7d85e496000bef0648c92c7fd474c540e892863cd", + "eval/datasets/coding_memory_v1/oracles/delta-west--temporal_history.py": "3527edc8a85c71f889ff0b2ac8bf9ab005ad5bb6c95bcd917dedae44aa3efc72", + "eval/datasets/coding_memory_v1/oracles/delta-west--unsupported_questions.py": "8c40923b8d4bd6bfc78ff6548ef9a840319b7ee4ea967554f26a8d24a4349935", + "eval/datasets/coding_memory_v1/oracles/ember-green--code_relationships.py": "cc7f82ad85363ee35ccd75744159bf4c4f07965e396bff07989cca7a55071679", + "eval/datasets/coding_memory_v1/oracles/ember-green--condition_values.py": "3fa888c125812f1488de9e021358cd531a9d50bb7d4b6173be3656268474b635", + "eval/datasets/coding_memory_v1/oracles/ember-green--corrections.py": "7cc639d4bd7b287ed0e3f2188491d6e4866e021b21874b34b365c1eb2b2d6d68", + "eval/datasets/coding_memory_v1/oracles/ember-green--long_documents.py": "972e7879a30ab26f86f09bce6dc9853c7f96124d0bbe5062111607496bcc9a95", + "eval/datasets/coding_memory_v1/oracles/ember-green--multilingual.py": "0f0585bd3264de3d5fed5928b54ff4fb87f71b2edb1d35c83a534251121124b4", + "eval/datasets/coding_memory_v1/oracles/ember-green--paraphrases.py": "a3c15541bb87cc862d1c9764cfdc1ffebbc831876b55167470ecb3b66519740a", + "eval/datasets/coding_memory_v1/oracles/ember-green--poisoning.py": "ace5b7b12c4ca068739af4bc5e215af1af7fe153399ff17ffb7a67b8b9aa1f94", + "eval/datasets/coding_memory_v1/oracles/ember-green--scope_boundaries.py": "daf132e130c5743d67129c1564f329fbb2670d1242648920b646a83bc2236e4b", + "eval/datasets/coding_memory_v1/oracles/ember-green--temporal_history.py": "1438f09f0ae41b1f6b42930518203a36c7de31a870b684dbb7f16e71a37c784b", + "eval/datasets/coding_memory_v1/oracles/ember-green--unsupported_questions.py": "da27396afbc1529c61972f739cefb26dcaf97bea529c084518a95080eac4fe78", + "eval/datasets/coding_memory_v1/oracles/ember-north--code_relationships.py": "debaf885151c3f47660053ff50e015338b8aa9bca089d7e901ee8bc34f7085e6", + "eval/datasets/coding_memory_v1/oracles/ember-north--condition_values.py": "109a7ee90c04da83f57a94a9a724dcf98a3e96405c7a456686c198ff5d85a69c", + "eval/datasets/coding_memory_v1/oracles/ember-north--corrections.py": "c246ba011c68d3ad0a4ee1d14231304a7f17f28027f1764e60da93062cf1cd3c", + "eval/datasets/coding_memory_v1/oracles/ember-north--long_documents.py": "176200cf2a011c7231ed4cadacbe86b1eeb695fbbee282bf4c4a96430d98fe84", + "eval/datasets/coding_memory_v1/oracles/ember-north--multilingual.py": "e850a910515e71a27edff26f7bedf39d8cb75c726e48357a2c41d4da051be6e9", + "eval/datasets/coding_memory_v1/oracles/ember-north--paraphrases.py": "0a6f03310e44abcf4ca61d69e22edbd21ce47a17629adf4f5079f7565534b469", + "eval/datasets/coding_memory_v1/oracles/ember-north--poisoning.py": "a81ee758fc57bcc58bf0bf2a38dae8b6eb4aeb14949063206e32cdff6f301dfb", + "eval/datasets/coding_memory_v1/oracles/ember-north--scope_boundaries.py": "fe42df24612c66b175f1c98794ed9f13a1a7819418e4aeb5ff98531515221de1", + "eval/datasets/coding_memory_v1/oracles/ember-north--temporal_history.py": "410f9770097228724a5af1357003ea23caefe1226275d030d46efa535c42d306", + "eval/datasets/coding_memory_v1/oracles/ember-north--unsupported_questions.py": "eebe43443938693a74081661d2ff3733b39c6dac5c7ecd88c4dbab5ad18689ee", + "eval/datasets/coding_memory_v1/oracles/ember-violet--code_relationships.py": "c00a30669fbd1c740b44e17c7c7369582c28a16da3aeec9d27420b8aef7c553a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--condition_values.py": "1645e7c56c870f4367c263ccc9041181b1d187a698252203ca651235db59e684", + "eval/datasets/coding_memory_v1/oracles/ember-violet--corrections.py": "735f1d125d2ade6f3eabbf1082a408fe6afd4328cd954833e23df275df498e37", + "eval/datasets/coding_memory_v1/oracles/ember-violet--long_documents.py": "e1ded8e9641639443a6b14da18b2e0cbcddc6fc6045bf0b57404b59b59327dce", + "eval/datasets/coding_memory_v1/oracles/ember-violet--multilingual.py": "fbf04cda8e1231c7ac4c64d4c1856f7bfafcb6f1d016de0b1bdbbaaafcfe03b6", + "eval/datasets/coding_memory_v1/oracles/ember-violet--paraphrases.py": "2fd495def306778073df30b20dbc7a1500c06c90638acf6d9b9280db78dec53a", + "eval/datasets/coding_memory_v1/oracles/ember-violet--poisoning.py": "335674216a418254a01a7f5505344af20ad499a5fe41cb9c8654a0705574a18e", + "eval/datasets/coding_memory_v1/oracles/ember-violet--scope_boundaries.py": "078d60287888903e90343d144d8f54e08a3751ffcba82fd827ca0c9f8ee75fe7", + "eval/datasets/coding_memory_v1/oracles/ember-violet--temporal_history.py": "f7ad47f3253fe922977cbd0b63679abf00559f1b2dc895246e09840652b2c41b", + "eval/datasets/coding_memory_v1/oracles/ember-violet--unsupported_questions.py": "b91545082a31952351bc4c08d6cc09132432126dfd772952c818396bd7a68af1", + "eval/datasets/coding_memory_v1/oracles/ember-west--code_relationships.py": "74fb3e0d99a5bd4f54b8b57f6040ce7978a81bffa1ae70f9069fb2322e6ea581", + "eval/datasets/coding_memory_v1/oracles/ember-west--condition_values.py": "26d605b42d18cf029dfdc29124eea898e0dfa5642c43c1c775007fb443ba6cda", + "eval/datasets/coding_memory_v1/oracles/ember-west--corrections.py": "65c2ef8544b42ecb6b3ea9ce8bc95ec5f0ea8bb07c2b74d52e7880d99962f563", + "eval/datasets/coding_memory_v1/oracles/ember-west--long_documents.py": "4c8e54c7ec930d6cc782fa1a0519a0f1e0e916e3929902e13199775cefdaf338", + "eval/datasets/coding_memory_v1/oracles/ember-west--multilingual.py": "356e407f47d39e7f53337ffc4f27c68935a2c831301dc3dd006b2939cc61decd", + "eval/datasets/coding_memory_v1/oracles/ember-west--paraphrases.py": "c91cf574cf8b5aadaa6c9331c3f8f4a8fec7ec33c227f20894f463d81d110a7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--poisoning.py": "5f6b8740798a7a093994748ef4b11e0e1de0be562c7f09790e1f0ebb9ed21f7d", + "eval/datasets/coding_memory_v1/oracles/ember-west--scope_boundaries.py": "5e20c5154818cc29b7e71444054d67836eddc882f2f17be8aed78afe31a9037f", + "eval/datasets/coding_memory_v1/oracles/ember-west--temporal_history.py": "fc51d1a39693d1f7fb2db4bf1ffe865d4c44848c159188cdcfda54618c0d8fe2", + "eval/datasets/coding_memory_v1/oracles/ember-west--unsupported_questions.py": "079c421cae974bcccc2107dac74421dd5bc2d1b40f7d91cb79a8014af526d260", + "eval/datasets/coding_memory_v1/oracles/fjord-green--code_relationships.py": "b5e4a284bad1d7ff81d5be9cf1faaaaf5e718cb51624189482624721cb459f1b", + "eval/datasets/coding_memory_v1/oracles/fjord-green--condition_values.py": "63c152b8da5655ae5c701cbb51099340d5f5103fcc47840239098a7366d24151", + "eval/datasets/coding_memory_v1/oracles/fjord-green--corrections.py": "b7b33b8de153c205ff4fdaadd5538eae8a22fd4401e70db9f645dae205c62cba", + "eval/datasets/coding_memory_v1/oracles/fjord-green--long_documents.py": "624cf014bc795a24e2f1f4fa2f9dbf11d2ad1c38f81cbc58ab3948f96c48c8c4", + "eval/datasets/coding_memory_v1/oracles/fjord-green--multilingual.py": "f8d2483fd9266946c980764feba0eda27c95ea2ff11222a4dd4247fb537f1f00", + "eval/datasets/coding_memory_v1/oracles/fjord-green--paraphrases.py": "151be253b730d5c5b4bbcabcce3bd218477241ebf0f1bd5fe9dc8d70798feb6f", + "eval/datasets/coding_memory_v1/oracles/fjord-green--poisoning.py": "e7b0efca3813bbb1d4ea9cefa752b4318942b118bb61ee9dcbbf640daa66644d", + "eval/datasets/coding_memory_v1/oracles/fjord-green--scope_boundaries.py": "56177cfb45f32c548be83cc78197fcf5b53826f01cca69e471535476184ae8f9", + "eval/datasets/coding_memory_v1/oracles/fjord-green--temporal_history.py": "2c79d26467eb8443d743bb8823cc1f2a5d1e5da7c887754505baa130e37f1b2e", + "eval/datasets/coding_memory_v1/oracles/fjord-green--unsupported_questions.py": "fb5f222f4e0715379591f559036c0549f67a7b6e3491e880c6cf8d5b91fa9000", + "eval/datasets/coding_memory_v1/oracles/fjord-north--code_relationships.py": "07402078200db9ab15fc61a72e31d9df0938edfb1e9d5b7e532b422dccab15aa", + "eval/datasets/coding_memory_v1/oracles/fjord-north--condition_values.py": "8c1549b5a444c9cbf1304fcca13b79263bf8d9f0b4f41c16da539b3bf5da3bf4", + "eval/datasets/coding_memory_v1/oracles/fjord-north--corrections.py": "a2634af73134c025de1b6239756ee2051e505e0a535221947babef5ba161fa13", + "eval/datasets/coding_memory_v1/oracles/fjord-north--long_documents.py": "4f80f3673afd1320d16a6bd45fefc85522d6f4bb889ff96f6e99410580feec09", + "eval/datasets/coding_memory_v1/oracles/fjord-north--multilingual.py": "3a9c953fbe76eb7374992a6a81d35b8dc0a635c02b90f328af140bbda2acc180", + "eval/datasets/coding_memory_v1/oracles/fjord-north--paraphrases.py": "ec2d9d7bbd678be73946cba8177184839505cd891df410ae8e676fc254df2ca5", + "eval/datasets/coding_memory_v1/oracles/fjord-north--poisoning.py": "6d9b91b4d53925d58d3c0cea694f591572a53184f23816101af0aa644aa1b86d", + "eval/datasets/coding_memory_v1/oracles/fjord-north--scope_boundaries.py": "2e98afa064e8a295a78bea654014a92734696a235fb0538732bb8d85799c7287", + "eval/datasets/coding_memory_v1/oracles/fjord-north--temporal_history.py": "4059ab8e427c2b6fd68155992404fbf493c7ebdf0a4357aa5c5f4ff0c67808f9", + "eval/datasets/coding_memory_v1/oracles/fjord-north--unsupported_questions.py": "79f14e18e282c1b6bbe21ef2affc9dd8a259a171c2e4975d42363f7c91689c1e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--code_relationships.py": "9ea8a9ade1001bcd43929782c3410f35fc5056e438342ca848fe0b1b0ff56170", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--condition_values.py": "09e223a1c0bff6c95a5863fdc28dc00ed96b90887cd635d014712058079ccbfe", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--corrections.py": "f822c373fc4a93189fdce09999a9dcbe8797b0c0dc780eddd4e342edf21dc14e", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--long_documents.py": "983aeaae1e14937a740218228778be3e1938cdf1ff9228eba44064336188f297", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--multilingual.py": "6e929f8846cfc756c71bcc21bc0f27ef8fc23270d21292fc35d70e6bbd31c066", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--paraphrases.py": "c644d9f01edbd213447618bc269f56804450901faf4f4660c1f666d4e9b4ada4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--poisoning.py": "cf3849312f96b0072efdfd4e858abb24d7e6a808bf883bcc9dde5dd5a4594364", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--scope_boundaries.py": "373d10e20713bdc26849706525f765f2be4ab57e87e576e39a1a1dd4e7feed88", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--temporal_history.py": "4d2c36480cc04d43aa8f535bf998968b474f2f596d5349dcd42684c5a667c6a4", + "eval/datasets/coding_memory_v1/oracles/fjord-violet--unsupported_questions.py": "b381d2016dea525eebd8de8d026dc48ad2080b93823a95d6e2bb06d29cc86775", + "eval/datasets/coding_memory_v1/oracles/fjord-west--code_relationships.py": "e1e10ed9ee8a4d5c2e798c2bf04cba5c39eaa3873901bd93724af166ba2479ae", + "eval/datasets/coding_memory_v1/oracles/fjord-west--condition_values.py": "427764a62d2e11f6c9fe4b2cdcd32fa92f61749403dff648601a47187e38787a", + "eval/datasets/coding_memory_v1/oracles/fjord-west--corrections.py": "4aa041aa87f4c8628d113bab855a151c2e38bd6919cd02224827fd07d060fb34", + "eval/datasets/coding_memory_v1/oracles/fjord-west--long_documents.py": "89875548e6952ce810d8983b0eaf2724bf8f329bf44e4d9193cfa3405e1ce80e", + "eval/datasets/coding_memory_v1/oracles/fjord-west--multilingual.py": "8b5c14cdb26941d1ae25701bc99efc5fe4ae6e50fed3c65b193952444f1593d1", + "eval/datasets/coding_memory_v1/oracles/fjord-west--paraphrases.py": "bcdc9a5f1fe45ef63fd5e6b728c83c7a8d05c7b80957e3276c074700b409e924", + "eval/datasets/coding_memory_v1/oracles/fjord-west--poisoning.py": "5504e1bab0865fb3041c88f151938789d79422eff91a3ce72f4a41fc14e2f897", + "eval/datasets/coding_memory_v1/oracles/fjord-west--scope_boundaries.py": "63f226631a663dca0ef62a4f32bb98fbe1e30e3b1f030ee42c3f7f2bf6a09af0", + "eval/datasets/coding_memory_v1/oracles/fjord-west--temporal_history.py": "75c9582a16db2c89f12506bd7a4115fcd871c6da63e80429a8e70e31c1f5f862", + "eval/datasets/coding_memory_v1/oracles/fjord-west--unsupported_questions.py": "05e4ba65be7cb4e6500af5e14721c70f93fd7390abe58a60f6f8e4f8e9b0ae5c", + "eval/datasets/coding_memory_v1/oracles/grove-green--code_relationships.py": "bd5619518e839f84ca03297c4f7842a2944d8b445ec1863a8dfc68e4c2114a03", + "eval/datasets/coding_memory_v1/oracles/grove-green--condition_values.py": "67377847b6ff1ab865f5c25351fcfa1ee13e6ec6a089444cb3eb0709b660148b", + "eval/datasets/coding_memory_v1/oracles/grove-green--corrections.py": "c07e8a03c6c47818f9c574d4f21b27668989711fb5e0af3b5cf1a87b293abcbd", + "eval/datasets/coding_memory_v1/oracles/grove-green--long_documents.py": "3f75fc2158c66a19dbbd19209fc80026339abe93a2282ff55c7c01429ac549f3", + "eval/datasets/coding_memory_v1/oracles/grove-green--multilingual.py": "19b1f800b38a11cf0f50df6da3a011806098561e32a279b78e1806de9b8c11fb", + "eval/datasets/coding_memory_v1/oracles/grove-green--paraphrases.py": "a5996376b9f589283dbe301dd1e0644af92a8b6a0222b51b99ed6fbb83570782", + "eval/datasets/coding_memory_v1/oracles/grove-green--poisoning.py": "c4dee0969e39b52dc9b697e45587c8cd84926a97c9a48f7211c0a00571bfb657", + "eval/datasets/coding_memory_v1/oracles/grove-green--scope_boundaries.py": "8d45422f0a1a2115deb90f560409fdad1105b7cae1f03052f8ebac404ba9517c", + "eval/datasets/coding_memory_v1/oracles/grove-green--temporal_history.py": "abc1b386173c8252ac10f11a36fbcdd6d91c731686108a6d32c62d17955d21b9", + "eval/datasets/coding_memory_v1/oracles/grove-green--unsupported_questions.py": "1ee09741a1c94a1fa83c7edf5b6c07d8da2e45826f748d899ec71917e8369d54", + "eval/datasets/coding_memory_v1/oracles/grove-north--code_relationships.py": "fd75d734a5f45a5ec54b125c1d379df67c5531659f212a2f5c1c5e88169167e0", + "eval/datasets/coding_memory_v1/oracles/grove-north--condition_values.py": "c600c0e5f50e352406b99527b050f4df6dc8ab8920b5b946de190ad7629b5e6d", + "eval/datasets/coding_memory_v1/oracles/grove-north--corrections.py": "4d6fdbe4f5eb9c8e4bfc2a974e6c3cbf1d124d0b20d3f050c84e766f507b4be7", + "eval/datasets/coding_memory_v1/oracles/grove-north--long_documents.py": "5b0bbb9f0a90eb377cbfe45ff6f37077a9ce32c7c6730720f0bfd49b844fdf4b", + "eval/datasets/coding_memory_v1/oracles/grove-north--multilingual.py": "525ea2fdad66d66d7b90892e9424ebae281c1dabfb49f2668784a687b7ec894e", + "eval/datasets/coding_memory_v1/oracles/grove-north--paraphrases.py": "1105e52a8c8d3ff79c64b59ec5f23d66d742b8dcecf91e8e62060895c7371f4a", + "eval/datasets/coding_memory_v1/oracles/grove-north--poisoning.py": "7d32e533f6dac57e5d651868386686d2b78e7db1cc29b1860fede23fc9c49813", + "eval/datasets/coding_memory_v1/oracles/grove-north--scope_boundaries.py": "7bea4129589ea34ba10667a7035b126a32b423ec7f3b1ff2b10f6ffc9aa1c2ee", + "eval/datasets/coding_memory_v1/oracles/grove-north--temporal_history.py": "859b6504250f5746ce197e4a0a7c1006f1c2257b939c53a493f9d36f6d2b7d6a", + "eval/datasets/coding_memory_v1/oracles/grove-north--unsupported_questions.py": "6b893c4c124f071e9ad5d9946448b070c2b2f5f10da6f058e60840c18510fd0f", + "eval/datasets/coding_memory_v1/oracles/grove-violet--code_relationships.py": "09bb7df6b115b83cb98a4274b2d883e81b809643ed4f912b383a9e09a7f7a1f9", + "eval/datasets/coding_memory_v1/oracles/grove-violet--condition_values.py": "a68c126f0d7b2fc0950baa5df095d7d513cdb8359883404bad3c1c84c8de666d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--corrections.py": "46024b5fb187aaf3574d380af1a3bb2aa44028f89377f810ca5e98ee03c3b9aa", + "eval/datasets/coding_memory_v1/oracles/grove-violet--long_documents.py": "ec8d401f6437fbaa3b11ddb96973b31944ff374da677f7aae26c0e79e6a1315b", + "eval/datasets/coding_memory_v1/oracles/grove-violet--multilingual.py": "d14e8bf66593ceab7b691119b8a82f211933e2b3f6ebf8a25a75e61ffedbc1c0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--paraphrases.py": "963b7321a32931f238d12e7cdc3849f64682c7cb704b77f4b849543cc40b6df0", + "eval/datasets/coding_memory_v1/oracles/grove-violet--poisoning.py": "39e5edc76a122d37d90b1af28c2293e2f8b0c38e1bdb6460340c0bc2a71ad87d", + "eval/datasets/coding_memory_v1/oracles/grove-violet--scope_boundaries.py": "472298607415aedfb9a36bad7783e7b7e3bccc339ee44cd83746d782ca99e411", + "eval/datasets/coding_memory_v1/oracles/grove-violet--temporal_history.py": "dcf793210a0a547c25587bba70e01d4d56576604856ed084eb5fa466b8be7b83", + "eval/datasets/coding_memory_v1/oracles/grove-violet--unsupported_questions.py": "bbe1769dc0afbe220e8069ef21b85164c31ecff6c3c7f5bf6d18d1e48f5f3c72", + "eval/datasets/coding_memory_v1/oracles/grove-west--code_relationships.py": "5374fb66cd91be79b5eabd2696ada5fee89605d8a1fc84ce36bd6a8ca82cbe5e", + "eval/datasets/coding_memory_v1/oracles/grove-west--condition_values.py": "2e807846b760b65afe0f5e48947463a66c15b8d89899a2724cddd865311760b0", + "eval/datasets/coding_memory_v1/oracles/grove-west--corrections.py": "bca219aae5f85e3f5504d5b39646efe89ff7dc6c007a4323abd5c5154cb4d5a9", + "eval/datasets/coding_memory_v1/oracles/grove-west--long_documents.py": "19c3ca44f78ef79ca1b907c80214e11a8195e994893f1de683b5d9796eb29d6b", + "eval/datasets/coding_memory_v1/oracles/grove-west--multilingual.py": "7842efb41f88fcd49e7a2350e9b44a3a1946bf73e5cb103e4a91a11e810301a2", + "eval/datasets/coding_memory_v1/oracles/grove-west--paraphrases.py": "fd70e8a20da665073ad172219bd57b24e53575dccc344adc1fa0190770ffc6cd", + "eval/datasets/coding_memory_v1/oracles/grove-west--poisoning.py": "473acfa06852554dee20445dd1a86df4e626e0363a7b72de57d68819314bf938", + "eval/datasets/coding_memory_v1/oracles/grove-west--scope_boundaries.py": "3ba0e93abf07498c570cd81b0c4f753bb75b6d4f4bf6c786461bad1a3b301286", + "eval/datasets/coding_memory_v1/oracles/grove-west--temporal_history.py": "334bc7b057f570efd20896d282e54c986f5b6c642930057c8520f84b721ed5e9", + "eval/datasets/coding_memory_v1/oracles/grove-west--unsupported_questions.py": "5102eb2dadcce0dcc0ba157495d4fa10c4983e4bf6627aff25bbd547a08115ca", + "eval/datasets/coding_memory_v1/oracles/helios-green--code_relationships.py": "d376cda89c44b3282a86afe7cd01583f0b53f2c80cd92b47bc2fa4a19271e9ee", + "eval/datasets/coding_memory_v1/oracles/helios-green--condition_values.py": "7b6eaf2f46a5b2f1ae6e8e6da0bcfe6044fea5639df158e137fb8ba32b929909", + "eval/datasets/coding_memory_v1/oracles/helios-green--corrections.py": "2e849f6c926aa0ce1b2e69ce8cdc5ba9c50feb89b33b257fc71bf3aa3b8461b8", + "eval/datasets/coding_memory_v1/oracles/helios-green--long_documents.py": "884c17b7d20d986708c0eff2821cc7b76c5f7b16afd26c43ca80fb507e2f3ea7", + "eval/datasets/coding_memory_v1/oracles/helios-green--multilingual.py": "1182048aef0dcfbc416a004bc43f49f1d2a5de4132e7243ab7d147f54aab1acc", + "eval/datasets/coding_memory_v1/oracles/helios-green--paraphrases.py": "a73950ae7fceacfaa6c7c7a26c8379f9164a29ebea883cede9222e72c506db5e", + "eval/datasets/coding_memory_v1/oracles/helios-green--poisoning.py": "60c5112afb7b84ee5513f2657f42d0eacb0607ba345c28618af3b3b3eaab753e", + "eval/datasets/coding_memory_v1/oracles/helios-green--scope_boundaries.py": "dab035b811e7e9a60bf447d1ea26f6db915c320b5dc2dd04cda4b6f1023296be", + "eval/datasets/coding_memory_v1/oracles/helios-green--temporal_history.py": "c22dd57bc7cd659863231b164192caf6c4929c5baaf8edd8be8cac00268e5847", + "eval/datasets/coding_memory_v1/oracles/helios-green--unsupported_questions.py": "f78986b8093eab4ecc8c1319d359498d64177db55a4e38cf8d0b32d1e5af4b2a", + "eval/datasets/coding_memory_v1/oracles/helios-north--code_relationships.py": "81721c60bd4e3466600442214147ae6641ebc05ae414965f4a09b89cc74cb8d6", + "eval/datasets/coding_memory_v1/oracles/helios-north--condition_values.py": "8fbcf116c1f0d480d61b2974e7bef73acef053d45bf0ac3b12e6ea48b017e43f", + "eval/datasets/coding_memory_v1/oracles/helios-north--corrections.py": "beae8d6c5828c1f225e5e953236136a217ee48e67cebc82049caf8f1c60cfdcc", + "eval/datasets/coding_memory_v1/oracles/helios-north--long_documents.py": "019e7ff3b9efcb461c1c68acc657b2438cc2d63d4b4165c0caa4523c440f12bc", + "eval/datasets/coding_memory_v1/oracles/helios-north--multilingual.py": "a48324390ab60686c2b1417f0c049f47601737c55fdf000b696ccc5de260ccab", + "eval/datasets/coding_memory_v1/oracles/helios-north--paraphrases.py": "9e2552399b988a6d722ccfaec7cfbea10853164336fadc9e9146dbae788a2d8a", + "eval/datasets/coding_memory_v1/oracles/helios-north--poisoning.py": "75eecaa42c302898581d3bef8aee00fa1dec6c3bc968c0014a522196e18c7681", + "eval/datasets/coding_memory_v1/oracles/helios-north--scope_boundaries.py": "8bd32a30cd1c2e346375bf2b37ef4908c3feeb67a80ec52ed3108bfe9cbd548e", + "eval/datasets/coding_memory_v1/oracles/helios-north--temporal_history.py": "1d1118cb5d438f91bb027acaa3b64f867e93cca7eb0f480bb83073584fafd97a", + "eval/datasets/coding_memory_v1/oracles/helios-north--unsupported_questions.py": "02a854bf89085637e366f801d2be6ab26b9e18296f13531485d08c2a64621c7c", + "eval/datasets/coding_memory_v1/oracles/helios-violet--code_relationships.py": "e32101847ccad5cd18fbc2c667ba4d1b63e3e7f8067dc89de5f485546dfef525", + "eval/datasets/coding_memory_v1/oracles/helios-violet--condition_values.py": "c8ef59dc9dcfe3aecc990d82fe44f1f93b7adc8c65f1fc38e79b934d351635c6", + "eval/datasets/coding_memory_v1/oracles/helios-violet--corrections.py": "a3a36bb554a6f4a83ea612bbbe9c0ee4ee1a08071e490a9a909c46d3049bb379", + "eval/datasets/coding_memory_v1/oracles/helios-violet--long_documents.py": "f9fa707bb28b4d7ea96e3bacfa22f24502b571a76a79defd147fe9d5205963a2", + "eval/datasets/coding_memory_v1/oracles/helios-violet--multilingual.py": "cfbfe0535e905dd58434bc25d84e7746dbdf1fc50d72d0fa96cc78677eaf18b9", + "eval/datasets/coding_memory_v1/oracles/helios-violet--paraphrases.py": "1743c8cbf0564d91dfb4db88b694072fdc9bb5a0b9f26f578649af7f539ee393", + "eval/datasets/coding_memory_v1/oracles/helios-violet--poisoning.py": "02cf390520757473e9d677f5c1f0934ecf50645ad5edcdc64caec23721a5d99e", + "eval/datasets/coding_memory_v1/oracles/helios-violet--scope_boundaries.py": "5ab003dfc23cb00d0a70195541a780a4b80b1d496728b2b88f7f154310e67a6d", + "eval/datasets/coding_memory_v1/oracles/helios-violet--temporal_history.py": "209e95f62c39d3f2223ed00a378788e396d04de392324455cd9d19dedb3a87ad", + "eval/datasets/coding_memory_v1/oracles/helios-violet--unsupported_questions.py": "a3ff0703297e2f743917e74abeffc0c922a6241318f37d63a49242c6bcc18059", + "eval/datasets/coding_memory_v1/oracles/helios-west--code_relationships.py": "4d8543e4c49d59f844830ccee3fcea0643ee17ce43f51863b94a1b4fbc9825ea", + "eval/datasets/coding_memory_v1/oracles/helios-west--condition_values.py": "f2efa7fd803df0e10c440d5ec2d98dedf5e02e23a4cedddcde5ea722f4039e40", + "eval/datasets/coding_memory_v1/oracles/helios-west--corrections.py": "181c42640cee47db2b5c779bdf8fe2e84103a92459d7f6cb0d9587458e421406", + "eval/datasets/coding_memory_v1/oracles/helios-west--long_documents.py": "49337830deb24f9d6b11ba4e01f397c0cf1a40a15524f1ce33354a2c61615072", + "eval/datasets/coding_memory_v1/oracles/helios-west--multilingual.py": "f1e4ef8be6bba13457a2da1c3a2082f81bba765f2cf1f07b93eb20edf5e2debe", + "eval/datasets/coding_memory_v1/oracles/helios-west--paraphrases.py": "29abfff3b323496fb62e739cdc0be2aada1b7e1467a141cc8d19a1d54c1ab130", + "eval/datasets/coding_memory_v1/oracles/helios-west--poisoning.py": "14b7f874c10681ff3829b2659cbe7500250369652d11b26c842e62718093ca0f", + "eval/datasets/coding_memory_v1/oracles/helios-west--scope_boundaries.py": "decbdb3cd7ab0c40c0aadb1ecdeef9e2ee2586dd8802b9bb16235f211ce05ee1", + "eval/datasets/coding_memory_v1/oracles/helios-west--temporal_history.py": "6e7c2369157234374d3f9633b7e772b4a3bff405d418c6e1336e56c87ebf28de", + "eval/datasets/coding_memory_v1/oracles/helios-west--unsupported_questions.py": "379716803a300bbecd3fc8f1661bdac2fcd8a98a2bb18514d8de168bd57fa144", + "eval/datasets/coding_memory_v1/oracles/island-green--code_relationships.py": "833962801d594247d5c5644df0e6aee877d452127ea5c0dbc22c81512132ab21", + "eval/datasets/coding_memory_v1/oracles/island-green--condition_values.py": "cfbb4ea0a4dd12d69686178ba8246bd08b93743dc5395cd0479984a53655d909", + "eval/datasets/coding_memory_v1/oracles/island-green--corrections.py": "4c7ee2538df9988864e24d9b86805d26b64d1a37638b57abdd1761e24c4ab340", + "eval/datasets/coding_memory_v1/oracles/island-green--long_documents.py": "f73cd2b884539680c500af9a5c8cc00d1dc9f1d2ef7bda61f6c8253b2bf799ed", + "eval/datasets/coding_memory_v1/oracles/island-green--multilingual.py": "e954fa56aa819ef9088c8d6da4abd647b689956c4ff4a7b0b8e31078522f2702", + "eval/datasets/coding_memory_v1/oracles/island-green--paraphrases.py": "4cde223eac40d4a2962aa2ace533b8761c5b82784767b0307c884ac5e6ad0576", + "eval/datasets/coding_memory_v1/oracles/island-green--poisoning.py": "08725e295848b2c58c9e6d6a0554a2dd4a6506af75039205c444251d11a62acb", + "eval/datasets/coding_memory_v1/oracles/island-green--scope_boundaries.py": "257cd579af07491748f5de88d04f8af85056b0448d348e59c7b0cbb28754fb1b", + "eval/datasets/coding_memory_v1/oracles/island-green--temporal_history.py": "e93105f0639a83b300a6de3bbae56166eedac2e58122f7e84ce5a40a074db6b6", + "eval/datasets/coding_memory_v1/oracles/island-green--unsupported_questions.py": "a707cee90fb3f0cabd0e692399a361f59da0fc4e9e7bbf0cde702e05579f0b3f", + "eval/datasets/coding_memory_v1/oracles/island-north--code_relationships.py": "f00e022ce900e4ad0fcec93f2dbf016337a4d83afacbcf739f61f71316723173", + "eval/datasets/coding_memory_v1/oracles/island-north--condition_values.py": "c704a03a70253585a67823826dc0a6ebaf6323a8880c00af80c148c150176daf", + "eval/datasets/coding_memory_v1/oracles/island-north--corrections.py": "e2cadf6e4f365f94cf0f440758b173da4d14ba12c03a84351e0608f0c60bccc5", + "eval/datasets/coding_memory_v1/oracles/island-north--long_documents.py": "300246fd3d85d73b63066d133361bc784ae26b46f4197c5c41ac960eb37f9508", + "eval/datasets/coding_memory_v1/oracles/island-north--multilingual.py": "f8aba8e14ed3c420e90e701880ea38e924e1219e3cc3643ba8bde17cb31ddef6", + "eval/datasets/coding_memory_v1/oracles/island-north--paraphrases.py": "503ce2c132c666bb67920e90d4a898f5a73f1d66779cd83c1885812f223e30e5", + "eval/datasets/coding_memory_v1/oracles/island-north--poisoning.py": "3369d956e5af12bc6be80828c4c6ab03ccf80c79e38dea3162b4e2c09771ff30", + "eval/datasets/coding_memory_v1/oracles/island-north--scope_boundaries.py": "9b4f6186f71713175f1eb5aacb0b6258c746b2297ca7c692f54bf5feabd5d261", + "eval/datasets/coding_memory_v1/oracles/island-north--temporal_history.py": "7c22b0edbf8edb7a511a581ffe6f1ce14454ef3feb527eca90d1386ce00b2c6b", + "eval/datasets/coding_memory_v1/oracles/island-north--unsupported_questions.py": "c1e5d526b0c6b88394f19a8b8edca7dae1db718b24be2d57374eb3769bbd1f24", + "eval/datasets/coding_memory_v1/oracles/island-violet--code_relationships.py": "9672d608ea0c8623ff1fe760f943173b2fdac5dc4ea4b7ae0dba33436d860254", + "eval/datasets/coding_memory_v1/oracles/island-violet--condition_values.py": "cfea91adcc9b3f9eb28cc24cf310e10b436f81cff51297f161b9a3b59a21f62c", + "eval/datasets/coding_memory_v1/oracles/island-violet--corrections.py": "075d48a2dfd91af8328982fe475ec915c00b75db38819aff3b4c2343147e2bfc", + "eval/datasets/coding_memory_v1/oracles/island-violet--long_documents.py": "85cc789277e59925b36ea3bd82e23f989e79fb0be2e55083e2656e518641dd3c", + "eval/datasets/coding_memory_v1/oracles/island-violet--multilingual.py": "84615b70eb74eb2180dd8a89d8d34c11e904030bfaa26c57e2e6c968daf64d29", + "eval/datasets/coding_memory_v1/oracles/island-violet--paraphrases.py": "5244d32ffc4127d519e2f5a875ffaecf7bc51eaa1426d2aacbc42490cf291d22", + "eval/datasets/coding_memory_v1/oracles/island-violet--poisoning.py": "9bde478876ea0be60555d5bd26d3790e4f305327ece10bf6c258bc564354fa1d", + "eval/datasets/coding_memory_v1/oracles/island-violet--scope_boundaries.py": "8e8b0a64342963b4dbc000578a72c0e0801fc1ca4af140f09b55d4cdb03b1274", + "eval/datasets/coding_memory_v1/oracles/island-violet--temporal_history.py": "3e187ce259c7f57f6dba4a28c3ecdf31fbe6458f7d908b22cb8b5ce8325437ae", + "eval/datasets/coding_memory_v1/oracles/island-violet--unsupported_questions.py": "0e60f29a47953c5d434c159eece26bbb03cc837842c493111b34310f9cff4693", + "eval/datasets/coding_memory_v1/oracles/island-west--code_relationships.py": "c19c42978fa5f9c6e1f41886eb1cc0fdb7e12304ba58b160b4cbe1975640acfe", + "eval/datasets/coding_memory_v1/oracles/island-west--condition_values.py": "07c4c591e08f5248f3016dc16cecfea7dd75bebff1a61599f258938d7031043d", + "eval/datasets/coding_memory_v1/oracles/island-west--corrections.py": "a7d93dfb579ec4f58cf2f6d29a6d0ab7dbf1a17f6ae49b98902a5ea22525e649", + "eval/datasets/coding_memory_v1/oracles/island-west--long_documents.py": "20a50dd63e04ce751115fca671b9da7ebbf240e26f39d494583cb405a03b750c", + "eval/datasets/coding_memory_v1/oracles/island-west--multilingual.py": "65d82c4d7968e0e597509c692015bdac0b92841c726d87560d9caa32429176f4", + "eval/datasets/coding_memory_v1/oracles/island-west--paraphrases.py": "feb7eb2e8592162d7d1f433610cb02ba04cd9797191d65a9f0e5bc4f4711c4ed", + "eval/datasets/coding_memory_v1/oracles/island-west--poisoning.py": "3d7c2c6a7f247f3e8158d5ba007bbbdf027a74e9a2c52f52953b3ccf2c21f17f", + "eval/datasets/coding_memory_v1/oracles/island-west--scope_boundaries.py": "ff0f36139f6da5428b9538d108aded522e62ca803035ebef78e11255cf55e08b", + "eval/datasets/coding_memory_v1/oracles/island-west--temporal_history.py": "42cb1c552ce01308b47d526c6e6993fb3270239b392cfa9f5e42b8e0fcfb3f82", + "eval/datasets/coding_memory_v1/oracles/island-west--unsupported_questions.py": "911b4257380640d35d6e2fc5292e235eedc113f5e71d8e71e8ccab7c72d4f290", + "eval/datasets/coding_memory_v1/oracles/juniper-green--code_relationships.py": "373395d3b70f64f8102609d27ce10c4aeb937ac73988c2ce2be1e283df94ef82", + "eval/datasets/coding_memory_v1/oracles/juniper-green--condition_values.py": "f04794a96b06d537550227ec308b1f02405cdab42d7d3ae4db4afd2c25bee8cd", + "eval/datasets/coding_memory_v1/oracles/juniper-green--corrections.py": "5a354a8c8efdbc498d25ffbf6095fee7b3d7d638134b452c7c9ecb186b4e1bc7", + "eval/datasets/coding_memory_v1/oracles/juniper-green--long_documents.py": "8610157668d6a90c794a956f6f0b432f03e3559238599ad1cb412f6f1a2f7e46", + "eval/datasets/coding_memory_v1/oracles/juniper-green--multilingual.py": "dcb99335fa18b008197532809ff7127be2cda600848e10c8bfe4677bd896f90e", + "eval/datasets/coding_memory_v1/oracles/juniper-green--paraphrases.py": "7a4cb1bbe3de2e6fe6a33b1f78829f4aeb21d21c2e8d4d3399d3d98958ba0909", + "eval/datasets/coding_memory_v1/oracles/juniper-green--poisoning.py": "ba73c2c6f04590538e16c50be527da60f5949781bc8833a3c18a7c597146eb10", + "eval/datasets/coding_memory_v1/oracles/juniper-green--scope_boundaries.py": "9d09c0851a3906b6281cb1c5811714224161e27a1aa46edd81c5659e7f93cd3d", + "eval/datasets/coding_memory_v1/oracles/juniper-green--temporal_history.py": "fd05595a452952dca2d0089f5701a60145a3b5705b78a5ff2f8f9f13fbf1c259", + "eval/datasets/coding_memory_v1/oracles/juniper-green--unsupported_questions.py": "f58bfcb89db799dc1578fc8791b49e97e7f22b30e720aeaf661f0ad2e6a9660c", + "eval/datasets/coding_memory_v1/oracles/juniper-north--code_relationships.py": "a84f02bd3c2b9c367248dae8aa3580d83de6a1beb6fe464553eb8a2bfb172b75", + "eval/datasets/coding_memory_v1/oracles/juniper-north--condition_values.py": "d70311ae339556f18240f824d0f0bd0024060c2698fcca8fe7cb540e8a8bc727", + "eval/datasets/coding_memory_v1/oracles/juniper-north--corrections.py": "fa290629339007fdd4230a76d49fa294a218c5f0cf6b90c3074678b0f16c539a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--long_documents.py": "e30025d68ae3b48b566bf3fb2aea5e3603f5f7ab658da8fcb2256d3b1964c85a", + "eval/datasets/coding_memory_v1/oracles/juniper-north--multilingual.py": "b8bb0199c4acfe71df8d4e7df75bdd37e038cc72aa82bc6df10715819aeb3686", + "eval/datasets/coding_memory_v1/oracles/juniper-north--paraphrases.py": "aabf70509d3b0602d43c9590f04fa3ad1370a40c266d20f64a5ece15d4c79a51", + "eval/datasets/coding_memory_v1/oracles/juniper-north--poisoning.py": "ebfb9d7bf3c50eed8f44b73e391496ef377942de389b6feb64c7a1c0f9646444", + "eval/datasets/coding_memory_v1/oracles/juniper-north--scope_boundaries.py": "06c2c9d57ade79139c9b0d20568703477bb9e3a934f2f8900ad717ef157e5844", + "eval/datasets/coding_memory_v1/oracles/juniper-north--temporal_history.py": "0d97ba6d7a5d7741bf248b599ed18ae81b1c0053ad53cbc64934f31e9c3461aa", + "eval/datasets/coding_memory_v1/oracles/juniper-north--unsupported_questions.py": "526648ba7a4edc21bc2eb589c1e5c98a20fb07aa692687de4c3845e559be8096", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--code_relationships.py": "c73fd24d0adbeda6c7afeb15ab07296c0438402893e8d442af26865106d6e8ea", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--condition_values.py": "4aadae570ef84f976d49ba1fc92574ef55630b1c3017e90dbec1f85e6fb74c4a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--corrections.py": "07236b2a88df73c8d0f6afbe7d972fdc18f8c835a852f5c20748a369c77d82e2", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--long_documents.py": "54d3201b621b168ce03963c423942f142cb403f9d90234f063ff33b7add4d2dc", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--multilingual.py": "e0cc26d743cbea8e98261895474879d078fd53941c075606bfc6e52ee098db93", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--paraphrases.py": "a1f836316408052cab1253b56b5caa6b1432fe6eeaabbb5872da97ec9bde633a", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--poisoning.py": "bc09271eadf77f1b6c03fff20ca9c0f0a42a99d1c5600e6b7843f0a0d549ed5d", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--scope_boundaries.py": "17a7258bed9efe1c86a05756c5b5d17926fd72f01de4b2addd5d2fb4550f4da5", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--temporal_history.py": "8bda8599d861857204c48b55729607c8cb0cb3ae2701eb18fb600d398468cafe", + "eval/datasets/coding_memory_v1/oracles/juniper-violet--unsupported_questions.py": "10cdbb013f78f0e54c31a6e76f03d8d15a6063fd7971a2d803a390890c036ad2", + "eval/datasets/coding_memory_v1/oracles/juniper-west--code_relationships.py": "f0a682d413b3d8418c664db2775de4eef35240c508cc71ca6bbc055cd0c8dbe6", + "eval/datasets/coding_memory_v1/oracles/juniper-west--condition_values.py": "200a4b78f201e992ac10112a194c97b88841dc5930e3e7de9bfc076bf4c69fa7", + "eval/datasets/coding_memory_v1/oracles/juniper-west--corrections.py": "41ea9b5a5f40d8703343f4570593c3f27905e5ff70fae57bdbdb5fcccc585d22", + "eval/datasets/coding_memory_v1/oracles/juniper-west--long_documents.py": "7d8cdd01c5d90ad62e9da93a99febead683e3f01c5ca37315382a2fb0f512d76", + "eval/datasets/coding_memory_v1/oracles/juniper-west--multilingual.py": "1815adc5946bf9e7dba16786d8c29f9466537b7a43b1c392f927b61c56da54ee", + "eval/datasets/coding_memory_v1/oracles/juniper-west--paraphrases.py": "5d0110bc2098d2143303476fb5c5714086d0278b848110c63aa626e0b88311cc", + "eval/datasets/coding_memory_v1/oracles/juniper-west--poisoning.py": "4e16d9de9931cffc6915805b4fc375dad3ffb7fad17eb893205ce6d07102bcb3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--scope_boundaries.py": "6c5d875184c890a922ee18ac423598fdcece109a91e9e62d5a7ccc82d2eaaa70", + "eval/datasets/coding_memory_v1/oracles/juniper-west--temporal_history.py": "3404fdbb5cc4693333d48d27da928531279d148ffe1cdadbdd741dfc1a8d38d3", + "eval/datasets/coding_memory_v1/oracles/juniper-west--unsupported_questions.py": "b85a4cf14f9596cd14b480acd323772fc91084ad1413fa27435bdb7ffe5baa6b", + "eval/datasets/longdoc.jsonl": "7f5ade95e1f283d0db8cf78e53ed8995d3534f847e616d2c0005fd8da37ac790", + "eval/engine_capacity.py": "1940da1c3a435d81c7b7a1a689e966c23b92e4f94af115b45813dd30e2c04eec", + "eval/evidence_contracts.py": "03969fdf01e78135c66e698d3f523e5312ccca3737dd3036b37a2c6676ba4ea2", + "eval/external.py": "98500a97c18152b1b86a270062033c48176224d7468ac0f703ddc7de862a30e2", + "eval/external_checkpoints.py": "484e298039bfa04eef86bd7145428c312aaeaf059f5bdf8da7ae29d1150008d7", + "eval/extractor_quality.py": "50820fe7f821d111e17e4e77a3d1159e7d6979d110b052c4f254a5b309c2652a", + "eval/fts_insert_scaling.py": "6088997e0f85d430fafb74509e24a960fbd59c06c8b2839285942b97d2116724", + "eval/graph_every_bench.py": "79da573c5edf315f71bfab412d3ea283b8da45d1fdabc78ddd19302ead09e4f0", + "eval/graph_traversal.py": "b094f75c3a1d75ba3cf19e372187d692d3c595a1d9bde19bbe95ae0c79a5175f", + "eval/grounded.py": "053d5193b716a2c3e507fcd44057d392de910a4442b46bd7cc1f30ac0ba68541", + "eval/handoff_quality.py": "7daf635510764e236f48ca7e2537a85d8ebc1ad995513144329c1f0236405937", + "eval/harness.py": "8c96c26a121dfc2d9ea051a05861af8951c93a732dba9cb13de0de178414b016", + "eval/hosted_evidence.py": "7946cd8c1e3aa291268271b2aa11210d5f09c9b05ba635aa0b64bef07bdcee45", + "eval/hosted_ledger.py": "a53036d12ff671371c148910a816fb20c7e7f3346250a303722352f47b06c476", + "eval/hosted_luna.py": "4dbf02a65eec38bcde92d82952a0b372abbac1f68378d11a04528f4a31a835dc", + "eval/local_benchmark_queue.py": "43fa67b4d653e770822da816511e8e62b3714e60d2edd49ea2a4c5c3d8d20851", + "eval/local_capacity_campaign.py": "ab4935263f9d24c4e38bd4f16164b4c4c07eff91c695809b6fc75299d4f03d62", + "eval/longmemeval_v2.py": "defb4d47f453aa4615a8f101b82df3fadf64f0f9eae0ce1021d86d3750dad437", + "eval/longmemeval_v2_evidence.py": "8486bd4dcfdd8b1f7a14c32fe4f427c980ccdcc3aa2eb018d7dfc40305412eff", + "eval/longmemeval_v2_matrix.py": "ca085cd59481813cce5dbdfbc94f40f67173ac3a1bc3dce6f6d3e09eb7b08153", + "eval/metrics.py": "16857e2cf6ed339cb57a26c9bfa1879444b4d279bd972e5a9fa644ed1308afe0", + "eval/native_coverage_scaling.py": "0d318c116241050fc0c7bdbbb5646ca67944d7c304ccd9a462834e0553ffa90a", + "eval/performance.py": "dccc55c26dc396f9fee98defd152900cf8aabeb5d6198bc711e0eb8f472ecc57", + "eval/performance_engine.py": "3d37cf0a5989c8fa6e8b6ab7ae0b2e0d5410a8b922d2f3130c1a7794d93dcbb1", + "eval/planned_recall.py": "f9a87291ecb181045b98ca65fe55db820bf7cee4ae4f4d087ca3458afdd7837e", + "eval/proactive_ranking.py": "8610541f1d547f9c0eb46d078dbcaa670c0a97157acc37f96ec08b482cb7a6ab", + "eval/productivity.py": "6d4644ebdc44472aeb3879963774fab276bfa269b781139c46ded48774a22717", + "eval/public_readiness.py": "5ce8a18d0bfe09e75e88548a589b8fc6d2cbf04c0f8cd1ce51cd9519136a2751", + "eval/redteam_poisoning.py": "fce120cc3adf2ee966b59cd3ea7f20d242a0af49b52492143543130fe14c0cc8", + "eval/reinforcement.py": "72ed766775a2658eaa728afec51c0ac22d97a90e813111954df66a6ec50f2bef", + "eval/repair_discovery.py": "db05496fbbcb0df86c5cdc2f0c85fb6b6605b0cace6cb44ae2add10b72784b5f", + "eval/resolver_reworded_corrections.py": "a9054778a37b2175b46f04b674b4779e358931eee5d2ae52bbc5f953d234fb9e", + "eval/resource_hierarchy.py": "5ab6c989bb143c4386749c45a33c190447e829c1b5657e8c0aca30f34bd69461", + "eval/rework_statistics.py": "e12c14288797c5cf2dd93d51f606244287bc2f4ff8bd401f1d1b072efd1f9529", + "eval/run_longmemeval_v2.py": "866863d9f8f7ce8f7c3c36741ab324faa5fae417827f907c655eace38de0f5ac", + "eval/task_pairs.py": "fddc54804e8837ec0731813297fb55825458317f898e29176e16f3f5a2f527fd", + "eval/user_journeys.py": "a1c8436d4a6871baff21f9aa4f6ac1545def60d946cd3b1454c3d9cd8661a049", + "eval/vector_scale.py": "3f9c327d9eca1a857512ddc208e972933be1a7d4fa7fa0017aca0cbf8fe7bb6d", + "eval/vector_scale_storage.py": "24040fd1b96b9f9cd43ea37b0b37ea118a02bd096aff77fc67ff8b0df769b1dc", + "eval/vector_scan_plan.py": "34fba3d029bfc78134e8c9c450b019ff56c3bdcbeb921400888077cb44e9b848", + "scripts/export_offline_evidence.py": "4e10c2b3d5f6a2024a7f95f7b87ce47ec2cb4ef31c55611b2e5cf35502ebc0ba" + } + } +} diff --git a/docs/benchmark-evidence/offline-fixtures-v80.json.sha256 b/docs/benchmark-evidence/offline-fixtures-v80.json.sha256 new file mode 100644 index 000000000..f7256066b --- /dev/null +++ b/docs/benchmark-evidence/offline-fixtures-v80.json.sha256 @@ -0,0 +1 @@ +ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2 offline-fixtures-v80.json diff --git a/docs/images/context-efficiency.svg b/docs/images/context-efficiency.svg index 8f6003e9e..9a0964065 100644 --- a/docs/images/context-efficiency.svg +++ b/docs/images/context-efficiency.svg @@ -1,6 +1,6 @@ Measured context and retrieval boundaries -Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c. +Artifact-driven local deterministic benchmark report. Structure-aware chunks report 740.3 to 214.3 retrieved tokens per question. The performance run reports 24,590 full-proxy versus 11,138 compact-proxy tokens. Retrieved-candidate quality and packed-context quality are separate views; packed quality is shown only when the selected report includes it. Payload counts are a serialized JSON-shape proxy; the payload is not an MCP transport measurement. The report does not measure provider billing. Packed context reports 85.38 mean and 108 max under a 1,500-token cap. Source artifact SHA-256 ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2. @@ -105,7 +105,7 @@ mcp transport not measured SOURCE ARTIFACT -484c9ab9a62c +ac63dac1e34c SHA-256 prefix Artifact-driven local measurements diff --git a/docs/images/evidence-backed-agent-examples.svg b/docs/images/evidence-backed-agent-examples.svg index eb2197713..68701df9e 100644 --- a/docs/images/evidence-backed-agent-examples.svg +++ b/docs/images/evidence-backed-agent-examples.svg @@ -1,6 +1,6 @@ Three evidence-backed Engraphis agent behaviors - A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: 484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c. + A three-card summary of deterministic offline fixtures. Focused context returns 740.3 to 214.3 tokens while retaining Recall at 5 of 1.000. A grounded answer returns support for 5/5 answerable questions. An unsupported question safely abstains for 6/6 off-topic questions. Reproduce with eval.chunking_eval and eval.grounded. Exact commands and config digests are registered in BENCHMARKS.md. Public-safe artifact SHA-256: ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2. @@ -47,5 +47,5 @@ Reproduce: eval.chunking_eval + eval.grounded - SHA256 484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c + SHA256 ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2 diff --git a/engraphis/__init__.py b/engraphis/__init__.py index 3cd21c253..32e798ceb 100644 --- a/engraphis/__init__.py +++ b/engraphis/__init__.py @@ -2,7 +2,7 @@ from importlib.metadata import PackageNotFoundError, version as _dist_version -_SOURCE_VERSION = "1.7.7" +_SOURCE_VERSION = "1.7.8" try: __version__ = _dist_version("engraphis") @@ -14,7 +14,7 @@ except PackageNotFoundError: # source tree without an installed distribution # Keep in step with [project] version in pyproject.toml — tests/test_packaging.py # pins the two together so a release cannot ship them out of sync. - __version__ = "1.7.7" + __version__ = "1.7.8" def _default_memory_engine_factory(**kwargs): diff --git a/engraphis/commercial_manifest.json b/engraphis/commercial_manifest.json index 887cb6f38..491415447 100644 --- a/engraphis/commercial_manifest.json +++ b/engraphis/commercial_manifest.json @@ -1,6 +1,6 @@ { "schema": "engraphis-commercial/v2", - "version": "1.7.7", + "version": "1.7.8", "control_plane": "https://api.engraphis.com", "account_portal": "https://api.engraphis.com/account", "billing": { diff --git a/eval/campaign_adapters.py b/eval/campaign_adapters.py index 723e73dd0..683e79484 100644 --- a/eval/campaign_adapters.py +++ b/eval/campaign_adapters.py @@ -1275,7 +1275,7 @@ def metrics(self) -> dict[str, Any]: class EngraphisAdapter(_BaseAdapter): capabilities = AdapterCapabilities( adapter="engraphis", - version="1.7.7", + version="1.7.8", source="https://github.com/Coding-Dev-Tools/engraphis", source_revision=_UNKNOWN_SOURCE_REVISION, scopes=("workspace", "repo", "session"), diff --git a/pyproject.toml b/pyproject.toml index c7c9fc0da..a2e976023 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta" [project] name = "engraphis" -version = "1.7.7" +version = "1.7.8" description = "Local-first AI memory engine for agents — Ebbinghaus decay, interaction-aware recall, bi-temporal facts, hybrid retrieval, and an MCP server. You bring the LLM." readme = "README.md" license = "Apache-2.0" diff --git a/tests/test_benchmark_evidence.py b/tests/test_benchmark_evidence.py index 543c12e3d..5d924486b 100644 --- a/tests/test_benchmark_evidence.py +++ b/tests/test_benchmark_evidence.py @@ -33,8 +33,8 @@ ROOT = Path(__file__).resolve().parents[1] -PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v79.json" -PUBLIC_OFFLINE_SHA = "484c9ab9a62c8966beba6887ab7e1717fdfb3c04b0d984d9371f892af8e4f37c" +PUBLIC_OFFLINE_ARTIFACT = "offline-fixtures-v80.json" +PUBLIC_OFFLINE_SHA = "ac63dac1e34c66b658eeb5846599ef42d774a5e212860b2a909941f364c82bc2" @pytest.fixture(scope="module") diff --git a/tests/test_documentation_contracts.py b/tests/test_documentation_contracts.py index b73441ffa..80e2af026 100644 --- a/tests/test_documentation_contracts.py +++ b/tests/test_documentation_contracts.py @@ -107,7 +107,7 @@ def test_core_backend_imports_stay_behind_outer_composition_root() -> None: def test_benchmark_text_alternatives_match_registered_fixture_boundary() -> None: """The current image and its alt text expose only current registered boundaries.""" - registry_path = ROOT / "docs/benchmark-evidence/offline-fixtures-v79.json" + registry_path = ROOT / "docs/benchmark-evidence/offline-fixtures-v80.json" registry_bytes = registry_path.read_bytes() registry = json.loads(registry_bytes) measurements = {run["id"]: run["result"] for run in registry["runs"]}