fix(recall): search nothing in a project whose config cannot be read (#796) - #798
Merged
jeff-r2026 merged 5 commits intoSep 24, 2026
Merged
Conversation
|
SaulMoro
force-pushed
the
fix/796-recall-unreadable-config
branch
from
September 24, 2026 11:12
15309a7 to
58195ab
Compare
Previously reported empty-query ordering, speculative silent implementation, and documentation issues are resolved. The earlier full provider × agent requirement does not apply under the checked-out review rules; the documented representative real-CLI run is sufficient. |
|
No findings.
|
SaulMoro
force-pushed
the
fix/796-recall-unreadable-config
branch
from
September 24, 2026 11:34
58195ab to
b5b5588
Compare
|
No findings.
|
|
No findings.
|
…encent#796) Detection skips a project config it cannot read and returns what loads next: a legacy .teamai/ behind a broken partition, which may name another team, or the user scope. recall searched that knowledge, recorded recalled counts for it, and `recall --check` answered for it; with nothing behind the broken file it printed NOT_RELEVANT, so the recall subagent told the member the team had no knowledge and nobody learned the config was broken. recall() now listens for the unreadable config before anything else, searches and records nothing, prints the problem with BROKEN_CONFIG_ADVICE and exits 1, `--check` included. A silent caller records it in debug.log only, the rule pull follows since Tencent#784. The teamai-recall agent relays that line instead of skipping the precheck.
- The relayed line ends with "move it aside and run `teamai init`", and the main conversation may not have loaded the teamai skill that asks for consent first. The recall agent now tells it to show the line to the user and not act on it without their consent. - Tools that run `teamai recall` directly (the Bash method of the recall rule, deployed to every tool) get the same instruction. - CHANGELOG: only the subagent a pull from this release deploys relays the line; a project that broke before the upgrade keeps the old one until a pull succeeds there. - The legacy-team test also asserts no votes land in that team's repo.
- CHANGELOG: the entry covers `teamai recall <query>` and `--check`. The recall subcommands (enable, disable, status, feedback, maintenance, promote) still resolve their scope as before; that is a follow-up.
Reject a missing query before resolving the project, so a bare `teamai recall` runs no detection (and no self-mode bootstrap). An empty `--check` still resolves first: it must refuse rather than print NOT_RELEVANT in a project whose config cannot be read. Drop the silent branch: `recall` has no --silent flag and no caller passes `silent`, so it was a contract nothing could invoke.
Tencent#787 moved recalled counts from the shared ~/.teamai/votes/ into each scope's votes directory, so the Tencent#796 tests look for any votes directory in the sandbox. Tencent#787's broken-project recall test expected a search to run; Tencent#796 searches nothing there, which it now asserts, while its checks that no scope received a vote stay.
SaulMoro
force-pushed
the
fix/796-recall-unreadable-config
branch
from
September 24, 2026 12:15
9a936bb to
22824a1
Compare
|
No findings.
|
jeff-r2026
approved these changes
Sep 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #796
Part of #752
#792 is merged (
1fd400e); rebased ontoorigin/main1fd400e, head22824a1.Summary
No silent mode:
recallhas no--silentflag and no hook runs it. A hook that runs recall later should followpull --silent(#784): print nothing, write the line to~/.teamai/debug.log, exit 1.skill-datatroubleshooting gets one line next to #792'sNothing was syncedentry.Evidence
Real CLI at
58195abvs the stack baseb119ec5(#792's head). Per provider: team repos are local bare remotes behind anhttps://URL, withprovider:inteamai.yamlset togit/github/gitlab;teamai init --agent claude,codex,codebuddy,opencode+pull; then the partitionconfig.yamlis broken and another team's legacy.teamai/put behind it. Agent axis: the recall agent and rule each tool gets deployed, andteamai hook-dispatch … --tool <agent>payloads with the project ascwd.git,github,gitlab)b119ec558195abrecall deployment timeout[1/1] [docs] other-team deployment timeout fix✖ Nothing was searched: <partition>/config.yaml: Flow sequence … at line 2, column 1. Fix the file, or move it aside and run `teamai init` to write a new one.recall --check deployment timeoutRELEVANT … title="other-team …"recall --check ''NOT_RELEVANT score=0.0recall ''✖ Usage: teamai recall <query>votes/alice.yaml,sessions/…-recall-cache.jsonteamai-recallagent:.claude/…md,.codex/…toml,.codebuddy/…md,.opencode/…mdNothing was searched:teamai-recallrule:.claude/rules/,.codebuddy/rules/hook-dispatch post-tool-use --matcher TodoWriteandstop(transcript with recalled doc-ids),--tool claude/codex/codebuddy/opencoderecall --check; TodoWrite nudge, four agentsRELEVANT title="team-a …"; nudge shownTests (
src/__tests__/recall-unreadable-config.test.ts, real configs and index in a sandbox HOME):Earlier, on
5bcb8ee: a liveclaude -pwith the deployed subagent returned the other team's doc before, and the refusal line verbatim after.Test plan
Rebase to
22824a1(ontoorigin/main1fd400e): own diff unchanged exceptsrc/recall.ts. #787 (dc233e4) conflicted there: #796's refusal kept, plus #787's guard that a detection which throws (not a deleted cwd) records no votes; one test commit follows #787's per-scope votes directories and turns #787's broken-project recall test into "nothing searched, nothing recorded". On22824a1:npx tsc --noEmit,npx vitest run(4674 passed, 1 skipped),npm run buildgreen. No real-CLI rerun: a rebase.All below on
58195ab:npx tsc --noEmitnpx vitest run: 4526 passed, 1 skippednpm run test:e2e: 229 passed, 26 skippednpm run build+ the real-CLI matrix above: Claude, Codex, CodeBuddy, OpenCode through their deployed recall agent/rule andhook-dispatch --tool;git,github,gitlabthrough the team'sprovider:(local bare remotes; the refusal happens at detection, before any provider API call).CI review (5812473529)
recall.ts:404detection before the missing-query check--checkstill resolves the project, so it cannot printNOT_RELEVANTthererecall.ts:419silent branch no caller can invokeb119ec5still pulls at session start where teamai is not set up and stops only for an unreadable config (pullHandler,src/hook-handlers.ts), which is whatdocs/usage-guide*.mdand CHANGELOG say. Those lines are #792'sMerge Danger
Door: two-way
Blast Radius: narrow
Projects whose config exists but cannot be read:
recall <query>and--checkfail loudly there instead of answering from another scope. Everywhere else output is unchanged;recall --check ''now runs project detection (including self-mode bootstrap on a fresh single-repo clone), as anyrecall <query>already did. Therecallsubcommands (enable/disable/status/feedback/maintenance/promote) still resolve their scope as before; that is a follow-up under #752.