chore(deps): upgrade everos 1.2.1 to 1.2.3 - #351
Conversation
Moves four packages: everos, everalgo-agent-memory 0.3.1 to 0.4.0, everalgo-user-memory 0.3.2 to 0.4.0, and lancedb 0.33.0 to 0.34.0. The adapter needs no change. Every everos symbol it imports still exists with an identical signature, and the DTO and route modules the HTTP adapter depends on are byte-identical between the two releases. No data migration. No LanceDB table schema changed: user_profile and knowledge_topic are byte-identical between the two releases, and the five files that differ at all differ only in docstrings, so the column-type check 1.2.2 added does not fire on an index this upgrade produces. lancedb 0.33 and 0.34 were verified interchangeable in both directions (each writes Lance file format v2.1), so reverting the pin can still read the index. One fixture follows upstream: 1.2.3 gives extract_agent_skill a module-level _reader singleton beside _writer, and the integration conftest reset only the writers it knew about. The bundled plugin manifest version moves to 1.2.0, which two tests assert as a literal. Records the upgrade in the plugin SOP: the two behaviour changes (extract_foresight now ships disabled, and agent-skill extraction produces SKILL.md files for the first time), and the glibc 2.28 floor lancedb 0.34.0 imposes on Linux installs. Co-authored-by: Claude (claude-opus-5) <noreply@anthropic.com>
|
Claude encountered an error after 1s —— View job I'll analyze this and get back to you. |
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned. Two nonblocking notes inline.
I re-derived the claims in the PR body and the new SOP section against the unpacked 1.2.1 and 1.2.3 trees rather than taking them on trust, and they hold:
- Adapter surface. Every EverOS symbol raven imports (
load_settings,resolve_root,MultimodalNotEnabledError,UnsupportedModalityError,md_change_state_repo,require_multimodal,SearchRequest,memorize,search,_get_engine) resolves under1.2.3with the same signature, andSearchRequest's field set is unchanged. - The comment edit in
backend.py:906is accurate, not just renumbered.1.2.3's routers are exactly get / health / knowledge / memorize / metrics / ome / search, and no route module mentionsconfidenceorskill_usage, so the "no endpoint to consume them" reasoning still stands rather than being a stale claim carried forward. - No data migration.
diff -rqoverinfra/persistence/lancedb/tables/gives precisely the five files named, and each diff is a docstring line (a dropped17_lancedb_tables_design.mdcross-reference);user_profileandknowledge_topicare byte-identical. The claim is verifiable, not asserted. - The foresight claim is subtler than it reads and still correct.
enabled=Falseis on the@offline_strategydecorator, whiledefault_ome.tomlhas[strategies.extract_foresight]commented out in both releases -- so an existing~/.everos/ome.tomlcopied from the1.2.1template carries no override and does inherit the new default. - The conftest delta is exactly right and complete. Comparing module-level
_-prefixed names across all seven strategy modules plusservice/memorize.pyandcomponent/llm/client.py,extract_agent_skill._readeris the only addition in1.2.3. Worth stating plainly: nothing exercises that line (thereal_llmsuite fails onmd_change_stateon the baseline too, as the PR body says), so its correctness rests on inspection -- I did that inspection and it is right. - Both known gaps reproduce as described and I agree with shipping them as recorded:
_SPAWNABLE_STATESis{UNKNOWN}so a self-SIGTERMed server is not respawned, andcascade rebuildrefuses under the OME lock. The SIGTERM path needs four supervised-loop crashes inside the stability window,_should_reportstill surfaces one warning for the new state, and the upstream alternative (serving searches from a frozen index) is worse. Accepted risk rather than a defect.
Tests. uv run pytest tests -q -x -p no:randomly => 6477 passed, 43 skipped, 138s. I read every skip: optional channel SDKs absent from this env (lark_oapi, nio, botpy, slack_sdk, telegram, wecom_aibot_sdk) and structural parametrizations in test_provider_resolution_invariants.py / test_provider_catalog.py. None are EverOS-related and nothing was weakened to get green -- the three version literals this PR touches are still real equality assertions against the shipped manifest. make check-large-files passes.
Covered: AGENTS.md rules (commit grammar, uv-only lockfile provenance, test file naming -- no new files, existing ones edited in place as 5.4 requires), the diff itself, callers and git log history of the two version literals, backward compatibility (rollback path, lockfile, glibc floor), and whether tests were weakened. The remaining 1.2.1 mentions across raven/ and tests/ are correctly left alone -- they date behaviour ("from everos 1.2.1 a server ..."), they do not name the pin.
| 5. **Finalize**: bump the manifest `version`. Two tests assert it as a | ||
| literal and must be updated with it — | ||
| `test_everos_plugin_discovery.py::test_bundled_shadows_lower_priority_source` | ||
| and `test_plugin_command.py::TestActiveBackend::test_lists_everos_memory`. |
There was a problem hiding this comment.
The manifest bump has a third site, and this list is where the next bump will lose it again.
raven/plugin/memory/everos/__init__.py:14 still says __version__ = "1.1.0" while raven-plugin.toml now says 1.2.0, and tests/test_everos_plugin_discovery.py:51 (TestPackageSurface::test_imports_clean) pins that stale literal -- which is why the suite stays green on the divergence instead of catching it.
That these two are meant to move in lockstep is not my inference: #264 (5b26c833) bumped the manifest 1.0.0 -> 1.1.0 and __version__ in the same commit. This is the first release where they disagree, so raven plugins prints 1.2.0 for a package whose own dunder reports 1.1.0.
No runtime consumer reads __version__ today (I grepped -- the test is the only reader), so nothing breaks now; that is why this is a note and not a blocker. But the drift is silent and permanent, and the SOP text right here says "Two tests" when there are three literals to move.
Two ways out, and it is your call which:
- Keep it as the package version: set
__version__ = "1.2.0", updatetest_imports_clean, and make this sentence name all three sites (__init__.py,test_imports_clean,test_bundled_shadows_lower_priority_source,test_lists_everos_memory). - Treat it as dead metadata: delete
__version__and its assertion, leaving the manifest as the single source of truth, and say so in this step so nobody re-adds it. Cheaper long-term -- one literal cannot drift from itself.
Either way the SOP sentence needs to change with it, since its whole purpose is that the next bump does not rediscover this.
| the pin can still read the index. Step 4's backup is cheap insurance, | ||
| not a precondition. | ||
|
|
||
| **The Linux floor moved to glibc 2.28.** `lancedb 0.34.0` ships no |
There was a problem hiding this comment.
This paragraph is correct -- and it is the only place the new install floor is written down, which is my concern rather than the analysis.
The lockfile confirms it: 1.2.1 carried manylinux_2_17_{x86_64,aarch64} wheels for lancedb, 0.34.0 ships only manylinux_2_28 (plus macOS arm64 and win_amd64) and no sdist. So on glibc 2.17-2.27, on both x86_64 and aarch64, install.sh fails at resolution with a bare uv error naming a transitive dependency the user has never heard of. README's install section says "Linux, macOS, or WSL2" with no libc floor, and CI is ubuntu-latest (glibc 2.35+), so nothing in the project will ever tell that user why -- and the explanation lives in an internal architecture doc they would have no reason to open.
Not a blocker: the affected distros (CentOS/RHEL 7, Ubuntu 18.04, Amazon Linux 2) are all past end of life and the project never promised them. But "recorded in the plugin architecture doc" is not the same as "the affected user can find out", and a dependency upgrade is the moment the floor moves.
Cheapest fix, your pick: a one-line prerequisite in README's install section (Linux: glibc 2.28 or newer), or a preflight in install.sh that checks ldd --version before handing constraints to uv and prints the reason. The preflight is the kinder failure -- an explanatory message beats a resolver traceback -- but the README line costs almost nothing and covers the common case.
Summary
Upgrades the pinned EverOS from
1.2.1to1.2.3, per the SOP indocs/memory-plugin-architecture.mdsection 7.2. Four packages move:everos,everalgo-agent-memory0.3.1to0.4.0,everalgo-user-memory0.3.2to0.4.0, andlancedb0.33.0to0.34.0.The adapter needs no change. Every EverOS symbol it imports still exists
with an identical signature (12 call sites checked), and
memory/search/dto.pyplus the
search/memorize/getroute modules are byte-identical betweenthe two releases, so the HTTP contract is untouched.
No data migration. No LanceDB table schema changed:
user_profileandknowledge_topicare byte-identical between the two releases, and the fivefiles that differ at all (
episode,atomic_fact,agent_case,agent_skill,foresight) differ only in docstrings. So the column-typestartup check that
1.2.2added does not fire on an index this upgradeproduces.
lancedb0.33and0.34were verified interchangeable in bothdirections - each writes Lance file format
v2.1, and a table written byeither opens, searches over the other's IVF and FTS indexes, upserts and
prunes under the other - so reverting the pin can still read the index.
Three things reviewers should know, all recorded in the new SOP section 7.3
rather than only here:
extract_foresightnow ships disabled. The default moved in code, notin
default_ome.toml, so an existing~/.everos/ome.tomldoes not opt outof the change. Any deployment relying on foresight entries must set
enabled = trueper install.1.2.3acascade race meant it produced zero
SKILL.mdfiles, soEverosSkillSourcehas been contributing nothing; it now contributes realskills to the prompt.
lancedb 0.34.0ships nomanylinux_2_17wheel and no sdist, andinstall.shhands the exportedlockfile to the user's
uvas constraints, so CentOS or RHEL 7,Ubuntu 18.04 and Amazon Linux 2 fail at install time rather than falling
back to a source build.
Two smaller changes are consequences, not choices.
1.2.3givesextract_agent_skilla module-level_readersingleton beside_writer, andthe integration conftest reset only the writers it knew about. And the bundled
plugin manifest version moves to
1.2.0, which two tests assert as a literal;SOP step 5 now names both so the next bump does not rediscover them.
Type
Dependency upgrade.
chorehas no box of its own.Verification
make lint-pythonon this branch only covers the nine CI-tooling files inPYTHON_LINT_TARGETS, so ruff was run directly against the files this changetouches instead of relying on that target.
The 30 skips are parametrized cases in
test_provider_resolution_invariants.py("not a gateway" and similar); theyare structural, unrelated to EverOS, and skip identically on the baseline.
Beyond the suites above, the upgrade was exercised end to end through Raven's
own entrypoints on an isolated
RAVEN_HOME:raven pluginsreports the newmanifest version,
raven doctorstill parses the capability matrix from a/healththat1.2.3extended with acascadeblock, and a realraven agent -mturn recalls memories that1.2.1wrote - including afterrolling the pin back, with the index having been written by
lancedb 0.34inbetween. The
extract_foresightchange is visible in the OMErun_recordtable: every other strategy advances by one dispatch per turn while
extract_foresightstops being dispatched at all.The
real_llmlayer of SOP step 3 could not be validated, and this PR doesnot claim it passes. All three tests in
tests/integration/test_everos_backend_e2e.pyfail withno such table: md_change_state, and they fail identically on the baseline,checked by re-syncing to the old pin and running the same command. The cause is
pre-existing and independent of the upgrade:
everos_envisolates the test bymonkeypatching
EVEROS_ROOTto a tmp dir (conftest.py:126), but thebackend's start path calls
configure_everos_env(), which deliberately assignsrather than defaults that variable (
update_everos.py:228), so the spawnedserver serves the recorded root while the test's drain helper reads the tmp
root's sqlite. Worth fixing, but not here.
Risk
Two user-visible behaviour changes, both upstream defaults rather than choices
made here: foresight extraction stops running unless an install opts in, and
agent-skill extraction starts running for the first time, which changes prompt
content and token usage. The
ome.dbrun_recordring buffer forskill_cluster_updatedalso grows from roughly 0.8 KB to 14 KB per row becauseSkillClusterUpdatednow carries a 1024-dim embedding, about 14 MB instead of0.8 MB at the default 1000-record cap.
Rollback is
git revertof this commit plusuv sync. The index does not needrestoring: the schemas are unchanged and
lancedb0.33reads what0.34wrote, both verified. Installs on glibc below 2.28 are the one case a revert is
required rather than optional.
Related Issues
N/A