Repository navigation
v1.1.0 — Dynamix Artwork Archive
Maintenance release of the Dynamix artwork archive. The archived files are the same as in v1.0.0. This release changes how the site is deployed, hardens the fetchers and the catalog checks, and adds a pinned code-quality toolchain. It also fixes the findings of an independent code review.
Browse: searchable gallery · slideshow
Archive contents
- Originals: every original file is byte-identical to v1.0.0: the same 3,773 unique files from 7,138 source records. The catalog and the source manifests are unchanged.
- Fetchers: none was run for this release. The fetcher and classification changes below apply to future runs.
- Coverage report:
data/coverage.jsondropped one list,mismatches.duplicate_bytes_other_source, which was always empty, and its own size figures shrank by 40 bytes. The build now refuses the case that list would have held (see below). - No new download is attached.
dynamix-artwork-archive-v1.0.0.zipstill holds every original file. Itsdata/coverage.jsonis the v1.0.0 version.
Deployment
- What deploys: only a
vX.Y.Ztag whose commit is onmain.- Publishing a GitHub Release for such a tag, not a prerelease, deploys it.
- A manual dispatch on such a tag also deploys its commit, without checking for a Release. Use it only to redeploy a released tag.
- Retired: the approval variable
RELEASE_APPROVED_SHAand the release hold. - Refused before anything is built:
- a branch;
- a tag of another form, such as
v1.1orv1.1.0-rc1; - a prerelease;
- a tag whose commit is not on
main.
- Checks: the tag check runs in the C locale. The full test workflow, lint included, reruns on the tagged commit before the site is staged.
Website
- CSS fix: an invalid CSS declaration that browsers ignored was removed from
src/slideshow.css. Nothing looks different. - Lint comments: comments were added where ESLint misreads valid
var()expressions.
Fetchers and checks
- Network client:
- The connected-address (DNS rebinding) check now has tests for https as well as http.
- Reserved and site-local IPv6 addresses are refused.
- A test covers every class of non-public address.
- Pixel identity: every frame is compared, along with the EXIF orientation and the ICC profile, not only the first frame.
- Incomplete reads: an incomplete or unreadable listing no longer drops earlier candidates (excluded, pending, failed or blocked) or marks archived records as removed upstream. This covers:
- a repeated empty Wayback CDX answer;
- unparseable TapTap or iTunes entries;
- an unread SoundCloud track list or X timeline;
- a failed page read.
- 401/403 fallback: a 401 or 403 on a derived download URL now falls back to the URLs listed on the page, as a 404 already did.
- Held posts:
- Bilibili and ArtStation posts whose account is not established are held for review.
- Bilibili captcha pages and HTTP 412 are recorded as challenges.
- Page links:
- A link with a literal space no longer aborts its source.
- Links resolve against the document base.
srcsetis parsed by the HTML rules.- A file linked from two seed pages is held while either page is unread.
- Wiki classification:
- Other games: a caption naming artwork for another game, or for that game's event or anniversary, adds that game as an association. This applies only to the seven reviewed games: RAVON, Arcaea, Lanota, Cytus, Cytus II, Phigros and Rotaeno.
- Unlisted names: any other name records no association and gets a note for a curator to review it. So does a name of a Dynamix event or anniversary. A BMS release event such as PABAT still marks an external release.
- Promotional review: an archivist's promotional review is no longer overridden by list evidence.
- Catalog checks:
- A
duplicate_bytescandidate must point at its own source's record. - Song IDs must equal the deterministic assignment.
- Dates and timestamps accept only ASCII digits.
- Credit evidence must agree with the role lists.
- A
Code quality
- Pinned tools:
- ruff for lint and format, with line length 120;
- mypy for
scripts/lib; - ESLint, check-only, for the JavaScript and CSS files in
src/, excluding vendored code and the slideshow page's inline script; - actionlint and pre-commit whitespace hooks.
- CI: a lint job runs every hook on every file. It excludes generated files,
data/,assets/, fixtures, vendored code and byte-pinned files. - Coverage: coverage.py measures
scripts/in CI. Coverage went from 90.5% to 92.5%, and the run fails below 92%. - Lint and type findings: ruff went from 106 to 0 (112 after formatting), and mypy from 15 to 0.
- Formatting: a one-time, mechanical reformat of the Python code. Its commit is listed in
.git-blame-ignore-revs.
Independent review
- Scope: an independent line-level review covered:
- wiki classification and parsing;
- the catalog schema;
- the platform adapters;
- the v1.0.0 release commit and its documentation tests;
- a sweep, with mutation probes, of the network client, the path and manifest helpers, the wiki acquisition code, the primary-source runner and the archive page.
- Verification: a separate verifier checked each finding.
- Findings: the first round raised 51 findings. The verifiers confirmed 10 as major and 37 as minor.
- Major fixes: every confirmed major finding was fixed with a regression test that fails without the fix. Each fix was then verified again by another reviewer.
- Later rounds: these fixed most of the minor findings and applied the owner decisions above. The validation report lists what is still open.
Known gaps
- From v1.0.0: those gaps remain, since no source was refetched.
- Live access needed: two adapter cases cannot be settled without it.
- A Google Play gallery layout.
- The Bilibili seed with no
params.mid. Its v1.0.0 read was blocked by a challenge. Until its account ID is recorded, any picture read from it is held for review.
- Details: see the validation report and the coverage report.
Rights
The software is licensed under Apache-2.0 (see LICENSE and NOTICE). The interface is adapted from the DEEMO gallery by Mashiro and FridrichMethod (FridrichMethod/deemo). Dynamix artwork and other game assets remain © C4Cat Entertainment Limited and/or the credited artists; the software license grants no rights to these media. See the license and attribution index.
简体中文: Dynamix 曲绘档案的维护版本,原文件与 v1.0.0 完全相同。
- 部署:
- 网站只部署提交位于
main上的vX.Y.Z标签。为该标签发布正式(非预发布)的 GitHub Release 即会部署。 - 在该标签上手动触发工作流也会部署,但不检查 Release,因此只用于重新部署已发布的标签。
- 旧的审批变量
RELEASE_APPROVED_SHA已停用。
- 网站只部署提交位于
- 下载包: 本版本不附新的下载包,v1.0.0 的 zip 仍包含全部原文件。
- 抓取与目录检查:
- 加强了网络地址检查。
- 不完整的读取不再丢弃已有候选项。
- 派生的下载地址返回 401/403 时,会像 404 一样改用页面列出的地址。
- 图注只为七款经审核的游戏记录关联,其他名称附带待审核注记。
- 代码质量:
- 新增固定版本的 ruff、mypy、ESLint 和 pre-commit,并加入 CI lint 任务。
- 覆盖率由 90.5% 提升到 92.5%。
- 独立审查: 已确认的主要问题均已修复并附回归测试;仍未解决的问题列在验证报告中。
美术作品版权归 C4Cat Entertainment Limited 和/或署名画师所有。软件许可(Apache-2.0)不授予这些素材任何权利。