Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
7658930
feat: migrate storage from SQLite to PostgreSQL
gsxdsm Jun 26, 2026
a2ec618
fix(postgres-cutover): unawaited marker reads, unguarded backend path…
gsxdsm Jun 27, 2026
67adca3
fix(postgres-cutover): handoff atomicity, multi-project isolation, PG…
gsxdsm Jun 27, 2026
c304e39
fix(postgres-cutover): prevent embedded PG double-boot P0
gsxdsm Jun 27, 2026
0f5d24b
fix(postgres-cutover): stop agent-log flush crash + qualify project-s…
gsxdsm Jun 27, 2026
8aef180
test(postgres-cutover): gate-block the agent-log + monitor-metrics PG…
gsxdsm Jun 27, 2026
1a78070
feat(postgres-cutover): port TodoStore to PostgreSQL (todo lists work…
gsxdsm Jun 27, 2026
a0e991a
fix(postgres-cutover): degrade not-yet-ported PG features to 503 inst…
gsxdsm Jun 27, 2026
5dd701f
feat(postgres-cutover): port workflow-definitions read to PG (U1)
gsxdsm Jun 27, 2026
28e6bd3
fix(postgres-cutover): mailbox send to agents no longer 500s in PG (U2)
gsxdsm Jun 27, 2026
d4436ab
feat(postgres-cutover): port InsightStore to PostgreSQL (U3)
gsxdsm Jun 27, 2026
477d78e
feat(postgres-cutover): port ResearchStore to PostgreSQL (U4)
gsxdsm Jun 27, 2026
aea6ce3
feat(postgres-cutover): port MissionStore dashboard surface to Postgr…
gsxdsm Jun 27, 2026
4dea713
fix(review): apply autofix feedback
gsxdsm Jun 27, 2026
8a137f7
fix(postgres-cutover): read correct line from postmaster.pid for port…
gsxdsm Jun 27, 2026
592e7c6
fix(rebase): adapt to upstream FN-7069/FN-7082/FN-7113
gsxdsm Jun 27, 2026
0f26b6d
feat(postgres-cutover): port GoalStore to PostgreSQL (U6)
gsxdsm Jun 28, 2026
95ae5f4
feat(postgres-cutover): port artifacts/documents/evals views + Comman…
gsxdsm Jun 28, 2026
d115775
feat(postgres-cutover): port insight run execution to PG (generate in…
gsxdsm Jun 28, 2026
9587425
feat(postgres-cutover): finish Command Center analytics + research ex…
gsxdsm Jun 28, 2026
30320d6
feat(postgres-cutover): live SSE push + incident-signal ingestion in PG
gsxdsm Jun 28, 2026
25b048e
feat(postgres-cutover): run mission autopilot in PG backend mode
gsxdsm Jun 28, 2026
bcf9ca9
feat(postgres-cutover): port workflow-definition create + counter to PG
gsxdsm Jun 28, 2026
b1ef3dc
fix(postgres-cutover): storm-guard + agent wake-on-message in PG
gsxdsm Jun 28, 2026
491fe7a
fix(rebase): adapt to 37 upstream commits + fix async test timing
gsxdsm Jun 28, 2026
55e89e2
test: quarantine 5 dashboard API tests hitting removed SQLite runtime
gsxdsm Jun 28, 2026
510e956
fix(rebase): adapt to 84 upstream commits
gsxdsm Jun 30, 2026
a1ba853
Merge origin/main into feature/postgres
gsxdsm Jul 1, 2026
33b88ea
Merge origin/main into feature/postgres (58 upstream commits)
gsxdsm Jul 1, 2026
2ea75c3
Merge origin/main into feature/postgres (5 upstream commits)
gsxdsm Jul 1, 2026
3fc44b5
Merge origin/main into feature/postgres (124 upstream commits)
gsxdsm Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .changeset/embedded-postgres-lifecycle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@runfusion/fusion": minor
---

summary: Bundle embedded PostgreSQL for zero-system-install local storage when DATABASE_URL is unset.
category: feature
dev: Adds `embedded-postgres` lifecycle manager (initdb/pg_ctl start/stop, graceful SIGTERM/SIGINT shutdown, data persistence across restarts). Platform binaries bundled for macOS/Linux/Windows arm64/x64. Used by `createTaskStoreForBackend` when DATABASE_URL is unset.

7 changes: 7 additions & 0 deletions .changeset/flip-embedded-pg-default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Default local backend is now embedded PostgreSQL; set FUSION_NO_EMBEDDED_PG=1 for legacy SQLite.
category: feature
dev: `createTaskStoreForBackend` now boots embedded PostgreSQL by default when DATABASE_URL is unset (previously required FUSION_EMBEDDED_PG=1). FUSION_EMBEDDED_PG=1 is now a no-op alias; FUSION_NO_EMBEDDED_PG=1 is the opt-out back to legacy SQLite. `embedded-postgres` is now a direct dependency of @runfusion/fusion so the bundled CLI can resolve the platform binary at runtime. Boot smoke exercises the embedded path by default (initdb-aware 180s health timeout). Also hardens three backend-mode gaps the flip exposed: ResearchStore/insights router/watch() now degrade gracefully instead of crashing `fn serve` when the sync SQLite satellite stores are unavailable in PG backend mode.
7 changes: 7 additions & 0 deletions .changeset/pg-artifacts-documents-evals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---

summary: Fix Artifacts, Documents, and Evals dashboard views returning 500 in PostgreSQL mode.
category: fix
dev: listArtifactsImpl/getAllDocumentsImpl now branch on store.backendMode and delegate to AsyncDataLayer helpers (listArtifacts/getAllDocuments in async-comments-attachments.ts); getEvalStore() returns a new AsyncEvalStore (async-eval-store.ts) in backend mode. evals-routes await the store calls; eval-automation/eval-followups handle the EvalStore | AsyncEvalStore union (instanceof guard / await).
7 changes: 7 additions & 0 deletions .changeset/pg-command-center-analytics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Command Center productivity, team, token, and tool analytics work on the PostgreSQL backend.
category: feature
dev: Ports aggregateProductivityAnalytics/aggregateTeamAnalytics/aggregateTokenAnalytics/aggregateToolAnalytics to accept Database | AsyncDataLayer, adding a PG branch ("ping" in dbOrLayer) that runs schema-qualified raw SQL over project.tasks/task_commit_associations/pull_requests/agents/usage_events/approval_request_audit_events with snake_case columns and the same aggregation semantics as the SQLite path. The command-center tokens/tools/productivity/team routes pass getAsyncLayer() ?? getDatabase() and await; the interim 503 guards are removed. GitHub-issue, signal, and live-snapshot analytics remain 503 in PG mode (follow-up). Adds command-center-analytics.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-command-center-remaining-analytics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Command Center workflow, GitHub-issue, signal, and live-snapshot analytics now work on the PostgreSQL backend.
category: feature
dev: Ports aggregateWorkflowAnalytics/aggregateGithubIssueAnalytics/aggregateSignalsAnalytics/composeLiveSnapshot to accept Database | AsyncDataLayer, adding a PG branch ("ping" in dbOrLayer) that runs schema-qualified raw SQL over project.tasks/task_workflow_selection/workflows/incidents/cli_sessions/agent_runs with snake_case columns and the same aggregation semantics as the SQLite path. The command-center workflows/github/signals/live routes pass getAsyncLayer() ?? getDatabase() and await; the interim 503 guards are removed. Every /api/command-center/* route now functions in backend mode. Adds command-center-remaining-analytics.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-goal-store-port.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Goals work on the PostgreSQL backend — the Goals view and mission goal-links load instead of erroring.
category: feature
dev: Ports GoalStore to the AsyncDataLayer. Adds AsyncGoalStore (over the existing async-goal-store.ts helpers; ACTIVE_GOAL_LIMIT enforced atomically in the helpers' transactionImmediate, same as sync). getGoalStoreImpl returns it in backend mode; the dashboard /api/goals routes await it and the interim 503 is removed. Reverts the PG-mode goal-resolution degradations added earlier — mission routes and `fn mission` now resolve/validate real linked goals on both backends. CLI goals/mission/extension and engine agent-tools converted to await; goal-injection-diagnostics stays on its instanceof-guarded sync fallback. Adds goal-store.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-insight-run-execution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Generating insights works on the PostgreSQL backend — the insight run executor and stale-run sweeper run in PG mode.
category: feature
dev: Await-converts the insight run executor (insight-run-executor.ts) and the stale-run sweeper (insight-run-sweeper.ts) and widens their store type to InsightStore | AsyncInsightStore, so POST /api/insights/run and /runs/:id/retry drive the async store instead of throwing 503 (getSyncInsightStore removed). The startup/background/drive-by sweeper is now enabled for both backends. The AI extraction step still needs a configured provider at runtime; a run without one records a clean failed run rather than 503. Adds insight-run-execution.pg.test.ts (create→complete, create→fail, retry-with-lineage against embedded PG) to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-insight-store-port.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Insights work on the PostgreSQL backend — the Insights dashboard loads instead of erroring.
category: feature
dev: Ports InsightStore to the AsyncDataLayer. Adds AsyncInsightStore (wrapping async-insight-store.ts helpers, incl. 6 new helpers — updateInsight, updateInsightRun [faithful run-lifecycle state machine: terminal-immutable, transition validation, auto completed/cancelled timestamps], listInsightRunEvents, countInsights, countInsightRuns, listStalePendingRuns); getInsightStoreImpl returns it in backend mode; dashboard insights routes await it and the interim 503 is removed for the read/write/cancel surface. The 3 engine reporters stay on graceful fallback (instanceof-gated). Known partial: AI insight-run generation/retry (POST /run, /runs/:id/retry) and the stale-run sweeper remain sync-only and still 503 in PG mode until the run executor is ported. Adds insight-store.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-mailbox-send-fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---

summary: Mailbox — sending a message to an agent works in PG mode instead of erroring.
category: fix
dev: POST /api/messages to an agent 500'd in embedded-PG mode: MessageStore.sendMessage persisted the message via the async layer, then synchronously invoked the agent-delivery hook (agent-heartbeat.handleMessageToAgent), which reads the not-yet-ported sync AgentStore and throws. The persisted send must not fail on a notification side-effect, so the onMessageToAgent hook call is now wrapped — a hook failure logs and degrades (agent wake-on-message stays disabled in PG mode until AgentStore is ported) instead of failing the send. Adds message-store.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-mission-autopilot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Mission autopilot runs on the PostgreSQL backend — missions advance automatically instead of autopilot being disabled.
category: feature
dev: Await-converts MissionAutopilot to drive MissionStore | AsyncMissionStore (every this.missionStore.* call awaited; watchMission/unwatchMission/getAutopilotStatus and helpers async) and removes the instanceof MissionStore gates in InProcessRuntime (construction + recover paths) so the autopilot loop watches/recomputes/recovers in both backends. Slice execution + validator-loop methods stay scheduler-gated (degrade gracefully in PG). getAutopilotStatus async ripples through mission-routes/server. Adds mission-autopilot.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-mission-store-port.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Missions work on the PostgreSQL backend — the Missions dashboard and goal→mission links load instead of erroring.
category: feature
dev: Ports MissionStore (dashboard surface) to the AsyncDataLayer. Adds AsyncMissionStore (63 methods over the 71 existing async helpers + 8 new primitives), assembling the composites (getMissionWithHierarchy, listMissionsWithSummaries, mission/milestone health rollups, computeMissionStatus + the feature→slice→milestone→mission recompute cascade, triageFeature, getFeatureLoopSnapshot) by mirroring the sync store. getMissionStoreImpl returns it in backend mode; mission-routes + goal→mission routes await it and the interim 503 is removed (the GoalStore 503 stays — GoalStore is still deferred). Mission AUTOPILOT, live SSE mission events, mesh hierarchy snapshot apply/collect, and engine validator-loop methods stay degraded in PG mode behind instanceof guards. Also fixes the mission-create path which resolved linked goals via the unported sync GoalStore: goal resolution now degrades to empty in backend mode (links live in MissionStore; full Goal objects return once GoalStore is ported). Adds mission-store.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-mode-route-degradation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---

summary: Not-yet-ported features (missions, insights, research, goals) degrade cleanly in PG mode instead of erroring.
category: fix
dev: Adds backendMode guards to the dashboard route choke-points that call satellite stores not yet on the AsyncDataLayer (getResearchStore/getInsightStore/getMissionStore/getGoalStore). They now return HTTP 503 "not yet available in PG backend mode" (matching the existing command-center team/productivity/token guards) instead of letting the store getter throw an unhandled 500. The SSE handler also degrades: ResearchStore access is wrapped so the event stream still serves every other event type instead of failing the whole connection when research run-events cannot be subscribed in PG mode. Full PG ports of these stores remain (TodoStore is done); these guards are the correct interim state until each lands.
7 changes: 7 additions & 0 deletions .changeset/pg-monitor-trait-agent-wake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": fix
---

summary: Regression storm-guard and agent wake-on-message work on the PostgreSQL backend.
category: fix
dev: monitor-trait runMonitorOnRegression drops its backend-mode early return and routes the storm guard (countRecentAutoFixTasksAsync/claimIncidentForFixTaskAsync/attachFixTaskAsync/releaseIncidentFixTaskClaimAsync) through the AsyncDataLayer in PG, preserving the claim→createTask→attach→release semantics. The agent wake hook handleMessageToAgent becomes async and reads via AgentStore.getAgent (async) instead of the sync getCachedAgent that threw in PG; the onMessageToAgent hook type widens to allow a Promise and message-store awaits it inside its existing send-never-fails try/catch.
7 changes: 7 additions & 0 deletions .changeset/pg-research-execution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Research runs actually execute on the PostgreSQL backend instead of staying queued forever.
category: feature
dev: Await-converts the engine ResearchOrchestrator + ResearchRunDispatcher to drive InsightStore | AsyncResearchStore (every this.store.* call awaited; addEvent→appendEvent for union compatibility) and removes the instanceof ResearchStore gate in ProjectEngine.start that disabled the orchestrator/dispatcher in PG mode. Exports AsyncResearchStore from @fusion/core. A queued run now advances queued→running→completed/failed in PG; the AI/web step still needs runtime providers (a run with none fails cleanly). Adds research-execution.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-research-store-port.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Research works on the PostgreSQL backend — the Research dashboard loads and runs CRUD instead of erroring.
category: feature
dev: Ports ResearchStore to the AsyncDataLayer. Adds AsyncResearchStore (12 new helpers incl. faithful replicas of the run-lifecycle state machine — updateResearchStatus per-status auto-lifecycle fields, terminal-immutability, transition validation — and the retry gate/lineage in createResearchRetryRun); getResearchStoreImpl returns it in backend mode; dashboard research routes await it and the interim 503 is removed. AI research EXECUTION (engine ResearchOrchestrator/dispatcher, agent-tools research tools, CLI research run) stays degraded in PG mode behind instanceof guards — same boundary as the insight run executor. Adds research-store.pg.test.ts (13 tests incl. lifecycle machine + retry gate) to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-signal-ingestion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": fix
---

summary: Incident-signal ingestion records incidents on the PostgreSQL backend instead of being skipped.
category: fix
dev: ingestIncidentSignal now accepts Database | AsyncDataLayer and branches to ingestIncidentSignalAsync (project.incidents upsert by grouping key — absorb-or-create, occurrences/firstFiredAt preserved) in PG mode; the signal route awaits it instead of warn-skipping. monitor-trait's storm-guard helpers remain sync-only (async equivalents exist; follow-up).
7 changes: 7 additions & 0 deletions .changeset/pg-sse-live-push.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Live dashboard updates (SSE) work on the PostgreSQL backend for missions, research, and insights.
category: feature
dev: The async store wrappers (AsyncMissionStore/AsyncResearchStore/AsyncInsightStore) now extend EventEmitter and emit the same events as their sync counterparts at the same mutation points (after the persistence await), so the SSE handler's subscriptions fire in PG mode instead of no-op'ing. sse.ts/server.ts drop the instanceof-sync narrowing and subscribe to the union store in both backends. Live push for mission/milestone/slice/feature/assertion/validator-start, research run lifecycle, and insight create/update events. Validator-loop-completed and fix-feature emits remain sync-only (those methods aren't in AsyncMissionStore yet).
7 changes: 7 additions & 0 deletions .changeset/pg-workflow-definitions-read.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---

summary: Workflow definitions load in PG mode — /api/workflows no longer errors.
category: fix
dev: readAllWorkflowDefinitions/getWorkflowDefinition read custom rows from project.workflows via the AsyncDataLayer in backend mode (the sync store.db SELECT threw, 500'ing /api/workflows). New async-workflow-store.ts helpers re-stringify jsonb ir/layout for the shared toWorkflowDefinition mapper; builtins still come from code constants. Every caller already awaited these reads, so no consumer changes. Adds workflow-definitions.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/pg-workflow-editing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Creating, editing, and deleting custom workflows works on the PostgreSQL backend.
category: feature
dev: Completes the workflow-definition write path in PG. Adds a next_workflow_definition_id counter to project.config (schema + 0000_initial.sql baseline) with an async counter (nextWorkflowDefinitionIdAsyncImpl) that preserves project settings on bump; createWorkflowDefinitionImpl gains a backend branch that INSERTs into project.workflows via Drizzle (ir/layout as jsonb objects). Complements the update/delete/select backend branches in workflow-ops.ts. Adds workflow-create.pg.test.ts to test:pg-gate.
7 changes: 7 additions & 0 deletions .changeset/postgres-backend-runtime-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---

summary: Fix PostgreSQL-mode crashes — agent-log flush no longer kills the server, and Command Center activity loads.
category: fix
dev: The agent-log buffer flush/append path (flushAgentLogBufferImpl, appendAgentLogBatchImpl, appendAgentLogImpl) dereferenced the SQLite-only `store.db` getter — which throws in PG backend mode — on an unref'd retry-timer and inside catch handlers, so a handled flush error became an uncaught exception that exited `fn serve` (~35s uptime). Guarded the deleted-task pre-filter and `bumpLastModified` with `!store.backendMode` and replaced every `store.db.path` log interpolation with the mode-safe `store.fusionDir`. Also schema-qualified raw async SQL that referenced project-schema tables unqualified / with camelCase columns: `project.deployments` + `project.incidents` with snake_case `deployed_at`/`opened_at`/`resolved_at` (the deployments read sat outside the try/catch and 500'd `/api/command-center/activity`), `project.experiment_session_records` (+ `::jsonb` cast on the payload update), and `project.agent_runs`. Adds a backend-mode regression test pinning the no-`store.db`-deref invariant across all three agent-log entry points.
7 changes: 7 additions & 0 deletions .changeset/postgres-perf-and-standards.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---

summary: Fix PostgreSQL performance and credential-redaction gaps surfaced by the migration review.
category: performance
dev: Adds missing index on tasks.source_parent_task_id (lineage gate was a full scan) and a partial index for the live kanban `WHERE deleted_at IS NULL AND column = ?` read. Batches merge-queue stale-row cleanup to remove an N+1 on lease acquire. Pushes LIMIT into SQL for audit/activity-log queries. Drops the heavy `log` jsonb column from slim board hydration. Fixes the monitor-store backend discriminator (`"ping" in db`, not the ambiguous `"transactionImmediate" in db`), awaits the now-async resolveIncident in signal routes, and redacts `?password=` query-param URLs.
7 changes: 7 additions & 0 deletions .changeset/todo-store-postgres-port.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---

summary: Todo lists now work on the embedded-PostgreSQL backend instead of erroring.
category: feature
dev: Ports TodoStore to the AsyncDataLayer. Adds an `AsyncTodoStore` class (in async-todo-store.ts) wrapping the already-tested async CRUD helpers over project.todo_lists/project.todo_items; `getTodoStoreImpl` returns it in backend mode instead of throwing "TodoStore is not available in PG backend mode" (which 500'd every /api/todos route). The dashboard todo routes now await the store methods so the same code path serves both the sync SQLite store and the async PG store. Adds todo-store.pg.test.ts to the blocking test:pg-gate lane. Known gap: the async store does not yet emit list/item events for SSE live-refresh (updates land on next read).
21 changes: 21 additions & 0 deletions .github/workflows/full-suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,27 @@ jobs:
test-shards:
name: Test shard ${{ matrix.shard }}/4
runs-on: ubuntu-latest
# FNXC:FixPgTestsAndCi 2026-06-26-09:10:
# Provision a PostgreSQL service container so the postgres/*.pg.test.ts
# suites run in the non-blocking full suite too (parity with the gate).
# The pg-test-harness probe skips gracefully if unreachable.
services:
postgres:
image: postgres:15
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -h localhost -p 5432 -U postgres"
--health-interval 5s
--health-timeout 5s
--health-retries 10
env:
FUSION_PG_TEST_URL_BASE: "postgresql://postgres:postgres@localhost:5432"
PGPASSWORD: "postgres"
# Backstop for a wedged shard. The per-invocation watchdog (L2,
# scripts/lib/run-vitest-watchdog.mjs) kills any single hung invocation at
# its budget ceiling (<=30min), so this job budget only fires if L2 itself
Expand Down
Loading
Loading