The HQ sandbox checkout jobs expose an engine mismatch between environment policy and value delivery. https://reviewos.org/stacks/hq.training/run/2142 is a trusted main-branch run using a configured main-only environment with no reviewer requirement. Its jobs are correctly eligible without a human approval, so approved_at is null. ClaimJobAction nevertheless passes only Boolean(jobRow.approved_at) to environment-scoped secret selection, which withholds every scoped value.
Use the actual, freshly evaluated environment gate when deciding whether values may be delivered. Keep the manual-review timestamp as a separate fact; do not invent an approval or move sandbox secrets to repository scope. Branch, timer, required-check and reviewer protections must still fail closed, including policy changes after a job was queued. Retain the original ready/start timestamp when claiming a timer-gated job, so reevaluation does not restart its wait.
Add real HTTP claim regressions with disposable database fixtures for a main-only environment without reviewers, elapsed waits and policy changes after enqueue. Preserve existing untrusted-run and human-approval coverage. Configuration read failures must not be interpreted as an unprotected environment.
Related: https://github.com/stacksjs/hq.training/issues/376 and https://github.com/stacksjs/hq.training/issues/346.