V8.1 filters out the noise that V8.0's --candidates-only let through: calendar invites (Google Calendar Invitation: / Updated invitation: etc. — all carry an .ics attachment so the hasAttachment heuristic over-matches) and newsletter blast traffic (sender updates.<domain>, news@, newsletter@).
Originally V8.1 was meant to ship this too. The Zoho flag-set endpoint (PUT /api/accounts/{aid}/updatemessage) requires the OAuth scope ZohoMail.messages.UPDATE, which the current refresh_token doesn't have (READ-only scopes). The fix is for the user to regenerate the refresh_token via the Zoho Self-Client with the extra scope, then a one-line --mark-ingested flag on email-inspect.sh + a flagid == flag_info filter in is_candidate() becomes V8.2. Documented in SKILL.md.
Test plan
bin/arcodange email list --candidates-only → still shows 3 candidates in /Inbox/books
bin/arcodange email list --all-folders --candidates-only --limit 50 → ~12 entries, no Invitation: subjects, no updates.staying-ahead.ai senders
bin/arcodange email inspect 1775141901205014300 → still works unchanged
## Summary
V8.1 filters out the noise that V8.0's `--candidates-only` let through: calendar invites (Google Calendar `Invitation:` / `Updated invitation:` etc. — all carry an `.ics` attachment so the hasAttachment heuristic over-matches) and newsletter blast traffic (sender `updates.<domain>`, `news@`, `newsletter@`).
### Effect on baseline
| | V8.0 | V8.1 |
|---|---|---|
| `--all-folders --candidates-only` total | 27 (mixed signal + noise) | 12 (actionable) |
| Calendar invites in output | 10 entries | 0 |
| `staying-ahead.ai` newsletters | 6 entries | 0 |
| Real supplier docs retained | yes | yes (Mistral, Anthropic, Darnis F1042, 3× Free Mobile, INPI…) |
### `--mark-ingested` deferred to V8.2
Originally V8.1 was meant to ship this too. The Zoho flag-set endpoint (`PUT /api/accounts/{aid}/updatemessage`) requires the OAuth scope `ZohoMail.messages.UPDATE`, which the current refresh_token doesn't have (READ-only scopes). The fix is for the user to regenerate the refresh_token via the Zoho Self-Client with the extra scope, then a one-line `--mark-ingested` flag on `email-inspect.sh` + a `flagid == flag_info` filter in `is_candidate()` becomes V8.2. Documented in SKILL.md.
## Test plan
- [ ] `bin/arcodange email list --candidates-only` → still shows 3 candidates in `/Inbox/books`
- [ ] `bin/arcodange email list --all-folders --candidates-only --limit 50` → ~12 entries, no `Invitation:` subjects, no `updates.staying-ahead.ai` senders
- [ ] `bin/arcodange email inspect 1775141901205014300` → still works unchanged
- [ ] `git diff --cached | grep -F <ZOHO_REFRESH_TOKEN>` empty (verified pre-commit)
email-list.sh gains two hard-exclusion filters (applied before the
candidate test, regardless of attachments):
- EXCLUDE_PATTERN matches subjects starting with Invitation: / Updated
invitation: / Canceled event: / Accepted: / Declined: / Tentative: /
Maybe: (after stripping Re:/Fwd:/Tr: prefixes). Filters Google Calendar
events that always carry an .ics attachment.
- EXCLUDE_SENDER matches updates.<domain>, noreply@*calendar, news@,
newsletter@. Filters newsletter blast traffic.
Effect on --all-folders --candidates-only baseline: 27 noisy → 12
actionable (calendar invites + the staying-ahead.ai newsletter blast
removed). Real supplier docs intact: Darnis F1042 in /Notification, 3 Free
Mobile factures in /Inbox/abonnements, Mistral + Anthropic in /Inbox/books.
The originally-planned --mark-ingested feature is deferred to V8.2:
flag-set requires the Zoho OAuth scope ZohoMail.messages.UPDATE which our
read-only refresh_token doesn't have. Documented in SKILL.md: once the
user opts in to the wider scope, --mark-ingested becomes a one-line flag
on email-inspect.sh and is_candidate() learns to skip flag_info messages.
Captured the new --all-folders baseline at examples/email-list-all-folders.txt.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
V8.1 filters out the noise that V8.0's
--candidates-onlylet through: calendar invites (Google CalendarInvitation:/Updated invitation:etc. — all carry an.icsattachment so the hasAttachment heuristic over-matches) and newsletter blast traffic (senderupdates.<domain>,news@,newsletter@).Effect on baseline
--all-folders --candidates-onlytotalstaying-ahead.ainewsletters--mark-ingesteddeferred to V8.2Originally V8.1 was meant to ship this too. The Zoho flag-set endpoint (
PUT /api/accounts/{aid}/updatemessage) requires the OAuth scopeZohoMail.messages.UPDATE, which the current refresh_token doesn't have (READ-only scopes). The fix is for the user to regenerate the refresh_token via the Zoho Self-Client with the extra scope, then a one-line--mark-ingestedflag onemail-inspect.sh+ aflagid == flag_infofilter inis_candidate()becomes V8.2. Documented in SKILL.md.Test plan
bin/arcodange email list --candidates-only→ still shows 3 candidates in/Inbox/booksbin/arcodange email list --all-folders --candidates-only --limit 50→ ~12 entries, noInvitation:subjects, noupdates.staying-ahead.aisendersbin/arcodange email inspect 1775141901205014300→ still works unchangedgit diff --cached | grep -F <ZOHO_REFRESH_TOKEN>empty (verified pre-commit)