gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1463Shell 157Markdown 91Rust 853029 Definiciones

⎇ e0e390c2829a2bb6d30b49193dc5ced05bd45ad2 scripts/mudanza/ids.py Python · 23 líneas · 957 B Historia Quién tocó qué crudo

traducir: familia «servicio» — systemd → tarjeta de arje, y el pivote pasa a ser uno POR FAMILIA fefa92ec5 · Sergio ·

1#!/usr/bin/env python3
2"""ids.py — identificadores DETERMINISTAS para lo que se genera (SDD 29).
3
4Derivar el id del nombre en vez de sortearlo es lo que vuelve **revisable** un fichero generado: dos
5corridas del mismo censo producen la misma semilla byte a byte y se comparan con `diff`. Un id
6aleatorio obliga a leer el fichero entero para saber si algo cambió.
7"""
8import hashlib
9
10CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"   # sin I, L, O, U
11
12
13def ulid_determinista(sem, nombre):
14    """26 caracteres Crockford base32, derivados del nombre. No es un ULID con marca de tiempo real
15    —no hace falta— pero respeta el formato."""
16    h = hashlib.blake2b(f"{sem}/{nombre}".encode(), digest_size=16).digest()
17    n = int.from_bytes(h, "big")
18    out = []
19    for _ in range(26):
20        out.append(CROCKFORD[n & 31])
21        n >>= 5
22    s = "".join(reversed(out))
23    return "0" + s[1:]          # el primer carácter de un ULID válido es <= '7'