Repository navigation
docs: README, licencia MIT, guía de contribución y versiones clavadas - #7
Merged
Merged
Conversation
added 5 commits
September 19, 2026 18:45
El repo va a ser público y no tenía README en la raíz: el único era el andamio de create-next-app bajo frontend/. Todo el conocimiento estaba en AGENTS.md, docs/API.md y el briefing, los tres en castellano. - README.md en inglés: qué es, requisitos, instalación derivada de dev.sh (las tres SQL y los tres guiones de seed), desarrollo, uso del SDK, dependencias con la auditoría de licencias, y la nota de que SUPABASE_SERVICE_KEY se salta RLS. Diagrama de arquitectura en Mermaid, que GitHub pinta sin herramientas. - LICENSE MIT, 2026 STACKSPECT. La auditoría (npx license-checker sobre el árbol instalado, pip-licenses sobre un venv limpio de backend[dev]) no encuentra nada incompatible: 32 paquetes en el conjunto que se publica, todos permisivos salvo el libvips precompilado de sharp (LGPL-3.0-or-later), que es una dependencia OPCIONAL de next, se carga dinámicamente y no se empaqueta ni se vendoriza aquí, y caniuse-lite (CC-BY-4.0), que son datos de build. - CONTRIBUTING.md con el flujo real: dev como rama de integración, los commits convencionales con asunto en castellano tal como se practican, dev.sh, las comprobaciones y lo que exige CI. Incluye las reglas duras de AGENTS.md que más caro salen en revisión: nada de Tailwind, colores solo desde styles/colors.css, y que `npm run lint` son tres comprobadores. - Versiones clavadas: package.json cierra los rangos ^ a lo que el lockfile ya resolvía y declara engines.node 22 (el de CI); pyproject clava pytest y ruff en el extra dev. Las dependencias de ejecución del SDK siguen vacías a propósito. `npm install --package-lock-only` no cambia ni un `resolved`. - .gitignore: .claude/settings.local.json solo estaba ignorado por el .git/info/exclude de este clon, que no viaja con el repo. - .gitmessage listaba los ámbitos del repo de simulación, no los de este. Verificado: npm ci + lint + build en verde; ruff y 116 tests en verde con DATABASE_URL contra un postgres:16 desechable; el árbol queda limpio tras un build completo; todos los enlaces del README resuelven. Faltan las capturas de pantalla: hay un hueco marcado en la sección Screenshots hasta que haya credenciales de Supabase con datos.
Decia que /runs/[id] y /runs/[id]/[seed] estaban pendientes y llevan hechas desde el commit de la pantalla de detalle; el build las lista. Faltaban ademas 003_snapshots.sql, que dev.sh comprueba, y los tres documentos en ingles que entran en este PR. AGENTS.md pide corregir lo desactualizado en el mismo PR (preambulo), y sin esto el README y AGENTS.md se contradicen sobre que rutas existen.
palletizing.py y ejemplo_contrato.py ponen synthetic = true explicitamente; humo_live.py va por RunLog, que no toca la columna, y el default de 002_design.sql es false. Su run se lee como MEDIDO. El README decia que los tres marcaban synthetic, que es justo la confusion que el proyecto entero existe para evitar.
Cuatro imagenes, 1440x1000, de la instancia corriendo contra el proyecto real: Ejecuciones y el detalle de un episodio, cada una en tema claro y oscuro. Van como <picture> para que sigan el tema de quien mira, igual que la cabecera de marca. En la captura de Ejecuciones hay dos ejecuciones seleccionadas a proposito: el panel sale con «No comparable» y los motivos. Un panel vacio no ensena nada, y bloquear la comparacion es justo lo que distingue a esta plataforma. El episodio es medido, con oracle, y el pie de la seccion lo dice: esos numeros sustituyen la percepcion por poses reales y no se pueden leer como los de un pipeline completo.
Mismos pixeles: 1440x1000 las capturas, sin recortar y sin reescalar. GitHub las pinta a ~890 px, asi que 1440 es lo que las mantiene nitidas en pantallas de alta densidad. runs-light 173,518 -> 50,559 -70.9 % runs-dark 173,367 -> 49,838 -71.3 % episode-light 175,181 -> 50,185 -71.4 % episode-dark 173,950 -> 48,824 -71.9 % mark-light 39,762 -> 24,772 -37.7 % wordmark-light 7,390 -> 5,038 -31.8 % Las cuatro capturas: oxipng al maximo y despues paleta de 256 por corte de medianas, sin difuminado (en una interfaz plana el difuminado emborrona el texto pequeno y encima engorda el fichero). Los dos de marca van SOLO sin perdida: oxipng ya los habia dejado en modo paleta con 256 y 166 colores, asi que cuantizar no tenia nada que rascar y solo podia estropear el borde. La primera tanda fue con maxima cobertura, que salia mas pequena (~44 KB), pero al mirarla de cerca viraba los grises neutros a rosa: el fondo de pagina pasaba de (245,245,243) a (249,233,242). Se nota en areas planas grandes. El corte de medianas conserva los neutros con una desviacion de 0 a 1. Comprobado a 3x sobre el texto pequeno y los acentos de color en los cuatro ficheros y en los dos temas: numeros en verde, insignia Oracle con su trama, "No comparable", el feed de eventos y las cotas del pale salen igual. Error maximo por canal 20/255 y ningun pixel por encima de 16.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the repository up to the standard a public repo needs: a licence chosen on evidence, pinned dependency versions, a contributing guide, a reviewed
.gitignore, and a root README that did not exist before.Documentation and dependency metadata only. No code changes, no Spanish comments touched.
Licence audit → MIT
Measured before deciding, not assumed.
Python (
backend[dev], 6 packages): MIT ×4, BSD-2-Clause,Apache-2.0 OR BSD-2-Clause. All permissive.Node, shipped set (
--production, 32 packages): MIT ×21, Apache-2.0 ×5, ISC ×2, BSD-3-Clause, 0BSD, CC-BY-4.0, LGPL-3.0-or-later. Adding dev dependencies (350 packages) brings in only BSD-2-Clause ×7, MPL-2.0, Python-2.0, CC0-1.0 and BlueOak-1.0.0.Only two entries are not plainly permissive, and neither blocks MIT:
@img/sharp-libvips-linux-x64— LGPL-3.0-or-later. The prebuilt libvips binary behindsharp, whichnextdeclares as an optional dependency for image optimisation. Separate platform-specific npm package, loaded dynamically at runtime, not vendored here, not statically linked, not bundled into the shipped JavaScript. Using an LGPL library that way puts no obligation on the licence of the work that uses it.caniuse-lite— CC-BY-4.0. A browser-support dataset used at build time; none of it is redistributed.LICENSEadded — MIT, 2026 STACKSPECT. The full audit is written into the README's dependency section.Dependency versions
frontend/package.json:^ranges closed to the versionspackage-lock.jsonhad already resolved (@supabase/supabase-js2.116.0,@tanstack/react-query5.103.1,@types/*,eslint9.39.5,typescript5.9.3). Addedengines.node>=22 <23(the major CI uses) andlicense: MIT.npm install --package-lock-onlychanged only the lockfile's root mirror entry — zero packages added or removed, zeroresolvedversions changed. Verified by diffing the package map before and after.backend/pyproject.toml: dev extras pinned topytest==9.1.1,ruff==0.16.8. The runtimedependencies = []list is untouched — the SDK stays dependency-free on purpose.requirements.txtadded.CONTRIBUTING.md
Written from what the repo actually does:
devas the integration branch, conventional commits with Spanish subjects (documented as practised, with real examples from the history),dev.sh, the checks, and what CI enforces. Carries over the rules fromAGENTS.mdthat cost the most in review — no Tailwind, colours only fromstyles/colors.css, and thatnpm run lintis eslint pluscheck-colors.mjsandcheck-contrast.mjs..gitignore
Reviewed, not rewritten; every existing comment preserved. One genuine gap:
.claude/settings.local.jsonwas ignored only through this clone's.git/info/exclude, which does not travel with the repository — a fresh public clone would have offered it for commit.frontend/.env.localthatrefactor(front): un solo .envdeliberately removed.README.md
Brand header from the assets already in the repo, badges, a Mermaid architecture diagram, both screenshots, and installation/usage derived from
dev.sh— its six steps, the three SQL files, the threebackend/seed/generators,backfill.py, and the SDK's two write paths. Plus the security note:SUPABASE_SERVICE_KEYbypasses RLS and must never reach the browser.frontend/README.md'screate-next-appboilerplate replaced with a short pointer up.Three things that need a second pair of eyes
1. Derived light-theme brand variants.
frontend/public/brand/{mark,wordmark}.pngare white on transparent — the app uses them as CSS masks coloured by--logo, so they are invisible on GitHub's light background. I derived black variants from those same files (alpha-preserving colour inversion, no new artwork) asdocs/img/{mark,wordmark}-light.pngand serve each theme with<picture>. Happy to drop them if you would rather solve it another way.2.
AGENTS.mdhad stale facts that would have contradicted the new README: it listed/runs/[id]and/runs/[id]/[seed]as pending when both ship and the build compiles them, and omitted003_snapshots.sql, whichdev.shprobes for. Corrected under its own "corrígelo en el mismo PR" rule.3.
humo_live.pydoes not setsynthetic— it writes throughRunLog, which never touches the column, and002_design.sqldefaults it tofalse. Its smoke-test run therefore reads as measured data. I had written the broader claim into the README and corrected it (51746c3), but the underlying inconsistency is real and out of scope here: a smoke-test run that reads as measured is exactly what the project's own rules exist to prevent. Worth a follow-up issue. The captain's project currently has nohumo-liveruns, so nothing is affected today.Screenshots
Captured at 1440×1000 from the running app against the real project, in both themes, served as theme-aware
<picture>pairs. Reviewed and approved before commit.The Runs shot deliberately has two runs selected so the comparison panel shows "No comparable" with its reasons — an empty "select 2 runs" state demonstrates nothing, and blocking a bad comparison is the feature that distinguishes this platform. The episode shot is a measured, oracle run, and the caption says so rather than letting those numbers read as a full pipeline's.
Verification
Run on the final tree, exactly what CI runs:
npm ci && npm run lint && npm run buildruff check backendpytest backend -qwithDATABASE_URL→ throwawaypostgres:16mmdcto confirm it parses and lays outgit statusafter a full buildEvery command quoted in the README has actually been run, apart from
git clone.The
.envused for the screenshots was never committed (.gitignore:5, verified before staging) and has been shredded from the worktree.