gsxdsm
06d03d4e1f
FN-8103: enforce PostgreSQL-only production data access
Require production paths to use PostgreSQL-aware stores and prevent new unrestricted database access.
- Add a checked allowlist that bans production getDatabase() calls by default.
- Route Quality plugin persistence through an async PostgreSQL-aware store and add Drizzle ORM.
- Document backend-safe plugin storage patterns and cover guarded access behavior.
Files changed:
docs/PLUGIN_AUTHORING.md | 20 +++
package.json | 6 +-
.../src/__tests__/agent-logs-backend-mode.test.ts | 7 +
packages/core/src/store.ts | 7 +-
packages/core/src/task-store/remaining-ops-5.ts | 8 +-
plugins/fusion-plugin-quality/package.json | 1 +
.../src/__tests__/async-quality-store.pg.test.ts | 36 +++++
.../src/__tests__/cancel-and-plans.test.ts | 8 +-
.../src/__tests__/experimental-gate.test.ts | 1 +
.../src/routes/create-routes.ts | 50 +++----
.../src/runner/command-runner.ts | 17 ++-
.../src/store/async-quality-store.ts | 34 +++++
pnpm-lock.yaml | 3 +
scripts/__tests__/check-no-getdatabase.test.mjs | 90 ++++++++++++
scripts/check-no-getdatabase.mjs | 159 +++++++++++++++++++++
scripts/lib/getdatabase-allowlist.json | 18 +++
16 files changed, 422 insertions(+), 43 deletions(-)
Fusion-Task-Id: FN-8103
Fusion-Task-Lineage: ff17bcb2-5341-4c6c-a5c4-993580539676
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-16 10:13:49 -07:00
..
2026-07-16 10:13:49 -07:00
2026-07-16 10:13:49 -07:00
2026-06-03 17:36:35 -07:00
2026-07-13 19:07:58 -07:00
2026-04-27 08:21:48 -07:00
2026-05-12 07:47:11 -07:00
2026-07-13 19:07:58 -07:00
2026-07-14 23:18:55 -07:00
2026-07-13 19:07:58 -07:00
2026-07-08 04:24:30 -07:00
2026-07-15 08:44:11 -07:00
2026-07-14 23:18:55 -07:00
2026-06-23 23:30:32 -07:00
2026-06-25 23:34:08 -07:00
2026-07-13 07:10:14 -07:00
2026-07-16 10:13:49 -07:00
2026-05-23 19:51:36 -07:00
2026-07-14 08:16:42 -07:00
2026-06-14 15:29:35 -07:00
2026-07-12 21:21:10 -07:00
2026-06-14 15:29:35 -07:00
2026-04-27 08:21:48 -07:00
2026-06-13 19:22:00 -07:00
2026-07-13 01:21:33 -07:00
2026-06-13 15:44:28 -07:00
2026-04-27 08:21:48 -07:00
2026-05-11 09:52:23 +02:00
2026-07-10 13:26:23 -07:00
2026-07-12 14:42:09 -07:00
2026-04-27 08:21:48 -07:00
2026-07-12 14:42:09 -07:00
2026-06-19 20:47:32 -07:00
2026-06-18 16:47:09 -07:00
2026-07-16 00:01:17 -07:00
2026-06-16 18:03:41 -07:00
2026-07-14 23:18:55 -07:00
2026-07-13 19:07:58 -07:00
2026-07-14 23:18:55 -07:00
2026-07-13 19:07:58 -07:00
2026-07-13 19:07:58 -07:00
2026-04-27 08:21:48 -07:00
2026-07-13 23:00:25 -07:00
2026-07-14 23:18:55 -07:00
2026-06-24 19:25:44 -07:00
2026-06-21 10:53:08 -07:00
2026-05-27 21:31:12 -07:00
2026-03-30 23:56:01 -07:00
2026-03-26 01:03:16 -04:00
2026-07-15 08:44:11 -07:00
2026-07-14 23:18:55 -07:00
2026-04-27 08:21:48 -07:00
2026-06-30 08:04:12 -07:00
2026-04-29 08:15:38 -07:00
2026-06-25 22:56:10 -07:00
2026-07-03 07:47:03 -07:00
2026-07-02 11:38:31 -07:00
2026-06-25 17:04:30 -07:00
2026-06-24 23:32:52 -07:00
2026-07-08 11:19:47 -07:00
2026-05-03 05:47:11 -07:00
2026-07-15 14:41:05 -07:00
2026-07-03 22:04:45 -07:00
2026-06-19 05:13:39 -07:00