Contract
What Coffer is being built to do
Every clause of the product Coffer is building toward, and how much of it the code does today. Judged from the code and tests, not from plans.
23 of 135 clauses done
17% (23)46% (62)37% (50)
- 23 done
- 62 partial
- 50 missing
Judged at commit 325780f ·
Published clauses
8 done · 1 partial · 0 missing
of 9
Target and push further
15 done · 61 partial · 50 missing
of 126
Product target
- Category
- Nonprofit donor management / fundraising CRM
- Replaces
- Bloomerang, Blackbaud Raiser's Edge NXT, Little Green Light, Neon CRM, Givebutter, Zeffy
- First buyer
- A US 501(c)(3) development lead with 500 to 20,000 donor records and a fundraising team of one to ten, moving from Little Green Light or Bloomerang; amounts in USD, IRS receipt rules, the nonprofit's own Cloudflare and Stripe accounts
Progress by area
18 areasPublished · 1 area
Target and push further · 17 areas
- Supporter records2 done6 partial6 missing
- Gifts and pledges2 done4 partial4 missing
- Online giving0 done6 partial3 missing
- Campaigns, events and memberships0 done1 partial4 missing
- Payments1 done3 partial2 missing
- Accounting2 done3 partial0 missing
- Receipts and acknowledgments1 done8 partial2 missing
- Communication0 done4 partial4 missing
- Stewardship and follow-up1 done3 partial2 missing
- Major gifts and moves management2 done2 partial3 missing
- Reporting1 done3 partial4 missing
- Moving in0 done6 partial5 missing
- Team and access1 done2 partial0 missing
- Integrations and API0 done1 partial3 missing
- Mobile0 done1 partial2 missing
- Data and ownership2 done1 partial1 missing
- Development agent0 done7 partial5 missing
All clauses
Showing 135 of 135 clauses
| Clause | Title | Status | Evidence or gap |
|---|---|---|---|
| Released guarantees 8 done · 1 partial · 0 missing | |||
| HTTP-001published | Private app boundary | Done | tests/src/ |
| DONOR-001published | Donors and households | Done | src/tests/tests/ |
| GIFT-001published | Immutable ledger | Done | src/src/src/migrations/tests/tests/ |
| CONSENT-001published | Consent history | Done | src/tests/ |
| ACK-001published | Acknowledgment letters | Partial | src/src/tests/Gap: Reviewed settings, frozen hash approval, CSV export and sent-date recording ship; imported acknowledged/do-not-acknowledge statuses, source goods-value handling and a stored per-gift acknowledged-by-letter method/batch link remain incomplete (RCPT-011). The move-in acknowledge-from cutoff is implemented through prior-acknowledgment exclusions. |
| APPEAL-001published | Consent-checked appeals | Done | src/tests/ |
| AGENT-001published | Prepare, then a person decides | Done | src/src/tests/ |
| IMPORT-001published | Reviewed Stripe move-in | Done | src/src/tests/tests/ |
| DATA-001published | Custody and erasure | Done | src/src/scripts/tests/tests/ |
| Supporter records 2 done · 6 partial · 6 missing | |||
| DONOR-002target | Organization records | Partial | src/Gap: Every constituent is a person-shaped donor record; there is no organization type, EIN, website or contact role. |
| DONOR-003target | Relationships | Partial | src/src/docs/Gap: Reciprocal spouse, employer, board member, foundation officer and introduced-by links show on both records and filter donor lists. Household salutations, head and combined totals remain. |
| DONOR-004target | Interaction timeline | Partial | src/src/docs/Gap: Calls, meetings and emails record date, participants, notes, next step and author beside gifts, pledges and receipt events in one timeline. Confidential notes, timeline filters and the broader task/event integrations remain. |
| DONOR-005target | Custom fields and tags | Missing | Gap: No custom fields, tags or categories. |
| DONOR-006target | Duplicate detection and merge | Done | src/src/src/migrations/tests/ |
| DONOR-007target | Saved searches and lists | Partial | src/src/Gap: Donor search includes reciprocal relationship-type and connected-donor filters. General saved lists and undoable bulk actions remain. |
| DONOR-008target | Documents on records | Missing | Gap: No attachments. |
| DONOR-009target | Address verification and NCOA | Missing | Gap: No address verification or NCOA. |
| DONOR-010target | Volunteer history | Missing | Gap: No volunteer records. |
| DONOR-011target | Giving summary | Done | src/src/tests/tests/ |
| DONOR-012target | Constituent status: active, inactive and deceased | Missing | Gap: Constituents have no status; appeals exclude only on consent and address, and erasure is the only way to stop a record being used. |
| DONOR-013target | Several emails, phones and addresses | Partial | src/migrations/Gap: A donor has one email (refused if any other record has it), one phone and one postal address; no further contact points, types, primaries, seasonal ranges or email shared within a household. |
| DONOR-014target | Name parts, salutations and envelope name | Partial | src/src/tests/Gap: A donor has one free-text name and letters merge only {{donor_name}}. LGL Prefix, first/middle/last and Suffix are retained in that display name, and first/last-name search finds a middle initial. Separate editable name parts, nickname, computed or overridden salutations/envelope name and admin-set defaults remain unbuilt. |
| DONOR-015target | Solicitation restrictions | Missing | Gap: No solicitation restriction: consent is per channel (email and postal) only, and appeals exclude only on consent and address. |
| Gifts and pledges 2 done · 4 partial · 4 missing | |||
| GIFT-002target | Batch gift entry and deposits | Missing | Gap: Gifts are entered one at a time; no batches or deposit totals. |
| GIFT-003target | Campaign, appeal, fund and channel attribution | Partial | src/Gap: Each gift has one free-text fund; no campaigns, appeals or source as structured references. |
| GIFT-004target | Split gifts | Done | src/migrations/src/tests/ |
| GIFT-005target | Pledges, installments and balances | Partial | src/src/tests/Gap: Dated installments total the pledge, allocations match gifts by donor/fund without overpayment, and reversals reopen balances. Write-offs, reductions, campaign attribution and recurring-plan payment remain. |
| GIFT-006target | Soft credits | Done | src/src/src/tests/tests/ |
| GIFT-007target | Matching gifts | Partial | src/src/tests/Gap: Expected employer amount/deadline links the original gift to a received employer ledger gift, with overdue and reversal-aware states. Program lookup, submission workflow, automatic employee recognition and submission reminders remain. |
| GIFT-008target | Tribute gifts | Partial | src/src/src/tests/Gap: Honor/memory, honoree and notification contact are recorded on gifts and included in approved gift/year-end receipt text. Tribute grouping, notification sending and incumbent tribute imports remain. |
| GIFT-009target | In-kind gifts | Missing | Gap: Gifts are monetary only. |
| GIFT-010target | Stock, DAF grants and IRA distributions | Missing | Gap: No stock, DAF or QCD gift types. |
| GIFT-011target | Anonymous gifts and recognition names | Missing | Gap: No anonymity flag or recognition name. |
| Online giving 0 done · 6 partial · 3 missing | |||
| GIVE-001target | Donation forms | Partial | src/tests/Gap: Hosted campaign forms collect once/monthly card and Link gifts and retain fund/campaign attribution. Advanced fields, embedding and the specified performance/accessibility acceptance remain outstanding. |
| GIVE-002target | Campaign pages | Partial | src/tests/Gap: Custom-path public campaign stories, goals, ledger totals, gift counts and recurring donor counts ship. Uploaded media, donor walls and closing dates remain outstanding. |
| GIVE-003target | Recurring giving | Partial | src/tests/Gap: Monthly Stripe subscriptions record successful installments and show status and recovery; donors cancel at period end. Quarterly/annual plans, staff editing, pause/resume and the three-month test-clock acceptance remain outstanding. |
| GIVE-004target | Card, bank, wallet and PayPal checkout | Partial | src/tests/Gap: Stripe-hosted card and Link checkout ships, with Apple Pay offered on supported devices. ACH is coming soon pending a US test account; Apple Pay device payment, PayPal/Venmo, ACH settlement/returns and staff entry remain outstanding. No card numbers enter Coffer. |
| GIVE-005target | Donor portal | Partial | src/tests/Gap: Emailed single-use links open a donor-only portal to view monthly plans, update cards at Stripe and cancel. Statements, amounts/frequencies, pause, communication preferences and cancellation tasks remain outstanding. |
| GIVE-006target | Failed recurring payments | Partial | src/tests/Gap: Stripe schedules retries; verified failure outcomes email private card-update links and successful recovery is recorded. Expiry warnings and staff escalation after exhausted retries remain outstanding. |
| GIVE-007target | Fraud and card-testing protection | Missing | Gap: No forms to protect. |
| GIVE-008target | Text-to-give | Missing | Gap: No text-to-give. |
| GIVE-009target | Staff-entered card and bank payments | Missing | Gap: Coffer takes no payments; staff record a gift by hand after the money arrives elsewhere. |
| Campaigns, events and memberships 0 done · 1 partial · 4 missing | |||
| CAMP-001target | Campaigns with goals | Partial | src/tests/Gap: Published campaigns have a goal and fund, with ledger-derived raised/gift totals and distinct recurring donors. Dates, nested campaigns, pledges/soft credits, manual attribution and additional campaign statistics remain outstanding. |
| CAMP-002target | Fundraising events | Missing | Gap: No events. |
| CAMP-003target | Peer-to-peer fundraising | Missing | Gap: No peer-to-peer pages. |
| CAMP-004target | Memberships | Missing | Gap: No memberships. |
| CAMP-005target | Auction results as gifts | Missing | Gap: No events or auction import. |
| Payments 1 done · 3 partial · 2 missing | |||
| PAY-001target | Live Stripe connection | Partial | src/tests/Gap: Signed live charge, refund, dispute, failure and payout events, external donor matching and replay-safe money entries ship alongside saved-page move-in. OAuth/automatic endpoint registration, scheduled backfill/sweep and an ambiguous-match review queue remain outstanding. |
| PAY-002target | Payouts with their gifts | Done | src/tests/ |
| PAY-003target | Refunds and disputes | Partial | src/tests/Gap: Processor refunds and disputes append immutable contribution reversals and a dispute win reinstates the contribution. No receipt correction, staff-initiated refund, relationship-manager notice or evidence due-date workflow yet. |
| PAY-004target | Processing fees and fee cover | Partial | src/tests/Gap: Immutable balance transactions record processor gross, fees and net, shown by fund in each payout. Donor fee-cover checkout and form/campaign fee reports remain outstanding. |
| PAY-005target | Other giving platforms | Missing | Gap: No other platform connections. |
| PAY-006target | Shop orders record only the contribution | Missing | Gap: No shop connection. |
| Accounting 2 done · 3 partial · 0 missing | |||
| FIN-001target | QuickBooks Online sync | Partial | src/tests/Gap: Mapped fund, bank and fee accounts export as a balanced QBO journal CSV with fund classes; Desktop IIF is separate. No QBO OAuth/API connection or check-batch posting yet. |
| FIN-002target | Pantry sync | Partial | src/tests/Gap: Paid matched USD payouts become evidence-backed Pantry journal proposals; human Pantry approval posts the deposit, and Coffer refresh records its journal ID. Saved submission claims prevent duplicate or uncertain resends. Check batches remain outstanding; live Stripe-to-Pantry acceptance needs a USD-settling Stripe test account. |
| FIN-003target | Restricted funds | Done | src/src/src/tests/tests/ |
| FIN-004target | Journal export for other ledgers | Done | src/src/tests/tests/ |
| FIN-005target | Reconciliation report | Partial | src/tests/Gap: Per-payout gifts, refunds, fees, net, match difference and Pantry destination/journal ID are visible. Period-wide ledger/processor/deposit reconciliation including pending ACH and check batches remains outstanding. |
| Receipts and acknowledgments 1 done · 8 partial · 2 missing | |||
| RCPT-001target | Immediate email receipts | Partial | src/tests/Gap: Approved per-gift receipts are sent from install SendGrid; automatic online-gift triggers within a minute, domain verification and attached PDFs remain unbuilt. Managed integrations are not available yet. |
| RCPT-002target | Acknowledgments delivered by email | Done | src/tests/ |
| RCPT-003target | Print-ready letters, labels and envelopes | Partial | src/tests/Gap: Single and batch print-styled US Letter documents support window-envelope placement and browser Save as PDF alongside CSV. Labels, envelope-only layouts, Word files, household grouping and Lob remain unbuilt. |
| RCPT-004target | Year-end giving statements | Partial | src/tests/Gap: Per-donor calendar-year statements itemize all unreversed gifts including imported gifts, goods values and deductible totals, then use approved email or print delivery. Unknown goods answers require review. Portal requests, automatic January scheduling, household grouping, deceased-recipient rules and corrected reissues remain unbuilt. |
| RCPT-005target | US receipt rules | Partial | src/src/tests/Gap: Templates must carry donor, amount, date, organization and the goods-or-services statement, and the $250 threshold works; no quid pro quo rule for payments over $75, token-benefit or religious-benefit wording. |
| RCPT-006target | Delivery tracking | Partial | src/tests/Gap: Signed SendGrid delivered, bounce, dropped and complaint events are recorded per letter, deduplicated and shown on donor and batch; negative results route the donor to print. Configure the signed provider webhook and verification key, or explicitly fetch events with SendGrid Email Logs access. Open tracking, address-fix tasks and print-vendor events remain unbuilt. |
| RCPT-007target | Thank-you templates | Partial | src/tests/Gap: One reviewed letter template with required facts exists; no templates per form, campaign or gift type. |
| RCPT-008target | Corrected and voided receipts | Missing | Gap: No receipt numbering, voiding or reissue. |
| RCPT-009target | One piece per household | Missing | Gap: Letters and appeal exports are one row per gift or per donor; no household grouping, addressee or combined totals. |
| RCPT-010target | Merge fields in every template | Partial | src/tests/Gap: Letter templates merge a fixed list of nine fields (date, donor name, amount, gift date, fund, goods statement, organization, EIN, deductible amount) and are refused for unknown, missing required or unclosed fields; no name parts, salutations, household, contact-point, giving-summary or custom fields, no fallbacks, field list API or blank check. |
| RCPT-011target | Acknowledgment status on every gift and soft credit | Partial | src/src/tests/tests/Gap: Soft credits have independent status, date, method, linked conversation or recorded thank-you note, exclusion reason and audited changes under GIFT-006. Hard gifts still lack stored per-gift acknowledgment status, method or an outside-batch setter; automatic message updates, soft-credit queue settings, importer status and saved-list/report filters remain. |
| Communication 0 done · 4 partial · 4 missing | |||
| COMM-001target | Preferences and unsubscribes everywhere | Partial | docs/Gap: Email provider opt-outs append withdrawals and Coffer email withdrawals synchronize to Mango or Mailchimp; each marketing submission checks both sides. Receipts remain transactional. SMS/phone, topics, frequency preferences and other providers remain. |
| COMM-002target | Appeals sent through Mango or Mailchimp | Partial | docs/Gap: Frozen, hash-approved appeals merge donor names and giving figures into exact-recipient Mango or Mailchimp campaigns, with per-donor submission and provider results. Real local Mango draft/sync paths and hosted appeal/welcome delivery, a real unsubscribe click, reverse withdrawal and a transactional receipt after opt-out are proven. Mailchimp remains fixture-only. Name-part/custom-field merges, tags, engagement/attribution, scheduled appeals and solicitation restrictions remain. |
| COMM-003target | Constant Contact | Missing | Gap: No Constant Contact connection. |
| COMM-004target | One-to-one email and mailbox logging | Missing | Gap: No mailbox connection or personal email. |
| COMM-005target | Replies reach the right person | Partial | docs/Gap: The actual Email Routing handler logs known-donor replies, assigns and forwards to an active prospect owner (or the installation owner), files automatic replies, and exposes follow-up tasks. Live routing was proven on 17 October 2026 (an Email Routing rule to a hosted Worker turned a donor’s appeal reply into a task for the prospect owner); forwarding a copy needs the assignee verified as an Email Routing destination, and proposed stop-request withdrawals remain. |
| COMM-006target | SMS outreach | Missing | Gap: No SMS. |
| COMM-007target | Direct mail appeals | Partial | src/tests/Gap: Mail-channel audiences with postal addresses export as CSV; no ask amounts, response codes or mailing history. |
| COMM-008target | Appeal results | Missing | Gap: No appeal results. |
| Stewardship and follow-up 1 done · 3 partial · 2 missing | |||
| STEW-001target | Tasks with owners and reminders | Partial | src/src/tests/Gap: Owned, dated call tasks from lapses and unpaid due pledge installments support assignment, reassignment, snooze and atomic donor-timeline call completion. Recurring tasks, reminders, escalation and other task kinds remain. |
| STEW-002target | Recurring tasks | Done | src/src/migrations/tests/tests/ |
| STEW-003target | Stewardship journeys | Partial | docs/Gap: A person publishes the first-gift thank-you, impact and second-ask series. Durable due steps run through the provider on the minute Worker scheduler; another gift, unavailable email consent, merge or erasure stops pending work. Other triggers, branches, frequency caps, inactive/deceased statuses and solicitation restrictions remain. |
| STEW-004target | Pledge reminders and invoices | Partial | src/src/tests/Gap: Self-hosted SendGrid reminders run daily or by staff before each unpaid installment using current email permission, with durable single-attempt submission states. Managed email is not available yet. Unpaid due installments now feed the owned call list. Pay links, printable invoices and automatic overdue follow-up remain. |
| STEW-005target | Gift-triggered rules | Missing | Gap: No rules. |
| STEW-006target | Meetings and calendars | Missing | Gap: No calendar connection. |
| Major gifts and moves management 2 done · 2 partial · 3 missing | |||
| MAJOR-001target | Opportunity pipeline | Partial | src/src/tests/Gap: Identify, qualify, cultivate, ask and stewardship opportunities carry ask amount, expected close, owner and next step; lists filter by owner and stage. Configurable stages, probability, campaign/fund forecasts and closed-won gift linkage remain. |
| MAJOR-002target | Portfolios and moves | Done | src/src/tests/tests/ |
| MAJOR-003target | Action plans and proposals | Missing | Gap: No plans or proposals. |
| MAJOR-004target | Engagement and retention scores | Partial | src/src/tests/Gap: Prospect scores expose recency, frequency, amount and conversation inputs with their points and the full fixed formula. Configurable weights, broader engagement sources and scores on every constituent remain. |
| MAJOR-005target | Prospect research | Missing | Gap: No prospect research. |
| MAJOR-006target | Grants from foundations and corporations | Missing | Gap: No grant tracking. |
| MAJOR-007target | Planned giving | Done | src/src/tests/ |
| Reporting 1 done · 3 partial · 4 missing | |||
| REPORT-001target | Donor retention | Partial | src/src/tests/Gap: Calendar-year retained, new, lapsed and recaptured counts and net amounts drill to every underlying donor; signed adjustments and erased identities reconcile to the contribution ledger. Fiscal years, list/fund/campaign filters and upgraded/downgraded cohorts remain. |
| REPORT-002target | LYBUNT and SYBUNT lists | Partial | src/src/tests/tests/Gap: LYBUNT and earlier-year SYBUNT lists show reasons, last gifts and annual amounts at risk, with stopped monthly-plan flags and owned call creation. Direct appeal and journey enrollment remain. |
| REPORT-003target | Fundraising dashboards | Partial | src/Gap: Today shows the current calendar year's total and acknowledgment backlog; no breakdowns, goals, comparisons or drill-down. |
| REPORT-004target | Report builder | Missing | Gap: No report builder. |
| REPORT-005target | Scheduled reports | Missing | Gap: No scheduled reports. |
| REPORT-006target | Recurring giving health | Done | src/src/migrations/tests/tests/ |
| REPORT-007target | IRS Form 990 support | Missing | Gap: No Form 990 reports. |
| REPORT-008target | Raised by state | Missing | Gap: Each donor stores a current state, but there is no address history or report by state. |
| Moving in 0 done · 6 partial · 5 missing | |||
| MOVE-001target | From Little Green Light | Partial | src/src/src/tests/docs/Gap: Constituent names (including Prefix/Suffix) are authoritative; display names in gifts and relationships never block for name differences. LGL Appeal maps to the gift appeal, Campaign is retained separately in the note, and Check No. is carried in the reference alongside the source gift ID. Independent blockers are reviewed together, with concrete fixes; one cent per pledge payment is accepted as rounding and actual paid cents are retained. Documented LGL CSV/XLSX constituent and fundraising exports preview donors, households (explicit, or spouses and people at one address; never merged by name), gifts, funds/campaigns, relationships, soft credits, pledges/installments and notes, with source controls, every blocking row listed (paged, filterable, CSV), a preview that plans every part, part-by-part apply that names a failing part's rows, year-by-year re-import by LGL ID, and undo. Full multi-contact/name/custom-field, consent/restriction, acknowledgment, tribute and recurring-vault migration remains outside this export implementation. |
| MOVE-002target | From Bloomerang | Partial | src/src/src/tests/docs/Gap: Documented Bloomerang CSV/XLSX reports import the same donor/gift history and attribution with source-control reconciliation and atomic apply/undo. REST API, full contact/custom-field, task, consent/restriction, acknowledgment, tribute and recurring-vault migration remains unbuilt. |
| MOVE-003target | From Raiser's Edge NXT | Partial | src/src/src/tests/docs/Gap: Configured NXT database-view CSV/XLSX constituent/gift reports import donor/gift history, households, relationships, soft credits, pledges and notes. Grouped web-list splits and repeated source IDs are explicitly blocked pending designation exports. SKY API, opportunities, full custom fields/contacts, restrictions, acknowledgment and recurring-vault migration remains unbuilt. |
| MOVE-004target | From Neon CRM | Missing | Gap: No Neon CRM importer. |
| MOVE-005target | From Givebutter and Zeffy | Missing | Gap: No Givebutter or Zeffy importer. |
| MOVE-006target | Any spreadsheet | Missing | Gap: No general importer. |
| MOVE-007target | Totals checked before the switch | Partial | src/src/src/tests/docs/Gap: CSV/XLSX move-ins compare received gift counts and cents by year, fund and donor with raw source rows and independently supplied source report controls; existing imported net balances participate. Named differences or unmapped values block until resolved or accepted with a recorded reason. Stable source IDs, resumable part-by-part apply with a recheckable totals check from the gifts in Coffer (per move-in, including gifts an earlier move-in brought), and undo ship; later call tasks and opportunities block undo. The review asks whether gifts before a date (default the move-in date in the organization’s time zone) were already thanked; those never become due or missing receipts. Cross-account vault transfer, per-gift acknowledgment status reconciliation, restriction/tribute controls and cutover sign-off remain unbuilt. |
| MOVE-009target | Recurring donors move with their cards and bank accounts | Partial | src/docs/tests/Gap: Supported active fixed-price USD monthly subscriptions from the same Stripe account appear on donors with their existing customer/subscription IDs; Stripe continues billing without a new charge or card transfer. Cross-account vault transfer, ACH mapping and other schedules remain unbuilt. |
| MOVE-008target | Consent and preferences moved with provenance | Missing | Gap: No importer carries consent. |
| MOVE-010target | Custom fields carried across | Missing | Gap: No custom fields, and no importer other than Stripe's, which reads no custom data. |
| MOVE-011target | Switching guide for each incumbent | Partial | src/src/src/tests/docs/Gap: The CRM export guide gives vendor report/menu guidance, official source links, required IDs, supported fields and source control interpretation for LGL, Bloomerang and NXT, alongside the Stripe guide. PCI transfer and an installation cutover checklist remain unbuilt. |
| Team and access 1 done · 2 partial · 0 missing | |||
| TEAM-001target | Roles and record-level access | Partial | src/src/tests/Gap: Owner, admin, member and agent roles guard every command; no fundraiser, finance, volunteer or read-only roles, portfolio scoping, confidential fields, managers or call capacity. |
| TEAM-002target | Single sign-on and two-step sign-in | Partial | src/Gap: Base sign-in supports an OIDC provider; requiring SSO and a second factor are not offered in Coffer. |
| TEAM-003target | Audit log | Done | src/src/migrations/migrations/tests/ |
| Integrations and API 0 done · 1 partial · 3 missing | |||
| API-001target | Public REST API | Partial | src/src/tests/Gap: Authenticated donor reads and a command API exist; no versioned public API, OpenAPI document, scoped keys or idempotency keys. |
| API-002target | Webhooks | Missing | Gap: No webhooks. |
| API-003target | Zapier and Crank | Missing | Gap: No Zapier app or Crank connector. |
| API-004target | MCP endpoint | Missing | Gap: No MCP endpoint. |
| Mobile 0 done · 1 partial · 2 missing | |||
| MOBILE-001target | Phone-ready web app | Partial | tests/Gap: Every current screen fits 390 pixels with no horizontal scroll; no phone-first views, call logging or task list. |
| MOBILE-002target | Native iOS and Android apps | Missing | Gap: No native apps. |
| MOBILE-003target | In-person giving | Missing | Gap: No in-person payments. |
| Data and ownership 2 done · 1 partial · 1 missing | |||
| DATA-002target | Exports by record type | Partial | src/src/tests/Gap: The owner downloads the full NDJSON archive, and letters and audiences export as CSV; no per-type or per-list CSV exports. |
| DATA-003target | A donor's own data on request | Missing | Gap: No per-donor access export. |
| OWN-001target | Free, open source and owned | Done | LICENSEwrangler.jsoncREADME.md |
| OWN-002target | Runs on the nonprofit's own computer | Done | RUN-LOCALLY.mdtests/ |
| Development agent 0 done · 7 partial · 5 missing | |||
| DEV-001push further | Reconciles every gift | Partial | src/tests/docs/Gap: Stripe charges/payouts, contributions/funds and exact Pantry proposal/journal state are compared with source IDs. Safe contribution and missing-gift corrections have explicit apply and compensating undo; payout/accounting exceptions require Payments/Pantry review. Broader finance-role approvals and QuickBooks integration remain. |
| DEV-002push further | Rescues failed monthly gifts | Partial | src/tests/docs/Gap: Signed failures request one private card-update email; Stripe schedules retries and daily reconciliation records recovery/lapse. Reversible pause/resume and activity explain outcomes. Major-donor approvals, expiring-card notices and per-donor frequency grants remain. |
| DEV-003push further | Sends missing receipts | Partial | src/tests/docs/Gap: Finds all missing and bounced gift receipts, freezes a batch for human approval and supports undo before dispatch. Unknown goods/services are held. Standing template approvals, migration acknowledgment policies and year-end delivery recovery remain. |
| DEV-004push further | Drafts stewardship from the nonprofit's own history | Partial | src/tests/docs/Gap: An install-owned sealed AI key enables cited drafts from actual gifts, signed adjustments, funds, conversations and tributes; people edit/review/send, stale sources block sending and discarded drafts restore. Relationship-manager scheduling, event/reply sources and confidential role scoping remain. |
| DEV-005push further | Shows who needs a human call next | Partial | src/src/src/tests/Gap: Staff review explained lapse/monthly/pledge flags, create owned dated calls, log outcomes on donor timelines and inspect donor-by-donor retention. Weekly agent ranking, capacity overflow, solicitation/status restrictions and called-vs-uncalled outcome attribution remain. |
| DEV-006push further | Briefs before a meeting | Missing | Gap: No meetings or briefs. |
| DEV-007push further | Proves the move-in and the cutover | Partial | src/tests/Gap: The Stripe move-in reads the connected account or a request-only restricted read key, follows pages for charges, Payment Intents, invoices and monthly plans, resolves customers, previews exact gifts and skips, imports supported existing monthly plans, checks actual gift counts/cents, and supports guarded undo (src/coffer/imports/live-stripe.ts, src/coffer/imports/subscriptions.ts, docs/MOVE-IN.md). No comparison agent, cross-account vault transfer, recurring reauthorization or cutover. |
| DEV-008push further | Keeps the database clean | Missing | Gap: No data hygiene agent. |
| DEV-009push further | Confirms appeals actually reached donors | Missing | Gap: No sender connection. |
| DEV-010push further | Follows pledges and grants to the end | Missing | Gap: No installments, grants or matching gifts to follow. |
| DEV-011push further | Writes the development report | Missing | Gap: No reports for the agent to draw on. |
| DEV-012push further | Agent grants and autonomy | Partial | src/src/tests/Gap: Expiring, revocable agent keys can only read and prepare; no named grants, standing approvals, limits or kill switch. |
How statuses are judged
- Done
- It ships in the default install, and a cited test or journey exercises it.
- Partial
- Some of it ships, it ships only behind an opt-in, or there is code with no requirement-level test.
- Missing
- There is no implementation.