Skip to main content

Path A: New Organization Client

This is the dominant practitioner story: a new organization reaches out, discovery happens, a proposal is sent and signed, the engagement runs, and the work closes.

1. Submit An Inquiry

Open http://localhost:3000/inquiry without authentication. Click Reach out, fill the partnership track with realistic test data, and submit.

Expected:

  • Formbricks confirms submission.
  • A fresh inquiries row exists.
  • status='received' and inquiry_type='partnership'.
  • Typed Branch A columns are populated, not only values_response.
  • wf5.inquiry.received appears in activity_events.

Useful SQL:

select id, contact_email, organization_name, leadership_challenges,
contact_role, contact_phone, status
from inquiries
order by created_at desc
limit 1;

Stop if the row never lands or filled fields are NULL.

2. Review The Inquiry

Sign in as the practitioner and visit http://localhost:3000/inquiries. Open the new inquiry.

Expected:

  • The Contact card shows name, email, role, and phone.
  • The Partnership details card renders every Branch A field plainly.
  • The page exposes Spawn discovery doc, Schedule discovery, and Decline.

Stop if a fresh row renders empty fields or a (legacy) chip.

3. Schedule Discovery

Click Spawn discovery doc if useful. Click Schedule discovery to send a Cal.com booking link.

Expected:

  • Mailpit receives a discovery invitation.
  • Inquiry status advances.
  • wf5.discovery.doc_spawned, if used, and wf5.discovery.scheduled are recorded.

Stop if no mail appears within about 30 seconds.

4. Classify Tier

After discovery, reopen the inquiry. Click Classify tier and choose the right tier. Values-fit fields are practitioner-only and should not travel to the contact.

Expected:

  • Tier persists.
  • values_score is populated.
  • wf5.tier.classified is recorded.

5. Build And Send The Proposal

Click Build & send proposal and walk the wizard: confirm tier, confirm template, spawn the Drive proposal doc, review it, return to the hub, and click Send proposal.

Expected:

  • A Documenso envelope is sent and visible in Mailpit.
  • wf5.proposal.spawned and wf5.proposal.sent are recorded.
  • Inquiry status becomes proposed.

If there is no documenso_template_id, the path should land in no_template and expose Switch to manual issue (prefilled). That branch is acceptable; fail only if the prefill link is missing or broken.

6. Convert The Inquiry

After Documenso marks the inquiry signed, click Convert to engagement.

Expected:

  • An organization row is created or matched.
  • A new engagement is created with engagement_subject_kind='organization', an organization_id, the partnership linked, and status provisioning.
  • The hub redirects to /engagements/<id>.

Stop on NOT NULL or foreign-key errors.

From /engagements/<id>, go to Settings -> Folder map. Pick one folder for each bucket:

  • Reference materials: organization-provided source content.
  • Deliverables: TKB-produced artifacts the organization will receive.
  • Internal: TKB internal working materials.

Then go to http://localhost:3000/admin/drive, find the engagement in Engagement folder map, and click Sync now.

Expected:

  • All three picks succeed.
  • drive_sync_configs has three rows with distinct categories and folder ids.
  • The sync message reports real numbers, such as Synced 12 files across 3 runs (0 errors).
  • content_versions materialize for synced files.

Negative check: paste a Drive folder URL outside the configured TKB root. The picker should reject it with Folder is outside the configured TKB Drive root.

8. Invite Participants

Open People, click Invite participant, enter an email, choose a role, and submit.

Expected:

  • Mailpit receives a magic-link email.
  • engagement_participants is created.
  • memberships is created under the parent organization.
  • The API log shows membership upsert running normally.

9. Confirm Tenant Access

Open the participant magic link in a different browser profile. It should route to http://localhost:3002.

Expected:

  • Tenant home renders with organization brand colors.
  • The engagement appears in the participant view.
  • Reference materials appear according to default visibility.
  • Hub navigation is absent.

10. Work The Engagement

Back in the hub, open /engagements/<id> and exercise the working surfaces:

  • Work items: create one open and one in-progress item.
  • Risks: log one critical risk, then mitigate it.
  • Deliverables: create one delivered item and leave one in-flight item.
  • People: assign a closure form.
  • Sessions: create a Cal.com booking.
  • Decisions: record a decision.
  • Source materials: upload a tenant-side file and confirm it appears.
  • Timeline: confirm every action appears as activity.
  • Insights: log a coaching insight if WF1 capture is wired locally.

Expected: every route loads, every write records activity, and the overview status strip reflects current counts.

11. Complete The Engagement

Find Wrap up this engagement. For each unmet hard gate, click View ->, resolve the offending item, return, and click Refresh checks.

When all hard gates pass, click Mark complete..., choose Run the closure loop, keep the three opt-out checkboxes checked, and submit.

Expected:

  • View -> links navigate to the right sub-routes.
  • Refresh checks updates state without a full page reload.
  • Mark complete... stays disabled until hard gates pass.
  • Engagement status becomes completed.
  • engagement.completed and wf7.closure.options_committed are recorded.
  • Closure-survey emails dispatch to participant and owner.
  • The closure panel renders cadence status, archive action, and reopen action.