Skip to content

[Bug]: Lean provider-feasibility verifier accepts fabricated REPL traces without Lean execution #546

Description

@morluto

Priority

P1

Area

checker

Component

provider-feasibility lean-repl verifier

Problem

The jacobian/lean-repl verifier awards full reward for a fabricated provider report without requiring any Lean REPL execution or execution-specific evidence. The verifier hardcodes the complete expected task IDs, tactic strings, goal counts, and error counts in tests/verifier.py:18-28, then accepts a report containing only those literals plus five summary fields at tests/verifier.py:31-95.

The agent-visible environment copies environment/spike.py into /app (environment/Dockerfile:18). That file exposes the same task IDs, tactic strings, and expected goal counts at environment/spike.py:20-32. The accepted report does not need the spike's elapsed_seconds, completed, decomposition_observed, limitations, stderr, or any Lean response/provenance data.

This is distinct from #540, which covers the five non-Lean provider verifiers and does not cover lean-repl.

Reproduction

On revision 528500b, using only the public input.json, spike.py, schema, and verifier harness, create evidence/provider-report.json with:

{
  "protocol": "leanprover-community/repl",
  "task_count": 2,
  "completed_count": 2,
  "parameter_error_count": 0,
  "return_code": 0,
  "tasks": [
    {"task_id":"CONJUNCTION-DECOMPOSITION","tactics":[
      {"tactic":"constructor","goal_count":2,"error_count":0},
      {"tactic":"exact hP","goal_count":1,"error_count":0},
      {"tactic":"exact hQ","goal_count":0,"error_count":0}
    ]},
    {"task_id":"LOCAL-PREMISE-APPLICATION","tactics":[
      {"tactic":"exact h hP","goal_count":0,"error_count":0}
    ]}
  ]
}

Bind that file with its correct SHA-256 digest and submit the schema-valid envelope with result {provider: "lean-repl", contract: "leanprover-community/repl@v4.31.0", status: "COMPLETED", pin_sha256: "sha256:7910ac2367d19cd57fc0d4ea6152605e8e085228c4083c6b1a0ed37ee0b18209"}.

Running run_verifier_in_child produced:

{"false_certification":false,"pin_fidelity":1.0,"provider_outcome":1.0,"reward":1.0}

No Lean executable, REPL process, or provider output was run or supplied. The report was assembled entirely from agent-visible literals.

Expected behavior

A successful provider-feasibility result should be bound to provider execution and execution-specific observations, or the task should be explicitly classified as a static fixture check that does not claim provider feasibility. A report copied from public spike constants must not receive full provider outcome or aggregate reward.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions