The IDE for product owners

AI writes the code. You own what it does.

Every requirement you wrote, proven on every pull request before a bug reaches anyone.

Backed byBerkeley SkyDeck

TrueCourseNNorthwind LabsHomeContextCodeFlowsAgentNotifications2SettingsAAda Okaforada@northwind.devHome80%51 of 64 flows succeeded51Succeeded3Failed2Blocked6Not testable2Never runFLOWS OVER TIME7d30d90dAllFailedBlockedNot testableNever runSucceededSep 2Sep 8Sep 15
TrueCourseNNorthwind LabsHomeContextCodeFlowsAgentNotifications2SettingsAAda Okaforada@northwind.devContextRefunds and credit notesNorthwind Docs · docs/billing/refunds.md · 5 requirementsNot runProvedRefund windowPartial refunds are allowed within ninety days of the charge, in the currency theinvoice was issued in.Not runFailedPayment methodRefunds must return to the original payment method.Store credit is offered only when the customer asks for it.Not runBlockedApprovalsRefunds above five hundred dollars need a second approval from finance before theyare issued.Not runProvedCredit notesA refunded invoice keeps its number and receives a credit note for the refundedamount.Not runProvedNoticeThe customer is told by email once the refund has been issued, with the credit noteattached.3 Proved1 Failed1 Blocked5 requirements
TrueCourseNNorthwind LabsHomeContextCodeFlowsAgentNotifications2SettingsAAda Okaforada@northwind.devFlows› refund-returns-to-original-method › Run 12 min agorefund-returns-to-original-methodFailedWeb · northwind/billing · 2 sections · last run 12 min agoFailedBroke at step 4 · Next: return the refund to the original payment method, not store creditFILMSTRIPReplaysession.webmStep 140.00Step 2Store credit issuedStep 3Issued as store creditStep 4STEPS1webopen /billing/invoices/inv_10421.2s2webclick "Refund", fill amount 40.000.4s3webclick "Issue refund"0.9s4webexpect "Refunded to Visa 4242"0.3sEXPECTEDRefunded to Visa 4242ACTUALIssued as store creditTRANSCRIPT12:04:18 open /billing/invoices/inv_1042 20012:04:19 click "Refund" fill amount 40.0012:04:20 click "Issue refund" banner "Store credit issued"12:04:21 expect "Refunded to Visa 4242" found "Issued as store credit"

How it works

  1. 01

    Connect your docs

    Add wherever your requirements live. Repository markdown, a documentation site, Jira, Confluence, Google Drive, Notion.

    TrueCourseNNorthwind LabsHomeContextCodeFlowsAgentNotifications2SettingsAAda Okaforada@northwind.devContextAdd contextScanSourcesDocumentsConflictsSearch documentsDOCUMENTSOURCERefundsNorthwind DocsInvoices and credit notesNorthwind DocsBilling cyclesNorthwind DocsTax by customer countryNorthwind DocsStore creditnorthwind/billingTrialsnorthwind/checkout171 totalRefundsNorthwind Docs · docs/billing/refunds.mdRefundsPartial refunds are allowed withinninety days of the charge.Refunds must return to the originalpayment method.A refunded invoice keeps its numberand receives a credit note.Store credit is offered only when thecustomer asks for it.Add contextSourceScopeRepositoryDocumentation siteJiraConfluenceGoogle DriveOneDriveNotionLinearSlackAdd and syncSyncingSyncedBackRefunds must return to the originalpayment method.
  2. 02

    Connect your repository

    Pick the repositories those docs describe. TrueCourse maps their interfaces and installs as a check on each one.

    TrueCourseNNorthwind LabsHomeContextCodeFlowsAgentNotifications2SettingsAAda Okaforada@northwind.devCodeConnect repositorySearch repositoriesREPOSITORYREQUIREMENTSPROVENLAST CHECKBASELINEnorthwind/checkout1458388%Passing1h agomain · 1d agonorthwind/ledger1930468%Failing5h agomain · 3d agonorthwind/notifications22292%Passing3h agomain · 2d ago1 Failing2 Passing3 totalConnect a repositoryProviderRepositoriesConfirmnorthwind· GitHubConnectednorthwind/billingprivatenorthwind/customer-portalprivatenorthwind/api-gatewayprivatenorthwind/design-systempublicnorthwind/checkoutconnectednorthwind/ledgerconnectedConnectConnectingConnectedBacknorthwind/billingRunsPipelineContextInterfacesDependenciesSettingsSearch interfacesINTERFACESURFACEKINDORIGINUSED BYPOST/refundsIssue a refund for a chargeAPIOperationderived4 testsGET/refunds/:idRead one refundAPIOperationderived2 testsGET/invoices/:idRead one invoiceAPIOperationderived6 testsPOST/invoices/:id/credit-notesCredit an invoiceAPIOperationderived3 testsRefunds/billing/refundsWebScreenderived3 testsInvoice/billing/invoices/:idWebScreenderived2 testsbilling reconcileSettle the day’s ledgerCLICommandderived1 test4 Operation2 Screen1 Command7 total
  3. 03

    Docs become flows

    Each requirement becomes a flow, a scenario run against the running product with every step on record.

    TrueCourseNNorthwind LabsHomeContextCodeFlowsAgentNotifications2SettingsAAda Okaforada@northwind.devFlowsSearch flowsFILTERRepository · northwind/billingAdd filterFLOWSTATUSDRIVERSREPOSITORYSECTIONSrefund-returns-to-original-methodFailedWebnorthwind/billing2invoice-totals-are-integer-centsSucceededAPInorthwind/billing1partial-refund-within-ninety-daysSucceededAPInorthwind/billing2overdue-invoice-sends-reminderBlockedAPIWebnorthwind/billing1credit-note-reverses-invoiceSucceededAPInorthwind/billing3vat-applied-per-customer-countrySucceededAPInorthwind/billing2trial-ends-without-a-card-on-fileNever runWebnorthwind/billing1invoice-due-date-follows-termsSucceededAPInorthwind/billing1reminder-sent-three-days-before-dueSucceededAPInorthwind/billing2credit-note-emails-the-customerSucceededWebnorthwind/billing11 Failed1 Blocked1 Never run7 Succeeded10 of 52› refund-returns-to-original-method › Run 12 min agorefund-returns-to-original-methodFailedWeb · northwind/billing · 2 sections · last run 12 min agoFailedBroke at step 4 · Next: return the refund to the original payment method, not store creditFILMSTRIPReplaysession.webmStep 140.00Step 2Store credit issuedStep 3Issued as store creditStep 4STEPS1webopen /billing/invoices/inv_10421.2s2webclick "Refund", fill amount 40.000.4s3webclick "Issue refund"0.9s4webexpect "Refunded to Visa 4242"0.3sEXPECTEDRefunded to Visa 4242ACTUALIssued as store creditTRANSCRIPT12:04:18 open /billing/invoices/inv_1042 20012:04:19 click "Refund" fill amount 40.0012:04:20 click "Issue refund" banner "Store credit issued"12:04:21 expect "Refunded to Visa 4242" found "Issued as store credit"
  4. 04

    Every pull request is checked

    Flows run in an isolated sandbox. A failing check quotes the doc sentence and what was observed instead.

    Move refunds to store credit#482Openada-okafor wants to merge 3 commits intomainfromfeature/store-credit-refundsConversation4Commits3Checks3Files changed6ada-okaforcommented 2 hours agoRefunds now land as store credit so the customer can spend it right away.Some checks haven't completed yet1 in progress and 2 successful checksSome checks were not successful1 failing and 2 successful checksci / buildSuccessful in 2m 14sDetailsci / testsSuccessful in 4m 02sDetailsIn progressTrueCourse / guard1 failingDetailsrefund-returns-to-original-methodRefunds must return to the original payment method.docs/billing/refunds.md › Payment methodObserved:refund issued as store creditMerging is blockedThe base branch requires all checks to pass before merging.Merge pull requestReviewersNo reviewsAssigneesNo oneLabelsbillingMilestoneNo milestone
  5. 05

    Claude Code closes the loop

    Claude Code reads the failing result over MCP, fixes the code, and the check goes green.

    claude · northwind/billing>fix the failing TrueCourse flows⏺truecourse - failing_flows (MCP)⎿refund-returns-to-original-method failedexpected "Refunded to Visa 4242", found "Issued as store credit"⏺Update(src/billing/refund.ts)⎿Updated src/billing/refund.ts with 1 addition and 1 removal- return issueStoreCredit(charge, amount);+ return refundToOriginalMethod(charge, amount);⏺truecourse - run_flow (MCP)⎿refund-returns-to-original-method succeeded 4 steps 2.8s⏺Refunds return to the original payment method again. Pushed tofeature/store-credit-refunds.Move refunds to store credit #482Some checks were not successful1 failing and 2 successful checksAll checks have passed3 successful checksci / buildDetailsci / testsDetails1 failingSuccessful in 2m 48sTrueCourse / guardDetailsMerging is blockedAll checks must pass.Merge pull requestReady to mergeNo conflicts with main.Merge pull request

Every flow runs in isolation.

TrueCourse boots your product in a fresh machine for each flow, seeds the data that flow needs, and destroys the machine when the run ends. Nothing for your team to set up or keep running.

microVMrefund-returns-to-original-methodBootednorthwind/billing at 4f1e9c2SeedingSeeded2 customers1 paid invoice1 card on fileRanFailedDestroyedmicroVMinvoice-totals-are-integer-centsBootednorthwind/billing at 4f1e9c2SeedingSeeded1 customer3 invoicesRanSucceededDestroyedmicroVMcredit-note-reverses-invoiceBootednorthwind/billing at 4f1e9c2SeedingSeeded1 customer1 paid invoice1 refundRanSucceededDestroyed
Docs fromGitHubConfluenceJiraGoogle DriveOneDriveNotionLinearSlackand more
Code onGitHubGitLabAzure DevOpsBitbucketGiteaand more

Enterprise

Runs where your code lives.

Self-hosted in your VPC or hosted by us. Every run works on a copy of the repository in a machine destroyed when it ends, secrets are encrypted at rest, and nothing about your product leaves your account.

Talk to sales
  • Self-hosted

    Runs in your VPC. Code and docs stay with you.

  • Single sign-on

    Okta, Azure AD and Google Workspace.

  • Audit trail

    Every run and decision, timestamped and attributed.

  • Workspaces

    Several teams under one account, each with its own repositories and docs.

Put your docs to the test.

Click the water to set sail. Your cursor is the wind.