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 1346Shell 97Rust 63Markdown 571650 Definitions

⎇ 32627251b1adcc995958bd60e72226040bff6125 recipes/akllay.toml TOML · 61 lines · 3.9 KB History raw

bump(takana): las 5 recetas de nuestro propio repo saltan juntas a c0ded9ac 88d721118 · Sergio ·

1# akllay — el `awk` del producto. Código takana-PROPIO, no una adopción.
2#
3# Mismo patrón de receta que simi/netup/hammerd: un crate del workspace a un commit fijado, deps
4# vendoreadas para build hermético `--offline`, link estático con zig cc. Sólo depende de libc.
5#
6# ── EL NOMBRE, Y LA COLISIÓN QUE CASI SE COLÓ ───────────────────────────────────────────────────
7# *akllay* = escoger, seleccionar (separando, como los granos). Es lo que hace awk: elige los
8# registros que casan un patrón y escoge campos de cada uno.
9#
10# ⚠ Se llamó `qillqa` («escritura») durante un commit, y ese nombre **estaba tomado**: en
11# `tawasuyu/02_ruway/qillqa` hay un producto entero —registro público a prueba de manipulación, 16
12# crates, SDD propio— cuyo `qillqa-cli` instala un binario llamado exactamente `qillqa`. Dos
13# binarios homónimos en el mismo `/usr/bin` es una colisión de la que **no avisa nada**: gana el
14# último que hidrate, y takana empaqueta recetas de tawasuyu. Verificado ahora en los dos repos y
15# contra los 2193 nombres de binario del store: `akllay` libre, y `simi` también lo estaba.
16#
17# ── POR QUÉ PROPIO (decisión del usuario, 2026-09-22: «awk soberano») ───────────────────────────
18# El ADR pendiente de `docs/plan-botar-busybox.md` tenía tres candidatos y ninguno era gratis:
19#   · gawk  — C, con extensiones GNU que los `configure` del corpus sí usan. Adoptarlo es adoptar
20#             un dialecto más grande que POSIX y una cadena que no es la nuestra.
21#   · goawk — Go. Rompe la premisa de soberanía de cadena de la Etapa C.
22#   · frawk — Rust, pero es otro dialecto (JIT, semántica propia).
23# La cuarta opción, escribirlo, es la que se tomó. 3531 líneas, cero crates de terceros, y un motor
24# de expresiones regulares propio: POSIX es leftmost-LONGEST y el crate `regex` es leftmost-first,
25# y esa diferencia decide qué borra un `sub()` y cuánto vale `RLENGTH`.
26#
27# ── LO MEDIDO ───────────────────────────────────────────────────────────────────────────────────
28# Banco diferencial contra DOS oráculos —`busybox awk` y `gawk --posix`— con 109 casos: 104 iguales
29# a los dos, 0 divergencias, 5 discrepancias ENTRE los oráculos (cuatro las tenemos del lado de
30# POSIX). Más los 59 programas awk reales de este repo, que acepta todos, y 29 pruebas propias.
31#
32# ⚠ Falta la prueba que de verdad decide, y esta cabecera no la finge: un `configure` de autotools
33# con akllay como `/usr/bin/awk`. Es la lección de brush, que pasó 56/57 casos POSIX y no construía
34# una sola receta.
35
36name    = "akllay"
37version = "0.0.1"
38license = "MIT"
39
40[source]
41# El propio takana. El commit es el identificador inmutable; subirlo cuando akllay avance.
42repo   = "https://git.gioser.net/sergio/takana.git"
43commit = "c0ded9acb285ee6c7c6b191590c9635a6242a274"
44
45[build]
46compiler = "zig-cc"
47target   = "x86_64-linux-musl"
48link     = "static"
49
50# Split de la info de depuración, igual que hammerd y simi. Entra en `hash_inputs`.
51strip_debug = true
52# Sólo el binario `akllay` del workspace.
53flags    = ["-p", "akllay"]
54
55# El BuildSys::Cargo instala el binario; el enlace `awk` lo pone esta receta porque **ese sí es
56# contrato**: lo llaman los `configure` del corpus y los guiones del producto. A diferencia de
57# `simi`, donde el symlink `sh` lo decide el ensamblado del rootfs —quién es /bin/sh es una
58# decisión de la raíz de confianza—, acá no hay nada que disputar: en el corpus no existe otro awk
59# declarado en ningún perfil.
60[build.phases]
61install = "mkdir -p /out/usr/bin && cp target/release/akllay /out/usr/bin/akllay && ln -sf akllay /out/usr/bin/awk"