# Changelog

## Score

- CAI 27 → 28 (+1.5)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

## Lenses

- Code Health 27 → 16 (-10.7)
- Architecture 96 → 75 (-20.1)
- Maturity 59 → 54 (-5.5)
- Readiness 7 → 28 (+21.9)
- Security 54 → 68 (+13.2)
- Accessibility 34 (new)

## Resolved (145)

- (anonymous) (cognitive 17) (copyparty/web/up2k.js)
- Coverage not measured — test suite did not build
- Dimension evaluation failed
- Duplicated block (10 lines × 2) (copyparty/httpcli.py)
- Duplicated block (10 lines × 2) (copyparty/httpcli.py)
- Duplicated block (10 lines × 2) (copyparty/svchub.py)
- Duplicated block (10 lines × 2) (tests/test_dots.py)
- Duplicated block (12 lines × 2) (tests/test_dots.py)
- Duplicated block (12 lines × 4) (tests/test_dots.py)
- Duplicated block (13 lines × 2) (copyparty/authsrv.py)
- Duplicated block (13 lines × 2) (copyparty/httpcli.py)
- Duplicated block (13 lines × 2) (copyparty/th_srv.py)
- Duplicated block (13 lines × 2) (tests/test_webdav.py)
- Duplicated block (14 lines × 2) (copyparty/authsrv.py)
- Duplicated block (17 lines × 2) (copyparty/httpcli.py)
- Duplicated block (17 lines × 2) (copyparty/stolen/qrcodegen.py)
- Duplicated block (19 lines × 2) (copyparty/up2k.py)
- Duplicated block (22 lines × 2) (copyparty/up2k.py)
- Duplicated block (5 lines × 2) (copyparty/authsrv.py)
- Duplicated block (5 lines × 2) (tests/test_shr.py)
- …and 125 more

## New (792)

- (anonymous) (cognitive 16) (contrib/plugins/banner.js)
- (anonymous) (cognitive 16) (contrib/plugins/graft-thumbs.js)
- (anonymous) (cognitive 17) (contrib/plugins/quickmove.js)
- (anonymous) (cognitive 17) (copyparty/web/md2.js)
- (anonymous) (cognitive 18) (copyparty/web/util.js)
- (anonymous) (cognitive 24) (copyparty/web/browser.js)
- (anonymous) (cognitive 34) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 16) (contrib/plugins/banner.js)
- (anonymous) (cyclomatic 16) (copyparty/web/md2.js)
- (anonymous) (cyclomatic 18) (contrib/plugins/quickmove.js)
- (anonymous) (cyclomatic 19) (copyparty/web/util.js)
- (anonymous) (cyclomatic 20) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 21) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 25) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 28) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 34) (copyparty/web/util.js)
- (anonymous) (cyclomatic 40) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 40) (copyparty/web/browser.js)
- (anonymous) (cyclomatic 41) (copyparty/web/browser.js)
- (anonymous)::announce (cognitive 28) (copyparty/web/browser.js)
- …and 772 more

## Changes since last survey

- 82 commits — 73 feature/other, 9 fixes

## By area

- copyparty/web — 18 commits
- copyparty/__main__.py — 14 commits
- copyparty/httpcli.py — 12 commits
- contrib/package — 6 commits
- copyparty/up2k.py — 6 commits
- bin/thumbs — 4 commits
- copyparty/authsrv.py — 3 commits
- bin/u2c.py — 2 commits
- copyparty/__version__.py — 2 commits
- scripts/pyinstaller — 2 commits
- (root) — 1 commit
- bin/hooks — 1 commit
- contrib/systemd — 1 commit
- copyparty/__init__.py — 1 commit
- copyparty/cert.py — 1 commit
- copyparty/sftpd.py — 1 commit
- copyparty/stolen — 1 commit
- copyparty/th_srv.py — 1 commit
- copyparty/util.py — 1 commit
- scripts/docker — 1 commit

## Notable commits

- fix: fix PRTY_NO_IFADDR + cleanup
- fix: fix csp-nonce on chrome<62
- fix: fix dupe logue on !js hydrate
- fix: http206: fix footer (last-n-bytes) reqs
- fix: ifaddr: winxp fix
- fix: js: fix contrived crash (closes #1516);
- fix: tests: fix macos
- fix: up2k: fix !e2d reload blocking uploads
- fix: wopi: fix access_token_ttl (#1587)
- change: add --help-dedup
- change: add --help-redup + failsafe
- change: add --no-mime / volflag nomime
- change: add --redup
- change: add -i no
- change: add jxl support for autogrid (#1610)
- change: add up2k mutex ping
- change: allow dk download-as-zip
- change: archlinux: add post_upgrade
- change: avoid binary garbage in logs;
- change: bbox: open svg; closes #1605
- …and 62 more
