`darnit-reproducibility`: environment-generation sieve (deterministic-first, LLM fallback)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- docker, python
- Área
- build-system, tooling
Línea de trabajo
Start by reading the control-sieve pattern and related issue #421, then inspect the repo2docker Python API (repo2docker.Repo2Docker). The issue asks for a design and prototype, not a named file or test: define the deterministic-to-LLM-to-manual pass behavior, evidence and artifact choices, and operator sign-off. Done means the deterministic reference integration and auditable design are documented without silently applying generated artifacts.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
darnit is positioned to help with the reproducibility edge cases --
the places where existing environment-generation tooling (repo2docker,
Cloud Native Buildpacks, devcontainer templates) doesn't reach. This
issue scopes a "sieve" for environment generation that mirrors
darnit's own control-sieve pattern: try deterministic tools first,
escalate to an LLM only where they can't conclude, always with
operator sign-off before applying.
This is not a plan to compete with repo2docker or buildpacks. It's a
plan to route to them first, then fill the gaps.
Prior art (deterministic tier)
- repo2docker (Jupyter/Binder): detects
requirements.txt,
environment.yml,Pipfile,install.R,apt.txt,postBuild,
runtime.txt,Dockerfile,default.nix. Produces a Dockerfile.
Stops at: no env files -> barepython:3.11;pyproject.toml
without a lockfile; compiled deps beyondapt.txt(CUDA, MKL,
custom C libs). - Cloud Native Buildpacks (
pack): ordered buildpack list; first
match wins. Stops at: needsProcfile/ entry point; doesn't fit
scientific workflow shapes (Nextflow, Snakemake, papermill); emits
OCI images, not inspectable Dockerfiles. docker init: interactive prompt; not a fit for automation.- Devcontainer templates: static templates keyed on
.devcontainer/devcontainer.jsonpresence + language; requires
operator to pick a template. - Nix flake generators: minimal skeleton, not repo-analysis-driven.
Where LLM tier earns its place
Concrete edge cases the deterministic tools do not handle today:
- Compiled deps beyond
apt.txt(repo mentions PyTorch + CUDA
version in README prose; no lockfile encodes the CUDA choice). - Non-buildpack workflow shapes (
snakemake --cores 8,
nextflow run main.nf,papermill notebook.ipynb -p param 3). - System prerequisites in README prose that no deterministic tool
parses (Install OpenBabel first, then run pip install .). pyproject.tomlwith editable install (pip install -e .) but no
lockfile -- repo2docker punts.- Multi-stage builds where the researcher's own tool must be compiled
before the experiment runs (Layer 1 vs Layer 2 per #415).
Proposed shape
Same pass shape as sieve controls:
sieve = [
("repo2docker", detect: any env file in the list above),
("buildpacks", detect: `pack builder inspect` returns a match),
("heuristic", detect: single-language repo with one obvious lockfile),
("llm_eval", always-runs-if-preceding-inconclusive; prompt: file
listing, top-level READMEs, detected language
signals, evidence of compiled-deps),
("manual", operator prompt with best-effort skeleton to edit),
]
Each pass either produces a Dockerfile + justification, or falls
through. LLM output is a candidate, not a conclusion (Constitution
IV -- Never Guess User Values). Operator confirmation gates
application; the artifact is not written into the repo silently.
Scope
- Design the sieve above.
- Prototype the deterministic tier via repo2docker's Python API
(repo2docker.Repo2Docker) as the reference integration. - Design the LLM tier's prompt shape and evidence bundle (leans on
the LLM-reasoning-capture work from #421 -- prompt and reasoning
MUST land in a durable artifact next to the Dockerfile). - Decide artifact surface: Dockerfile vs devcontainer.json vs both;
where it lands in the repo; what darnit records in the attestation.
Non-goals for v0
- Rewriting repo2docker's or buildpacks' detection logic.
- Nix flake generation (narrow audience; revisit once the sieve
shape stabilizes). - Runtime execution verification (that's the ambitious Option C from
the design conversation -- separate issue if pursued). - Auto-applying LLM-generated Dockerfiles without operator sign-off.
Constitution alignment
- I. Plugin Separation: the sieve lives inside
darnit-reproducibility; darnit core doesn't grow a Docker
dependency. - II. Conservative-by-Default: LLM tier produces candidates, not
conclusions. - IV. Never Guess User Values: operator sign-off is a hard
precondition to writing anything into the repo. - V. Sieve Pipeline Integrity: the deterministic->LLM->manual
ordering is the same pattern the control sieve uses; each pass
either conclusively produces an artifact or hands off.
Related
- #414 (signal extraction module) -- the sieve's detect signals are
the same signals this feeds. - #415 (layer + tightness taxonomy) -- the produced environment
should declare which (layer, tightness) it targets. - #416 (heuristic checks) -- an audit that finds "no environment
declaration" is the trigger; this issue is the remediation half. - #421 (LLM reasoning capture) -- prerequisite for LLM tier's output
being auditable. - #418 / #419 / #420 (determinism set) -- companion; the whole point
of a hermetic env is to make audit + remediation more
deterministic downstream.
- Lenguaje dominante
- Python
- Estrellas
- 22
- Forks
- 27
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 39
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de darnitdevorg/darnit
-
ci needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
darnitdevorg/darnit#607 ·
Los mantenedores suelen responder en 1 día
-
dependencies module-baseline needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
darnitdevorg/darnit#606 ·
Los mantenedores suelen responder en 1 día
-
A test starts real Sigstore signing (interactive OIDC login) when the attestation extra is installedAbiertomodule-baseline needs triage testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
darnitdevorg/darnit#604 ·
Los mantenedores suelen responder en 1 día
-
`darnit validate` crashes on openssf-baseline.toml summarising levelsPosiblemente ocupada @i-am-paradox la tomó hace 3 días. Abiertointerface-cli module-core
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
darnitdevorg/darnit#589 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Plugins hard-code version "0.1.0" while the packages are at 0.1.1Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertogood first issue maintenance
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
darnitdevorg/darnit#587 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de darnitdevorg/darnit
Issues similares
-
bot-triaged module: LrScheduler module: optimizer triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
documentation glm5 llm-model
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
vllm-project/vllm-ascend#19062 ·
Los mantenedores suelen responder en 1 día
-
Author Page: shuai-zhao-llmAbiertoauthor-page correction
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
acl-org/acl-anthology#10496 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Issue Type: Bug Report
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
celery/celery#10875 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
enhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
SasanLabs/VulnerableApp#836 ·
Los mantenedores suelen responder en 1 día