feat(cli): add terminal stats dashboard and solution detection utilities

This commit is contained in:
Prad Nukala
2026-08-31 18:56:42 -04:00
parent 7bae7b2920
commit b86f36daf1
6 changed files with 784 additions and 5 deletions
+21 -4
View File
@@ -93,6 +93,25 @@ export function scanBucket(bucket: Bucket): Map<number, WorkFile[]> {
return files;
}
/**
* Is this file a real solution rather than an empty scaffold? The same call
* close-solved.ts makes before it closes an issue — a stub under work/1 is a
* problem still unsolved, and owes no review.
*/
export function isSolution(file: WorkFile): boolean {
const source = readFileSync(join(WORK, file.rel), "utf8");
return isImplemented(source, file.rel.endsWith(".py") ? "py" : "js");
}
/** Problems in a bucket with a solution on disk; scaffolds do not count. */
export function solvedInBucket(bucket: Bucket): number {
let solved = 0;
for (const files of scanBucket(bucket).values()) {
if (files.some(isSolution)) solved++;
}
return solved;
}
/**
* LC number -> ET date of the commit that first added a work/ file for it.
*
@@ -153,14 +172,12 @@ export function reviewQueues(today: string): Map<Window, Owed[]> {
const dates = firstSolved();
// An empty scaffold under work/1 is a problem still unsolved, not one owing
// a review — the same call close-solved.ts makes before it closes an issue.
// a review.
const solved: { file: WorkFile; date: string }[] = [];
for (const files of scanBucket(1).values()) {
const date = dates.get(files[0]!.lc);
if (date === undefined) continue; // uncommitted: you only just solved it
const file = files.find((f) =>
isImplemented(readFileSync(join(WORK, f.rel), "utf8"), f.rel.endsWith(".py") ? "py" : "js"),
);
const file = files.find(isSolution);
if (file) solved.push({ file, date });
}