Skip to content

fix(revive): solo path drops manifest-resolved env vars; non-default jobs fail #118

@CoreyRDean

Description

@CoreyRDean

Follow-up from Codex review on PR #56 (P1, lib/clauck:1739).

Problem

The solo-revive path launches `run-job.sh` with only `CLAUDE_JOB_TRIGGER` injected into env:

```python
subprocess.Popen(
["zsh", str(run_job), name],
env={**os.environ, "CLAUDE_JOB_TRIGGER": "revive"},
...
)
```

This drops every manifest-resolved setting that normal scheduler dispatch provides (`CLAUDE_JOB_PATH`, `CLAUDE_JOB_CWD`, `CLAUDE_JOB_MAX_TURNS`, `CLAUDE_JOB_MAX_BUDGET_USD`, `CLAUDE_JOB_EFFORT`, `CLAUDE_JOB_MODEL`, `CLAUDE_JOB_SETTING_SOURCES`, etc.). Two consequences:

  1. Revived jobs run with defaults, not the job's actual frontmatter config.
  2. Jobs whose frontmatter `name:` differs from filename fail immediately because `run-job.sh` falls back to `~/.clauck/.md` and may not find the real file.

Revive is therefore unreliable for any non-default job configuration — which is most real-world configured jobs.

Fix

Resolve the job config from the manifest (same way scheduler's `fire()` does) and inject the full `CLAUDE_JOB_*` env set before spawning. Pattern to mirror: the env block in `lib/dag-runner.py:execute_job` (lines ~358–384) already builds this map cleanly.

Applies to the solo-revive path only. The DAG-resume path delegates to `dag-runner.py` which already builds the full env per node.

Acceptance

  • `clauck revive` on a job with a custom `cwd`, `model`, `effort`, or name≠filename runs correctly and honors the job's real config.
  • Integration test: install a job with custom `cwd` + `model`, trip it artificially, revive, confirm the revived run sees the right env.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions