Skip to content

feat!: the everalgo 2026-10 line and the target architecture - #538

Merged
Kendrick-Song merged 34 commits into
mainfrom
feat/everalgo-llm-contract
Oct 30, 2026
Merged

Kendrick-Song merged 34 commits into
mainfrom
feat/everalgo-llm-contract

Conversation

@Kendrick-Song

@Kendrick-Song Kendrick-Song commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

EverOS 1.6.0. Two things land together because the second was designed for the first:

  1. The everalgo 2026-10 contract line. Every algorithm package moves to the LLMClient.achat contract (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 everos resolves them without a pre-release flag.
  2. The target architecture. Storage ports owned by the domain, one composition root (everos.service.build_application), three facades (MemoryService, KnowledgeService, OpsService), strategies as (event, deps) functions, cascade and OME as domain-agnostic engines, one layout convention across infra (facade + private _x/ directories), and 14 import-linter contracts guarding all of it. Scored 94 / 100 against the terminal-architecture rubric (from 48 on main).

What changes for a running deployment

Upgrade is one command and a restart; the first start migrates system.db (three nullable memcell columns). 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!: the EVEROS_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 /health drops capabilities.llm; prompt slots are replaced by config/custom_instructions/<operator>.yaml; library imports of everos.service.memorize / search / get move to build_application and the facades. Additive: entry_id on the agent-case items of /search and /get. Extraction output changes with the everalgo prompts, and a profile's language is frozen from its first extraction after the upgrade. The CHANGELOG Upgrade section is the operator-facing version of this paragraph and is the release page text.

Area

  • Architecture method
  • Benchmark
  • Use case
  • Documentation
  • Developer experience
  • CI, build, or release

Verification

CI at e315967: lint, unit (3.12 / 3.13 / Windows), integration (3.12 / 3.13 / Milvus 2.6), package build.
Hermetic on the final tree (EVEROS_ROOT=/tmp/..., every provider key empty):
  make lint        -> ruff clean, import-linter 14 kept / 0 broken, datetime / CJK / openapi gates OK
  pytest tests/unit         -> 3091 passed, 4 skipped
  pytest tests/integration  -> 200 passed, 9 skipped
  pytest tests/e2e          -> 64 passed (non-live subset)
Live, local only (real LLM + embedding + rerank + multimodal credentials):
  pytest tests/e2e -m 'live_llm or slow' -> 22 / 22 passed, incl. 419 LoCoMo messages end to end
Upgrade smoke: a copy of a real root written 2026-08-04 (4 md files, 4 memcells, FTS v2, no case_* columns)
  reopened on this branch: migration on first command, old episodes searchable, new session
  add / flush / search / get OK, cascade drained, zero errors.

Checklist

  • I kept the change scoped to the relevant area.
  • I am opening this from a separate branch, not pushing directly to main.
  • I updated docs, examples, or setup notes when behavior changed.
  • I added or updated tests when the change affects behavior.
  • I did not commit secrets, .env files, dependency folders, or generated output.
  • Active relative links in Markdown files resolve.

Notes for Reviewers

Closes

🤖 Generated with Claude Code

@Kendrick-Song Kendrick-Song changed the title feat: align with the everalgo 2026-10 contract line on the target architecture feat: align with the everalgo 2026-10 contract line Oct 28, 2026
@Kendrick-Song
Kendrick-Song force-pushed the feat/everalgo-llm-contract branch from 7532dd4 to 18b45d4 Compare October 28, 2026 03:54

@gloryfromca gloryfromca left a comment •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread tests/unit/test_entrypoints/test_tui/test_demo_sphere_golden.py

@gloryfromca gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Kendrick-Song and others added 16 commits October 29, 2026 17:37
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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Kendrick-Song and others added 9 commits October 30, 2026 14:50
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>
@Kendrick-Song
Kendrick-Song force-pushed the feat/everalgo-llm-contract branch from aac8e10 to 14006c4 Compare October 30, 2026 06:51

@gloryfromca gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
@Kendrick-Song Kendrick-Song changed the title feat: align with the everalgo 2026-10 contract line feat!: the everalgo 2026-10 line and the target architecture Oct 30, 2026

@gloryfromca gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread CHANGELOG.md
`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 gloryfromca left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment