Skip to content

v1.1.0 — DEEMO 1 Artwork Archive

Choose a tag to compare

@FridrichMethod FridrichMethod released this 12 Oct 03:18
· 91 commits to main since this release

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/ and assets/ 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.Z tag whose commit is on main.
    • 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 main are tested but no longer deploy.
  • Refused before anything is built:
    • a branch;
    • a tag of another form, such as v1.1 or v1.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 as index.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.
  • Catalog build:
    • Accepts only lowercase hex SHA-256 values.
    • --verify fails on any tracked file under assets/ outside public/, legacy/, thumbs/ and site/.
  • 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. 与对应创作者。