fix: sort recent closures before dashboard limit

Sort archived closed records by close timestamp before applying the dashboard limit, and add CI coverage for the dashboard scripts.\n\nThanks @stainlu.
This commit is contained in:
stain lu 2026-05-07 06:49:17 +08:00 committed by GitHub
parent 9ec1e9dd8b
commit 7fec36c228
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 99 additions and 1 deletions

36
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 24
- name: Enable pnpm
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check
run: pnpm run check

View File

@ -161,7 +161,10 @@ function sweepSnapshot(root, profile) {
.filter((item) => item.reviewedAt)
.sort((a, b) => Date.parse(b.reviewedAt) - Date.parse(a.reviewedAt))
.slice(0, 15),
closed: closedItems.filter((item) => item.closedAt).slice(0, 15),
closed: closedItems
.filter((item) => item.closedAt)
.sort((a, b) => Date.parse(b.closedAt) - Date.parse(a.closedAt))
.slice(0, 15),
work,
};
}

View File

@ -0,0 +1,59 @@
import assert from "node:assert/strict";
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
import test from "node:test";
import { renderSweepDashboard } from "../scripts/sweep-dashboard.mjs";
test("recently closed records are sorted before limiting", () => {
const root = mkdtempSync(path.join(tmpdir(), "clawsweeper-state-test-"));
try {
const closedDir = path.join(root, "records", "openclaw-openclaw", "closed");
mkdirSync(closedDir, { recursive: true });
for (let index = 0; index < 15; index += 1) {
writeClosedRecord({
dir: closedDir,
number: 100 + index,
title: `Older close ${index}`,
appliedAt: `2026-05-01T00:${String(index).padStart(2, "0")}:00.000Z`,
});
}
writeClosedRecord({
dir: closedDir,
number: 999,
title: "Newest close",
appliedAt: "2026-05-02T00:00:00.000Z",
});
const dashboard = renderSweepDashboard(root);
assert.match(
dashboard,
/\[#999\]\(https:\/\/github\.com\/openclaw\/openclaw\/pull\/999\)/,
);
} finally {
rmSync(root, { force: true, recursive: true });
}
});
function writeClosedRecord({ dir, number, title, appliedAt }) {
writeFileSync(
path.join(dir, `${number}.md`),
`---
number: ${number}
repository: openclaw/openclaw
type: pull_request
title: ${JSON.stringify(title)}
url: https://github.com/openclaw/openclaw/pull/${number}
applied_at: ${appliedAt}
decision: close
action_taken: closed
close_reason: implemented_on_main
---
# ${title}
`,
"utf8",
);
}