utils/dep_freshness
Krzysztof kuhy Rudnicki 71a43d9658
Some checks failed
dependency freshness / dependencies on newest stable (push) Waiting to run
file length / file-length (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
crdt_sync_dart tests / test (push) Has been cancelled
crdt_sync_flutter tests / test (push) Has been cancelled
design_system tests / test (push) Has been cancelled
sync_settings_ui tests / test (push) Has been cancelled
Script the gate rollout instead of hand-copying it into sixteen repos
The gate is three files per repo -- a delegate, a pre-commit hook entry and a
CI workflow -- and Phase 3 needs them in sixteen more repos. Hand-replication
is precisely how the 250-line cap ended up shipping under four different hook
ids, two of which were independent reimplementations rather than delegates, so
the copy is now a script and the templates have exactly one home.

  scripts/install_dependency_freshness_gate.sh <repo> [--check] [--fvm]

Idempotent, and it rewrites a copy that has drifted from the template rather
than leaving it. `--check` reports without writing. `--fvm` pins the Flutter
SDK, and only in a repo that actually holds a pubspec.yaml -- an .fvmrc in a
Python repo declares a toolchain nothing there builds with. An unresolvable
SDK version leaves the pin alone and exits 1: guessing would pin every repo to
a number nobody chose.

The pre-commit block is APPENDED rather than parsed and re-emitted. Every one
of these configs carries comments explaining why its hooks exist, and a YAML
round-trip through the standard library drops all of them.

306 tests, 100% branch coverage on every production module.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CRykabMwPgDzFHcARoqpaK
2026-08-28 14:12:00 +02:00
..
parsers Judge peer dependencies by range, and check the packageManager pin 2026-08-28 13:38:40 +02:00
registries Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
templates Script the gate rollout instead of hand-copying it into sixteen repos 2026-08-28 14:12:00 +02:00
tests Script the gate rollout instead of hand-copying it into sixteen repos 2026-08-28 14:12:00 +02:00
__init__.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
__main__.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
_tables.py Make the allowlist inheritable, and cache the quarantine lookups 2026-08-28 13:58:44 +02:00
allowlist.py Make the allowlist inheritable, and cache the quarantine lookups 2026-08-28 13:58:44 +02:00
cache.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
check.py Don't judge allowlist rot from a file-scoped run; cut two library versions 2026-08-28 14:07:09 +02:00
constraints.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
discover.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
evaluate.py Judge peer dependencies by range, and check the packageManager pin 2026-08-28 13:38:40 +02:00
install_cli.py Script the gate rollout instead of hand-copying it into sixteen repos 2026-08-28 14:12:00 +02:00
install_main.py Script the gate rollout instead of hand-copying it into sixteen repos 2026-08-28 14:12:00 +02:00
install.py Script the gate rollout instead of hand-copying it into sixteen repos 2026-08-28 14:12:00 +02:00
models.py Judge peer dependencies by range, and check the packageManager pin 2026-08-28 13:38:40 +02:00
quarantine.py Make the allowlist inheritable, and cache the quarantine lookups 2026-08-28 13:58:44 +02:00
report.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
resolve.py Add the shared dependency-freshness gate 2026-08-28 13:00:35 +02:00
versions.py Accept exact pins with more than three version components 2026-08-28 13:37:12 +02:00