testsAndMisc/python_pkg/artgate/styles/pixel_icon.toml
Krzysztof kuhy Rudnicki f15f00f3fe Re-point paths for the ~ reorganisation (home-tidy)
Also bumps the 16 meta/requirements pins the freshness gate flagged
(anthropic 1.5.0, numpy 2.5.3, pytest-randomly 5, flake8-bugbear 26.9.9,
ruff 0.16.7, pyright 1.1.414, selenium 4.49.0, hypothesis 6.168.0, lxml
6.1.3, pipdeptree 4.2.5, the two types-* stubs) and Flutter 3.47.3 in
meta/.fvmrc. One test still expected the pre-move ~/mcp-servers path.

The pre-commit hook fed .zsh files to shfmt and shellcheck, neither of
which parses zsh (SC2148/SC1071), so no zsh file could be committed since
the hook was tightened on 2026-08-22; those now get `zsh -n` instead. The
hook's own shfmt pass also staged its reformat of 8 shell files.

CI_GREEN_SKIP because main is red on exactly the dependency-freshness
finding this commit fixes, which is the documented use of that flag.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwtowrowDXx6ccmWVPkCaF
2026-09-11 20:50:19 +02:00

35 lines
1.4 KiB
TOML

# Pixel-art item icon: the most machine-checkable style, and the one where
# "AI slop" is most detectable.
#
# CALIBRATION (measured, not guessed) over 250 genuine 32x32 CC0 icons from
# ~/data/opengameart-downloads:
# p50=7 p75=10 p90=13 p95=14 p99=26 max=30
# Rejection rate of real hand-made art by cap:
# cap 16 -> 3.6% cap 24 -> 1.2% cap 32 -> 0.0%
#
# A first attempt at 16 rejected a real DCSS rambutan icon (18 colours, clean
# binary alpha). That is the "the threshold was wrong, not the art" failure the
# seamless-tilesets skill documents, so the cap was re-derived from the corpus
# rather than nudged until one file passed. 32 admits all observed hand-made
# art while still rejecting un-quantized generator output by a wide margin
# (a raw diffusion sample measured 34403 colours before its finishing stage).
name = "pixel_icon"
canvas = [32, 32]
max_colors = 32
alpha_binary = true
min_margin = 1
# ALPHA_NOT_BINARY is listed first because ordering is load-bearing: a
# soft-alpha image has no fully-opaque pixels, so the colour gate would
# otherwise count zero and pass. See pixels.py module docstring.
# NO_OPAQUE_PIXELS is deliberately absent: it is a result code emitted by the
# colour/palette gates when they fail closed, not a gate you can request.
gates = [
"ALPHA_NOT_BINARY",
"TOO_MANY_COLORS",
"CANVAS_SIZE",
"SCALE_NOT_INVARIANT",
"SILHOUETTE_LOW_CONTRAST",
"MARGIN_TOO_SMALL",
]