Skip to content

Releases: kborovik/mailpilot

v0.7.0

Choose a tag to compare

@kborovik kborovik released this 14 Jun 00:58
188cdac

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

Choose a tag to compare

@kborovik kborovik released this 09 Jun 15:46
f11407d

v0.6.2

Fixes

  • §-prefix Tag docstring cite per §V.66

Other

  • drop remove from 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/**/*.md vocab-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 remove verb
  • 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

Choose a tag to compare

@kborovik kborovik released this 07 Jun 16:36
dce52d1

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

Choose a tag to compare

@kborovik kborovik released this 07 Jun 12:05
c01eff7

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

Choose a tag to compare

@kborovik kborovik released this 05 Jun 00:11
a14c4d9

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

Choose a tag to compare

@kborovik kborovik released this 01 Jun 03:51
8a2c042

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

Choose a tag to compare

@kborovik kborovik released this 29 May 02:09
19acc73

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

Choose a tag to compare

@kborovik kborovik released this 27 May 16:40
c2b91b6

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

Choose a tag to compare

@kborovik kborovik released this 27 May 13:42
c561a25

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 viewworkflow list output gains account_email field alongside account_id — operator no longer needs account view <id> round-trip
  • mailpilot enrollment add rejects when contact.email matches the workflow's owning account email — closes semantic self-loop class (#127)

Fixes

  • mailpilot enrollment removetag remove envelopes 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

Choose a tag to compare

@kborovik kborovik released this 25 May 03:21
3182b9d

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)