[PR #2242] [MERGED] ci: summarize static checks and retain complete reports #5109

Closed
opened 2026-10-31 01:04:01 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/2242
Author: @N0zoM1z0
Created: 10/12/2026
Status: ✅ Merged
Merged: 10/12/2026
Merged by: @N0zoM1z0

Base: main ← Head: ci/2238-compact-static-reports


📝 Commits (2)

  • 43b4157 ci: summarize static checks and retain complete reports
  • 99de743 ci: bind cached lint reports to every scanned source root

📊 Changes

7 files changed (+407 additions, -4 deletions)

View changed files

📝 .github/workflows/ci.yml (+9 -0)
📝 .jscpd.json (+0 -1)
📝 docs/testing.md (+10 -0)
📝 package.json (+4 -2)
➕ scripts/ci/static-check-report.mjs (+149 -0)
➕ tests/boundary/filesystem/staticCheckReports.test.ts (+214 -0)
📝 turbo.json (+21 -1)

📄 Description

Successful static checks currently print thousands of clone and warning lines, making failures difficult to find. This change prints concise summaries, keeps every lint error visible, and retains complete reports in a failure-safe CI artifact.

Closes #2238. Follow-up to #2190.

Changes

  • Run the installed lint/duplicate checkers once with full JSON reports; preserve their failure status and stderr. Keep all lint rules and severities, module-boundary checks, both source/test scanning, and the 3% duplication threshold.
  • Keep reports in ignored .cache/static-checks/, upload static-check-reports after a failed static gate, and provide lint:details / jscpd:details for full console output.
  • Cache report outputs and track the reporter producer in Turbo inputs.
  • Keep duplicate locations unambiguous and portable: jscpd's default strips each scan root; request absolute locations and normalize them once into checkout-relative paths, retaining every report field.
  • Remove the unsupported jscpd _comment field and its warning; document the unchanged policy in the testing guide.

Evidence and validation

The preceding main run's successful static log had 6,426 lines / 529,411 bytes. A same-tree checker probe printed 5,175 lines / 208,031 bytes for 1,288 clones; JSON reporting retained every clone with 6 console lines. These are reporting measurements, not a whole-CI speed benchmark. Implementation started from newer main 0baad58e6; its CI owner and checker settings are unchanged from the investigated baseline.

  • Seven behavioral regressions pass, including an independent comparison of actual oxlint file discovery with both resolved Turbo task inputs: warning-only success with retained records; visible/failing lint error; failing source parser error; unchanged duplication threshold with colliding source/test basenames; stale-report removal after lint/duplicate tool failure.
  • Faulting both success exit assignments caused 3 regression failures. Removing stale-report cleanup caused 2 failures. Restoring the source passed all 6, repeated under LC_ALL=C.
  • Actual Turbo cold run, deletion and cache-hit run restored both reports byte-for-byte. A comment-only reporter producer mutation invalidated both tasks; restoration restored the original hashes.
  • Complete npm run check:ci: all 8 tasks and architecture guards passed; the local output was about 100 lines / 4 KB with complete reports retained.
  • npm run docs:check passed, including both fresh README consistency cases. actionlint 1.7.12 and git diff --check passed.

Scope

No product runtime behavior changes. Runner/shard scheduling and coverage remain unchanged. Scheduling samples vary substantially and do not establish a safe capacity change. Slow MCP families are being measured as a separate follow-up.

Final cache-owner correction

Manual review reproduced another actual stale pass: after caching success, appending a syntax error to website/public/assets/main.js leaves check:fast green, while fresh lint fails and reports the exact source location. The linter also scans documentation configuration and experiment scripts, absent from both task inputs.

Both lint task inputs now include those observed source roots and .gitignore, excluding generated outputs. The maintained inventory guard failed on the old inputs and passed with the correction. A real website edit now causes cached check:fast to fail; restoring the original bytes passes. No scan scope was reduced.

The first PR head's remote CI passed all 32 jobs and the separate Go lane. Its static log was 397 lines; the actual static-check-reports artifact retained all 911 lint diagnostics and 1,292 clones, with unambiguous relative source paths. The updated cache-owner commit is rerun through CI before merging.

Automatic Codex review could not run because the repository's code-review usage limit was reached. Final review is manual, supported by the retained real-checker faults, cache controls and full CI; no automated review approval is claimed.

Completion

Final head 99de74380 passed all 32 CI jobs and the separate Go lane. The
complete report includes 946 files / 9,748 cases: 9,662 passed, 86 skipped,
zero failed. The final static log is 398 lines / 29,093 bytes; its 225,981-byte
artifact retains all 911 lint diagnostics and 1,292 clones.

Merged into main as d96550f2f61647ffa150597de73363fa90c4e169 at
2026-10-12 17:02:35 UTC. Issue #2238 is closed/completed and assigned to
N0zoM1z0. Both branch commit identities and the squash author use the user's
GitHub anonymous email; GitHub's committer uses noreply@github.com.
The tested feature patch and main squash patch have identical stable identities.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/2242 **Author:** [@N0zoM1z0](https://github.com/N0zoM1z0) **Created:** 10/12/2026 **Status:** ✅ Merged **Merged:** 10/12/2026 **Merged by:** [@N0zoM1z0](https://github.com/N0zoM1z0) **Base:** `main` ← **Head:** `ci/2238-compact-static-reports` --- ### 📝 Commits (2) - [`43b4157`](https://github.com/morluto/rea/commit/43b4157d5ef1353f653a7b8da7e82da6f6cde1a5) ci: summarize static checks and retain complete reports - [`99de743`](https://github.com/morluto/rea/commit/99de74380d2a0b3a150b23f42602fd733b8a017d) ci: bind cached lint reports to every scanned source root ### 📊 Changes **7 files changed** (+407 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/ci.yml` (+9 -0) 📝 `.jscpd.json` (+0 -1) 📝 `docs/testing.md` (+10 -0) 📝 `package.json` (+4 -2) ➕ `scripts/ci/static-check-report.mjs` (+149 -0) ➕ `tests/boundary/filesystem/staticCheckReports.test.ts` (+214 -0) 📝 `turbo.json` (+21 -1) </details> ### 📄 Description Successful static checks currently print thousands of clone and warning lines, making failures difficult to find. This change prints concise summaries, keeps every lint error visible, and retains complete reports in a failure-safe CI artifact. Closes #2238. Follow-up to #2190. ## Changes - Run the installed lint/duplicate checkers once with full JSON reports; preserve their failure status and stderr. Keep all lint rules and severities, module-boundary checks, both source/test scanning, and the 3% duplication threshold. - Keep reports in ignored `.cache/static-checks/`, upload `static-check-reports` after a failed static gate, and provide `lint:details` / `jscpd:details` for full console output. - Cache report outputs and track the reporter producer in Turbo inputs. - Keep duplicate locations unambiguous and portable: jscpd's default strips each scan root; request absolute locations and normalize them once into checkout-relative paths, retaining every report field. - Remove the unsupported jscpd `_comment` field and its warning; document the unchanged policy in the testing guide. ## Evidence and validation The preceding main run's successful static log had 6,426 lines / 529,411 bytes. A same-tree checker probe printed 5,175 lines / 208,031 bytes for 1,288 clones; JSON reporting retained every clone with 6 console lines. These are reporting measurements, not a whole-CI speed benchmark. Implementation started from newer main `0baad58e6`; its CI owner and checker settings are unchanged from the investigated baseline. - Seven behavioral regressions pass, including an independent comparison of actual oxlint file discovery with both resolved Turbo task inputs: warning-only success with retained records; visible/failing lint error; failing source parser error; unchanged duplication threshold with colliding source/test basenames; stale-report removal after lint/duplicate tool failure. - Faulting both success exit assignments caused 3 regression failures. Removing stale-report cleanup caused 2 failures. Restoring the source passed all 6, repeated under `LC_ALL=C`. - Actual Turbo cold run, deletion and cache-hit run restored both reports byte-for-byte. A comment-only reporter producer mutation invalidated both tasks; restoration restored the original hashes. - Complete `npm run check:ci`: all 8 tasks and architecture guards passed; the local output was about 100 lines / 4 KB with complete reports retained. - `npm run docs:check` passed, including both fresh README consistency cases. actionlint 1.7.12 and `git diff --check` passed. ## Scope No product runtime behavior changes. Runner/shard scheduling and coverage remain unchanged. Scheduling samples vary substantially and do not establish a safe capacity change. Slow MCP families are being measured as a separate follow-up. ## Final cache-owner correction Manual review reproduced another actual stale pass: after caching success, appending a syntax error to `website/public/assets/main.js` leaves `check:fast` green, while fresh lint fails and reports the exact source location. The linter also scans documentation configuration and experiment scripts, absent from both task inputs. Both lint task inputs now include those observed source roots and `.gitignore`, excluding generated outputs. The maintained inventory guard failed on the old inputs and passed with the correction. A real website edit now causes cached `check:fast` to fail; restoring the original bytes passes. No scan scope was reduced. The first PR head's remote CI passed all 32 jobs and the separate Go lane. Its static log was 397 lines; the actual `static-check-reports` artifact retained all 911 lint diagnostics and 1,292 clones, with unambiguous relative source paths. The updated cache-owner commit is rerun through CI before merging. Automatic Codex review could not run because the repository's code-review usage limit was reached. Final review is manual, supported by the retained real-checker faults, cache controls and full CI; no automated review approval is claimed. ## Completion Final head `99de74380` passed all 32 CI jobs and the separate Go lane. The complete report includes 946 files / 9,748 cases: 9,662 passed, 86 skipped, zero failed. The final static log is 398 lines / 29,093 bytes; its 225,981-byte artifact retains all 911 lint diagnostics and 1,292 clones. Merged into main as `d96550f2f61647ffa150597de73363fa90c4e169` at 2026-10-12 17:02:35 UTC. Issue #2238 is closed/completed and assigned to N0zoM1z0. Both branch commit identities and the squash author use the user's GitHub anonymous email; GitHub's committer uses `noreply@github.com`. The tested feature patch and main squash patch have identical stable identities. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 01:04:01 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#5109
No description provided.