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

# PLAN — Complete the Verification Evidence Record

## 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 third official review confirmed that the health-classification implementation and focused Node tests still pass, but failed the evidence-only follow-up because its review artifact claimed a complete verbatim record while leaving commands 5–14 as placeholders and both implementation checklist items unchecked. This follow-up changes no product behavior; it must produce one complete, internally consistent evidence record that the reviewer can replay.

## Archive Evidence Snapshot

- Closing pair: `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/plan_cloud_G04_2.log` and `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/code_review_cloud_G04_2.log`.
- Verdict: FAIL; one Required finding covers an incomplete and internally contradictory verification record. Suggested/Nit: none.
- Affected behavior/files: review evidence only; no production, test, contract, spec, roadmap, dispatcher, or tooling change is required.
- Fresh reviewer evidence: the tracked executable preflight, Go module preflight, 20 focused health-pair iterations, and the complete Node baseline all pass. Commands 5–14 in the closing review remain placeholders, so those claimed results are not trusted.
- Roadmap carryover: preserve `milestone-task=health-classification`; approved SDD S03 requires the three health pairs, adapter/target and 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-cloud-G04.md`
- `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/CODE_REVIEW-cloud-G04.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/m-node-provider-execution-liveness-recovery/04+03_health_evidence/plan_local_G05_1.log`
- `agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/code_review_cloud_G05_1.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/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`
- `apps/node/internal/node/liveness_health_evidence_test.go`
- `scripts/e2e-smoke.sh`
- `scripts/dev/edge-node-reconnect-diagnostic.sh`
- `Makefile`
- `.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 node/platform/testing profiles, the tracked smoke and reconnect scripts, the approved SDD, and the current checkout.
- Preconditions: repository root `/config/workspace/iop-s1`; local Go module; no credential, remote host, external provider, or user-controlled runner is required.
- Fresh reviewer preflight: `test -x ./scripts/e2e-smoke.sh && git ls-files --error-unmatch scripts/e2e-smoke.sh` exits 0; `go version && go env GOMOD` reports Go 1.26.2 linux/arm64 and `/config/workspace/iop-s1/go.mod`.
- Fresh reviewer execution: the 20-iteration contradictory-pair regression and `go test -count=1 ./packages/go/execution ./apps/node/...` both exit 0.
- Gap: the closing review leaves commands 5–14 as literal placeholders while claiming they were run. Every command must be freshly executed and recorded; cached output is not accepted where the command already specifies `-count`.
- The repository-wide readability ratchet may remain nonzero only for unrelated worktree paths. Its deterministic target filter and the new final artifact-completeness assertion must exit 0.
- Confidence: high. Product behavior is covered and passing; the remaining defect is deterministic evidence capture.

### Test Coverage Gaps

- No product behavior or test code changes are planned.
- Existing health evidence tests cover available, unavailable, unknown, contradictory raw status, normalized and tunnel terminals, exact adapter/target evidence, connection-scoped sequence, unbound omission, and no progress reset.
- The only gap is a complete implementation-owned transcript for every required command plus explicit exit status and checked completion items.

### 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` produce G04. Base `local-fit`; `review_rework_count=3` and `evidence_integrity_failure=true` select `recovery-boundary`, cloud lane, canonical `PLAN-cloud-G04.md`.
- Review closures: all true; no capability gap. Scores `scope=0,state=0,blast=0,evidence=2,verification=2` produce G04, `official-review`, cloud lane, canonical `CODE_REVIEW-cloud-G04.md`.
- `large_indivisible_context=false`; no positive packet-local loop-risk signature (`count=0`); recovery boundary matched.

## Implementation Checklist

- [ ] [EVIDENCE-1] Re-run every command in Final Verification exactly, record actual stdout/stderr plus explicit exit status, and make every prose claim agree with the transcript.
- [ ] 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_G04_2.log:80` claims that the long smoke transcripts were recorded verbatim, while `:140-176` retains ten placeholder sections and `:46-51` leaves both implementation completion items unchecked. The artifact therefore cannot support its own verification claims.

**Solution:** Make no source change. Replace every placeholder in the new review stub with the matching command's actual output and explicit exit status, update the two implementation-owned completion items only after all sections are filled, and make `Deviations from Plan` agree with the transcript.

Before:

```markdown
### `go test -count=10 ./apps/node/internal/node ./apps/node/internal/transport`

_Record actual stdout/stderr and explicit exit status here. Do not summarize or reconstruct output._
```

After:

````markdown
### `go test -count=10 ./apps/node/internal/node ./apps/node/internal/transport`

```text
ok   iop/apps/node/internal/node ...
ok   iop/apps/node/internal/transport ...
```

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:** Every command in Final Verification is executed exactly, every review section contains actual output and an explicit exit status, and the final artifact-completeness command exits zero.

## 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.

15. `python3 -c 'from pathlib import Path; p=Path("agent-task/m-node-provider-execution-liveness-recovery/04+03_health_evidence/CODE_REVIEW-cloud-G04.md"); s=p.read_text(); assert "_Record actual stdout/stderr and exit status._" not in s; assert "| EVIDENCE-1 — Verification evidence fidelity | [x] |" in s; assert "- [x] [EVIDENCE-1]" in s; assert "- [x] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output." in s'` — exit zero after all evidence sections and implementation-owned completion items are filled.

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