Repository navigation
v1.1.0 — DEEMO 1 Artwork Archive
Maintenance release of the DEEMO 1 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 adds a pinned code-quality toolchain. It also fixes the findings of an independent code review.
Browse: searchable gallery · slideshow
Archive contents
data/andassets/are byte-identical to v1.0.0: the same 1,109 public source files and 320 inherited game textures, with the same provenance records.- No fetcher was run for this release. The fetcher changes below apply to future runs.
Deployment
- What deploys: the site now deploys only a
vX.Y.Ztag whose commit is onmain.- Publishing a GitHub Release for such a tag, not marked as a prerelease, deploys it.
- A manual run of the Pages workflow on such a tag also deploys its commit, without checking that the tag has a Release. Use it only to redeploy a released tag.
- Pushes: pushes to
mainare tested but no longer deploy. - 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.
- Tests first: the full test workflow, lint included, must pass on the tagged commit in the same run before the site is staged.
Website
- Slideshow:
- Without JavaScript, the page shows a notice in English and Chinese that links to the archive page, instead of a blank page.
- The caption links its source only to an http(s) page.
- An invalid CSS declaration that browsers ignored was removed. Nothing looks different.
- Language switch:
?lang=stays in sync on an address that has only a fragment, such asindex.html#screenshot. - Archive viewer:
- An arrow key pressed with a modifier is left to the browser (Alt+Left is Back).
- Holding an arrow key turns one image only.
Fetchers and checks
- Wiki fetcher:
- Images are downloaded only over https from each wiki's own image path. Every redirect is checked, and each download is capped at 64 MiB.
- The weekly source check applies the same rule to a proposed snapshot, and it now also reports metadata changes.
- A MediaWiki list that keeps continuing now fails discovery instead of looping without end. This covers more than 1,000 continuation requests, and a repeated or malformed continuation.
- Image-metadata (
imageinfo) continuations are followed. - Images are written atomically.
- A re-verified record takes the current credit and notes.
- Artist fetcher:
- Current records win the download-URL cache.
- A superseded version is reinstated when its canonical record is dropped.
- A malformed Tumblr post fails on its own.
- Archive fetcher:
- Decodes every image completely, on download and on
--verify. - Its reachability checks of catalogued pages follow a redirect only over https and only within the page's registrable domain. Any other redirect is not requested and is recorded as
redirected_off_site.
- Decodes every image completely, on download and on
- Catalog build:
- Accepts only lowercase hex SHA-256 values.
--verifyfails on any tracked file underassets/outsidepublic/,legacy/,thumbs/andsite/.
- Pages size budget: checked on every push and pull request.
Code quality
- Pinned tools:
- ruff for lint and format, with line length 120.
- mypy for the build and publication scripts.
- ESLint, check-only, for the JavaScript and CSS files in
src/. Vendored code and the slideshow page's inline script are not linted. - actionlint and the pre-commit whitespace hooks.
- CI lint job: runs every hook on every file. It excludes generated files,
data/,assets/, vendored code and byte-pinned files. - Coverage: coverage.py measures
scripts/in CI. Coverage went from 83.9% to 89.2%, and the run fails below 89%. - Lint and type findings: ruff went from 21 to 0 and mypy from 27 to 0.
- Reformat: Python files were reformatted once, mechanically. That commit is listed in
.git-blame-ignore-revs.
Independent review
- Scope: an independent line-level review covered the fetchers, the build and publication scripts, the website and the tests. A separate verifier checked each finding.
- Findings: the first round raised 41 findings. The verifiers confirmed 4 as major and 35 as minor.
- Major fixes: every confirmed major finding was fixed with a regression test that fails without the fix. Another reviewer then verified each fix.
- Other items: later rounds fixed most of the other items. The ones still open are the known gaps below.
Known gaps
- Registrable domain: chosen with a fixed list of second-level labels, not the Public Suffix List.
- Weekly source check: its pull-request write path has not yet run against a live change.
Rights
The software is licensed under Apache-2.0 (see LICENSE and NOTICE). The original gallery design is by Mashiro (mashirozx/deemo). Song artwork and other game assets remain © Rayark Inc. and their respective creators; the software license grants no rights to these media. See the license and attribution index.
简体中文: DEEMO 1 曲绘档案的维护版本,存档文件与 v1.0.0 完全相同。
- 部署:
- 网站只部署提交位于
main上的vX.Y.Z标签:为该标签发布正式(非预发布)的 GitHub Release 即会部署。 - 在该标签上手动运行工作流也会部署,但不检查是否有 Release,因此只用于重新部署已发布的标签。
- 推送到
main只运行测试,不再部署。
- 网站只部署提交位于
- 网站:
- 未启用 JavaScript 时,幻灯片显示提示;
- 说明中的来源链接只接受 http(s) 页面;
- 修复了仅含片段的地址上
?lang=不同步的问题,以及查看器的按键问题。
- 抓取脚本: 加入了主机、重定向和大小限制,并修复了数据完整性问题。
- 代码质量:
- 新增固定版本的 ruff、mypy、ESLint 和 pre-commit,并加入 CI lint 任务;
- 覆盖率由 83.9% 提升到 89.2%。
- 独立审查: 已确认的主要问题均已修复并附回归测试;其余问题中,除上面列出的已知缺口外均已处理。
曲绘及游戏素材的权利仍属于 Rayark Inc. 与对应创作者。