Skip to content

docs(api): envelope exceptions and post-flush OME latency - #455

Merged
gloryfromca merged 5 commits into
mainfrom
docs/api-contract-notes
Sep 24, 2026
Merged

gloryfromca merged 5 commits into
mainfrom
docs/api-contract-notes

Conversation

@gloryfromca

Copy link
Copy Markdown
Member

Summary

Contract clarifications found by driving a live Tier-3 server the way the Claude Code plugin does (SessionStart → recall → capture → flush, then every documented edge). Docs only; no behaviour change.

  • POST /ome/trigger returns a bare body (no request_id/data), unlike every /memory/* and /knowledge/* endpoint; the "always wrapped" sentence now names the exceptions, and the 201 on a knowledge upload.
  • POST /cascade/quiesce was in openapi.json but not in the docs; listed with the operational endpoints.
  • Agent cases / skills / profiles are produced by OME strategies after /flush returns (14 s for the case, 32 s for the skill observed); cascade.pending does not cover that window. The eventual-consistency section only described index lag. The agent-track extraction gates (no tool use + short assistant turn, trajectory ending on a user message) are listed so integrators know why a session yields no case.
  • EXTRACTION_EMPTY was described as covering empty uploads; those are rejected earlier as INVALID_INPUT. Aligned with knowledge.md.
  • knowledge.md: read endpoints trail writes (~1 s after create, ~11 s after delete observed); PATCH does not.

Area

  • docs

Verification

Every statement is a literal observation from .work_context/agent_sim/logs/trace.jsonl (local, not committed) against everos server start on this branch's parent commit; the OME latency numbers come from the server log (agent_case_extracted, agent_skills_extracted timestamps vs the /flush request id). make check-cjk clean.

Checklist

  • English only
  • No code change

Notes for Reviewers

Whether /ome/trigger should instead be wrapped in the SuccessEnvelope for consistency is a contract decision left open here; this PR documents what the server does today. Consumers of the bare shape: docs/reflection.md examples, tests/e2e/test_reflection_e2e.py, tests/unit/.../test_ome.py.

🤖 Generated with Claude Code

Findings from driving a live server the way the Claude Code plugin does:

- `POST /ome/trigger` returns its body bare (no `request_id` / `data`),
  while the "always wrapped" sentence and every `/memory/*` section imply
  otherwise; say so at both places, and mention the `201` on a knowledge
  upload.
- `POST /cascade/quiesce` was in the OpenAPI spec but nowhere in the docs;
  list it with the other operational endpoints.
- Agent cases, skills and profiles are produced by OME strategies after
  `/flush` has returned (14 s / 32 s observed), and `cascade.pending` does
  not cover that window; the eventual-consistency section only described
  index lag. Also list the agent-track extraction gates that yield no case.
- `EXTRACTION_EMPTY` was described as covering empty uploads; those are
  rejected earlier as `INVALID_INPUT`. Align with knowledge.md.
- knowledge.md: read endpoints trail writes (~1 s after create, ~11 s after
  delete observed); PATCH does not.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@gloryfromca gloryfromca changed the title docs(api): envelope exceptions, post-flush OME latency, knowledge read lag docs(api): envelope exceptions and post-flush OME latency Sep 23, 2026
A delete that runs before the cascade has indexed the document's topics
also answers 204 (no indexed topics were removed), so the status code
alone cannot tell "nothing existed" from "removed before indexing".
Point readers at a read-back with the index lag in mind.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Adversarial review of the eventual-consistency paragraph against everalgo:
the gate that actually decides under EverOS defaults is
`min_tool_call_rounds=3` — no case below three tool-call rounds, which also
makes the previously listed "assistant turn under ~200 tokens" gate
unreachable — and the EverOS `agent_case_skipped_by_algo` event carries ids
only; the reason is on everalgo's own log line. Also: `quiesce` is safe to
call twice rather than "idempotent" (it reports `quiesced=True` both times),
knowledge GET reads SQLite rather than "the index", the ~1 s figure is
hedged like the others, the PATCH sentence names why it escapes the lag,
and the delete status-code sentence is left as on main because PR #456
changes what a delete-before-index reports.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@gloryfromca
gloryfromca force-pushed the docs/api-contract-notes branch from baeb59d to 3843ed4 Compare September 24, 2026 05:56
@arelchan
arelchan self-requested a review September 24, 2026 08:45
@gloryfromca
gloryfromca merged commit 26d2622 into main Sep 24, 2026
10 checks passed
@gloryfromca
gloryfromca deleted the docs/api-contract-notes branch September 24, 2026 08:54
This was referenced Sep 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants