Repository navigation
Name the repo's projects in the SessionStart memory lead-in - #768
Conversation
The index body is a bare array and a CLI that predates this drops a fragment that is not one, so the projects are negotiated with include=projects rather than changing the shape unasked. Which shape arrived is decided by sniffing the opening token: a failed array parse is indistinguishable from a corrupt body, which retries with no attempt ceiling against a server that will never answer differently. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PR Summary by QodoExpose repository project slugs in SessionStart memory context
AI Description
Diagram
High-Level Assessment
Files changed (9)
|
Code Review by Qodo
1.
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
An object carrying neither entries nor projects normalised to an empty index, which reports a successful empty fetch and spends the once-per-session lease, so no later callback of that session asks again. Absent members and present-but-empty arrays are now distinct: only the latter is an answer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review triage: 1. Partial objects consume lease — accepted, fixed in bfdd506. Real, and a regression this PR introduced: the array-only parse used to throw on any object body and come back retryable, so 2. Conflicting The ubuntu leg failed on |
Closes #756 — AI-2474
What & why
An agent can only land a memory at project scope by passing a slug, and nothing in a session told it which project the cwd repo is in — so cross-repo learnings went to org, the only cross-repo scope reachable without one. The memory fragment now opens with a line per project naming that slug.
The projects ride the existing index call, negotiated by
include=projects: the body is a bare array and a CLI that predates this drops a fragment that is not one, so the shape could not simply change. A sibling or superseding endpoint costs a second round trip inside a hook budget already tight on Cursor and Claude; a response header cannot carry a non-ASCII project name. The parameter degrades in both directions — an older server ignores it and answers with the array, a newer one answers with an object — and the CLI decides which it got by sniffing the opening token.The server half is kcap-server AI-2470, not yet built. Until it ships the CLI sees the bare array and emits no lead-in. The wire contract this is built against is written up on that issue.
Where to look
include=projectsgoes out on every index call, with or without a resolved repo: it declares that this CLI can read the object body, not that a repo is in hand.Projects alone produce a fragment where entries alone produce none — a project holding no memories yet is exactly the state the agent is being asked to fix, and it cannot without the slug. A repo with an empty index and a project therefore gets one line of context instead of silence.
Verification
Run the two suites separately: concurrently they starve
SessionStartMemoryLeaseStore's one-second budget and a handful of lease tests fail on contention alone.