Skip to content

feat(billing): safely disable unavailable Dodo Payments - #1489

Merged
Sheshiyer merged 15 commits into
mainfrom
codex/dodo-free-mode-20260908
Sep 8, 2026
Merged

Sheshiyer merged 15 commits into
mainfrom
codex/dodo-free-mode-20260908

Conversation

@Sheshiyer

@Sheshiyer Sheshiyer commented Sep 8, 2026 •

Copy link
Copy Markdown
Owner

Final outcome

PR #1489 merged into main as 561c3e476e134eeac424c77b092b95b9749e0215; the final documentation reconciliation merged afterward as ebd97fe940a3454b0425ff60d56003b07337564.

Shipped

  • Dodo Payments is disabled as a paid entitlement provider because access is unavailable.
  • Billing API routes and SDK shapes remain present for compatibility.
  • Production BILLING_MODE=free is explicit; free allowance is deterministic.
  • Checkout, portal, and webhook routes remain registered and return stable 503 BILLING_DISABLED.
  • Admin control can choose free or disabled, but cannot enable Dodo.
  • Historical Dodo subscription/promotion rows remain audit-only.
  • Deterministic Tarot fixture is shipped; generated, fallback, and unavailable Tarot states remain unimplemented and unclaimed.

Production evidence

  • Green connected workflow: https://github.com/Sheshiyer/Selemene-engine/actions/runs/34258440332
  • Railway deployment succeeded: ee9cb602-d3d3-4db3-a8d6-d06fc75090a8
  • Live health/readiness, API smoke 7/7, and admin-web smoke passed.
  • Final documentation commit ebd97fe9 passed the connected workflow; Railway correctly skipped the docs-only runtime redeploy because watch patterns exclude docs.

Explicit holds

Rust SDK/TUI registry receipts, Cloudflare scoped-account verification, Vercel production protection, exact Railway schema/image equivalence, and exercised rollback remain open. No Dodo payment promotion is enabled.

Sheshiyer and others added 3 commits August 31, 2026 03:58
…dpoint

Exposes registered TypeScript engines as live contracts/v1 capability
records derived from the sidecar registry and existing per-engine
self-checks, so registered metadata is no longer the only runtime
discovery surface.

- Each capability: contract version v1, runtime kind typescript,
  display name, required phase, implementation version, dependencies.
- availability="available" when the engine's self-check passes,
  "unavailable" when it fails.
- No provider/generation/database/remote/deployment calls made.

TDD receipts (docs/plans/selemene-engine/RUNTIME-CAPABILITY-EVIDENCE.md):
RED: bun test tests/baseline_registry.test.ts tests/health.test.ts -> 404
GREEN: same command -> 9 pass, 0 fail; full suite -> typecheck clean,
92 tests passed, 0 failed.

Also lands on top of the just-synced origin/main security-audit fix
(PR #1485, ae3e2ce) with zero file overlap, and updates the next-wave
plan + drafts GitHub issue-update packets (not posted) reflecting that
sync.

Co-Authored-By: Claude Code <noreply@anthropic.com>
…provenance slice

Task 3 (Finish Runtime Capability Coverage):
- crates/noesis-api: new GET /api/v1/admin/engines/capabilities, reusing
  the pre-existing EngineCapability/CapabilityAvailability/RuntimeKind
  contract-v1 types. Same auth gate (admin:system:read) and same bridge
  readiness self-check data source as the existing /admin/bridge/health
  route. No new provider/database/remote calls.
- python-services: HealthResponse.capability_status (available/degraded/
  unavailable) on both sidecars' /health, derived only from each
  service's existing local self-check booleans.

Task 4 (Build the First Engine Truth Batch) -- partial slice against
GitHub issue #1461 ([W3E:tarot:07] Expose provenance, confidence, and
degradation), scoped per the plan's own Step 1-4 (one missing-state
test + minimal truth surface, not the full six-axis acceptance
criteria):
- ts-engines: ContractProvenance gains optional confidence?: number;
  TarotEngine.calculate() now populates EngineOutput.provenance
  (runtime_kind, implementation_version, cached=false, fallback_used=
  false, confidence=1) reflecting that tarot's interpretations are
  fully deterministic local data today, with no fallback path.

TDD receipts (RED before, GREEN after, all independently re-run this
session, not just accepted from the implementing pass):
- cargo test -p noesis-api --test capability_route_tests --locked: 3/3
- pnpm run gate:contracts: pass
- cargo build --workspace --locked: no regressions
- python3 -m pytest python-services/tests -q (via project .venv): 61/61
- bun run typecheck && bun test: 93/93 (was 92/92 pre-slice)

Full evidence: docs/plans/selemene-engine/RUNTIME-CAPABILITY-EVIDENCE.md
(Slices 2-3). Plan checkboxes updated in GH-ISSUE-NEXT-WAVE-PLAN.md.

Stacked on #1486 (codex/selemene-runtime-capability-endpoint) -- no
file overlap with it.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
enantiodromia-engine-dashboard Ready Ready Preview Sep 8, 2026 5:17pm UTC

@Sheshiyer
Sheshiyer merged commit 561c3e4 into main Sep 8, 2026
14 checks passed
@Sheshiyer
Sheshiyer deleted the codex/dodo-free-mode-20260908 branch September 8, 2026 17:39

This branch was successfully deployed

1 active deployment
Preview — 364c475d Deployed Sep 8, 2026 by vercel[bot]
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.

1 participant