Fundraising OS: Main Repo vs. Our Instance - Gap Analysis

Table of Contents
Fundraising OS: Gap Analysis

Fundraising OS: Main Repo vs. Our Instance

Gap analysis comparing boolabinc/boo-brain/bundles/fundraising-os (main branch) against our deployed instance at fundraising.boolab-casper-boo.boolab.io. Generated August 16, 2026.

14
Features we have
4
Open PRs with new features
8
Merged PRs already in our instance
3
Key gaps to close

1. Executive Summary

Our deployed instance is ahead of the main repo in several areas, and the main repo has 4 open PRs bringing features back that originated from our instance. The open PRs represent the "latest and greatest" that hasn't been merged yet. Three of those 4 open PRs contain features our instance either already has (from direct builds) or needs.

The main gap: the bundle's infrastructure layer (versioned backup/export, schema versioning, data-backup module) exists in the bundle but our instance diverged before those were added. The product features (warm intros, angel rendering, round-scoped URLs) are all present in our instance.

2. What Our Instance Already Has

All core features from merged PRs through August 16, 2026 are present in our deployed instance.
FeatureSourceStatus
Warm Intros tab with full data modelPR #298 + #340Shipped
Warm intro columns: Evidence, Willingness, Priority, ForwardablePR #340Shipped
DELETE + bulk POST /api/warm-introsPR #340Shipped
Canonical FKs: connector_person_id, target_person_id, target_firm_idPR #340Shipped
connector_willingness enumPR #340Shipped
Status lifecycle: identified, permission-requested, approved, sent, accepted, declined, no-responsePR #340Shipped
Round-scoped URLs (///)PR #289Shipped
Legacy URL 301 redirectsPR #289Shipped
Solo angel rendering (person monogram, "Angel" tag)PR #341Shipped
isIndividualInvestorType() shared helperPR #341Shipped
One candidate per firm (not per partner)PR #339Shipped
Soft-circle as a commitment statePR #213 (original)Shipped
Task list on Today pageCustom buildShipped
14 FOS skills installedBundle skillsShipped
8 heartbeat tasks runningBundle heartbeatsShipped
27 database tablesFull schemaShipped

3. Gaps: What We're Missing

High Priority PR #345 Open

Gap 1: Soft Circle as a Distinct Construct from Commitment

What the PR does: Makes soft circle a first-class pre-commitment, separate from the real commitment pipeline (verbal → signed → wired).

Our current state: Our round bar folds soft circle INTO committed: committed = totals.soft + totals.signed + totals.wired. This overstates how full the round is.

What we need:

  • Round bar: show Committed and Soft circled as two separate numbers
  • Progress bar: committed money fills; soft circle rides on top as a lighter striped segment
  • Remaining = target minus committed (not target minus wired)
  • New soft_circle_amount field (stored separately, not on the committed ledger)
  • Skill update: hard rule to ask "committed, or a soft circle?" on every reported amount
  • Information model update: Committed = verbal + signed + wired only

Note from PR: "The live fundraising instance already has this shipped and verified; this PR brings the same construct back into the product bundle." However, our instance still uses the old calculation.

High Priority PR #343 Open

Gap 2: Additive Import/Export in Settings + warm_intros Backup Gap

What the PR does:

  • Data-loss fix: warm_intros table was never in the backup's DATA_TABLES, so a full export silently dropped every warm intro
  • Additive merge import: incoming rows match existing ones on natural key and enrich in place (non-null wins); new rows are inserted. Re-importing is idempotent, cross-workspace import enriches without wiping
  • Settings UI: Full workspace Export/Import + Advanced "move individual parts" with selectable slices (Investors & pipeline, Term sheets, Competitors, Conflicts, Network, Thesis, Tasks)
  • New endpoints: GET /api/my/export, POST /api/my/import, GET /api/my/parts, POST /api/my/parts/export, POST /api/my/parts/import
  • New file: data-backup.ts merge engine with 16 unit tests
  • SCHEMA_VERSION bumps 1 → 2

Our current state: No backup/export/import endpoints. No SCHEMA_VERSION tracking. No DATA_TABLES constant. No data-backup.ts module. Settings page has no import/export UI.

Medium Priority PR #304 (merged) Merged

Gap 3: Self-Describing Data Backup + SCHEMA_VERSION

What the PR does: Full-fidelity self-describing data backup with schema versioning (zero data loss). This is the infrastructure that PR #343 builds on.

Our current state: No SCHEMA_VERSION in our store.ts. No data backup envelope. This merged PR's infrastructure is a prerequisite for the import/export feature.

Medium Priority PR #344 (merged) Merged

Gap 4: Central Round Projector Derives Today from Records

What the PR does: A central round projector that computes Today page stats directly from the database records, rather than relying solely on heartbeat items.

Our current state: Today page gets its data from store.ledgerTotals(), store.getLatestHeartbeat(), store.getDraftsForRound(), and store.getTodos(). No round projector.

Impact: The Today page may show stale data between heartbeat runs. A projector would derive fresh stats on every page load.

4. Open PRs Still Being Reviewed

These PRs are open on the main repo and represent features in various stages of review:

PRTitleWe Have It?Action Needed
#345 Soft circle as distinct construct from commitment Partially Need: separate round bar, soft_circle_amount field, skill rule update
#343 Additive import/export in Settings + warm_intros backup No Need: data-backup.ts, export/import endpoints, Settings UI, SCHEMA_VERSION
#341 Render solo angels as person on Round tab Yes Already shipped in our instance
#340 Align Warm Intros tab with product spec Yes Already shipped in our instance
#336 Version Packages (release automation) N/A CI/release infra, not a product feature

5. Things We Have That the Main Repo Doesn't

Our instance has diverged in ways that may be worth contributing back:

FeatureDetails
Custom warm intro columns already live Evidence, Willingness, Priority, Forwardable columns are in our deployed Network tab. PR #340 brings these to the bundle.
Angel rendering fix already live isIndividualInvestorType + personLogoCell already in our code. PR #341 brings it to the bundle.
Vishal's connections map (507 contacts) Ingested into notebook for outreach and relationship mapping. Not a bundle feature, but unique to our instance.
vishal-cos-style skill Personal COS working preferences for email drafting and investor communications.

6. Skills Comparison

All 14 Fundraising OS skills are installed and operational.
SkillStatusNotes
boo-fundraising-os (orchestrator)Installed15 files including shared references
commitment-ledgerInstalledMay need update for soft circle distinction
competitor-mapInstalled
conflict-assessInstalled
conversational-editInstalledMay need "committed or soft circle?" rule
draft-outreachInstalled
fundraise-activateInstalled
heartbeat-composeInstalled
import-mapperInstalled
intro-pathInstalled
investor-longlistInstalled
investor-researchInstalled
meeting-briefInstalled
workspace-seedInstalled

7. Heartbeat Tasks

All 8 Fundraising OS heartbeat tasks are running.
TaskScheduleStatus
chief-of-staff-dailyDaily at 6:00 AMActive
commitment-reconcileDaily at 7:00 AMActive
competitor-monitor-dailyDaily at 5:00 AMActive
cost-rollupDaily at 3:00 AMActive
eval-regressionMondays at 9:00 AMActive
profile-refreshMondays at 4:00 AMActive
relationship-syncEvery 4 hoursActive
weekly-rollupMondays at 8:00 AMActive

8. Recommended Action Plan

Priority 1: Soft Circle Separation (from PR #345)

  1. Update render/strip.ts roundStrip to show Committed and Soft circled as separate numbers
  2. Update progress bar: committed fills, soft circle as a lighter striped overlay
  3. Change Remaining = target - committed (where committed = verbal + signed + wired, NOT soft)
  4. Add soft_circle_amount field to candidates or a new storage path
  5. Update commitment-ledger skill: add hard rule about asking "committed or soft circle?"
  6. Update information-model.md: Committed = verbal + signed + wired only

Priority 2: Data Backup + Import/Export (from PRs #304 + #343)

  1. Add SCHEMA_VERSION tracking to store.ts
  2. Create data-backup.ts module with the self-describing export envelope
  3. Add warm_intros to the backup table list (fix the silent data loss)
  4. Add export/import API endpoints: /api/my/export, /api/my/import, /api/my/parts
  5. Add additive merge logic (natural key matching, non-null wins, idempotent)
  6. Update Settings page with Export/Import UI and Advanced "move individual parts"
  7. Write unit tests for the merge engine

Priority 3: Central Round Projector (from PR #344)

  1. Build a round projector that computes Today stats from live records
  2. Reduce dependency on stale heartbeat items for the Today page

9. Access Note

Note: The connected GitHub accounts (VishalRJoshi) can search issues and PRs in the boolabinc/boo-brain repo, but cannot read file contents or repository structure. This analysis was built by cross-referencing PR descriptions, our deployed source code, and the installed skills. To do a line-by-line diff, the GitHub connection would need org-level repository content access. An alternative: clone the repo locally and share the relevant files.
Chart, full screen