FN-6675: add GitHub close-time backfill action
Add a Command Center operator path to backfill exact GitHub source-issue close times. - Add a dashboard API client for the paginated GitHub source-issue closed-at backfill endpoint. - Add a GitHub Command Center button, progress/error/result state, and styling for manual backfills. - Cover backfill success, empty, error, and pagination behavior with area tests and document the operator flow. Files changed: .../fn-6675-github-closed-at-backfill-dashboard.md | 5 + docs/dashboard-guide.md | 4 +- docs/storage.md | 2 +- packages/dashboard/app/api/legacy.ts | 25 ++++ .../components/command-center/CommandCenter.css | 39 ++++++ .../components/command-center/areas/GithubArea.tsx | 117 ++++++++++++++++- .../command-center/areas/__tests__/areas.test.tsx | 140 ++++++++++++++++++++- 7 files changed, 326 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-6675 Fusion-Task-Lineage: 09e43b60-b9db-421f-a131-740a0d3164fe
This commit is contained in:
@@ -7196,6 +7196,14 @@ export interface KillVitestResponse {
|
||||
pids: number[];
|
||||
}
|
||||
|
||||
export interface GithubSourceIssueClosedAtBackfillResult {
|
||||
scanned: number;
|
||||
filled: number;
|
||||
skipped: number;
|
||||
errors: number;
|
||||
hasMore: boolean;
|
||||
}
|
||||
|
||||
export function fetchSystemStats(projectId?: string): Promise<SystemStatsResponse> {
|
||||
return api<SystemStatsResponse>(withProjectId("/system-stats", projectId));
|
||||
}
|
||||
@@ -7206,6 +7214,23 @@ export function killVitestProcesses(projectId?: string): Promise<KillVitestRespo
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* FNXC:GithubSourceIssueBackfill 2026-06-18-19:20:
|
||||
* Thin client for the FN-6674 manual source-issue closed-at backfill endpoint. Callers own bounded pagination until `hasMore === false`; this helper keeps the GitHub lookup in the explicit operator action path and out of analytics/render-time data loading.
|
||||
*/
|
||||
export function apiBackfillGithubSourceIssueClosedAt(
|
||||
options: { offset?: number; limit?: number } = {},
|
||||
projectId?: string,
|
||||
): Promise<GithubSourceIssueClosedAtBackfillResult> {
|
||||
return api<GithubSourceIssueClosedAtBackfillResult>(
|
||||
withProjectId("/git/github/backfill-source-issue-closed-at", projectId),
|
||||
{
|
||||
method: "POST",
|
||||
body: JSON.stringify({ offset: options.offset, limit: options.limit }),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** Fetch unified activity feed */
|
||||
export function fetchActivityFeed(options?: FeedOptions): Promise<ActivityFeedEntry[]> {
|
||||
const params = new URLSearchParams();
|
||||
|
||||
Reference in New Issue
Block a user