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 188Rust 55Shell 30Markdown 281211 Sutichaykuna

⎇ d293f39e043b3c86aaa25faacbce39c95cd28ac4 recipes/qillqa.toml TOML · 50 siq'ikuna · 2.9 KB Ñawpa willay ch'uya

qillqa construye el corpus y REPRODUCE BIT A BIT — donde brush hacía 0 de 3 d293f39e0 · Sergio ·

1# qillqa — 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# ── POR QUÉ PROPIO (decisión del usuario, 2026-09-22: «awk soberano») ───────────────────────────
7# El ADR pendiente de `docs/plan-botar-busybox.md` tenía tres candidatos y ninguno era gratis:
8#   · gawk  — C, con extensiones GNU que los `configure` del corpus sí usan. Adoptarlo es adoptar
9#             un dialecto más grande que POSIX y una cadena que no es la nuestra.
10#   · goawk — Go. Rompe la premisa de soberanía de cadena de la Etapa C.
11#   · frawk — Rust, pero es otro dialecto (JIT, semántica propia).
12# La cuarta opción, escribirlo, es la que se tomó. 3531 líneas, cero crates de terceros, y un motor
13# de expresiones regulares propio: POSIX es leftmost-LONGEST y el crate `regex` es leftmost-first,
14# y esa diferencia decide qué borra un `sub()` y cuánto vale `RLENGTH`.
15#
16# ── LO MEDIDO ───────────────────────────────────────────────────────────────────────────────────
17# Banco diferencial contra DOS oráculos —`busybox awk` y `gawk --posix`— con 109 casos: 104 iguales
18# a los dos, 0 divergencias, 5 discrepancias ENTRE los oráculos (cuatro las tenemos del lado de
19# POSIX). Más los 59 programas awk reales de este repo, que acepta todos, y 29 pruebas propias.
20#
21# ⚠ Falta la prueba que de verdad decide, y esta cabecera no la finge: un `configure` de autotools
22# con qillqa como `/usr/bin/awk`. Es la lección de brush, que pasó 56/57 casos POSIX y no construía
23# una sola receta.
24
25name    = "qillqa"
26version = "0.0.1"
27license = "MIT"
28
29[source]
30# El propio takana. El commit es el identificador inmutable; subirlo cuando qillqa avance.
31repo   = "https://git.gioser.net/sergio/takana.git"
32commit = "2c882bdd6589af67f8bd86f7ad77448f4217cfd1"
33
34[build]
35compiler = "zig-cc"
36target   = "x86_64-linux-musl"
37link     = "static"
38
39# Split de la info de depuración, igual que hammerd y simi. Entra en `hash_inputs`.
40strip_debug = true
41# Sólo el binario `qillqa` del workspace.
42flags    = ["-p", "qillqa"]
43
44# El BuildSys::Cargo instala el binario; el enlace `awk` lo pone esta receta porque **ese sí es
45# contrato**: lo llaman los `configure` del corpus y los guiones del producto. A diferencia de
46# `simi`, donde el symlink `sh` lo decide el ensamblado del rootfs —quién es /bin/sh es una
47# decisión de la raíz de confianza—, acá no hay nada que disputar: en el corpus no existe otro awk
48# declarado en ningún perfil.
49[build.phases]
50install = "mkdir -p /out/usr/bin && cp target/release/qillqa /out/usr/bin/qillqa && ln -sf qillqa /out/usr/bin/awk"