gsxdsm
8dd9697468
FN-6714: backfill commit-association diff stats
Backfill historical commit-association diff stats so Command Center LOC can use real persisted git data.
- Add a core backfill API that inspects local git commits for associations with missing additions/deletions and supports dry-run reporting.
- Expose an authenticated Command Center productivity backfill endpoint and route it through the legacy API shim.
- Keep productivity LOC/hour sentinels safe for legacy payloads and document the backfill contract.
- Cover the backfill path, auth gate, productivity analytics, and route registration with tests.
Files changed:
.changeset/fn-6714-command-center-loc-backfill.md | 5 +
docs/architecture.md | 4 +-
docs/storage.md | 4 +-
...mmit-association-diff-backfill.real-git.test.ts | 140 +++++++++++++++++++++
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 76 ++++++++++-
packages/core/src/types.ts | 9 ++
packages/dashboard/app/api/legacy.ts | 16 +++
.../command-center/areas/ProductivityArea.tsx | 8 +-
.../register-command-center-routes.auth.test.ts | 48 ++++---
.../register-command-center-routes.test.ts | 49 +++++++-
.../src/routes/register-command-center-routes.ts | 20 +++
12 files changed, 354 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-6714
Fusion-Task-Lineage: 657c7789-bbe4-4611-abca-127af05b0300
2026-06-22 03:42:24 -07:00
..
2026-04-24 19:39:20 -07:00
2026-06-03 01:10:18 -07:00
2026-06-17 22:21:34 -07:00
2026-06-05 03:02:27 -07:00
2026-04-24 19:39:20 -07:00
2026-05-03 00:05:28 -07:00
2026-04-28 14:25:55 -07:00
2026-04-24 19:39:20 -07:00
2026-06-09 20:08:18 -07:00
2026-04-26 06:35:46 -07:00
2026-03-31 19:29:47 -07:00
2026-06-01 03:23:10 -07:00
2026-06-09 20:08:18 -07:00
2026-06-16 21:09:20 -07:00
2026-06-17 02:39:36 -07:00
2026-06-05 02:38:38 -07:00
2026-06-05 03:24:41 -07:00
2026-05-14 15:05:38 -07:00
2026-06-18 07:06:00 -07:00
2026-05-21 07:05:48 -07:00
2026-05-16 09:56:54 -07:00
2026-06-17 02:39:36 -07:00
2026-06-18 06:46:57 -07:00
2026-05-13 20:20:26 -07:00
2026-06-17 18:37:01 -07:00
2026-06-09 20:08:18 -07:00
2026-04-24 19:39:20 -07:00
2026-06-15 02:30:41 -07:00
2026-04-29 07:10:52 -07:00
2026-06-05 03:41:54 -07:00
2026-06-15 02:30:41 -07:00
2026-06-05 03:41:54 -07:00
2026-06-15 02:30:41 -07:00
2026-06-19 17:25:35 -07:00
2026-06-21 16:28:30 -07:00
2026-05-10 23:36:10 -07:00
2026-06-12 18:18:24 -07:00
2026-05-07 17:27:15 +02:00
2026-04-20 12:59:58 -07:00
2026-04-19 20:48:14 -07:00
2026-05-02 15:57:18 -07:00
2026-05-02 15:57:18 -07:00
2026-04-25 10:50:32 -07:00
2026-06-21 13:25:41 -07:00
2026-05-02 15:57:18 -07:00
2026-04-24 11:06:20 -07:00
2026-04-26 13:00:56 -07:00
2026-04-22 13:46:53 -07:00
2026-04-26 13:00:56 -07:00
2026-04-22 13:46:53 -07:00
2026-04-20 22:45:26 -07:00
2026-05-14 14:04:32 -07:00
2026-06-09 20:08:18 -07:00
2026-06-09 20:08:18 -07:00
2026-05-04 03:04:33 -07:00
2026-05-01 09:00:31 -07:00
2026-06-14 15:29:35 -07:00
2026-06-09 20:08:18 -07:00
2026-04-24 08:55:02 -07:00
2026-05-11 16:33:16 -07:00
2026-05-10 02:43:38 -07:00
2026-06-03 12:43:25 -07:00
2026-05-18 05:57:43 -07:00
2026-05-14 15:05:38 -07:00
2026-06-09 20:08:18 -07:00
2026-06-09 20:08:18 -07:00
2026-06-05 19:37:59 -07:00
2026-06-10 10:34:36 -07:00
2026-06-18 19:12:58 -07:00
2026-05-12 17:03:10 -07:00
2026-06-09 20:08:18 -07:00
2026-05-16 12:56:31 -07:00
2026-06-19 21:09:12 -07:00
2026-05-19 19:23:47 -07:00
2026-06-14 15:29:35 -07:00
2026-06-18 18:48:05 -07:00
2026-06-10 10:34:36 -07:00
2026-06-09 20:08:18 -07:00
2026-06-09 20:08:18 -07:00
2026-03-31 17:03:23 -07:00
2026-06-18 18:48:05 -07:00
2026-06-16 15:08:24 -07:00
2026-04-08 00:01:09 -07:00
2026-05-19 17:51:07 -07:00
2026-06-14 15:29:35 -07:00
2026-06-03 12:43:25 -07:00
2026-06-15 21:09:14 -07:00
2026-06-13 06:12:09 -07:00
2026-04-23 10:50:44 -07:00
2026-06-09 20:08:18 -07:00
2026-06-17 22:21:34 -07:00
2026-06-07 20:23:07 -07:00
2026-06-02 09:02:48 -07:00
2026-06-17 21:12:53 -07:00
2026-06-16 05:56:11 -07:00
2026-06-16 15:11:09 -07:00
2026-06-16 15:11:09 -07:00
2026-05-07 03:59:43 -07:00
2026-04-08 08:10:17 -07:00
2026-06-09 20:08:18 -07:00
2026-06-16 05:56:11 -07:00
2026-06-09 20:08:18 -07:00
2026-06-18 03:24:57 -07:00
2026-06-18 07:23:02 -07:00
2026-04-24 19:39:20 -07:00
2026-06-17 21:12:53 -07:00
2026-05-09 10:31:05 -07:00
2026-06-09 20:08:18 -07:00
2026-06-09 20:08:18 -07:00
2026-06-13 17:46:11 -07:00
2026-05-19 19:10:08 -07:00
2026-06-08 13:32:58 -07:00
2026-05-18 15:50:48 -07:00
2026-05-19 10:25:37 -07:00
2026-06-16 15:08:24 -07:00
2026-06-09 20:08:18 -07:00
2026-06-09 20:08:18 -07:00
2026-05-16 10:31:44 -07:00
2026-06-04 04:32:46 -07:00
2026-04-24 19:39:20 -07:00
2026-05-18 23:14:48 -07:00
2026-06-22 03:42:24 -07:00
2026-06-22 03:42:24 -07:00
2026-06-18 19:12:58 -07:00
2026-05-17 14:48:31 -07:00
2026-06-13 17:46:11 -07:00
2026-06-13 17:46:11 -07:00
2026-06-13 17:46:11 -07:00
2026-06-16 05:56:11 -07:00
2026-06-15 20:34:52 -07:00
2026-05-14 15:05:38 -07:00
2026-05-04 07:25:14 -07:00
2026-05-04 10:18:38 -07:00
2026-06-13 21:17:20 -07:00
2026-05-01 11:55:56 -07:00
2026-04-26 11:35:44 -07:00
2026-06-15 19:23:23 -07:00
2026-05-17 23:21:34 -07:00
2026-05-19 17:51:40 -07:00
2026-05-25 13:57:04 -07:00
2026-05-04 14:54:55 -07:00
2026-05-05 13:05:57 -07:00
2026-05-11 06:47:43 -07:00
2026-05-11 06:47:43 -07:00
2026-06-04 04:32:46 -07:00
2026-06-04 04:32:46 -07:00
2026-05-19 23:55:58 -07:00
2026-06-09 02:30:30 -07:00
2026-06-04 04:32:46 -07:00
2026-06-04 04:32:46 -07:00
2026-05-17 11:49:08 -07:00
2026-06-04 04:32:46 -07:00
2026-06-04 04:32:46 -07:00
2026-06-04 04:32:46 -07:00
2026-06-13 10:44:01 -07:00
2026-06-04 04:32:46 -07:00
2026-04-30 17:40:14 -07:00
2026-06-04 04:32:46 -07:00
2026-06-09 20:08:18 -07:00
2026-06-05 03:02:27 -07:00
2026-06-05 03:02:27 -07:00
2026-06-13 10:44:01 -07:00
2026-06-15 13:19:10 -07:00
2026-06-09 20:08:18 -07:00
2026-06-03 17:42:43 -07:00
2026-05-19 09:24:51 -07:00
2026-05-19 20:29:59 -07:00
2026-05-29 10:14:06 -07:00
2026-05-14 14:04:32 -07:00
2026-05-19 09:24:50 -07:00
2026-05-17 00:06:26 -07:00
2026-06-09 14:32:13 -07:00
2026-04-28 18:21:17 -07:00
2026-06-09 20:08:18 -07:00
2026-06-09 20:29:11 -07:00
2026-05-23 06:06:51 -07:00
2026-06-13 15:25:27 -07:00
2026-06-13 15:25:27 -07:00
2026-06-04 04:32:46 -07:00
2026-06-04 04:32:46 -07:00
2026-06-09 20:08:18 -07:00
2026-06-12 14:58:59 -07:00
2026-06-09 06:43:13 -07:00
2026-05-17 08:49:51 -07:00
2026-05-17 12:11:51 -07:00
2026-05-20 01:27:22 -07:00
2026-05-26 21:57:31 -07:00
2026-04-30 17:40:14 -07:00
2026-06-09 20:08:18 -07:00
2026-06-16 05:56:11 -07:00
2026-05-04 15:04:36 -07:00
2026-06-14 15:29:35 -07:00
2026-06-14 15:29:35 -07:00
2026-06-04 04:32:46 -07:00
2026-05-18 04:46:56 -07:00
2026-06-09 20:29:11 -07:00
2026-05-17 15:55:18 -07:00
2026-04-28 18:21:17 -07:00
2026-06-13 08:55:33 -07:00
2026-06-02 18:29:53 -07:00
2026-06-21 13:32:19 -07:00
2026-05-11 06:47:43 -07:00
2026-05-19 11:30:54 -07:00
2026-05-19 11:30:54 -07:00
2026-05-20 14:28:45 -07:00
2026-05-30 15:52:46 -07:00
2026-06-19 22:24:18 -07:00
2026-06-19 16:47:34 -07:00
2026-06-05 03:02:27 -07:00
2026-06-09 12:51:20 -07:00
2026-06-17 18:08:55 -07:00
2026-04-24 19:39:20 -07:00
2026-06-19 03:49:56 -07:00
2026-04-23 10:50:44 -07:00
2026-04-27 03:21:59 -07:00
2026-06-21 03:29:47 -07:00
2026-06-19 16:47:34 -07:00
2026-06-22 03:34:14 -07:00
2026-06-22 03:34:14 -07:00
2026-06-22 03:34:14 -07:00
2026-06-22 03:34:14 -07:00
2026-06-09 20:08:18 -07:00
2026-05-06 09:43:51 -07:00
2026-06-14 15:29:35 -07:00
2026-06-15 19:23:23 -07:00
2026-06-21 02:23:59 -07:00
2026-04-08 08:10:17 -07:00
2026-04-08 06:02:28 -07:00
2026-05-09 10:31:05 -07:00
2026-05-19 08:13:06 -07:00
2026-06-02 21:28:57 -07:00
2026-05-02 18:11:38 -07:00
2026-05-15 23:28:22 -07:00
2026-06-16 22:20:49 -07:00
2026-06-17 18:08:55 -07:00
2026-04-26 13:00:56 -07:00
2026-05-05 06:32:33 -07:00
2026-04-26 13:55:25 -07:00
2026-06-15 20:08:38 -07:00
2026-06-13 16:30:28 -07:00
2026-06-13 16:30:28 -07:00
2026-06-14 15:29:35 -07:00
2026-06-19 03:49:56 -07:00
2026-04-23 10:50:44 -07:00
2026-06-21 21:23:41 -07:00