Releases: kborovik/mailpilot
Releases · kborovik/mailpilot
Release list
v0.7.0
v0.7.0
Features
- (lead-encreach) add seed script and enrich workflow
Other
- refactor(models): move created_at/updated_at after notes fields in view models
- docs: strip math glyphs from SPEC.md, CLAUDE.md, .claude bodies (ASCII-only §C.17)
- chore: backtick-wrap archived §B/§T cites; drop SPEC.archive.md + archive markers
Uncategorized
- lead-companies: rename family from lead-encreach (T111)
- lead-contacts: new skill + lead-contacts-find.js workflow + contact-finder agent (T112, §V.96)
- contact lead-metadata: title + email_confidence columns (T110, §V.95); list/search projects both via LEFT JOIN company; --max/min-email-confidence, --company-domain, --title filters (T116, §V.5)
- contact review: NULL email_confidence surfaced by --max-email-confidence OR IS NULL (T117, §V.95)
- lead-companies run-summary: deferred count when batch gate caps (T114, §V.97); name-divergent seed collision in collapsed accumulator (T115, §V.98)
- logfire console exporter: route to stderr; fixes JSON envelope corruption on stdout (T113, §V.3)
- V51: pair database connect-fail logfire.exception with operator_event("error") + whole-surface sweep contract test (T109)
- V16: drop success-named operator_event on race-safe create duplicate branch (T107)
- V8: dynamic field forwarding @ load_contact_view / load_company_view (T102)
- V72: CompanyProfile JSONB column + model + validation + company --no-profile/--has-profile filter + lead-encreach skill + company-profiler agent (T97-T101)
- check-extras.md: V73/V74 audit-recipe extensions + RFC-4180 parser mandate (T108)
- SPEC rebuild Phase 0-1: re-derive 57 anchored + 20 new rows; restore rows dropped by derivation scope gap (B72)
v0.6.2
v0.6.2
Fixes
- §-prefix Tag docstring cite per §V.66
Other
- drop
removefrom SKILL.md grammar ∧ envelope - compact SPEC.md — prong 3 forced + task-order fix (33k -> 28k tokens)
- assert create_* results not None after §V.16(+) return-type narrowing
Uncategorized
- T96: impl §V.70 burst retry-rate gate @ smoke-test C4.a per §B.66
- T95: impl §V.6(+)
.claude/skills/**/*.mdvocab-drift audit per §B.65 - T94: impl §V.68(+) list-item corpus-build per §B.60
- backprop §B.66(+) + §T.96(+): §V.70 retry-rate gate impl absent from smoke-test C4.a — contract toothless
- backprop §B.65(+) + §V.6(+) + §T.95(+): smoke-test SKILL.md stale remove verbs — extend audit scope to .claude/skills/**
- amend §T.94(+): impl §V.68(+) list-item corpus-build per §B.60
- amend §B: reorder B63 ↔ B64 (monotonic-numbering)
- amend §I.cli ∧ §V.4: drop
removeverb - T93: impl §V.16(+) sweep
- T92: impl §V.10(+) tag coverage
- T91: impl §V.10(+) enrollment coverage ∧ §V.15(+)
- backprop §B.64(+) + §V.16(+) + §T.93(+): natural-unique-key create idempotency
- amend §V.10(+) + §T.92(+): tag remove → soft-disable
- backprop §B.63(+) + §V.10(+) + §V.15(+) + §T.91(+): enrollment remove → soft-disable
v0.6.1
v0.6.1
Other
- bump uv.lock — anthropic 0.107, pydantic-ai 1.106, basedpyright 1.39.7
Uncategorized
- T90: sweep smoke-test SKILL.md compare-type sla_agent gate per §V.61(+)
- backprop §B.62(+): burst surface of §B.61 compare-type 50s ceiling under-estimate
- backprop §B.61(+) + §V.61(+) + §T.90(+): compare-type sla_agent 50s ceiling structurally under-estimates 2-datasheet synthesis
v0.6.0
v0.6.0
Features
- Scenario C burst-load oracle (25 emails @ P=8)
Other
- reduce Scenario C burst from 25 to 8 emails
Uncategorized
- compact SPEC.md: prongs {1,5,6} (~28.9k → ~27.1k tokens)
- backprop §B.60(+) + §V.68(+): _fact_check_body excludes bullet-list spec lines from corpus
- T89: impl §V.71(+) — _fact_check_body rejections count toward per-invocation cap
- amend §V.71(+) + §B.59(+) + §T.89(+): _fact_check_body bypasses retry ceiling
- T88: impl §V.68(+) per-document scoping in _fact_check_body
- backprop §B.58(+) + §V.68(+): _fact_check_body union inverts ground-truth on prose-only KB docs
- amend §T.82(+) ∧ §T.83(+): restore monotonic ID order
- T87: impl §V.59(+) ∧ §V.61(+) two-budget observability
- T86: impl §V.71 format-lint retry ceiling
- fold-in §V.59(+) ∧ §V.61(+) ∧ §V.69(+) ∧ §V.70(+) ∧ §T.86(+) ∧ §T.87(+): today-bugs-sla-audit-2026-06-06
- backprop §B.57(+) + §V.71(+): reply_email format-lint loop — no retry ceiling → 195–495s latency, 25% retry rate
- T85: impl §V.68 pipe-table-row scoping
- backprop §B.56(+) + §V.68(+) + §T.85(+): pipe-table-row scoping — WS flow-rate fabrication via prose-line collision
- T84: impl §V.41 per-target compare-and-contrast clause
- backprop §B.55(+) + §T.84(+): _DRIVE_GROUNDING ⊥ per-target compare-and-contrast clause
- backprop §B.54(+) + §V.70(+): burst retry-rate inflation — Pub/Sub waves persist, tool-error retries compound
- T83: impl §V.69 — burst T_delivery wakeup on N_new>0 routed inbound emails
- backprop §B.53(+) + §V.69(+) + §T.83(+): burst T_delivery — Pub/Sub batching → 5 waves → max=160s>110s, p95=156s>90s
- T82: impl §V.54(+) envelope-translation — cli_mutation catches psycopg.Error → output_error
- amend §T.82(+): enumerate 5 §B.52 recurrence-class sites in regression-test contract
- backprop §B.52(+) + §V.54(+) + §T.82(+): cli_mutation re-raise → raw psycopg traceback on duplicate account create
- T81: impl §V.23(+) burst-load formula floor — raise max_concurrent_tasks default 4→10
- backprop §B.51(+) + §V.23(+) + §T.81(+): max_concurrent_tasks=4 default → 235s burst latency
- T80: impl §V.23(+) atomic-claim — dispatcher skips re-pick of in-flight task ids
- backprop §B.50(+) + §V.23(+) + §T.80(+): dispatcher non-atomic claim → 4x reply amplification
- T79: impl §V.5(+) — enrollment view ⊇ list parent-denorm parity
- amend §V.5(+) + §T.79(+) + §B.49(+): enrollment view ⊇ list parent-denorm parity
- T78: diag + close §V.42 lint bypass (§B.48)
- backprop §B.48(+) + §T.78(+): §V.42 lint bypass
- T77: impl scalar enrollment.id per designs/enrollment-id.md
- fold-in §V.6 ∧ §V.28 ∧ §V.32 ∧ §T.77(+): enrollment-id
v0.5.7
v0.5.7
Other
- pin demo-test, release, smoke-test to sonnet; drop legacy release command
Uncategorized
- /sdd:check fix — repair 1 §V.66 + 3 §-cite TYPE-MISMATCH drift
- T76: impl §V.6 sweep — fix SKILL.md drift vs live cli.py @click + settings.py
- amend §V.41(+): per-target search-budget rule for compare-and-contrast invocations
- T75: impl §V.68 — reply_email/send_email pre-send fact-check vs read_drive_markdown ledger
- backprop §B.47(+) + amend §V.6(+) + §T.76(+): SKILL.md drift from live cli.py + settings.py
- T74: sweep 60s -> 90s @ SLA call-sites per §V.59(+)
- backprop §B.46(+) + §V.68(+) + §T.75(+): reply_email pre-send fact-check vs same-invocation read_drive_markdown ledger
- amend §V.59(+) + backprop §B.45(+) + §T.74(+): relax SLA 60s→90s; website update pending
- T73: impl §V.67 — outbound create_email passes resolved threading headers
- backprop §B.44(+) + §V.67(+): outbound create_email drops resolved threading headers
- T72: make clean covers mailpilot_test alongside mailpilot
- backprop §B.43(+) + §V.18(+): make clean partial DB coverage left mailpilot_test stale post-shrink
- reorganize SPEC.md §V: 12 clusters, 64 renumbers, 0 archive-retired
v0.5.6
v0.5.6
Uncategorized
- T71: email.route_method enum CHECK + is_routed coupling CHECK
- fold-in §V.66(+) ∧ §T.71(+): email-routing-integrity
- T70: persist route_method on email; project on Email ∧ EmailSummary
- compact SPEC.md: prong {3} (~17.7k → ~16.3k tokens)
- amend §I(+) ∧ §T.70(+): max_concurrent_tasks + route_method projection
v0.5.5
v0.5.5
Other
- T69: extend _DRIVE_GROUNDING w/ search-budget fallback per §V.28
- amend §T.69(+): impl §V.28(+) fallback clause in _DRIVE_GROUNDING
- amend §V.28(+): fall back to list_drive_markdown after 2 consecutive search misses
- amend §I(+): email view|list ! project route_method
- T68: scope agent advisory lock to unit of work per §V.65
- backprop §B.42(+) + §V.65(+): agent advisory lock granularity defeats §V.62 concurrent dispatch
- T67: decouple drain from main-loop tick per §V.64
- amend §T.67(+): impl §V.64 decouple drain from main-loop tick
- backprop §B.41(+) + §V.64(+): sync-vs-drain serialization stalls Pub/Sub on agent.invoke
- T66: source_file_alts schema + collision detection per §V.31(+)
- T65: project gmail_thread_id on EmailSummary per §V.51(+)
- T64: Logfire-first gate latency verdicts per §V.63
- T63: emit email_id on agent.invoke span per §V.11(+)
- fold-in §V.11(+) ∧ §V.31(+) ∧ §V.51(+) ∧ §V.63(+) ∧ §B.37..40(+) ∧ §T.63..66(+): smoke-test-frictions-2026-05-28
- T62: widen _check_spec_table regex + consecutive tracking per §V.29
- T61: impl §V.62 — bounded ThreadPoolExecutor task drain
- designs: smoke-test frictions observed 2026-05-28
- smoke-test: fix B7.5 email_id gate + agent.classify_email span name
- backprop §B.36(+) + §V.29 amend + §T.62(+): single-space spec-cluster slips lint
- backprop §B.35(+) + §V.62(+) + §T.61(+): task-drain serializes (orthogonal to §V.61)
- T60: impl §V.61 + §V.44 amend + §B.34 fix per drive-parallel-tool-race
- fold-in §V.61(+) ∧ §V.44(+) ∧ §T.60(+) ∧ §B.34(+): drive-parallel-tool-race
- chore: rename demo@lab5.ca -> hello@lab5.ca; show mailpilot status after make clean
v0.5.4
v0.5.4
Other
- T59: impl §V.60 status payload reshape
- fold-in §V.60(+) ∧ §V.58(+) ∧ §T.59(+): status-troubleshooting
- amend §V.52(+): relax to attr-presence
- T57+T58: impl §V.58 ∧ §V.59 schema-version-parity
- fold-in §V.58(+) ∧ §V.59(+) ∧ §T.57(+) ∧ §T.58(+): schema-version-parity
v0.5.3
v0.5.3
Features
mailpilot contact disable --contact-id <id> --reason <text>— soft-disable a contact w/ explanatory reason; CLI parallel of existing agent tool (#128)mailpilot workflow view∧workflow listoutput gainsaccount_emailfield alongsideaccount_id— operator no longer needsaccount view <id>round-tripmailpilot enrollment addrejects whencontact.emailmatches the workflow's owning account email — closes semantic self-loop class (#127)
Fixes
mailpilot enrollment remove∧tag removeenvelopes return composite-key projection on hard-DELETE — previously echoed the pre-delete entity row w/ stale lifecycle fields, misleading operators into thinking the remove failed (#129)
v0.5.2
v0.5.2
Fixes
- agent: access pydantic-ai RunResult.usage as property
Other
- update package description
Uncategorized
- T52: impl §V.55 scheduled first reach-out (§V.3/§V.11/§V.20/§V.36/§V.47/§V.49)
- amend §V.11/§V.36/§V.49(+) ∧ §V.55(+) ∧ §T.52(+): scheduled first reach-out (orthogonal to §V.13 inbound auto-task; CLI-driven outbound vs reactive inbound)