<!-- task=m-node-provider-execution-liveness-recovery/04+03_health_evidence plan=2 tag=REVIEW_REVIEW_API milestone-task=health-classification -->

# PLAN — Restore Verification Evidence Fidelity

## For the Implementing Agent

Run only this verification/evidence checklist and fill every implementation-owned section of `CODE_REVIEW-cloud-G04.md` with actual stdout/stderr and exit status. Keep the active pair in place and report ready for review. If blocked, record the exact blocker, attempted command/output, and resume condition only in implementation-owned evidence fields. Do not ask the user, call user-input tools, create control-plane stop files, classify the next state, archive logs, or write `complete.log`; finalization belongs to the code-review skill.

## Background

The health-pair fix, regression tests, partitioned test files, and fresh reviewer checks all pass. The second official review failed verification trust because the implementation evidence replaced `go env GOMOD` output with unrelated text and claimed the tracked executable `scripts/e2e-smoke.sh` was absent while marking all Final Verification commands complete. This follow-up changes no production, test, contract, or spec behavior; it restores exact reproducible evidence.

## Archive Evidence Snapshot

- Closing pair: `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/plan_local_G05_1.log` and `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/code_review_cloud_G05_1.log`.
- Verdict: FAIL; one Required finding covers contradictory verification evidence at the setup and auxiliary smoke sections. Suggested/Nit: none.
- Affected behavior/files: review evidence only; no production, test, contract, spec, or roadmap change is required.
- Fresh reviewer evidence: focused health-pair tests, Node suites, repeated transport tests, race, vet, repository Go tests, tracked auxiliary smoke, reconnect diagnostic, task-local readability filter, formatting, and diff checks pass. The repository-wide readability ratchet remains nonzero only for unrelated concurrent-worktree paths.
- Roadmap carryover: preserve `milestone-task=health-classification`; SDD S03 requires the exact three health pairs, connection-scoped sequence evidence, and no original-request progress reset.

## Analysis

### Files Read

- `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/PLAN-local-G05.md`
- `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/CODE_REVIEW-cloud-G05.md`
- `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/plan_cloud_G08_0.log`
- `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/code_review_cloud_G08_0.log`
- `agent-task/archive/2026/08/m-node-provider-execution-liveness-recovery/03+02_health_probe_contract/complete.log`
- `agent-roadmap/phase/operational-observability-provider-management/PHASE.md`
- `agent-roadmap/phase/operational-observability-provider-management/milestones/node-provider-execution-liveness-recovery.md`
- `agent-roadmap/sdd/operational-observability-provider-management/node-provider-execution-liveness-recovery/SDD.md`
- `agent-contract/inner/execution-runtime.md`
- `agent-contract/inner/edge-node-runtime-wire.md`
- `agent-spec/runtime/edge-node-execution.md`
- `apps/node/internal/node/liveness_health_evidence.go`
- `scripts/e2e-smoke.sh`
- `.gitignore`

### SDD Criteria

- SDD: `agent-roadmap/sdd/operational-observability-provider-management/node-provider-execution-liveness-recovery/SDD.md`; status `[승인됨]`, lock released, no `USER_REVIEW.md`.
- Milestone scope: `milestone-task=health-classification`.
- Targeted scenario/evidence: S03 and its Evidence Map row require the exact available/unavailable/unsupported/timeout classification evidence, adapter/target/connection-scoped sequence, and no original-request progress reset.
- The implementation is unchanged. The checklist reruns the focused S03 regression plus the Node, race, wire/full-cycle, and readability evidence required to make the existing implementation judgeable.

### Verification Context

- No neutral verification handoff was supplied. Repository-native sources are the Node/platform-common/testing domain rules, local verification profiles, the tracked smoke script, the prior plan commands, and the current checkout.
- Preconditions: `/config/workspace/iop-s1`; Go module mode; no credential, external provider, deployment, remote host, or user-controlled runner is required.
- Fresh reviewer preflight proves `scripts/e2e-smoke.sh` is tracked and executable, `go env GOMOD` resolves `/config/workspace/iop-s1/go.mod`, and the local reconnect diagnostic can allocate its own ephemeral config and ports.
- Exact output is mandatory. Do not summarize, reconstruct, or replace stdout/stderr. Before claiming a command or path is unavailable, record `test -x`, `git ls-files --error-unmatch`, or `command -v` evidence as applicable.
- The repository-wide readability ratchet may remain nonzero because of unrelated concurrent work. The deterministic target filter must remain empty for every file from the health-pair follow-up.
- Confidence: high; the defect is isolated to evidence capture, and all implementation paths passed fresh reviewer execution.

### Test Coverage Gaps

- No product behavior or test code changes in this follow-up.
- Existing contradictory-status regression covers normalized and tunnel terminals. Existing lifecycle, sequence, fence, no-reset, repeated/race, auxiliary smoke, and reconnect diagnostic coverage is sufficient.
- The only gap is accurate implementation-owned capture of the exact required commands and outputs.

### Symbol References

- None. No symbol is renamed, removed, or added.

### Split Judgment

- Keep one plan. This is a compact evidence-fidelity correction with one independently reviewable PASS state; splitting commands would not create a useful intermediate contract.
- Dependency `03+02_health_probe_contract` is satisfied by `agent-task/archive/2026/08/m-node-provider-execution-liveness-recovery/03+02_health_probe_contract/complete.log`.

### Scope Rationale

- In scope: execute the exact verification protocol and replace placeholders/summaries with actual evidence in `CODE_REVIEW-cloud-G04.md`.
- Excluded: all production Go files, test code, contracts, specs, roadmap state, dispatcher/tooling, unrelated readability violations, commit, and push. Fresh review found no behavior change needed.

### Final Routing

- `evaluation_mode=isolated-reassessment`; finalizer `finalize-task-policy.sh`, pair mode.
- Build closures: scope/context/verification/evidence/ownership/decision all true; no capability gap. Scores `scope=0,state=0,blast=0,evidence=2,verification=2` -> G04. Base `local-fit`; `review_rework_count=2` and `evidence_integrity_failure=true` select `recovery-boundary`, lane `cloud`, filename `PLAN-cloud-G04.md`.
- Review closures: all true; no capability gap. Scores `scope=0,state=0,blast=0,evidence=2,verification=2` -> G04, official-review cloud, filename `CODE_REVIEW-cloud-G04.md`.
- `large_indivisible_context=false`; no positive loop-risk signature (`count=0`); recovery boundary matched.

## Implementation Checklist

- [ ] [EVIDENCE-1] Re-run every command in Final Verification exactly and record actual stdout/stderr plus exit status; prove required paths before any unavailability claim.
- [ ] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

### [EVIDENCE-1] Exact verification evidence

**Problem:** `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/code_review_cloud_G05_1.log:92-100` records unrelated text instead of the module path emitted by `go env GOMOD`, and `:164-166` claims a tracked executable is absent. This contradicts the current checkout and invalidates verification trust even though fresh reviewer execution passes.

**Solution:** Make no source change. Run the preflight and every verification command exactly from the repository root. Paste actual stdout/stderr and explicit exit status into the matching `Verification Results` section. If output is long, keep it verbatim in the review artifact; do not reconstruct a shortened transcript or substitute another command.

Before:

```markdown
### `./scripts/e2e-smoke.sh`

Skipped — not present in this repository.
```

Required evidence shape after execution:

````markdown
### `./scripts/e2e-smoke.sh`

```text
[e2e] verifying provider-only Node command and cancellation boundary
...
[e2e] provider-only Edge-Node smoke PASSED
```

Exit code 0.
````

**Modified Files and Checklist:**

- [ ] `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/CODE_REVIEW-cloud-G04.md` — record exact preflight, command output, exit status, deviations, and no-source-change decision.

**Test Strategy:** No new test code. Re-run the existing focused regression, Node suites, repeated and race suites, vet, repository suite, tracked auxiliary smoke, reconnect diagnostic, LOC/readability checks, gofmt, and diff checks with fresh execution where supported by `-count`.

**Verification:** `test -x ./scripts/e2e-smoke.sh && git ls-files --error-unmatch scripts/e2e-smoke.sh && go version && go env GOMOD` must exit zero and print the tracked path, Go version, and `/config/workspace/iop-s1/go.mod`; the full Final Verification protocol below supplies the acceptance evidence.

## Modified Files Summary

| Path | Action | Checklist |
|------|--------|-----------|
| `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/CODE_REVIEW-cloud-G04.md` | update exact evidence | EVIDENCE-1 |

## Final Verification

1. `test -x ./scripts/e2e-smoke.sh && git ls-files --error-unmatch scripts/e2e-smoke.sh` — exit zero and print `scripts/e2e-smoke.sh`.
2. `go version && go env GOMOD` — exit zero and print the active Go toolchain plus `/config/workspace/iop-s1/go.mod`.
3. `go test -count=20 ./apps/node/internal/node -run '^(TestStallMetadataMapsThreeWayHealthEvidence|TestStallMetadataFailsClosedOnContradictoryProbeStatus)$'` — PASS in all 20 iterations.
4. `go test -count=1 ./packages/go/execution ./apps/node/...` — PASS.
5. `go test -count=10 ./apps/node/internal/node ./apps/node/internal/transport` — PASS in all iterations.
6. `go test -race -count=3 ./packages/go/execution ./apps/node/internal/node ./apps/node/internal/transport` — PASS with no race report.
7. `go vet ./packages/go/execution ./apps/node/internal/node ./apps/node/internal/transport` — no diagnostics.
8. `go test -count=1 ./...` — repository Go suite PASS.
9. `./scripts/e2e-smoke.sh` — auxiliary provider-only Node/Edge smoke PASS.
10. `IOP_DEV_RECONNECT_BIND_TIMEOUT=45 ./scripts/dev/edge-node-reconnect-diagnostic.sh` — registration, ordered payloads, commands, reconnect, and terminal checks PASS.
11. `python3 -c 'from pathlib import Path; paths=[Path(p) for p in ("apps/node/internal/node/liveness_watchdog_test.go","apps/node/internal/node/liveness_watchdog_lifecycle_test.go","apps/node/internal/node/liveness_health_evidence_test.go","apps/node/internal/node/provider_tunnel_test.go","apps/node/internal/node/provider_tunnel_liveness_test.go")]; bad={str(p):sum(1 for _ in p.open()) for p in paths if sum(1 for _ in p.open()) > 800}; assert not bad, bad'` — exit zero.
12. `make readability-audit` — record exact output and exit status; an unrelated worktree ratchet may remain nonzero, but no entry may name a follow-up Go file.
13. `python3 -c 'import json; target={"apps/node/internal/node/liveness_health_evidence.go","apps/node/internal/node/liveness_watchdog_test.go","apps/node/internal/node/liveness_watchdog_lifecycle_test.go","apps/node/internal/node/liveness_health_evidence_test.go","apps/node/internal/node/provider_tunnel_test.go","apps/node/internal/node/provider_tunnel_liveness_test.go"}; data=json.load(open("build/readability-audit.json")); bad=[v for v in data["violations"] if v.get("path") in target]; assert not bad, bad'` — exit zero.
14. `test -z "$(gofmt -l apps/node/internal/node/liveness_health_evidence.go apps/node/internal/node/liveness_watchdog_test.go apps/node/internal/node/liveness_watchdog_lifecycle_test.go apps/node/internal/node/liveness_health_evidence_test.go apps/node/internal/node/provider_tunnel_test.go apps/node/internal/node/provider_tunnel_liveness_test.go)" && git diff --check` — exit zero.

**After completing all code changes, fill implementation-owned sections in `CODE_REVIEW-*-G??.md`.**
