Fast, Declarative, Reproducible, and Composable Developer Environments using Nix
This report summarizes scanner evidence for cachix/devenv, a Rust project with 7,790 GitHub stars. SynthScan examined 203,806 lines of code across 1051 source files, recording 259 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 230 finding(s).
Are imports declared and package/API names verified? 12 finding(s).
Are wrappers, guards, and repeated structures necessary? 56 finding(s).
Which changes need focused human review? 259 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 259 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 101 | # "myproj:setup".exec = "mytool build"; | COMMENT |
| LOW | devenv-core/src/resource.rs | 1 | //! Replayable resource abstractions for eval caching. | COMMENT |
| LOW | devenv-core/src/resource.rs | 21 | /// | COMMENT |
| LOW | devenv-core/src/resource.rs | 41 | const TYPE_ID: &'static str; | COMMENT |
| LOW | devenv-core/src/store_settings.rs | 1 | //! Resolved Nix store settings handed to a backend at init time. | COMMENT |
| LOW | devenv-core/src/config.rs | 21 | COMMENT | |
| LOW | devenv-core/src/config.rs | 81 | /// | COMMENT |
| LOW | devenv-core/src/config.rs | 101 | /// Default: `false`. | COMMENT |
| LOW | devenv-core/src/config.rs | 121 | /// Enable CUDA support for nixpkgs. | COMMENT |
| LOW | devenv-core/src/config.rs | 141 | /// Added in 2.0.7. | COMMENT |
| LOW | devenv-core/src/config.rs | 161 | /// A list of license names to allow. | COMMENT |
| LOW | devenv-core/src/config.rs | 181 | COMMENT | |
| LOW | devenv-core/src/config.rs | 201 | /// | COMMENT |
| LOW | devenv-core/src/config.rs | 261 | /// Default: `false`. | COMMENT |
| LOW | devenv-core/src/config.rs | 301 | COMMENT | |
| LOW | devenv-core/src/config.rs | 321 | #[derive(schematic::Config, Clone, Serialize, Debug, JsonSchema)] | COMMENT |
| LOW | devenv-core/src/config.rs | 341 | // Deprecated top-level nixpkgs settings — deprecated since 2.0. | COMMENT |
| LOW | devenv-core/src/config.rs | 361 | pub nixpkgs: Option<Nixpkgs>, | COMMENT |
| LOW | devenv-core/src/config.rs | 381 | /// Default: `false`. | COMMENT |
| LOW | devenv-core/src/config.rs | 401 | #[serde(skip_serializing_if = "Option::is_none", default)] | COMMENT |
| LOW | devenv-core/src/config.rs | 421 | /// Error if a port is already in use instead of auto-allocating the next available port. | COMMENT |
| LOW | devenv-core/src/config.rs | 441 | #[serde(skip)] | COMMENT |
| LOW | devenv-core/src/config.rs | 461 | /// Secretspec provider to use. | COMMENT |
| LOW | devenv-core/src/config.rs | 501 | repository_root: &'a Path, | COMMENT |
| LOW | devenv-core/src/config.rs | 561 | /// field-specific merge strategies. Use [`ConfigLoader`] to also include an | COMMENT |
| LOW | devenv-core/src/config.rs | 1381 | COMMENT | |
| LOW | devenv-core/src/config.rs | 1401 | /// * `depth` - Current recursion depth (prevents stack overflow) | COMMENT |
| LOW | devenv-core/src/bootstrap_args.rs | 1 | //! Pre-serialized arguments for the Nix bootstrap entry point. | COMMENT |
| LOW | devenv-core/src/paths.rs | 61 | /// Derives a short, deterministic `devenv-<hash>` path | COMMENT |
| LOW | devenv-core/src/nix_args.rs | 341 | COMMENT | |
| LOW | devenv-core/src/nix_args.rs | 381 | COMMENT | |
| LOW | devenv-core/src/nix_args.rs | 421 | } | COMMENT |
| LOW | devenv-core/src/evaluator.rs | 41 | } | COMMENT |
| LOW | devenv-core/src/eval_op.rs | 1 | //! Evaluation operation types and structured Nix effect parsing. | COMMENT |
| LOW | devenv-core/src/eval_op.rs | 21 | /// Read a file's contents with `builtins.readFile`. | COMMENT |
| LOW | devenv-core/src/nix_log_bridge.rs | 1 | //! Bridge that converts Nix logs to the devenv Activity system. | COMMENT |
| LOW | devenv-core/src/nix_log_bridge.rs | 861 | /// Nix errors have the format: | COMMENT |
| LOW | devenv-core/src/realized.rs | 1 | //! Hook fired by a backend after each store-path realization. | COMMENT |
| LOW | devenv-core/src/settings.rs | 61 | }; | COMMENT |
| LOW | devenv-core/src/cachix.rs | 21 | /// | COMMENT |
| LOW | devenv-core/src/cachix.rs | 101 | /// 1. `CACHIX_AUTH_TOKEN` environment variable (non-empty). | COMMENT |
| LOW | devenv-core/src/cachix.rs | 321 | pub enum NetrcPreservation { | COMMENT |
| LOW | devenv-core/src/cachix.rs | 401 | /// Replace the netrc at `netrc_path` with `content`, readable only by its | COMMENT |
| LOW | devenv-processes/tests/file_watching.rs | 1 | //! File watching integration tests for ProcessRunner. | COMMENT |
| LOW | devenv-processes/tests/file_watching.rs | 581 | manager.stop_all().await.expect("Failed to stop"); | COMMENT |
| LOW | devenv-processes/tests/common/mod.rs | 321 | COMMENT | |
| LOW | devenv-processes/src/config.rs | 61 | COMMENT | |
| LOW | devenv-processes/src/config.rs | 101 | pub notify: bool, | COMMENT |
| LOW | devenv-processes/src/config.rs | 261 | pub struct ProcessProxyConfig { | COMMENT |
| LOW | devenv-processes/src/config.rs | 301 | #[serde(default)] | COMMENT |
| LOW | devenv-processes/src/lib.rs | 1 | //! Process management for devenv. | COMMENT |
| LOW | devenv-processes/src/lib.rs | 101 | COMMENT | |
| LOW | devenv-processes/src/force_exit_registry.rs | 1 | //! Tracks live child process scopes so a force-exit can tear them down. | COMMENT |
| LOW | devenv-processes/src/force_exit_registry.rs | 21 | COMMENT | |
| LOW | devenv-processes/src/manager.rs | 21 | /// Request sent by a client to the native manager API socket. | COMMENT |
| LOW | devenv-processes/src/manager.rs | 41 | /// already-running and out-of-subset dependencies resolve against the | COMMENT |
| LOW | devenv-processes/src/manager.rs | 61 | /// Where the running native manager resides. The manager answers this over its | COMMENT |
| LOW | devenv-processes/src/manager.rs | 121 | }, | COMMENT |
| LOW | devenv-processes/src/manager.rs | 241 | pub output_readers: Option<(JoinHandle<()>, JoinHandle<()>)>, | COMMENT |
| LOW | devenv-processes/src/manager.rs | 461 | }, | COMMENT |
| 118 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | devenv/src/devenv/machines.rs | 1588 | // ── Install pipeline ───────────────────────────────────────────── | COMMENT |
| MEDIUM | devenv/src/devenv/mod.rs | 2532 | // ── Phase 1: Configuring shell ────────────────────────────── | COMMENT |
| MEDIUM | devenv/src/devenv/mod.rs | 2536 | // ── Phase 2: Running enterTest tasks ───────────────────────── | COMMENT |
| MEDIUM | devenv/src/devenv/mod.rs | 2558 | // ── Phase 3: Building tests ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | devenv/src/devenv/mod.rs | 2581 | // ── Phase 4: Starting processes (if needed) ───────────────── | COMMENT |
| MEDIUM⚡ | devenv/src/devenv/mod.rs | 2591 | // ── Phase 5: Running tests ────────────────────────────────── | COMMENT |
| MEDIUM⚡ | devenv/src/devenv/mod.rs | 2599 | // ── Phase 6: Stopping processes ───────────────────────────── | COMMENT |
| MEDIUM | devenv/src/devenv/mod.rs | 2746 | // ── Phase 1: Configuring shell ────────────────────────────── | COMMENT |
| MEDIUM | devenv/src/devenv/mod.rs | 2757 | // ── Phase 2: Loading and running enterShell tasks ───────────── | COMMENT |
| MEDIUM | devenv/src/devenv/mod.rs | 2779 | // ── Phase 3: Running processes ────────────────────────────── | COMMENT |
| MEDIUM | devenv-tasks/src/types.rs | 396 | // ── helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | devenv-tasks/src/types.rs | 451 | // ── process_name ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | devenv-tasks/src/types.rs | 478 | // ── is_process_dep_satisfied ──────────────────────────────────── | COMMENT |
| MEDIUM | devenv-tasks/src/types.rs | 554 | // ── is_completed_dep_satisfied ────────────────────────────────── | COMMENT |
| MEDIUM | devenv-tasks/src/types.rs | 610 | // ── is_dep_satisfied ──────────────────────────────────────────── | COMMENT |
| MEDIUM | devenv-tasks/src/tests/mod.rs | 3385 | /// └──────before──> devenv:enterTest | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/machines-executor/test_executor.py | 240 | def test_running_unit_rejects_conflicting_operation(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 247 | def test_lost_launch_response_is_not_failed_activation(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 256 | def test_observation_failure_blocks_rollback(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 263 | def test_killed_worker_preserves_unknown_checkpoint(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 293 | def test_reboot_does_not_report_success(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 300 | def test_checkpoint_failure_prevents_launch(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 306 | def test_stale_worker_cannot_activate_new_request(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 315 | def test_success_exit_without_running_system_change_is_failure(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 360 | def test_corrupt_checkpoint_blocks_new_work(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 367 | def test_invalid_target_does_not_launch(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 372 | def test_unconfirmed_deployment_rolls_back(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 383 | def test_confirmed_deployment_ignores_watchdog(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 392 | def test_stale_watchdog_cannot_revert_new_deployment(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 400 | def test_early_watchdog_and_late_confirmation_rejected(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 422 | def test_missing_watchdog_is_unknown_without_confirmation(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 428 | def test_watchdog_is_armed_before_activation_launch(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 435 | def test_worker_refuses_activation_without_watchdog(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 442 | def test_reboot_recovers_unconfirmed_system(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 453 | def test_recovery_does_not_compete_with_live_switch(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 460 | def test_reboot_preserves_confirmed_system(self): | CODE |
| LOW⚡ | tests/machines-executor/test_executor.py | 469 | def test_boot_recovery_launch_is_not_retried(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 23 | def test_planned_start_checks_both_generations_before_effects(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 38 | def test_planned_start_and_confirmation(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 69 | def test_planned_worker_rejects_drift_without_watchdog_reverting_it(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 184 | def test_success_persists_and_reopens(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 197 | def test_explicit_rollback_restores_previous(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 206 | def test_activation_failure_retains_recovery(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 220 | def test_same_request_does_not_launch_twice(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 227 | def test_target_lock_rejects_other_process(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 330 | def test_queued_systemd_job_is_pending(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 345 | def test_exited_unit_with_empty_job_allows_rollback(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 411 | def test_worker_cannot_start_after_deadline(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 484 | def test_interrupted_rollback_is_not_retried_after_reboot(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 495 | def test_stale_boot_worker_cannot_override_explicit_recovery(self): | CODE |
| LOW | tests/machines-executor/test_executor.py | 504 | def test_rollback_failure_retains_both_errors(self): | CODE |
| LOW | docs/src/lib/landing-environment-core.ts | 247 | export function createLandingEnvironmentCore(catalog: LandingOption[]) { | CODE |
| LOW | docs/src/lib/ai-composition-loader.ts | 63 | export function createAiCompositionLoader(loader: HTMLElement, catalog: Ingredient[]) { | CODE |
| LOW | docs/src/data/technology-registry.ts | 224 | export function validateTechnologyRegistry(documentedIds: string[], optionIds: string[]) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | devenv-tasks/src/tests/mod.rs | 343 | // assertion robust even if unrelated activities share the channel. | COMMENT |
| MEDIUM | tests/process-task-failure/.test.sh | 4 | # The integration harness runs this script directly. If the nested | COMMENT |
| MEDIUM | devenv-tui/tests/replay-pty.sh | 40 | # Avoid standalone Esc in this byte-level harness: the emulated terminal reports | COMMENT |
| MEDIUM | devenv-tui/src/app.rs | 669 | /// robust than relying on crossterm's `disable_raw_mode()`, which only works | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | devenv/src/main.rs | 2047 | assert!(prepared.backend.devenv.shell_settings.profiles.is_empty()); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/python-with-packages/check-python-env.py | 29 | CODE | |
| LOW | tests/python-with-packages/check-python-env.py | 32 | CODE | |
| LOW | tests/python-with-packages/check-python-env.py | 35 | CODE | |
| LOW | tests/python-with-packages/check-python-env.py | 38 | CODE | |
| LOW | tests/python-with-packages/check-python-env.py | 43 | CODE | |
| LOW | tests/python-with-packages/check-python-env.py | 46 | CODE | |
| LOW | tests/git-hooks-python-path/main.py | 1 | CODE | |
| LOW | docs/gen/sitemap_with_anchors.py | 20 | CODE | |
| LOW | docs/gen/sitemap_diff.py | 31 | CODE | |
| LOW | examples/python-django/myproject/settings.py | 12 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 63 | - **[AI generation](https://devenv.new)** to scaffold environments from a natural language description | CODE |
| MEDIUM | devenv/src/commands/init.rs | 1 | //! `devenv init`: scaffold devenv.nix / devenv.yaml / .gitignore in a directory. | COMMENT |
| MEDIUM | tests/process-up-attach-deps/.test.sh | 102 | # manager, while the manager-side parked judgment itself is event-driven. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/eval-cache-git/.test.sh | 26 | # Check if our test file is tracked in input-paths.txt | COMMENT |
| LOW | tests/eval-cache-no-git/.test.sh | 20 | # Check if our test file is tracked in input-paths.txt | COMMENT |
| LOW | tests/profiles/.test.sh | 36 | # Check if package name appears anywhere in the packages or PATH | COMMENT |
| LOW | devenv-shell/src/dialect/bash.rs | 35 | # Set SHELL to the target shell. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/machines-plan/.test-pty.py | 24 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/direnv/.test.sh | 25 | # Define the devenv arguments | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/machines-deploy-ssh-vm/test.py | 44 | hardware.facter = null; | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/modules/machines/deploy.py | 50 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/machines-executor/test_executor.py | 134 | CODE |