Tree:
2dbf635b99
master
v0.1a
${ noResults }
2 Commits (2dbf635b99a23f8fb151e06bdb68a471a1f781e6)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
f529f44ea7 |
G-135: platform-neutral icon generator + per-asset assetorigin sidecars
make-ico.tcl (any tclsh 8.6+, rsvg-convert on PATH) replaces make-ico.ps1 in place: pure-Tcl PNG decode (core zlib inflate + row unfilter) and DIB/ICONDIR assembly take over from System.Drawing, with an embedded sha256 (NIST-vector validated, cross-checked against Get-FileHash). Byte-identity proven before the ps1 removal: 'all -check' regenerates all seven recorded artifacts (punk-mark.ico, punk-mark-solid.ico, project-default/icon.ico on the DIB+PNG256 profile; favicon.ico all-PNG; apple-touch/192/512 rasters) byte-identical to the committed files under both mingw tclsh 8.6.11 and native Tcl 9.0.3. Every artifact now carries its <name>.assetorigin.toml sidecar (schema 1: artifact sha256, source + source hash, role, generator + invocation options), (re)written by every generator subcommand so regeneration cannot leave a stale record. The 'all' manifest embeds the invocation profiles; 'all -check' is the no-write drift probe (exit 1 on any difference). src/runtime/punkshell.ico gains a derived-copy sidecar (hash equals source_hash, source ../assets/logo/punk-mark.ico); the three vfs copies stay unrecorded pending the user call on shipping sidecars inside baked kits. src/assets/logo/AGENTS.md: assetorigin schema 1 format documentation (canonical), Tcl-generator work guidance, drift-probe verification line. favicon source recorded as web/icon.svg (renders byte-identical to punk-mark.svg at 16/32/48; the same-directory primary web icon chosen). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
4 weeks ago |
|
|
91fa500e24 |
Project logo: two-colour bracket mark, master + web set (src/assets/logo)
Replaces the busy pixel-art punk1 artwork - unreadable below ~32px - with a flat two-colour mark: a mohawked terminal plate enclosing Tcl's [ ] command substitution, Emerald #0FA36B on ink #03120C. Drawn on a 64x64 grid to hold at 16px and verified by rendering at true pixel size on both light and dark plates, rather than judging it large and hoping. src/assets/logo/ is the icon MASTER, distinct from the build-consumed copies at src/runtime/punk1.ico and src/vfs/_vfscommon.vfs/punk1.ico. Those are deliberately untouched and remain a user-directed swap. punk-mark.svg/.ico outline plate (primary) alternative/punk-mark-solid.* solid plate web/ favicon set legacy/ retired punk1 artwork, moved from repo root make-ico.ps1 keeps the .ico reproducible: rsvg-convert for true-alpha rasterizing (never browser screenshots - they bake in a background and lose the alpha the icon depends on), then a hand-assembled ICONDIR. PE icons carry 16/24/32/48/64/128 as uncompressed BGRA DIBs plus a PNG-compressed 256, keeping that entry ~5KB instead of ~265KB - each entry becomes a separate RT_ICON in every embedding kit. Regeneration is deterministic, byte-identical across runs. The web set inverts those tradeoffs. favicon.ico is 16/32/48 all-PNG (2.5KB, fetched on every cold page load) and is web-only: all-PNG is precisely what GDI+ and tklib's ico package cannot read. web/icon.svg carries a prefers-color-scheme block serving the outline plate to light tab bars and the solid plate to dark - something an .ico structurally cannot do - verified by rendering under forced dark. The apple-touch and PWA rasters are deliberately opaque, since iOS ignores transparency and composites against black. Two decoder limits are recorded in the new AGENTS.md as properties of the readers, not defects in the files: legacy GDI+ silently returns the 128px frame when asked for 256 (WIC, which Explorer and the taskbar use, reads all seven), and tklib's ico package parses DIB entries only. Root and src AGENTS.md gain Child DOX Index entries. Both converted to LF per the root line-ending policy, which explicitly declines diff-minimisation as a reason to preserve CRLF. No punkproject.toml bump: these assets are a non-shipped surface until a build consumer is repointed. Fossil still tracks the three legacy files at their old root paths and needs the rename at the next catch-up checkin. Claude-Session: https://claude.ai/code/session_01YNjnq6oDzecknLg7AuWZgU Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
1 month ago |