perf: reuse meeting-notes lookups and prefetched evidence
Reduce forced notes submissions by reusing evidence already gathered for the conversation, without increasing the 6/10/15 lookup caps. Identical read calls reuse their response and spend no lookup or shaped-loop tool-call slot, including repeats within a batch. Other shaped adapters keep their default per-call charge; turn, token and wall-time limits remain enforced. People searches sort/deduplicate names before their 12-name cap and explicitly report dropped names. The cached conversation packet includes bounded matching People records and screen rows, with the same reply clip as live tools. Prefetched evidence counts toward the existing investigation floor. People data remains spelling evidence; speaker authority is unchanged.
DRAFT — replay blocked on dev token. The prescribed dev tunnel reached HTTP 200 on /health, but /ready returned 401. Lead ruling 0267de confirms no retained dev token file exists on m5 and directs this draft to wait for daytime approval. No credential changes, production reads/writes, model calls, merge or deploy were performed. Replay and final review/CI gates remain before ready.
The unconditional telemetry correction distinguishes submission_rejected_at_cap from an actual refused over-cap lookup and preserves the first force reason in mixed batches. New counters track duplicate and refused lookups by bounded tool name. CONVERSATION_NOTES_AGENT_LOOKUP_EFFICIENCY_ENABLED defaults on; false/off/0/no restores legacy tools, prompt, packet and charging while preserving accurate telemetry. Prompt version is v8 on / v7 off; tests pin both replacement targets.
| Replay arm | Runs | Forced share/reasons | Lookups/tool | Duplicates | Rejections/kind | Est. cost/run | Cache ratio | Goldens |
|---|---|---|---|---|---|---|---|---|
| origin/main baseline | 0 | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| candidate on | 0 | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| candidate off | 0 | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
Required before ready: same >=20 eligible conversations across all three word tiers, >=2 runs/arm, <=$3 total dev-gateway spend; target forced share <40% and clearly below baseline, no higher rejection rate, cost/run <=$0.0060, no golden regressions, off approximately baseline. Packet-size/token trade-off must be measured too. Supplied production evidence (not refreshed by this lane): 2,065/4,074 forced (50.687%); 1,554.500 lookup-cap labels include both overflow and rejection-at-cap; ~7.9 lookups/run, search_people ~2.6/run; estimated prior cost $0.0045/run.
Validation: original regressions failed on baseline. The review follow-up adds ten failures reproduced at the reviewed head. The current focused runner passes 170 tests across notes-agent (68), shared shaped loop (66), shaped cache invariants (3), and tool rules (33), with no ambient GOOGLE_APPLICATION_CREDENTIALS, serial under omi-heavy/nice. It covers duplicate spam within/across batches, default budget rollback, invalid tool charges, deterministic name truncation, prefetched reply bounds, first-reason preservation and prompt targets. The full enforced backend type checker passes with 0 errors. Local synthetic tests do not establish the replay acceptance metrics above; investigation-floor credit is unchanged for that measurement.
Later deploy needed: pusher through the coordinator train after replay, review, CI and parent merge. No deploy in this PR.
Failure-Class: none
Product invariants affected
none