Repository navigation
feat!: the everalgo 2026-10 line and the target architecture - #538
Conversation
7532dd4 to
18b45d4
Compare
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the full 58-commit diff and history against main, including CLAUDE/architecture rules, EverAlgo LLM/boundary/user/agent/search contract adaptation, composition-root and facade callers, storage/schema migration and lifecycle paths, API/CLI backward compatibility, and test changes. The OpenAPI contract remains unchanged except for the release version, all import-linter architecture contracts hold, and I found no test weakening.
Local verification passed: ruff check/format; all 13 import-linter contracts; repository, datetime, singleton, OpenAPI, docs, and CJK gates; unit (3050 passed, 4 skipped); integration (199 passed, 9 skipped, 7 deselected); and e2e (64 passed, 22 deselected). GitHub lint, package, links, commit-message, title, and Linux integration checks were green; remaining platform/Milvus/unit jobs were still running when posted.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the change since 18b45d4 and rechecked it in the context of the full diff against main. I covered CLAUDE/architecture rules, the dependency-injection diff, affected route callers and history, HTTP/OpenAPI compatibility, test weakening, and the entrypoint/service architecture boundary. The refactor preserves route behavior and the published API while making the application and request ID overrideable through FastAPI dependencies; no test configuration or coverage was weakened.
Verification: all 128 API unit tests passed; ruff check and format-check passed; all 13 import-linter contracts held; OpenAPI matched the committed schema; datetime and singleton gates passed. The repository's make wrapper was unavailable in this environment, so I ran these constituent gates directly.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the two-commit delta since 6bdafe9 in the context of the full diff against main. I covered the project rules and architecture constraints, schema relocation and mapping callers, the table-driven exception-handler behavior and history, HTTP/Python compatibility, and test weakening. The published OpenAPI contract is unchanged, every prior application-error mapping retains its status/code/message policy, and the only test edits are import-path updates. No fourth-round blocker criteria are implicated.
Verification passed: 134 affected API and scope/path property tests; ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; and singleton checks.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the delta since e1bae0b in the context of the full diff against main. I covered project rules and architecture, the exception hierarchy and all callers, response compatibility, history, and test weakening. The new exact-class mapping makes ordinary API requests that lack LLM configuration return the established 422 provider error without changing unrelated RuntimeError handling; the test change is additive. No late-round blocker criteria are implicated.
Verification passed: all 129 API unit tests; ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; and singleton checks.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the two-commit delta since d990ff1 in the context of the full diff against main. I covered project rules and architecture, the EverAlgo boundary contract, pipeline/event/persistence/replay callers, backward compatibility with pre-language markdown and events, and test weakening. Explicitly complete tails are closed exactly as the upstream contract delegates; language pinning preserves the documented inference fallback when metadata is absent. The test changes add coverage while retaining the existing buffered-tail e2e path. No late-round blocker criteria are implicated.
Verification passed: targeted unit, integration, and e2e tests (117 passed, 1 deselected by existing suite selection); ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; and singleton checks.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the two-commit delta since 1f55f74 in the context of the full diff against main. I covered project rules and architecture, public and queued service callers, HTTP/CLI compatibility, renamed-module history, and test weakening. The facade now exposes one public method per add/flush use case, queue delivery still targets the inline cycle, the HTTP/OpenAPI contract is unchanged, and the deliberate Python-facade rename is documented with updated in-repo callers. White-box tests moved to the private cycle while public orchestration remains covered. No late-round blocker criteria are implicated.
Verification passed: selected service, API, CLI, property, and integration tests (530 passed, 1 deselected by existing suite selection); CLI help; ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; and singleton checks.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the five-commit delta since d44ba9e in the context of the full diff against main. I covered the project rules and architecture constraints, moved middleware/upload/backfill/cascade/Milvus/OME code and their callers, commit history, Python and persisted-job compatibility, and test weakening. The new module boundaries remove a service-to-infra exception while preserving the prior public cascade and Milvus imports and OME's persisted APScheduler callable paths; the test changes move or strengthen coverage rather than relaxing it. No late-round blocker criteria are implicated.
Verification passed: the complete unit suite (3091 passed, 4 skipped); focused affected unit and vector-backfill integration tests (230 passed); ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; repository asset/file-size/deprecated-name/contributor-doc gates; datetime discipline; singleton checks; documentation links; CJK policy; and git diff checks.
gloryfromca
left a comment
There was a problem hiding this comment.
Blocking: The committed sphere golden fixture must be corrected so the new regression test passes.
Reviewed the four-commit delta since ee07484 in the context of the full diff against main. I covered project rules and architecture, the TUI sphere/app module extraction, CLI and README-media callers, commit history, Python import compatibility, removal reachability, and test weakening. The renderer extraction itself preserves output and the removed solving path was unwired, but the new golden fixture fails its own regression test; details are inline.
Verification: the affected TUI/CLI suite reported 104 passed and 1 failed; the isolated golden suite reported 1 passed and 1 failed. Ruff check and format-check, all 13 import-linter contracts, OpenAPI drift, datetime discipline, singleton checks, docs, CJK policy, and diff checks passed. This blocker is introduced by this revision, reached in the ordinary Python 3.13 unit CI job, and leaves no working merge path while that required test fails.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the fix delta since d5bb7dd in the context of the full diff against main. I covered the project rules and architecture constraints, the golden serialization and regenerated fixture, affected TUI/CLI callers, commit history, cross-platform compatibility rationale, and whether the test was weakened. Rounding only the non-visual depth field to 1e-4 removes platform libm ULP noise while the regression still pins all rendered cells and markup; my prior blocker is fixed, replied to, and resolved. No late-round blocker criteria remain.
Verification passed: all 105 affected TUI/CLI tests; ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; singleton checks; and diff checks.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the three-commit delta since f08d4f0 in the context of the full diff against main. I covered the project rules and architecture constraints, package init/facade requirements, the YAML-loader rename and all in-repo callers, the removed evolution package and history, Python import compatibility, documentation, and test weakening. The deleted evolution package was empty and unreferenced; the loader implementation is a pure move; and the deliberate everos.component.config rename is called out in the changelog with a direct migration path. No late-round blocker criteria are implicated.
Verification passed: all 46 affected loader, custom-instruction, and bootstrap tests; ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; singleton checks; documentation checks; CJK policy; and full-diff checks. The earlier golden-fixture thread remains resolved.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Reviewed the three-commit delta since 65c727b in the context of the full diff against main. I covered the project rules and architecture constraints, the provider/build lifecycle, memory extraction and search callers, cascade CLI behavior, health/OpenAPI and Python compatibility, commit history, and test weakening. Requiring the extraction LLM at assembly preserves the server's existing startup invariant while making downstream types honest; optional embedding/rerank/multimodal behavior is unchanged, the removed health flag was constant, and the API/Python migrations are documented. No late-round blocker criteria are implicated.
Verification passed: the complete unit suite (3090 passed, 4 skipped); targeted changed-path integration/e2e tests (115 passed, 3 deselected by existing suite selection); ruff check and format-check; all 13 import-linter contracts; OpenAPI drift; datetime discipline; singleton checks; documentation checks; CJK policy; and full-diff checks. The earlier golden-fixture thread remains resolved.
Squashed from 5 commits: - chore(deps): bump everalgo packages to the 2026-10-13 contract line - refactor(llm): implement everalgo LLMClient contract in OpenAIProvider - feat(config): response_format_mode and invalid_reply_retries for LLMs - refactor: minimal import fixes for everalgo 0.6 contract line - test(llm): conformance suite and provider tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 21 commits: - refactor(infra): move core.persistence primitives into infra - refactor(infra): move the cascade engine under infra.cascade - feat(memory): declare storage ports and query value objects - feat(infra): storage adapters implement the memory ports - refactor(memory): memory layer talks to storage through ports - refactor(service): boundary, queue, backfill use ports and maintenance - ci: invert layering contracts - feat(memory): declare OME types, EventBus port and MemoryDeps - feat(infra/ome): strategy adapter and OmeEventBus - refactor(memory): strategies are pure functions returning events - docs: strategies are pure functions; OME imports only memory ports - refactor: expose what the application bootstrap assembles - feat(service): bootstrap builds the Application behind three facades - test: e2e and integration take dependencies from the Application - ci: service imports infra and component only through bootstrap - refactor(component): drop accessor singletons; bootstrap owns providers - refactor(core): configure observability state instead of lazy build - ci: singleton gate and the no-bypass-facade contract - docs: component factories, observability facades and the singleton gate - refactor(infra): storage objects replace engine and repo singletons - docs: storage objects, removed storage singletons, add-memory-kind Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 5 commits: - feat(memory): custom_instructions replaces prompt_slots - refactor(memory): boundary detection lives in the domain - fix(memory): align user-track models and extractors with everalgo 0.9 - test: user-track canned LLM scripts and e2e - docs: user track on the everalgo contract line Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 3 commits: - fix(memory): align agent-track models and extractors with everalgo 0.6 - feat(memory): optional agent-case gate behind the LLM judge - test: agent-track canned scripts and e2e Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 5 commits: - refactor(search): decider speaks the everalgo LLM contract - refactor(search): everalgo candidate types stay inside two mappers - feat(memory): knowledge store port and adapters - test: search and knowledge on the contract line; make ci green - fix(search): rerank on the text field; hermetic dotenv guard Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 5 commits: - refactor(core): datetime helpers move to core.utils - refactor(service): ops facade owns backfill and remaining route logic - refactor(entrypoints): routes and cli import service only - test: inject seams instead of patching private functions - ci: enable entrypoints-forbidden; docs follow the target architecture Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 10 commits: - feat(memory): persist why an agent memcell produced no case - docs(changelog): name the memcell columns added on first start - refactor(service): the memorize queue lives in the memory facade package - refactor(service): ops facade delegates use cases to private modules - refactor(service): split the knowledge facade into a subpackage - refactor(memory): knowledge documents carry no storage path - refactor(memory): the cluster store port speaks in cluster operations - feat(config): logging level is configured once by the bootstrap - refactor(entrypoints): api request dependencies module - refactor: share projection rules; inject config and file input Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 4 commits: - chore(deps): everalgo-boundary 0.4.1 - docs(changelog): list the pinned everalgo versions in the upgrade note - chore(release): v1.6.0 - chore(release): regenerate openapi.json for 1.6.0 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Squashed from 4 commits: - refactor(entrypoints): routes declare app and request id as dependencies - refactor(entrypoints): api request and response models live in schemas/ - refactor(entrypoints): exception handlers are one table-driven handler - fix(entrypoints): LLMNotConfiguredError answers 422, not 500 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 2 commits: - feat(memory): close the trailing segment the model judges complete - feat(memory): one language decision per cell, pinned downstream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 3 commits: - refactor(entrypoints): service owns flush result, cli modules renamed - refactor(service): memory facade use cases are add and flush - refactor: upload step joins knowledge, middleware joins the api layer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 9 commits: - refactor(ops): vector backfill rows live in infra, no boundary exception - refactor(cascade): worker maintenance and supervision get modules - refactor(milvus): repository schema and codec get modules - refactor(ome): engine lifecycle and dispatch get modules - test(tui): golden frames pin the demo sphere renderer - refactor(tui): sphere renderer becomes a package - refactor(tui): demo app shell, widgets and copy get modules - refactor(tui): drop the solving renderer nothing has called since #405 - fix(tui): golden frames round depth so libm ulps do not fail CI Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 3 commits: - chore(memory): drop the empty extract.evolution package - chore: give the two empty package inits a docstring and __all__ - refactor(component): rename config to yaml_loader Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 3 commits: - refactor(service): require the extraction llm at build time - refactor(memory): the llm is never None past the bootstrap - feat(api): drop capabilities.llm from GET /health Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 3 commits: - refactor(config): cascade and ome switches live in settings - test: move the ome strategy harness out of the package - test(cli): one hermetic_env for the subprocess tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Squashed from 5 commits: - refactor(persistence): keep lancedb index building out of the records - refactor(persistence): rename table_chassis to base_table - refactor(persistence): records declare vectors without a width - refactor(persistence): lancedb builds its tables from the index schema - test: build index tables from the neutral schema at an explicit width Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
Reviewed the two-commit delta through 2f1c5ef. The primary vector, hybrid, and agentic paths now apply radius to raw dense scores before fusion/rerank, and the dead RankInput.radius plumbing is removed. The scope-blind find_by_owner removal has no repository callers; scoped alternatives remain.
Named nonblocking follow-up: the public advanced llm_multiround method still calls dense_recall directly and its retrieval function accepts no radius, so the new “every method's vector route” wording has one exception. Either document that exception or plumb the floor into each per-sub-query dense result later. I am not holding this revision on it: the ignored behavior predates this delta, that method is absent from the documented SearchMethod table, and callers have working vector/hybrid/agentic routes. It therefore fails the late-round introduced/ordinary-use/no-way-out blocker bar.
Covered the repository rules and architecture constraints, the diff and affected callers, issue and implementation history, API/backward compatibility, score-stage semantics, and whether tests were weakened. Validation: focused search/persistence/E2E selection 371 passed (15 deselected); Ruff check/format, all 14 import contracts, docs/CJK, OpenAPI drift, and repository gates passed. GitHub lint, integration, links, title, and package-build checks are green; the commit-message job currently reports the mechanical 73-vs-72-character subject failure, and remaining unit/Milvus matrix jobs are still running. The previously opened golden-fixture thread remains resolved.
Rows are unique only within `(app_id, project_id)`, which is why the primary-key work removed `get_by_id`. `find_by_owner(owner_id)` had the same blind spot -- it read one owner's rows across every scope -- and no caller left (#480). Scoped reads go through `find_where` with an explicit filter or `find_by_owner_entries`, which carries the scope. Closes #480 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`radius` was applied to the dense pool of `vector` and `hybrid` searches, but was also handed to the ranker's `RankInput`, which never read it, and the `agentic` routes ignored it altogether (#394). The documented meaning -- a cosine threshold on dense recall -- is the one kept: it is applied before fusion or rerank, in every method that has a vector route, and `keyword` ignores it. The dead `RankInput.radius` plumbing is removed; `search_*_agentic` take `radius` and apply it to their dense recalls (cases, skills, episode facts); the API reference states where the floor applies. Closes #394 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`everos.infra.persistence.index` is the backend-neutral port package for the derived index; it re-exported the eight record tables (`Episode`, `AgentCase`, ...) and `ParentType` from `records`, so cascade and the tests imported storage models "from the port" (G29, terminal architecture 4.4). The port package now exports protocols, schema, predicates and maintenance only; the tables are imported from `everos.infra.persistence.records`, which owns them. import-linter: the `index -> records` ignore no longer matches and is gone; the `records` facade's per-kind re-exports join the facade ignore list like every other persistence subpackage's. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Five _backfill* step modules (1052 lines) sat beside the ops facade and outnumbered its other steps (cascade, health, ome, tasks). Following the facade-split rule, they now live in one subpackage: - _backfill.py -> backfill/_deps.py - _backfill_run.py -> backfill/_run.py - _backfill_vectors.py -> backfill/_vectors.py - _backfill_clusters.py -> backfill/_clusters.py - _backfill_skills.py -> backfill/_skills.py backfill/__init__.py re-exports what the ops facade used to take from ._backfill / ._backfill_run; everos.service.ops exports the same names as before. The phase modules reach _deps by relative import. Tests that import private helpers and the vectors-phase boundary test follow the new module paths; no behaviour changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every infra subpackage should read the same way: a facade __init__.py plus private _x/ directories, the layout ome already uses. cascade exposed projections/ and worker/ as public directories, and the service layer reached into cascade.worker directly. Pure move, no behaviour change: - git mv cascade/projections -> cascade/_projections - git mv cascade/worker -> cascade/_worker - rewrite every import, patch target and doc path to the new names - export DEFAULT_OPTIMIZE_PRUNE_RETENTION_SECONDS from the cascade facade so bootstrap no longer imports a cascade internal - add everos.infra.cascade.** to the "Subpackage internals are private" contract, with ignore_imports for the facade's own wiring Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Second step of giving every infra subpackage the same layout as ome: a
facade __init__.py plus private _x/ directories. The markdown store
exposed its four implementation directories as public packages.
Pure move, no behaviour change:
- git mv markdown/{base,mds,readers,writers} -> markdown/_{...}
- rewrite every import, patch target, import-linter ignore_imports
entry and doc path to the new names
- top-level modules (stores.py, knowledge_store.py) keep their names
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Third step of giving every infra subpackage the same layout as ome: a
facade __init__.py plus private _x/ directories. The sqlite store
exposed its engine base, repositories and table schemas as public
packages.
Pure move, no behaviour change:
- git mv sqlite/{base,repos,tables} -> sqlite/_{...}
- rewrite every import, patch target, import-linter ignore_imports
entry, doc path and the datetime checker's allowlisted path
- the facade's side-effect import that registers every SQLModel is now
`from . import _tables as _tables`
- top-level modules (stores.py, repositories.py, ...) keep their names
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Last step of giving every infra subpackage the same layout as ome: a
facade __init__.py plus private _x/ directories. The lancedb store
exposed its connection base and repositories as public packages.
Pure move, no behaviour change:
- git mv lancedb/{base,repos} -> lancedb/_{base,repos}
- rewrite every import, patch target, import-linter ignore_imports
entry and doc path to the new names
- top-level modules (backend.py, lancedb_manager.py) keep their names
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The G29 / G15 / G14 moves changed no public facade, so they are one Changed entry: where the implementation modules now live, the new import-linter protection for cascade, and the logger-name consequence for operators who filter logs by module path. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
aac8e10 to
14006c4
Compare
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
No new findings in this revision. I reviewed the internal-package privatization, backfill relocation, and index-record facade cleanup, including callers, history, facade/backward compatibility, tests, and the repository architecture rules. The force-pushed 14006c4 tree is byte-for-byte identical to the reviewed aac8e10 tree, so the completed validation applies to the current head.
Validation: 3,091 unit tests passed with 4 skipped; 200 integration tests passed with 9 skipped and 7 deselected. Ruff check/format, all 14 import-linter contracts, repository assets/file sizes/naming/contributor-doc/datetime/singleton/OpenAPI gates, documentation checks, CJK policy, deterministic fixture regeneration, and diff checks passed. Public facade symbol sets remain unchanged except for the intentional added cascade constant, and no affected test was weakened. Current GitHub lint, integration, package, commit-message, link, and title checks are green; the unit and Milvus matrix jobs are still running.
The previously named llm_multiround radius follow-up remains the sole nonblocking item in my overall stance. The golden-fixture thread I opened remains resolved.
The jobstore's exclusive lock existed twice inside the OME package: the engine's own `_acquire_lock` / `_release_lock` and `OmeLock`, the primitive the facade exports so backfill and the exclusive cascade commands can probe or hold the same file without starting an engine. Same path, same flags, two copies to keep in step and two different messages for one condition (G22). `OmeLock` gains `acquire` / `release` (the engine holds it from `start` to `stop`) and `hold` is built on them; the engine's copy is gone. The only visible change is the message, now "another process holds <path>" from both sides. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
No new findings in the 0675372 OME lock refactor. I reviewed the full PR diff plus this revision delta, the OmeLock and engine callers/history, lifecycle and failure cleanup, facade/backward compatibility, test changes, and the repository architecture rules. The engine now delegates its existing process lock lifecycle to OmeLock without changing the production ownership path.
Validation: 255 affected OME/service/integration tests passed; Ruff check and format passed; all 14 import-linter architecture contracts passed; a direct two-instance lock lifecycle smoke test confirmed acquire/contention/release/context behavior. GitHub lint, package, commit-message, link, and title checks are green; the wider unit/integration/Milvus matrix is still running. The previously named llm_multiround radius follow-up remains the sole nonblocking item in my overall stance, and the golden-fixture thread remains resolved.
The three multimodal e2e tests asserted the parsed HTML text sat in `unprocessed_buffer` after `/add`. Since the boundary closes a segment the model judges complete into a cell at once (the 2026-10 everalgo line's `tail_complete`), a single parsed message is usually in a memcell's `payload_json` by the time `/add` returns, and the buffer is empty; the text had been parsed all along (found in the memcell, the episode and the atomic facts of a live run). The helper now joins the buffer rows and the session's memcell payloads. Live-only tests, so CI could not see this. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
No new findings in the 76ca9fa E2E adjustment. I reviewed the full PR context plus this delta, the parser-to-canonical-message-to-memcell persistence path, affected callers and history, compatibility, whether the assertion was weakened, and the repository rules/architecture constraints. Reading either the session buffer or serialized memcell is valid because both carry the parser-derived CanonicalMessage.text; the assertions still require parsed HTML markers/content rather than merely the original request URI or encoded input.
Validation: supporting parser, boundary, SQLite memcell, and storage coverage passed 60/60; the changed live-LLM module collected 3 tests but all 3 were deselected by the default marker policy (no credentialed/token-burning run was attempted). Ruff check/format, diff checks, and all 14 import-linter contracts passed. GitHub lint, integration, package, commit-message, link, and title checks are green; remaining unit and Milvus jobs are still running. The previously named llm_multiround radius follow-up remains the sole nonblocking item in my overall stance, and the golden-fixture thread remains resolved.
The Upgrade section named only the library imports and the prompt slots. It now opens with the one command and the restart, says the exact everalgo pins come along without a pre-release flag, lists the four things a running deployment has to move by hand (the retired cascade / OME environment variables, `[llm]` for `everos cascade`, the removed `/health` field, the prompt templates), and warns that extraction output changes with the everalgo line. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
Reviewed the changelog-only delta against the repository rules, implementation and callers, prior environment-variable behavior/history, backward compatibility, tests, and the applicable architecture constraints. No tests were weakened in this revision. Documentation/CJK/diff checks passed, and the targeted config, cascade CLI, health API, SQLite schema, and custom-instruction tests pass (34/34 on Python 3.13.2). CI lint, integration, links, package build, commit-message, and title checks are green; the remaining matrix jobs are still running.
`tests/fixtures/mixed_assistant_session.json` and its builder were an untracked draft of a future regression corpus (hand-authored, synthetic) and were staged by accident with a directory-wide `git add` in the G29 layout commit. No test reads them. They leave the tree again and stay a local draft until the regression suite that needs them lands. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
The new revision only removes an accidentally committed synthetic fixture draft and its builder. I verified that neither file was referenced at the prior revision, and their removal does not change runtime behavior, architecture, backward compatibility, or test coverage. The existing changelog migration-table clarification remains a named nonblocking documentation follow-up.
Covered: repository rules, the full change and revision delta, fixture consumers and history, backward compatibility, test-strength preservation, and architecture constraints. Local unit result: 3,091 passed, 4 skipped on Python 3.13.2. Repository asset/file-size, deprecated-name, contributor-doc, datetime, singleton, OpenAPI, CJK, documentation, and diff checks passed. Current CI is green for lint, package build, Linux unit/integration jobs, links, commit messages, and PR title; Windows unit and Milvus 2.6 integration jobs are still running.
Summary
EverOS 1.6.0. Two things land together because the second was designed for the first:
LLMClient.achatcontract (everalgo-core 0.6.0,boundary 0.4.1,user-memory 0.9.0rc4,agent-memory 0.6.0rc3,rank 0.5.0rc3,knowledge/clustering/parser 0.3.0rc2), pinned exactly. The six release candidates stay as pinned;pip install -U everosresolves them without a pre-release flag.everos.service.build_application), three facades (MemoryService,KnowledgeService,OpsService), strategies as(event, deps)functions, cascade and OME as domain-agnostic engines, one layout convention acrossinfra(facade + private_x/directories), and 14 import-linter contracts guarding all of it. Scored 94 / 100 against the terminal-architecture rubric (from 48 onmain).What changes for a running deployment
Upgrade is one command and a restart; the first start migrates
system.db(three nullablememcellcolumns). Markdown, the index and the OME jobstore are untouched; a root written by a 2026-08 release reopened on this branch with no manual step (see Verification).Breaking, hence
feat!: theEVEROS_DISABLE_CASCADE*/EVEROS_OME_*environment variables are replaced by[cascade]/[ome]settings and no longer read;[llm]is required to build the application,everos cascade …included;GET /healthdropscapabilities.llm; prompt slots are replaced byconfig/custom_instructions/<operator>.yaml; library imports ofeveros.service.memorize/search/getmove tobuild_applicationand the facades. Additive:entry_idon the agent-case items of/searchand/get. Extraction output changes with the everalgo prompts, and a profile's language is frozen from its first extraction after the upgrade. The CHANGELOGUpgradesection is the operator-facing version of this paragraph and is the release page text.Area
Verification
Checklist
main..envfiles, dependency folders, or generated output.Notes for Reviewers
git log --statshows them as renames and no public facade changes.mainare enumerated and classified in the CHANGELOGChangedsection.## [1.6.0]section is the release page.Closes
IndexRecord+DenseVector); the LanceDB adapter owns the Arrow mapping.tests/integration/test_ome_strategies_integration.py::test_skill_chain_e2eplus the canned agent-track unit tests.primary_languageand never re-judges. Verified locally onqwen/qwen3-235b-a22b-2507(the only model that reproduced the drift): 3/3 English-burst runs and 2/2 dialogue profiles came back English.source_case_idsholds), not the index row id;SearchAgentCaseItem/GetAgentCaseItemgainentry_id(additive).Application.startwarms tiktoken'so200k_baseencoding before opening storage; a host that cannot load it fails to start withTokenizerAssetErrorinstead of a generic 500 on the first agent/add.deleted) and the reconciler re-emits a present file whose row says so, whatever its mtime.radiusis a pre-fusion cosine floor on every vector route (vector,hybrid,agentic); the deadRankInput.radiusplumbing is gone.IndexRepository.find_by_owneris removed (no callers).}(everalgo brace-counting JSON extractor) #515 — the everalgo 2026-10 line parses replies withmodel_validate_json(no brace counting);timeout_secondsis now listed in the[llm]configuration reference.🤖 Generated with Claude Code