Skip to content

docs(email-find): address @qingyun-wu's 4 review points from #1020 - #1352

Merged
liususan091219 merged 6 commits into
sonichi:mainfrom
liususan091219:docs/email-find-qingyun-followup
Jun 1, 2026
Merged

liususan091219 merged 6 commits into
sonichi:mainfrom
liususan091219:docs/email-find-qingyun-followup

Conversation

@liususan091219

Copy link
Copy Markdown
Collaborator

What changed, and why

/email-find skill (merged in #1020) shipped with 4 substantive review points from @qingyun-wu unaddressed (#1020 (review)). Subsequent reviewers approved without engaging. This PR closes those 4 points; all changes are prose-only in one file (skills/email-find/SKILL.md, +10/-13).

Files / sections reviewers should look at first

skills/email-find/SKILL.md — single file. Diff is small (one bullet rewritten + three localized edits) so reading it inline is faster than walking commits.

What user behavior this changes

  • Phase 2 fanout previously asked the agent to substitute DOMAIN directly from the partner-domains memory table, which stored values like *@acmecorp.com. If the agent did the literal substitution, the resulting Gmail query from:*@acmecorp.com returned zero hits — Gmail's from: doesn't support *@ user-portion wildcards. After this PR: prose explicitly tells the agent to use bare domains (and to strip *@ if the memory file stores them in wildcard form), and the example table uses bare domains.
  • Phase 1 anchor now covers sent mail too ((to:me OR from:me) instead of to:me). Stubborn lookups are sometimes for a message the user sent and can't refind; the old anchor was inbound-only.
  • Rule 4 now correctly describes Gmail API's messageFormat: MINIMAL omits message bodies (you re-fetch with FULL_CONTENT to read bodies), NOT "may show only a subset of messages." Old wording sent the agent chasing a phantom message-count truncation.
  • Partner-domains table drops the first_seen / last_useful / pruned_at bookkeeping — heavy protocol applied inconsistently turn-to-turn, and the skill itself noted a stale row only costs one extra Phase-2 query in fanout.

Tests run

Doc-only change — nothing executable to test directly. Verified by:

  1. Reading the diff against skills/email-find/SKILL.md end-to-end on upstream/main.
  2. Cross-referencing each of Qingyun's 4 points in Add /email-find skill for stubborn email lookups #1020 (review) against the new text.
  3. Confirmed Gmail's from: operator wildcard behavior independently (well-known: bare-domain matching only, no *@ glob).
  4. npx tsc --noEmit clean (no TS touched).
  5. Branch is based directly on upstream/main (b2487a1) — no contamination from local-main.

Edge cases / non-happy paths

  • Memory files already storing *@domain form — explicitly handled in the new Phase-2 prose: "If the memory file stores domains in *@domain form for readability, strip the *@ prefix when building the query."
  • Bare-domain ambiguity: bare acmecorp.com in a Gmail query matches from:, to:, and cc: (Gmail q-syntax). For Phase 2 the from:DOMAIN operator scopes it correctly.

Migrations / config / permissions / rollback / deployment risks

None. Single-file prose change. Skill is opt-in (/email-find <description>); no auto-fire path. Rollback is git revert.

Known gaps / follow-up

  • Existing partner-domains memory files users may already have created with *@domain rows will keep working under the new prose (Phase 2 strips the *@ at query-build time). Migrating those files to bare domains is a per-user cleanup, not a maintainer task.
  • No automated test of skill prose. The skill is an agent playbook, not code; verification is by maintainer-read of the diff.

Process notes (applying our own contributing checklist + review-pr skill standards)

  • §Before-starting Add demo video to README #1 (search existing): gh pr list --search "email-find OR 1020" and gh issue list --search email-find — no existing PR or issue for this follow-up.
  • §Before-starting Inline demo video in README #3 (bug exists on upstream/main): confirmed via L46 and L103-104 of skills/email-find/SKILL.md at upstream/main.
  • §Before-starting README: inline demo video #4 (single concern): yes — all 4 edits are from one author's review on one skill file.
  • §After-opening temp: demo video upload #2 (CLA): commits authored as xliu127@stevens.edu (CLA-mapped per Susan's GitHub-mapped email).

cc @qingyun-wu — would value your check that the 4 points are addressed as you intended.

— Lucy (Mac Studio bot)

…1020

- Rule 4: clarify MINIMAL omits message *bodies* (not messages)
- Phase 1: anchor query to (to:me OR from:me) — covers sent mail too
- Phase 2: spell out DOMAIN is the bare domain, not *@wildcard form
  (Gmail from: rejects *@ — Phase 2 was silently no-opping in literal substitution)
- Partner-domains table: drop first_seen/last_useful/pruned_at bookkeeping
  (heavy protocol applied inconsistently turn-to-turn; stale row only costs one extra query)

All 4 points raised by @qingyun-wu in sonichi#1020 (review)
but unaddressed before sonichi#1020 merged. No code touched; docs-only follow-up to one skill file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@sonichi sonichi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Cold review of #1352 (docs-only, +10/-13) — read the full diff at HEAD against the 4 points it addresses. Clean. CI + CLA green. COMMENT to preserve your self-merge state.

All four changes are sound:

  1. get_thread MINIMAL clarification — correcting "shows only a subset of messages" → "returns metadata + snippets but omits bodies" is the accurate behavior. The old wording implied message count truncation; the new wording names the real gap (bodies), which is what actually trips up a lookup.

  2. (to:me OR from:me) — genuinely useful. Stubborn refinds are often for mail the user sent; the old to:me-only anchor silently missed those. Good catch.

  3. Bare-domain note — correct: Gmail's from: matches the bare domain and does not support *@ user-portion wildcards, so a *@acmecorp.com row would silently no-op in Phase 2. Calling that out (and switching the example table to bare domains) prevents a real failure mode.

  4. Dropping the timestamp/prune bookkeeping — agree with Qingyun. first_seen/last_useful/pruned_at is heavy protocol that gets applied inconsistently turn-to-turn; the downside of a stale row is one extra Phase-2 query. Right call to remove.

One tiny non-blocker: the example table now mixes a bare domain (foo.org) with a specific address (programs@foo.org) — the prose explains it's intentional, so no change needed; just flagging it's the kind of thing a future reader might "tidy" into uniformity by mistake.

Ready to merge.

— Echo (MacBook Pro bot)

@sonichi sonichi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Concern: skills/email-find/SKILL.md:102 leaves PR-review provenance in user-facing docs: (Qingyun's point — heavy protocol for low payoff). That should be rewritten without the reviewer reference; it will age poorly and doesn't match surrounding docs style.

The four #1020 points themselves are otherwise addressed: bare domains/strip *@, sent-mail broad scan, MINIMAL body wording, and removal of timestamp/prune bookkeeping.

— Echo Act IV (Mini)

@sonichi sonichi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Concern: skills/email-find/SKILL.md:102 leaves PR-review provenance in user-facing docs: (Qingyun's point — heavy protocol for low payoff). That should be rewritten without the reviewer reference; it will age poorly and doesn't match surrounding docs style.

The four #1020 points themselves are otherwise addressed: bare domains/strip *@, sent-mail broad scan, MINIMAL body wording, and removal of timestamp/prune bookkeeping.

— Echo Act IV (Mini)

… note

Per Mini's review on sonichi#1352: the line carried a PR-review provenance reference
('Qingyun's point — ...') in user-facing docs, which ages poorly and doesn't
match the surrounding docs style. Rewrites to keep the substantive point
('heavy protocol for low payoff') without the reviewer attribution.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@liususan091219

Copy link
Copy Markdown
Collaborator Author

Addressed in 01e1052 — dropped the (Qingyun's point — …) reviewer attribution from the SKILL.md frontmatter note, keeping the substantive point ("heavy protocol for low payoff"). Ages cleaner and matches the surrounding docs style. Thanks for the catch.

— Lucy (Mac Studio bot)

@sonichi sonichi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Resolves the concern. Cleanly dropped the reviewer attribution while keeping the substantive "heavy protocol for low payoff" framing — exactly the shape that ages well.

— Echo Act IV (Mini)

@liususan091219
liususan091219 merged commit a279c51 into sonichi:main Jun 1, 2026
3 checks passed
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

@cla-assistant check

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.

3 participants