Skip to content

Add offline AMPS e2e scenario and manual review transfers#390

Merged
Connorbelez merged 4 commits intomainfrom
04-08-major_refac
Apr 10, 2026
Merged

Add offline AMPS e2e scenario and manual review transfers#390
Connorbelez merged 4 commits intomainfrom
04-08-major_refac

Conversation

@Connorbelez
Copy link
Copy Markdown
Owner

Add offline AMPS e2e scenario and manual review transfers

  • Add seeded offline lifecycle harness and Playwright coverage
  • Support manual_review in dispersal and transfer flows
  • Update tests and generated API types

Refactor transfer reversal and healing flows

  • Route attempt-linked reversals through transfer-owned cascades
  • Replace confirmation retry placeholder with real retriggering
  • Update balance, reconciliation, and integration tests for new flow

Refactor auth-gated convex flows and demo seeding

  • Consolidate document/admin query and mutation gates
  • Extract shared collection-plan read models and rule helpers
  • Rework AMPS demo workspace seeding and webhook handling

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 9, 2026

Warning

Rate limit exceeded

@Connorbelez has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 25 minutes and 55 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 25 minutes and 55 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7c7b3ff5-1d1c-448c-a295-b8486718d6f3

📥 Commits

Reviewing files that changed from the base of the PR and between 981f301 and 98e5252.

⛔ Files ignored due to path filters (1)
  • convex/_generated/api.d.ts is excluded by !**/_generated/**
📒 Files selected for processing (120)
  • .gitignore
  • convex/accrual/__tests__/interestMath.test.ts
  • convex/admin/queries.ts
  • convex/crm/__tests__/helpers.ts
  • convex/crm/__tests__/recordLinks.test.ts
  • convex/crm/__tests__/records.test.ts
  • convex/crm/__tests__/systemAdapters.test.ts
  • convex/crm/__tests__/viewEngine.test.ts
  • convex/crm/recordQueries.ts
  • convex/demo/__tests__/ampsE2e.test.ts
  • convex/demo/amps.ts
  • convex/demo/ampsE2e.ts
  • convex/dispersal/__tests__/createDispersalEntries.test.ts
  • convex/dispersal/__tests__/holdPeriod.test.ts
  • convex/dispersal/__tests__/integration.test.ts
  • convex/dispersal/__tests__/reconciliation.test.ts
  • convex/dispersal/disbursementBridge.ts
  • convex/dispersal/holdPeriod.ts
  • convex/documentEngine/basePdfs.ts
  • convex/documentEngine/dataModelEntities.ts
  • convex/documentEngine/generation.ts
  • convex/documentEngine/systemVariables.ts
  • convex/documentEngine/templateGroups.ts
  • convex/documentEngine/templateVersions.ts
  • convex/documentEngine/templates.ts
  • convex/engine/effects/__tests__/transfer.test.ts
  • convex/engine/effects/collectionAttempt.ts
  • convex/engine/effects/dealClosing.ts
  • convex/engine/effects/transfer.ts
  • convex/engine/hashChain.ts
  • convex/fluent.ts
  • convex/ledger/__tests__/bootstrap.test.ts
  • convex/ledger/__tests__/testUtils.test.ts
  • convex/machines/__tests__/deal.integration.test.ts
  • convex/payments/__tests__/crons.test.ts
  • convex/payments/cashLedger/__tests__/cashReceiptIntegration.test.ts
  • convex/payments/cashLedger/__tests__/constraintsAndBalanceExemption.test.ts
  • convex/payments/cashLedger/__tests__/dealCashEvents.test.ts
  • convex/payments/cashLedger/__tests__/disbursementGate.test.ts
  • convex/payments/cashLedger/__tests__/integration.test.ts
  • convex/payments/cashLedger/__tests__/lenderPayableBalance.test.ts
  • convex/payments/cashLedger/__tests__/paymentReversalIntegration.test.ts
  • convex/payments/cashLedger/__tests__/reconciliationSuite.test.ts
  • convex/payments/cashLedger/__tests__/replayIntegrity.test.ts
  • convex/payments/cashLedger/__tests__/sequenceCounter.test.ts
  • convex/payments/cashLedger/__tests__/testUtils.ts
  • convex/payments/cashLedger/__tests__/transferReconciliation.test.ts
  • convex/payments/cashLedger/integrations.ts
  • convex/payments/cashLedger/queries.ts
  • convex/payments/cashLedger/transferReconciliation.ts
  • convex/payments/cashLedger/transferReconciliationCron.ts
  • convex/payments/collectionPlan/__tests__/execution.test.ts
  • convex/payments/collectionPlan/__tests__/runner.test.ts
  • convex/payments/collectionPlan/__tests__/workout.test.ts
  • convex/payments/collectionPlan/admin.ts
  • convex/payments/collectionPlan/execution.ts
  • convex/payments/collectionPlan/readModels.ts
  • convex/payments/collectionPlan/ruleRecords.ts
  • convex/payments/collectionPlan/workout.ts
  • convex/payments/transfers/__tests__/collectionAttemptReconciliation.integration.test.ts
  • convex/payments/transfers/__tests__/financialProperties.test.ts
  • convex/payments/transfers/__tests__/handlers.integration.test.ts
  • convex/payments/transfers/__tests__/inboundFlow.integration.test.ts
  • convex/payments/transfers/__tests__/mutations.integration.test.ts
  • convex/payments/transfers/__tests__/mutations.test.ts
  • convex/payments/transfers/collectionAttemptReconciliation.ts
  • convex/payments/transfers/interface.ts
  • convex/payments/transfers/mutations.ts
  • convex/payments/transfers/providers/__tests__/registry.test.ts
  • convex/payments/transfers/providers/manualReview.ts
  • convex/payments/transfers/providers/registry.ts
  • convex/payments/transfers/types.ts
  • convex/payments/transfers/validators.ts
  • convex/payments/webhooks/__tests__/eftVopayWebhook.test.ts
  • convex/payments/webhooks/__tests__/legacyReversalWebhook.test.ts
  • convex/payments/webhooks/__tests__/reversalIntegration.test.ts
  • convex/payments/webhooks/__tests__/vopayWebhook.test.ts
  • convex/payments/webhooks/legacyReversal.ts
  • convex/payments/webhooks/rotessa.ts
  • convex/schema.ts
  • convex/test/authTestEndpoints.ts
  • convex/test/moduleMaps.ts
  • docs/architecture/unified-payment-rails-technical-design.md
  • docs/reviews/2026-04-08-fintech-architecture-review.md
  • docs/reviews/2026-04-08-maintainability-dry-yagni-review.md
  • docs/reviews/2026-04-08-security-rbac-review.md
  • docs/technical-design/unified-payment-rails.md
  • e2e/amps/auth.setup.ts
  • e2e/amps/offline-payments.spec.ts
  • e2e/auth.setup.ts
  • e2e/helpers/auth-storage.ts
  • package.json
  • src/components/demo/amps/dialogs.tsx
  • src/components/demo/amps/hooks.ts
  • src/lib/auth.ts
  • src/lib/rbac-display-metadata.ts
  • src/routeTree.gen.ts
  • src/routes/admin/route.tsx
  • src/routes/demo/amps/-collection-attempts.tsx
  • src/routes/demo/amps/-collection-plan.tsx
  • src/routes/demo/amps/-route.tsx
  • src/routes/demo/amps/-rules.tsx
  • src/routes/demo/amps/e2e-payments.tsx
  • src/routes/demo/amps/route.tsx
  • src/routes/demo/crm/route.tsx
  • src/routes/demo/document-engine/route.tsx
  • src/test/admin/admin-shell.test.ts
  • src/test/auth/chains/role-chains.test.ts
  • src/test/auth/helpers.ts
  • src/test/auth/permissions.ts
  • src/test/convex/engine/obligation-effect.test.ts
  • src/test/convex/listings/create.test.ts
  • src/test/convex/onboarding/helpers.ts
  • src/test/convex/payments/helpers.ts
  • src/test/convex/payments/mortgageLifecycleChaos.test.ts
  • src/test/convex/payments/mortgageLifecycleReliability.test.ts
  • src/test/convex/payments/reliabilityHarness.ts
  • src/test/convex/payments/webhooks/convexTestHarness.ts
  • src/test/convex/runtime.ts
  • src/test/convex/testKit.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 04-08-major_refac

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Owner Author

Connorbelez commented Apr 9, 2026

Copy link
Copy Markdown

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @Connorbelez, your pull request is larger than the review limit of 150000 diff characters

@Connorbelez Connorbelez marked this pull request as ready for review April 9, 2026 18:03
Copilot AI review requested due to automatic review settings April 9, 2026 18:03
Copy link
Copy Markdown

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the payments rail + AMPS demo ecosystem by adding an offline AMPS lifecycle harness (with Playwright coverage), introducing a manual_review transfer provider, and refactoring several transfer/reversal/healing paths to be transfer-owned and more idempotent. It also tightens auth-gated Convex chains and updates docs/tests/generated artifacts to reflect the canonical TransferProvider + transferRequests model.

Changes:

  • Add an AMPS offline lifecycle “E2E harness” route + Playwright scenario, plus Convex demo seed/execute/confirm/cleanup support.
  • Introduce manual_review transfer provider and propagate it through validators, registries, dispersal hold periods, and tests.
  • Refactor reversal/healing flows to be transfer-scoped (postingGroupId + effects), and consolidate/strengthen auth-gated query/mutation chains (payments/cash-ledger/docs/CRM).

Reviewed changes

Copilot reviewed 90 out of 92 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/test/convex/testKit.ts New shared convex-test bootstrap.
src/test/convex/runtime.ts Shared scheduled-work draining helper.
src/test/convex/payments/reliabilityHarness.ts Use shared drain helper.
src/test/convex/payments/mortgageLifecycleChaos.test.ts Update reversal IDs to transfer-scoped.
src/test/convex/payments/helpers.ts Reuse scheduled-work drain helper.
src/test/convex/onboarding/helpers.ts Reuse scheduled-work drain helper.
src/test/auth/permissions.ts Add payment/cash-ledger permissions.
src/test/auth/helpers.ts Swap to shared Convex test kit.
src/test/auth/chains/role-chains.test.ts Expand auth chain matrix.
src/test/admin/admin-shell.test.ts Update canAccessAdminPath context usage.
src/routeTree.gen.ts Add AMPS e2e-payments route.
src/routes/demo/document-engine/route.tsx Add staff+permission route guard.
src/routes/demo/crm/route.tsx Guard CRM demo route by permission.
src/routes/demo/amps/route.tsx Guard AMPS demo routes for staff admin.
src/routes/demo/amps/e2e-payments.tsx New offline lifecycle harness UI.
src/routes/demo/amps/-rules.tsx Refactor selection/mortgage options hooks.
src/routes/demo/amps/-route.tsx Add nav link for E2E harness.
src/routes/demo/amps/-collection-plan.tsx Refactor selection/label map hooks.
src/routes/demo/amps/-collection-attempts.tsx Refactor selection/label map hooks.
src/routes/admin/route.tsx Pass full auth context to path gate.
src/lib/rbac-display-metadata.ts Add display metadata for new perms.
src/lib/auth.ts Add staff-admin guards + context-based admin path gate.
src/components/demo/amps/hooks.ts Add reusable selection + mortgage helpers.
src/components/demo/amps/dialogs.tsx Introduce shared dialog submit hook.
e2e/helpers/auth-storage.ts Extract reusable Playwright auth storage helper.
e2e/auth.setup.ts Reuse extracted auth storage helper.
e2e/amps/offline-payments.spec.ts New Playwright offline lifecycle spec.
e2e/amps/auth.setup.ts Reuse extracted auth storage helper.
docs/technical-design/unified-payment-rails.md Update docs to TransferProvider canon.
docs/reviews/2026-04-08-maintainability-dry-yagni-review.md Add maintainability review doc.
docs/reviews/2026-04-08-fintech-architecture-review.md Add architecture review doc.
docs/architecture/unified-payment-rails-technical-design.md Update docs to TransferProvider canon.
convex/test/moduleMaps.ts Register new demo/payment modules.
convex/test/authTestEndpoints.ts Add payment/cash-ledger/document endpoints.
convex/schema.ts Remove legacy transfer statuses.
convex/payments/webhooks/stripe.ts Persist + schedule legacy reversal processing.
convex/payments/webhooks/rotessa.ts Persist + schedule legacy reversal processing.
convex/payments/webhooks/legacyReversal.ts New persisted legacy reversal handler.
convex/payments/webhooks/tests/reversalIntegration.test.ts Update to transfer-owned reversal flow.
convex/payments/webhooks/tests/legacyReversalWebhook.test.ts Add persistence/scheduling tests.
convex/payments/transfers/validators.ts Add manual_review + prune statuses.
convex/payments/transfers/types.ts Add manual_review provider code.
convex/payments/transfers/providers/registry.ts Register ManualReview provider.
convex/payments/transfers/providers/manualReview.ts New ManualReviewTransferProvider.
convex/payments/transfers/providers/tests/registry.test.ts Test provider registry resolution.
convex/payments/transfers/interface.ts Remove legacy PaymentMethod mention.
convex/payments/transfers/collectionAttemptReconciliation.ts Transfer-scoped reversal postingGroupId + timestamps.
convex/payments/transfers/tests/mutations.test.ts Add ManualReview provider unit tests.
convex/payments/transfers/tests/mutations.integration.test.ts Update permissions for integration identity.
convex/payments/transfers/tests/handlers.integration.test.ts Add manual_review inbound/outbound behaviors.
convex/payments/transfers/tests/collectionAttemptReconciliation.integration.test.ts Assert transfer-owned reversal postings.
convex/payments/collectionPlan/workout.ts Refactor actor plumbing + reduce duplication.
convex/payments/collectionPlan/ruleRecords.ts New rule upsert helper by code.
convex/payments/collectionPlan/readModels.ts New shared admin/read-model builders.
convex/payments/collectionPlan/execution.ts Make attempt→transfer linkage more atomic.
convex/payments/collectionPlan/admin.ts Move row-building logic to readModels.
convex/payments/collectionPlan/tests/workout.test.ts Disable GT hashchain in tests.
convex/payments/collectionPlan/tests/runner.test.ts Expect transfer record even on failure.
convex/payments/collectionPlan/tests/execution.test.ts Align staging/replay tests to new flow.
convex/payments/cashLedger/transferReconciliationCron.ts Replace placeholder retry with real retrigger scheduling.
convex/payments/cashLedger/transferReconciliation.ts Use transfer-scoped reversal postingGroupId.
convex/payments/cashLedger/queries.ts Remove legacy approved from in-flight set.
convex/payments/cashLedger/integrations.ts Simplify source normalization + transfer-linked reversal lookup.
convex/payments/cashLedger/tests/transferReconciliation.test.ts Assert retrigger creates CASH_RECEIVED.
convex/payments/cashLedger/tests/paymentReversalIntegration.test.ts Update reversal invocation to cascade step.
convex/payments/cashLedger/tests/disbursementGate.test.ts Update in-flight status expectations.
convex/fluent.ts Add payment/cash-ledger/doc chains; tighten CRM data-plane.
convex/engine/hashChain.ts Warn when GT hashchain disabled.
convex/engine/effects/transfer.ts Stamp confirmedAt; transfer-owned reversal cascade for attempt-linked.
convex/engine/effects/collectionAttempt.ts Extract reversal cascade helper; timestamp stamping; skip duplicate reversal.
convex/engine/effects/tests/transfer.test.ts Assert transfer-owned reversal entries for bridged transfers.
convex/documentEngine/templateVersions.ts Gate reads via documentQuery.
convex/documentEngine/templates.ts Gate reads via documentQuery.
convex/documentEngine/templateGroups.ts Gate reads via documentQuery.
convex/documentEngine/systemVariables.ts Gate reads via documentQuery.
convex/documentEngine/generation.ts Gate actions/mutations via document* chains.
convex/documentEngine/dataModelEntities.ts Gate reads via documentQuery.
convex/documentEngine/basePdfs.ts Gate reads/uploads via document* chains.
convex/dispersal/holdPeriod.ts Add manual_review hold period.
convex/dispersal/disbursementBridge.ts Allow manual_review provider code.
convex/dispersal/tests/holdPeriod.test.ts Test manual_review hold/eligibility date.
convex/demo/tests/ampsE2e.test.ts Add offline AMPS lifecycle demo tests.
convex/crm/recordQueries.ts Replace inline link loading with shared helper.
convex/crm/tests/records.test.ts Seed native borrower record for reference test.
convex/crm/tests/helpers.ts Minor modules constant refactor.
convex/admin/queries.ts Switch admin shell query chain to adminQuery.
convex/_generated/api.d.ts Regenerate API typings for new modules.
.gitignore Stop ignoring reviews/ directory.
Comments suppressed due to low confidence (1)

convex/payments/cashLedger/transferReconciliationCron.ts:388

  • retriggerTransferConfirmation now returns action: "retriggered", but the cron still branches on "pending_no_effect" and reports pendingNoEffect in logs/results. This makes the healing metrics/logs misleading and leaves dead code. Suggest removing the pending_no_effect branch/counter (and updating the shared TransferHealingResult type if it no longer applies).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +185 to +193
function useDialogSubmitAction(options?: { onClosed?: () => void }) {
const [open, setOpen] = useState(false);
const [busy, setBusy] = useState(false);

useEffect(() => {
if (!open) {
options?.onClosed?.();
}
}, [open, options]);
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useDialogSubmitAction calls options.onClosed in an effect that depends on the entire options object. Because callers pass an object literal, options changes every render, so onClosed will run repeatedly whenever open is false (including on initial mount), causing unnecessary state resets and potentially render churn. Prefer depending on open + options?.onClosed (or memoizing options / storing the callback in a ref) so the callback only fires on the open→closed transition.

Copilot uses AI. Check for mistakes.
Comment on lines +25 to +28
if (args.orgId) {
await args.page.goto(`/e2e/switch-org?orgId=${args.orgId}`);
await args.page.waitForURL("**/", { timeout: 15_000 });
}
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

orgId is interpolated directly into the /e2e/switch-org?orgId=... URL. If the org id ever contains characters that need escaping (e.g. /, +, =), the navigation can break or produce the wrong query string. Use encodeURIComponent(args.orgId) when building the URL.

Copilot uses AI. Check for mistakes.
@Connorbelez Connorbelez force-pushed the 04-04-active_mortgage_payment_system_08-15 branch from a44e778 to 981238b Compare April 9, 2026 19:07
@Connorbelez Connorbelez force-pushed the 04-04-active_mortgage_payment_system_08-15 branch from 981238b to c23c793 Compare April 9, 2026 22:37
Copy link
Copy Markdown
Owner Author

@coderabbitai please review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 9, 2026

@Connorbelez Sure, I'll kick off a full review of PR #390 right away!


🧠 Learnings used
Learnt from: Connorbelez
Repo: Connorbelez/tanstackTemplate PR: 5
File: specs/governed-transitions/chunks/chunk-01-schema-machine/context.md:209-213
Timestamp: 2026-03-13T03:17:28.559Z
Learning: In the Connorbelez/tanstackTemplate repository, do not flag .md files for markdown formatting/linting issues (e.g., MD040 fenced code block language). Only reference .md files (specs, PRDs, design docs) when they reveal architectural drift or implementation inconsistencies against actual code.

Learnt from: Connorbelez
Repo: Connorbelez/tanstackTemplate PR: 241
File: convex/crons.ts:30-34
Timestamp: 2026-03-21T20:15:34.305Z
Learning: In Connorbelez/tanstackTemplate, the `convex-dev-crons` component (referenced in CLAUDE.md) is reserved exclusively for *dynamic*, runtime-registered cron jobs — e.g., per-tenant or per-entity schedules that are created/destroyed at runtime. Fixed-interval infrastructure crons (e.g., daily reconciliation, daily obligation transitions, dispersal self-healing) all use static `cronJobs()` registration in `convex/crons.ts` and are deployed with the code. Do NOT flag static `crons.interval(...)` or `crons.daily(...)` registrations for fixed system-level jobs as needing `convex-dev-crons`.

Learnt from: Connorbelez
Repo: Connorbelez/tanstackTemplate PR: 115
File: convex/engine/effects/dealClosingPayments.ts:37-47
Timestamp: 2026-03-18T03:33:54.456Z
Learning: In Connorbelez/tanstackTemplate, `internalAction` handlers in Convex cannot atomically combine `ctx.runQuery` + `ctx.runMutation` — they are always separate transactions. The read-then-write idempotency pattern in effect handlers (e.g., `updatePaymentSchedule` in `convex/engine/effects/dealClosingPayments.ts`, `prorateAccrualBetweenOwners` in `convex/engine/effects/dealClosingProrate.ts`) is intentionally acceptable because the Transition Engine's OCC serializes concurrent transitions for the same entity upstream, preventing duplicate effect scheduling. Do NOT flag the split read-then-write pattern in `internalAction` effect handlers as a race condition requiring atomic fix — the upstream OCC is the primary guard. A defense-in-depth improvement (atomic `createIfNotExists` mutation) is tracked as a follow-up but is not a blocking issue.

Learnt from: CR
Repo: Connorbelez/tanstackTemplate PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-16T06:17:10.192Z
Learning: After completing a major unit of work, run `coderabbit review --plain` to get a code review summary and check for potential issues or improvements

Learnt from: CR
Repo: Connorbelez/tanstackTemplate PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-04-09T18:13:25.131Z
Learning: Run `coderabbit review --plain` after completing major units of work to get code review summary

Learnt from: CR
Repo: Connorbelez/tanstackTemplate PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-09T18:13:04.013Z
Learning: After completing a major unit of work like a full SPEC, run `coderabbit review --plain` to get a code review summary and check for potential issues or improvements

Learnt from: Connorbelez
Repo: Connorbelez/tanstackTemplate PR: 297
File: convex/payments/transfers/__tests__/outboundFlow.integration.test.ts:0-0
Timestamp: 2026-03-28T02:22:53.467Z
Learning: In Connorbelez/tanstackTemplate, T-018 in `convex/payments/transfers/__tests__/outboundFlow.integration.test.ts` intentionally calls `publishTransferConfirmed._handler` directly (bypassing `confirmManualTransfer`). This is a deliberate effect-level test targeting the `postCashEntryInternal` idempotency guard. The public `confirmManualTransfer` path (provider/status guards, `providerRef` updates, and public-API rejection-when-already-confirmed behavior) is covered separately in `handlers.integration.test.ts`. Do NOT flag the direct `_handler` invocation in this test as bypassing guards — the test is explicitly scoped to the effect layer and its describe/it label says so.
✅ Actions performed

Full review triggered.

@Connorbelez Connorbelez force-pushed the 04-04-active_mortgage_payment_system_08-15 branch from 8b9899a to 09d58f1 Compare April 10, 2026 00:54
Copy link
Copy Markdown
Owner Author

Connorbelez commented Apr 10, 2026

Merge activity

  • Apr 10, 2:31 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Apr 10, 2:37 AM UTC: Graphite rebased this pull request as part of a merge.
  • Apr 10, 2:37 AM UTC: @Connorbelez merged this pull request with Graphite.

@Connorbelez Connorbelez changed the base branch from 04-04-active_mortgage_payment_system_08-15 to graphite-base/390 April 10, 2026 02:34
@Connorbelez Connorbelez changed the base branch from graphite-base/390 to main April 10, 2026 02:35
- Add seeded offline lifecycle harness and Playwright coverage
- Support `manual_review` in dispersal and transfer flows
- Update tests and generated API types
- Route attempt-linked reversals through transfer-owned cascades
- Replace confirmation retry placeholder with real retriggering
- Update balance, reconciliation, and integration tests for new flow
- Consolidate document/admin query and mutation gates
- Extract shared collection-plan read models and rule helpers
- Rework AMPS demo workspace seeding and webhook handling
- Normalize money and idempotency-key test fixtures
- Remove workflow harness dependencies from integration tests
- Update offline deal closing to use transition events
@Connorbelez Connorbelez merged commit 8c97566 into main Apr 10, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants