Skip to content

fix(eval): Linux node_modules for sandbox — dynamic eval runs e2e + 3 defects found - #24

Open
explosivebit wants to merge 1 commit into
mainfrom
fix/dynamic-eval-linux-deps
Open

fix(eval): Linux node_modules for sandbox — dynamic eval runs e2e + 3 defects found#24
explosivebit wants to merge 1 commit into
mainfrom
fix/dynamic-eval-linux-deps

Conversation

@explosivebit

Copy link
Copy Markdown
Contributor

Summary

Resolves the EVID-031 Linux-portability blocker and lands the first successful end-to-end dynamic-eval run — then honestly reports the 3 defects that run uncovered.

Follow-up to PR #23. Done autonomously under /autorun.

✅ What landed

  • Linux node_modules fix — build task-pack deps in node:22.18-alpine (musl, matches the sandbox image) via npm install (npm ci fails on the macOS-generated lockfile's platform optional deps); point the verify harness at them via a new FE01_NODE_MODULES env override. gold/node_modules left untouched. vitest now executes inside the sandboxCorrectnessEvaluator emits real pass-rate scores instead of 0.0/skipped.
  • EVID-033 — full e2e run record + the 3 defects below (status draft, pending owner review — see note).

🔴 What the e2e run uncovered (3 defects — band separation RED)

Measured CorrectnessEvaluator scores: perfect 0.4348, good 0.4348, mediocre 0.3043, poor 0.0870, broken 1.0000 (inverted).

  1. CorrectnessEvaluator vacuous-pass (correctness_evaluator.py:180) — pass_rate = 1.0 if total == 0. A non-compiling submission → vitest collects 0 tests → scores 1.0 (best) instead of 0.0. This is why broken scored 1.0. → Task [FR-007] Orchestrator writes immutable manifest with hashes of all inputs/outputs #7.
  2. CoverageEvaluator ENOENT on read-only /workspacevitest --coverage tries to mkdir /workspace/coverage, but the mount is read_only (frozen security, correct). Coverage output needs a writable tmpfs path. → Task [FR-008] Maintainer can reproduce single eval from manifest (make reproduce) #8.
  3. fe_01 calibration samples ↔ gold-test export-surface mismatch — gold tests.spec.tsx imports 5 symbols (MultiStepForm + 4 helpers); the calibration samples export only MultiStepForm, so every helper test fails on every sample, capping perfect at ~10/23 = 0.4348. Automatic band separation is structurally impossible as authored. Methodology fork (gold tests should test only the public contract? / samples should export the full surface? / calibration is judge-only and the "auto band-sep" premise was wrong?). → Task [FR-009] Orchestrator stores failed evals with error_class (no drop from denominator) #9, needs owner.

⚠️ Owner review needed before activating EVID-033

EVID-033 is intentionally left draft (verdict: weakens) — Defect 3 is a methodology decision that may invalidate the "perfect ≥ 0.85 / broken ≤ 0.20 via automatic evaluators" premise. Activate after you've ruled on it.

Net: no task pack can be honestly promoted to calibration via automatic evaluators until #7/#8/#9 are resolved. This gates PRD-006 Wave 1.

Reversibility

One infra script + one draft EVID + a NOTE back-ref. No product code changed. Fully reversible.

Refs

evid-033, note-008

🤖 Generated with Claude Code

…2e; 3 defects found

Resolves the EVID-031 Linux-portability blocker: build task-pack deps in node:22.18-alpine (musl, matches sandbox) via npm install, point the verify harness at them via FE01_NODE_MODULES (gold/node_modules untouched). vitest now executes inside the sandbox — first successful end-to-end dynamic-eval run.

The e2e run surfaced 3 defects (EVID-033, all gating band-separation validity):
- CorrectnessEvaluator vacuous-pass: total==0 -> 1.0 scores broken samples as perfect.
- CoverageEvaluator ENOENT on read-only /workspace (needs writable coverage dir).
- fe_01 calibration samples export only MultiStepForm; gold tests unit-test 4 helpers the samples omit -> automatic band separation structurally impossible as authored.

EVID-033 left draft pending owner review (verdict=weakens; Defect 3 is a methodology fork). Tasks #7/#8/#9 track the defects.

Refs: EVID-033, NOTE-008

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
explosivebit added a commit that referenced this pull request Jun 1, 2026
…n sandbox → patch)

Design for the candidate-side executor that turns the 2026-06-02 CLI-harness
feasibility spikes (7 CLIs proven headless via the LiteLLM proxy) into the
production path for non-raw-llm stacks. Two-half sandbox model: Half A = run the
harness CLI → patch (this RFC); Half B = run produced code → scores (#24 +
evaluators, complementary, no conflict). Per-CLI proxy-recipe map, network=none +
proxy-only bridge, cost metered via proxy, non-determinism handled by pass^k
(ADR-013). First slice: aider × be_01 → first real "model × harness" number.

Draft (not activated). Validate PASS (0 MUST errors).

Refs: rfc-stack-executor-run-agent-cli-harnesses-in-the-sandbox-candidate-side-patch, rfc-005, prd-006
explosivebit added a commit that referenced this pull request Jun 2, 2026
…metrics (#33)

* docs(adr): ADR-013 — publish pass@k + pass^k + flakiness reliability metrics (SWE-rebench prior art)

Records the methodology decision behind the pass_k.py code (merged #29): report
pass@1 + pass@k (ceiling) + pass^k (reliability) + flaky (=pass@k-pass^k) per
(model, stack, task-set) over k seeds. No hard pass^k threshold at v0.1 (transparency
metric, not a gate — defer). Pairs with best-of-N (PRD-009). Draft (not activated).

Refs: adr-publish-reliability-metrics-pass-k-ceiling-pass-k-reliability-flakiness, prd-009, note-swe-rebench-nebius-prior-art-pass-k-borrowed-v2-dataset-ingestible-as

* docs(rfc): RFC-006 — stack executor design (run agent-CLI harnesses in sandbox → patch)

Design for the candidate-side executor that turns the 2026-06-02 CLI-harness
feasibility spikes (7 CLIs proven headless via the LiteLLM proxy) into the
production path for non-raw-llm stacks. Two-half sandbox model: Half A = run the
harness CLI → patch (this RFC); Half B = run produced code → scores (#24 +
evaluators, complementary, no conflict). Per-CLI proxy-recipe map, network=none +
proxy-only bridge, cost metered via proxy, non-determinism handled by pass^k
(ADR-013). First slice: aider × be_01 → first real "model × harness" number.

Draft (not activated). Validate PASS (0 MUST errors).

Refs: rfc-stack-executor-run-agent-cli-harnesses-in-the-sandbox-candidate-side-patch, rfc-005, prd-006
explosivebit added a commit that referenced this pull request Jun 2, 2026
…stale BLOCKER (health unhealthy→needs_attention) (#34)

Post-merge artifact-graph cleanup (smith Row #11 tech-debt, autonomous /autorun).
The authoritative state lives in LanceDB; this syncs the .md projections.

- Activated 13 tier:auto EVIDs that were complete (verdict+CL, linked, R_eff>0)
  but stuck in draft — dynamic-eval + judge + RFC-004 workstream evidence
  (EVID-021/022/023/024/034/035/037/038/044/045/046) + EVID-039 (RFC-004 PASS re-gate).
- EVID-036 (RFC-004 Slice-1 guardian BLOCKER) retired: activated → deprecated.
  Its sole precondition (parent ADR-008 draft) is long resolved — ADR-008 active,
  RFC-004 active + merged (#25/#26). Superseded by EVID-039 (audit trail intact).
- RFC-004 phase advanced validate→done (Slice 1+2 shipped).

Result: forgeplan_health unhealthy→needs_attention; orphans 1→0, phase-mismatch
1→0, auto-anomalies cleared. Remaining drafts are by-design (frozen v0.2 layer
behind EPIC-002 + backlog PRDs) — NOT activated to avoid premature/fabricated
proof. NOTE-002 R_eff=0 left as-is (it is the evidence-quality STANDARD, a
contract Note legitimately without evidence — not debt).

EVID-033 (fe_01 dynamic-eval) intentionally NOT included here — it belongs to
open PR #24.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant