gsxdsm
b61311baa8
FN-8305: add durable PostgreSQL symbol locks
Introduce durable project-scoped symbol locks backed by PostgreSQL.
- Add normalized lease-based lock acquisition, renewal, release, and reconciliation APIs with audit events.
- Add PostgreSQL schema migrations and self-healing reconciliation coverage.
- Document the lock model and test migration and lock behavior.
Files changed:
AGENTS.md | 1 +
docs/architecture.md | 1 +
docs/storage.md | 7 +
.../src/__tests__/postgres/schema-applier.test.ts | 115 +++++++++-
packages/core/src/__tests__/symbol-locks.test.ts | 91 ++++++++
packages/core/src/index.ts | 17 ++
.../core/src/postgres/migrations/0000_initial.sql | 25 +++
.../src/postgres/migrations/0025_symbol_locks.sql | 63 ++++++
packages/core/src/postgres/schema-applier.ts | 18 +-
packages/core/src/postgres/schema/project.ts | 29 +++
packages/core/src/store.ts | 23 ++
packages/core/src/symbol-lock-types.ts | 60 +++++
packages/core/src/task-store/symbol-locks.ts | 244 +++++++++++++++++++++
.../__tests__/symbol-lock-reconciliation.test.ts | 19 ++
packages/engine/src/self-healing.ts | 35 +++
15 files changed, 745 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8305
Fusion-Task-Lineage: efd95c73-23e3-4359-8204-dfad374a39bc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-18 19:31:30 -07:00
..
2026-07-18 19:31:30 -07:00
2026-05-23 02:29:38 -07:00
2026-07-14 22:16:16 -07:00
2026-07-15 13:34:30 -07:00
2026-07-13 19:07:58 -07:00
2026-05-20 15:54:44 -07:00
2026-05-29 20:05:14 -07:00
2026-07-17 08:53:44 -07:00
2026-06-29 04:12:13 -07:00
2026-05-21 12:04:58 -07:00
2026-05-19 17:19:02 -07:00
2026-06-26 16:14:44 -07:00
2026-07-18 13:53:58 -07:00
2026-07-18 14:54:54 -07:00
2026-07-06 19:03:07 -07:00
2026-06-13 04:54:59 -07:00
2026-06-04 22:53:02 -07:00
2026-07-15 19:43:08 -07:00
2026-06-22 01:37:59 -07:00
2026-07-12 13:56:36 -07:00
2026-07-12 10:04:29 -07:00
2026-07-16 00:01:17 -07:00
2026-07-15 13:34:30 -07:00
2026-07-18 14:18:25 -07:00
2026-07-10 07:46:52 -07:00
2026-07-15 16:17:37 -07:00
2026-07-16 20:50:18 -07:00
2026-07-15 11:13:56 -07:00
2026-07-18 01:47:52 -07:00
2026-07-18 16:18:15 -07:00
2026-06-30 12:56:03 -07:00
2026-07-03 22:04:45 -07:00
2026-07-16 17:05:29 -07:00
2026-07-18 17:08:35 -07:00
2026-06-21 16:23:42 -07:00
2026-06-07 20:43:44 -07:00
2026-07-01 09:06:01 -07:00
2026-05-21 12:49:50 -07:00
2026-07-14 22:16:16 -07:00
2026-06-22 03:04:21 -07:00
2026-05-20 08:23:40 -07:00
2026-05-23 00:03:12 -07:00
2026-07-16 13:48:00 -07:00
2026-06-15 12:34:44 -07:00
2026-06-26 16:14:44 -07:00
2026-06-15 02:30:41 -07:00
2026-06-04 16:16:50 -07:00
2026-07-16 23:08:42 -07:00
2026-07-16 16:34:09 -07:00
2026-07-16 18:13:37 -07:00
2026-06-01 08:23:02 -07:00
2026-07-14 22:16:16 -07:00
2026-07-14 22:16:16 -07:00
2026-06-07 23:03:38 -07:00
2026-05-19 22:50:39 -07:00
2026-07-13 19:07:58 -07:00
2026-07-14 22:16:16 -07:00
2026-06-26 00:57:32 -07:00
2026-07-18 18:38:47 -07:00
2026-07-13 19:07:58 -07:00
2026-07-15 12:54:16 -07:00
2026-07-18 18:38:47 -07:00
2026-07-13 19:07:58 -07:00
2026-05-29 07:11:00 -07:00
2026-07-14 17:02:47 -07:00
2026-06-25 08:35:44 -07:00
2026-07-13 19:07:58 -07:00
2026-07-15 12:49:43 -07:00
2026-07-18 01:23:31 -07:00
2026-07-18 18:38:47 -07:00
2026-07-02 13:07:16 -07:00
2026-07-01 09:41:20 -07:00
2026-07-15 12:49:43 -07:00
2026-06-26 11:56:12 -07:00
2026-07-12 13:56:36 -07:00
2026-07-14 08:18:52 -07:00
2026-07-12 13:56:36 -07:00
2026-06-26 00:57:32 -07:00
2026-07-15 22:43:24 -07:00
2026-07-02 11:38:32 -07:00
2026-07-15 10:06:32 -07:00
2026-06-22 19:48:50 -07:00
2026-07-15 22:43:24 -07:00
2026-06-25 20:12:20 -07:00
2026-07-16 21:42:44 -07:00
2026-05-28 15:04:41 -07:00
2026-07-16 15:42:22 -07:00
2026-05-26 21:57:31 -07:00
2026-07-16 00:01:17 -07:00
2026-07-18 14:42:59 -07:00
2026-07-16 00:01:17 -07:00
2026-07-15 14:44:35 -07:00
2026-07-16 15:42:22 -07:00
2026-07-15 14:44:35 -07:00
2026-07-13 19:07:58 -07:00
2026-05-23 09:59:50 -07:00
2026-07-16 00:01:17 -07:00
2026-07-11 22:16:48 -07:00
2026-05-21 16:30:31 -07:00
2026-07-15 14:44:35 -07:00
2026-07-18 14:42:59 -07:00
2026-07-14 22:13:30 -07:00
2026-07-13 19:07:58 -07:00
2026-07-17 17:28:36 -07:00
2026-07-18 16:18:15 -07:00
2026-06-13 16:16:52 -07:00
2026-06-19 23:50:37 +00:00
2026-06-29 08:49:59 -07:00
2026-07-14 20:27:35 -07:00
2026-07-14 20:27:35 -07:00
2026-07-14 20:27:35 -07:00
2026-07-09 19:58:06 -07:00
2026-07-16 21:42:44 -07:00
2026-07-14 20:27:35 -07:00
2026-07-14 20:27:35 -07:00
2026-07-15 13:32:33 -07:00
2026-07-09 19:58:07 -07:00
2026-07-16 23:09:12 -07:00
2026-07-04 21:28:16 -07:00
2026-07-16 20:29:46 -07:00
2026-07-08 15:09:26 -07:00
2026-06-04 12:44:43 -07:00
2026-07-14 22:13:30 -07:00
2026-06-04 07:34:02 -07:00
2026-06-07 21:19:10 -07:00
2026-07-14 12:41:10 -07:00
2026-05-19 19:28:05 -07:00
2026-07-17 17:28:09 -07:00
2026-07-13 19:07:58 -07:00
2026-07-16 21:07:06 -07:00
2026-07-13 19:07:58 -07:00
2026-07-18 12:21:08 -07:00
2026-07-15 14:01:08 -07:00
2026-07-17 17:28:36 -07:00
2026-07-13 19:07:58 -07:00
2026-06-29 01:05:44 -07:00
2026-06-11 21:00:23 -07:00
2026-07-17 09:47:40 -07:00
2026-07-16 18:13:37 -07:00
2026-06-04 22:53:02 -07:00
2026-07-12 13:57:08 -07:00
2026-07-15 22:53:49 -07:00
2026-07-13 19:07:58 -07:00
2026-07-13 19:07:58 -07:00
2026-07-10 22:25:21 -07:00
2026-07-15 20:53:05 -07:00
2026-06-07 23:03:38 -07:00
2026-07-01 16:38:27 -07:00
2026-07-16 14:44:07 -07:00
2026-05-21 00:17:33 -07:00
2026-07-16 16:34:09 -07:00
2026-07-16 16:34:09 -07:00
2026-07-16 20:29:46 -07:00
2026-07-15 08:44:11 -07:00
2026-07-15 19:43:08 -07:00
2026-07-08 12:29:14 -04:00
2026-07-16 23:08:42 -07:00
2026-05-19 14:22:11 -07:00
2026-07-16 00:01:17 -07:00
2026-07-16 00:01:17 -07:00
2026-07-16 15:42:22 -07:00
2026-07-16 15:42:22 -07:00
2026-07-18 19:31:30 -07:00
2026-07-15 10:38:04 -07:00
2026-07-16 01:52:10 -07:00
2026-07-12 11:15:52 -07:00
2026-05-23 14:26:57 -07:00
2026-05-30 21:53:00 -07:00
2026-06-04 14:01:55 -07:00
2026-06-29 03:15:30 -07:00
2026-07-18 03:48:38 -07:00
2026-05-31 23:24:53 -07:00
2026-06-18 00:39:01 -07:00
2026-06-23 10:30:50 -07:00
2026-07-05 11:31:48 -07:00
2026-07-16 01:52:10 -07:00
2026-05-28 21:23:48 -07:00
2026-07-14 08:17:36 -07:00
2026-07-15 21:00:45 -07:00
2026-07-15 20:14:25 -07:00
2026-07-15 20:14:25 -07:00
2026-07-18 17:11:55 -07:00
2026-07-17 17:28:36 -07:00
2026-07-15 08:44:11 -07:00
2026-05-19 19:28:05 -07:00
2026-07-15 08:44:11 -07:00
2026-07-14 22:13:30 -07:00
2026-06-29 10:32:51 -07:00
2026-07-01 00:51:01 -07:00
2026-06-04 07:34:02 -07:00
2026-07-15 16:29:10 -07:00
2026-06-29 18:05:44 -07:00
2026-06-25 22:33:08 -07:00
2026-07-14 17:02:47 -07:00
2026-06-11 08:43:27 -07:00
2026-07-15 15:34:43 -07:00
2026-07-15 19:43:08 -07:00
2026-07-01 00:51:01 -07:00
2026-05-31 08:32:01 -07:00
2026-07-01 00:51:01 -07:00
2026-07-01 00:51:01 -07:00
2026-07-01 00:51:01 -07:00
2026-06-30 00:09:36 -07:00
2026-07-14 17:02:47 -07:00
2026-06-11 08:43:28 -07:00
2026-06-09 20:44:45 -07:00
2026-07-07 10:25:11 -07:00
2026-06-21 23:02:46 -07:00
2026-07-16 15:37:42 -07:00
2026-07-16 13:48:00 -07:00
2026-06-25 08:34:44 -07:00
2026-07-14 22:16:16 -07:00
2026-06-26 13:13:46 -07:00
2026-06-04 13:04:15 -07:00
2026-06-12 12:49:34 -07:00
2026-07-16 15:37:42 -07:00
2026-07-16 16:01:29 -07:00
2026-05-18 11:01:32 -07:00
2026-05-23 15:13:17 -07:00
2026-05-18 15:51:01 -07:00
2026-07-13 19:07:58 -07:00