Один запуск jscpd показує, скільки дублювання в коді сьогодні. Куди воно рухається, з одного запуску не видно.
У 5.2.1 зʼявився прапорець --history. jscpd бере кожен коміт у git-діапазоні, чекаутить його в тимчасовий detached worktree (той самий механізм, що й у --baseline-from-ref), сканує з конфігурацією поточного запуску і друкує серію прямо в терміналі: графік і таблицю зі зміною між точками. Остання точка — working, тобто поточний стан разом із незакоміченими змінами.
jscpd src --history v5.0.0..HEAD
jscpd src --history-since 2026-01-01
jscpd src --history main --history-since 2026-06-01 --history-every 5 --history-limit 12
Що дає --history:
— вісь Y графіка йде від мінімуму до максимуму серії, тому дрейф з 2.0% до 2.4% видно, а не губиться в пласкій лінії на шкалі від нуля
— з --threshold, коли поточне значення нижче порогу, jscpd показує, на скільки поріг можна підтягнути. Це ручна форма ratchet: цифру дає jscpd, рішення за вами. Якщо значення вище порогу, спрацьовує звичайна помилка і запуск завершується з кодом 1
— json-репортер додає обʼєкт history з масивом points[], ai-репортер друкує один компактний рядок на точку
— у GitHub Action це інпут history, з fetch-depth: 0, бо діапазон має бути в checkout
Хостований дашборд не потрібен: достатньо git у PATH і комітів локально. Кожна точка — окремий скан, тому для scheduled job на великому репозиторії --history-every і --history-limit тримають прогін коротким. За замовчуванням серія обмежена 30 точками.
Детальніше в документації: https://jscpd.dev/guides/history
jscpd безкоштовний і тримається на спільноті. Якщо він економить час вашій команді, підтримайте: https://opencollective.com/jscpd