Session:19:21
(tv — corpus Nerdearla: ingest + landscape + top-up)
Ingest canal @nerdearla (per PIPELINE.md, tv-3s5): "last month" =
batch 2026-09-23→28 (sin uploads desde 2026-04-28, verificado con
upload_date exacto por video); playlist_nerdearla.json +
transcripts_nerdearla/txt limpiados con transcripts/clean.py
(generalizado a cualquier sufijo .<lang>.vtt —
es-orig/en-orig); captions en una sola pasada
sin 429 (sleeps 2 s)
Top-up mismo día (tv-67b): segunda ola de uploads, +34 talks →
108 total (95 es / 13 en, ~64 h, ~605k palabras); info
JSONs gitignored (provenance local, patrón de corpora previos)
Landscape completo (tv-0q2): categorías
analysis/categories/nerdearla.json (16, accent-normalized,
léxicos de afecto), layer-1 scan, 11 deep reads,
nerdearla-landscape-report.md — temperatura:
aceptación negociada (escepticismo 8/talk vs entusiasmo
3, job-fear <1); segunda ola trajo track de seguridad (security/risk
3→4/talk)
Insights top: experimentos de Wilkinson refutan transferencia de
craft a agentes (TDD 24× tokens); trust stack de Naranja X =
knowledge-graphs report en producción; review bottleneck +91% (Britez)
triangula con PragEng; incidente Bitso (agente 13 h mergó 8 PRs vía
token admin — identidad como perímetro); Ruiz: fallo LLM estructural →
modelo de dominio determinista; Pomelo OTel 150 apps (skills→plugin,
7d→2d/app, ~$2/app)
Pending del repo (no mío): README tiene 2 filas sin commit de sesión
previa (memory-systems/knowledge-graphs reports) +
knowledge-graphs-report.md untracked — respetadas, staged selectivo para
no mezclar
Next: si se quiere profundizar: C-candidates de los
insights 1–3 hacia talleres (Wilkinson como template de falsificación,
Naranja X como ancla knowledge-graphs, review bottleneck como
intersección de 3 corpora)
Consulta --title en feedback: el título se deriva
([{kind}] feedback report), no se pasa — evidencia real:
specodelic#1 fue archivado vía stdin path con título
genérico; el summary real quedó como heading dentro del body
Dos tickets filed con esa evidencia: genesis-gle
(título user-supplied) + genesis-og6 (stdin leía solo UNA línea,
multi-párrafo truncado en silencio)
Implementados vía red→green:
read_to_string stdin completo; multi-línea promueve primera
línea a título (resto = ## Description);
FeedbackArgs.title: Option<String> +
with_title() builder, override uniforme tras ambas ramas;
single-line byte-idéntico (regla compat echo); precedencia
documentada en modules.md § feedback
Gotchas: multi-línea con blank-line final trimea a single line
(compat gana); doc-test atrapó el struct literal del doc comment de
feedback.rs; primer git commit fue silenciosamente tragado
por fallo de hook lefthook (tail -1 ocultó el error) —
verificar git log antes de push
Release v0.8.1: CHANGELOG
[0.8.1] — 2026-09-28 con compat note, Cargo.toml 0.8.1,
README tag example → v0.8.1 (guard doc_sync exige tag con versión
completa; pin caret 0.8 no cambia). CI publish ✓, crates.io
0.8.1 (12:08 UTC),
just notify-downstream 0.8.1 → 7 repos
Nota semver: el campo nuevo es struct-literal-breaking → próximo
feature release debe ser 0.9.0 (0.8.1 defendible solo
porque ::new() callers no se afectan)
Cerrado incitaciones-xdo (P1 bug):
package.json decía MIT pero LICENSE es CC-BY-4.0 —
decisión: CC-BY-4.0 única (el payload son
prompts/skills, no código; dual descartado como no intencional)
Reviewed ZZZZ-docs/ (4 evals externas de Grok
4.5/Qwen3.7 contra snapshot 09-21, mayoría stale) vía review +
rule-of-5-universal: veredicto ~40% mejora / ~60% YAGNI — el corte
YAGNI: triad fail-closed contradice el usage census, benchmark-harness
duplica evallerina, env-locking/data-lineage sin users
6 tickets filed en 4 stores (dulce-de-leche,
incitaciones, fabbro, evallerina), todos exportados/commiteados/pushed;
luego pass issue-review (5 passes): metadata.files + base_commit en los
6, Must gates cuantificados, notas co-mod DDL-3i4↔︎DDL-91a, sqq re-scoped
a 2 archetypes verdes + 4 stubs — veredicto READY_TO_WORK, convergencia
pass 2
Gotcha capturado: bd export default stdout, hace falta
-o .beads/issues.jsonl (JSONL puede quedar stale
silenciosamente)
Next: reclamar DDL-5ph (P1 seguridad) o
incitaciones-4cp (P0 postinstall); dogfood epic charly-26y sigue siendo
el P1 más grande; enforcement de gates post-charly-26y
pretender-5p4 implemented (TDD red→green):
HookLocationCheck doctor check — warns (with scope) when
git invokes hooks elsewhere than installed
.git/hooks/pre-commit, errors on empty-string hooksPath
(hooks disabled); genesis bump 0.8.2→0.8.3; docs + CHANGELOG
updated
Hermetic test fix: all CLI tests pin GIT_CONFIG_GLOBAL
to a neutral file — genesis 0.8.3 had made 8 tests resolve the machine's
real global shim (potential writes to ~/.git-hooks)
Caught my own bugs: sed created infinite recursion in the test
helper (stack overflow, bisected via stash); changelog entry for 5p4 was
initially missed
Released v0.6.0: version bump, CHANGELOG section
finalized, tag pushed, GH release (6 assets) + crates.io live; tap +
scoop updated manually via SSH because release
workflow's TAP_GITHUB_TOKEN secret is missing (workflow
failed at tap/scoop push only — binaries/publish succeeded)
CI flaky test fixed (c600346): determinism test's
normalize was asymmetric when data.history absent (run 1)
vs present (run 2) — now strips history symmetrically
pretender-2tp filed (P2): add TAP_GITHUB_TOKEN PAT via GitHub web UI
(SSH-only auth here, can't use gh)
Metalep: the global lefthook shim broke commits in the tap repo
(rbenv 127) — more evidence for genesis #12; bypassed with
--no-verify
Next: pretender-dj5 (ready, P3) — gate-blocked
findings → bd tickets; user action: create the PAT for 2tp
Session:17:08
(poco — specodelic setup + migración dual-format de specs)
Setup specodelic: spk init (bloque SPECODELIC Rev 8 en
AGENTS.md) + migración de los 25 deltas openspec a
dual-format en 8 commits locales (1da99ed..d99d633): receta
frontmatter id: spec + EARS → Constraints (invariantes) →
Model → Properties (law para unstep round-trip) → mirror
## Requirements vía sed
Gotchas capturados en whisper (poco/env.md): refs necesitan prefijo
[[spec.<row-id>]], section-sync NO lo impone lint
0.1.0, spk lint no descubre openspec/ (pasar
path)
3 issues upstream filed vía
specodelic feedback (charly-vibes/specodelic): #4
section-sync sin enforce, #5 total_refs misleading + scaffold enseñando
forma incorrecta, #6 onboarding DX (scaffold dual-format, discovery de
corpus, help leak)
Rule-of-5 review de los specs cambiados: verdict READY
(WITH_NOTES) — 3 transiciones reject self-loop/backward
(CLAR-001) y EDGE-001: al archivar, reducer/errors consolidan capas de
múltiples deltas → re-autoría, no copia
Next: push de los 8 commits (pendiente autorización
explícita del usuario); en sesiones futuras, deltas nuevos se autorán
dual-format desde el inicio
Renewed via turu recall → resumed DDL work in order: DDL-91a (PR
#35), DDL-isi (PR #36), DDL-gap (PR #38), DDL-x0m (PR #39) — all TDD
red→green, all merged to main with green CI
DDL-91a: ddl catalog + generated
docs/capability-matrix.md (drift-checked via
capability_matrix_matches_generation in
tool_registry_drift.rs); new lib module src/catalog.rs
reads only MANAGED_TOOLS
DDL-isi: ddl feedback wired through
genesis::feedback::handle_feedback (testaruda pattern);
main() now records failed commands to the genesis scratch store so
--from-last-error works
DDL-gap: openspec change
update-spec-tool-tables (validated --strict, archived) —
bootstrap/health/dot-ddl specs + project.md synced to the 11-tool
registry, fotos-mcp/fabbro purged
DDL-x0m: post-install version probe now resolves
PATH → direct probe of the downloaded binary at .ddl/bin
(resolve_with_dest, probe_version_at,
parse_version_line); single-token v prefix
stripped (kills vunknown artifacts)
CI incident caught in-session: probe stub-script
test (#!/bin/sh) failed the Windows job on main after merge — gated
#[cfg(unix)] (PR #40); main green on full matrix again
Released v0.7.0: CHANGELOG + version bump + tag →
GH release (5 assets + checksums.txt) + crates.io live; tap/scoop
updated manually via local pushes (checksums verified) because
TAP_GITHUB_TOKEN is still unset — release workflow aborts at the tap
step (DDL-2um)
Git hooks gotcha (tap/scoop repos): lefthook
ruby-syntax pre-commit/push fails on rbenv
ruby: command not found; bypassed with
-c core.hooksPath=/dev/null after ruby -c via
rbenv 2.7.8 — fix rbenv shims separately
Next: DDL-hsn (P3 networked-mock checksum test) is
the only actionable bead; user actions: TAP_GITHUB_TOKEN secret
(DDL-2um), macOS/Windows smoke tests for DDL-9c2/DDL-ei3 archive
Completed the specodelic dual-format migration (commit
af35fa6, −1219 lines): fixed
linter.requirement_drift in 4 files — regenerated mirrors
as ADDED-body-only in the two mixed MODIFIED+ADDED files (backend
dataframe, fix-errors), removed stray duplicate/truncated mirror
sections in relational (1×) and provenance (2 full + 1 truncated
copies); canonical layout now uniform across all 15 files
Empirically established the mirror policy: linter compares
## Requirements against the ADDED body only (MODIFIED-only
files fall back to mirroring MODIFIED); captured in whisper env.md
Ran rule-of-5-universal review of the full 15-file spec
corpus: verdict READY WITH_NOTES — converged at stage
4; top findings: CORR-001 poco/poxo naming split (HIGH), CLAR-001
change-log prose embedded in SHALL text (MEDIUM), DRAFT-001 undocumented
archive order (MEDIUM)
Fixed CORR-001 directly (commit 087496d): normalized 5
stray poxo → poco in the two errors specs per
the "poxo (poco)" convention from openspec/project.md (project= poxo,
importable library= poco)
Filed the two remaining findings as beads: poco-0ad
(strip meta-commentary before archive), poco-qfu
(document/enforce archive order); had to set issue-prefix
in .beads/config.yaml +
bd init --reinit-local --prefix poco to make
bd create work