Go to file
Krzysztof kuhy Rudnicki d56b936b48
Some checks are pending
crdt-sync pre-commit / pre-commit (push) Waiting to run
crdt-sync tests / test (push) Waiting to run
dependency freshness / dependencies on newest stable (push) Waiting to run
file length / file-length (push) Waiting to run
freedays pre-commit / pre-commit (push) Waiting to run
freedays tests / test (push) Waiting to run
gatelock pre-commit / pre-commit (push) Waiting to run
gatelock tests / test (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
palette drift / palette (push) Waiting to run
shared gate tests / gate unit tests (push) Waiting to run
Cache pre-commit hooks per package, and pip, so CI stops reinstalling
Measured on 6154dc0: the three pre-commit jobs took 41-59s, of which 38-49s
was pre-commit installing hook environments and ~11s was an uncached pip.

The cache was not merely cold, it was miskeyed. pre-commit/action@v3.0.1
keys on hashFiles('.pre-commit-config.yaml') -- the repo ROOT's config --
but the hooks it installs come from the per-package config passed in
extra_args. Four different configs, one cache key: the three package jobs
raced to overwrite each other's hook sets, and editing a per-package config
never invalidated the key, so the restored cache was silently wrong rather
than missing. Three 68MB entries in the cache list are the symptom.

So the action is replaced with a direct `pre-commit run`, which keeps the
same --config/--all-files behaviour plus --show-diff-on-failure, wrapped in
an actions/cache keyed on the config that actually drives the install.
pre-commit is already an exact pin in each requirements.txt.

setup-python gains cache: pip keyed on each requirements.txt, for the test
jobs too.

The two crdt-sync workflows now list their own file in `paths`, which the
other four already did -- a workflow edit should re-run its own gate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019kMvSMtsVMB3d2uoZ56pbp
2026-09-12 18:16:51 +02:00
.github/workflows Cache pre-commit hooks per package, and pip, so CI stops reinstalling 2026-09-12 18:16:51 +02:00
aur-publish Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 18:45:55 +02:00
crdt_sync_dart Bump node, ruff, types-requests and dart test to latest stable 2026-09-12 17:42:29 +02:00
crdt_sync_flutter Move the Dart packages to very_good_analysis 11 2026-09-12 17:44:34 +02:00
crdt-sync Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
dep_freshness Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 18:45:55 +02:00
design_system Move the Dart packages to very_good_analysis 11 2026-09-12 17:44:34 +02:00
dopamine-ux Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 19:07:23 +02:00
file_length file_length: TRAK/sightpy is vendored, not coursework 2026-08-28 19:33:14 +02:00
firebase firebase: make the rules template impossible to deploy verbatim 2026-08-22 19:10:10 +02:00
freedays Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
gatelock Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
github_device_auth Move the Dart packages to very_good_analysis 11 2026-09-12 17:44:34 +02:00
guard-lib Split the two shell scripts and the gate's own config 2026-08-22 14:59:27 +02:00
home_paths Gate home-relative paths against the ~ layout 2026-09-12 17:10:20 +02:00
md_naming Match dated backups by shape, not by hardcoded name 2026-09-12 17:12:02 +02:00
music_theory Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 18:45:55 +02:00
prompts Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 18:45:55 +02:00
scripts Gate home-relative paths against the ~ layout 2026-09-12 17:10:20 +02:00
sync_settings_ui Move the Dart packages to very_good_analysis 11 2026-09-12 17:44:34 +02:00
ts_core Move ts_core and web_ui to vitest 5, React 19.3 and pnpm 12 2026-09-12 17:52:30 +02:00
unified-design-system Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 18:45:55 +02:00
vmbox Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 18:45:55 +02:00
web_ui Move ts_core and web_ui to vitest 5, React 19.3 and pnpm 12 2026-09-12 17:52:30 +02:00
.gitignore Ignore Firebase CLI debug logs 2026-08-22 16:17:39 +02:00
.pre-commit-config.yaml Gate home-relative paths against the ~ layout 2026-09-12 17:10:20 +02:00
dependency-freshness.allowlist.yaml allowlist: typescript hold now names typescript-eslint 8.70.0 2026-09-11 13:48:01 +02:00
LICENSE Root scaffold: README, LICENSE, per-subdirectory CI for utils monorepo 2026-07-10 13:02:20 +02:00
README.md music_theory: music theory from first principles, as code you can hear 2026-09-11 18:29:13 +02:00

utils

Shared libraries used across kuhyx's other projects. Each subdirectory is a formerly-standalone repo, folded in here with full commit history preserved (see each subdirectory's own git log for its pre-merge history).

crdt_sync_dart/

Dart/Flutter CRDT sync library (pub package name: crdt_sync, not published to pub.dev — consumed via a git dependency). Mirrors crdt-sync (below) module-for-module and test-for-test. Consumed by diet_guard's app, screen-locker's workout_app, wake_alarm's phone_app, and todo (whose notes are stored in the v0.2.0 LogStore).

Consume via:

dependencies:
  crdt_sync:
    git:
      url: https://github.com/kuhyx/utils
      ref: crdt_sync_dart-v0.10.0
      path: crdt_sync_dart

sync_settings_ui/

Shared Flutter "Sync settings" screen (pub package name: sync_settings_ui, not published to pub.dev). Firebase sync (primary) plus an optional local backup slot — no GitHub mirror UI. Pure UI + a FirebaseSyncController service layer over injected closures (keystore/Google-plugin access stays in each consuming app, exactly as before this package existed). Consumed by todo, diet_guard_app, workout_app, wake_alarm/phone_app, and home_inventory's dedicated "Sync settings" route.

Consume via:

dependencies:
  sync_settings_ui:
    git:
      url: https://github.com/kuhyx/utils
      ref: sync_settings_ui-v0.1.0
      path: sync_settings_ui

crdt-sync/

Python CRDT sync library (package: crdt_sync, not published to PyPI). Same design as crdt_sync_dart (HLC clocks, per-field LWW, sticky-delete tombstones). Consumed by diet-guard and screen-locker.

Consume via:

crdt-sync @ git+https://github.com/kuhyx/utils@crdt-sync-v0.2.0#subdirectory=crdt-sync

guard-lib/

Bash tamper-resistance primitives (guardctl: chattr + bind-mount + systemd watcher + pacman hooks). Not a package — installed by running guard-lib/install.sh as root, which copies files onto the system (/usr/local/bin, /usr/local/lib/guard-lib, systemd units, pacman hooks). Consumed by steam-backlog-enforcer (expects a guard-lib/install.sh sibling clone) and referenced by screen-locker.

gatelock/

Python lock-window + HMAC log-integrity backend (package: gatelock, not published to PyPI). Consumed via pip by screen-locker, diet-guard, and wake-alarm:

gatelock @ git+https://github.com/kuhyx/utils@gatelock-v0.1.0#subdirectory=gatelock

music_theory/

Music theory from first principles as typed Python (package: music_theory, not published to PyPI): pitch, tuning, scales, chords, progressions, a numpy synth and a Recipe → WAV composer with a degrade transform. Follows Luke Haas's "Music Theory for Programmers" section by section; python -m music_theory demo all --out DIR renders one WAV per section. Consumed by roadside-assistance for its three world-state music beds.

Consume via:

music_theory @ git+https://github.com/kuhyx/utils@music-theory-v0.1.0#subdirectory=music_theory

unified-design-system/

Not a package — the frozen design tokens (colors, spacing, type, radius, shadow policy) and per-stack (Flutter/web/Tkinter) implementation patterns that keep every one of kuhy's repos visually identical, plus annotated component references (components.html, button.html). Read unified-design-system/README.md and DOCS-tokens.md before touching any theme/CSS/style file in any repo. The unified-design-system Claude Code skill is a thin pointer here, not a duplicate.