iop/agent-task/single_request_plan_review_templates/CODE_REVIEW-cloud-G08.md
toki 8d0baac573 docs(single_request): 경로 presence 수리의 검증 근거를 기록한다
원격 evidence는 push된 commit이 있어야 만들 수 있으므로 구현 commit을 먼저
올린 뒤 그 commit으로 원격을 검증했다. 검증 대상 commit, 로컬 전체 suite와
race/full/self-test 결과, Darwin/arm64 재빌드 결과를 남긴다. 승인된 operator
설정 파일 두 개가 여전히 없어 live API 검증은 외부 차단 상태이며, 이를 통과로
기록하지 않고 정확한 복구 조건과 열두 개 입력 목록을 함께 남긴다.

직전 루프의 plan/review 로그와 이번 루프 pair도 함께 보존한다.

Refs: agent-task/single_request_plan_review_templates/PLAN-cloud-G08.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 10:11:32 +09:00

27 KiB

Code Review Reference - REVIEW_API

[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation. The task is NOT complete until every implementation-owned section below is filled in. Complete the Implementation Checklist; the final checklist item is mandatory before saving. Fill implementation-owned sections, then stop with active files in place and report ready for review. Execute the plan's selected root cause, scope, files, and dependency decisions as written. Do not choose another owner, narrow/expand the write boundary, or replace a fix with another verification attempt. If implementation is blocked, record the exact blocker, attempted commands/output, and resume condition only in implementation-owned evidence fields. Do not ask the user directly, present choices, call user-input tools, create control-plane stop files, or classify the next state. Finalization (Code Review Result, log rename, complete.log, archive moves, Review-Only Checklist) is review-agent-only, even after compaction/resume. Follow the ownership table at the bottom of this file for which sections you own.

Overview

date=2026-08-09 KST task=single_request_plan_review_templates, plan=2, tag=REVIEW_API

Archive Evidence Snapshot

  • Prior task: single_request_plan_review_templates, plan 1, tag REVIEW_API.
  • Archived plan: agent-task/single_request_plan_review_templates/plan_cloud_G08_1.log.
  • Archived review: agent-task/single_request_plan_review_templates/code_review_cloud_G08_1.log.
  • Prior verdict: FAIL; Required R1 identifies that plain string fields erase the distinction between omission and explicit empty/whitespace values before loadTemplateFile runs.
  • Fresh reviewer regression: go test -count=1 ./packages/go/config -run TestReviewConfiguredWhitespaceTemplatePathFailsClosed failed because configured whitespace plan_file was admitted as omission. The temporary reviewer-only test was removed after reproduction.
  • Existing focused, race, full Edge/Go, smoke self-test, and Darwin/arm64 changed-package suites passed. Live API qualification remains externally blocked because the approved remote operator config files and complete IOP_SINGLE_REQUEST_SMOKE_* inputs are absent.
  • Roadmap carryover: none; this is a non-milestone task.

For the Review Agent

[REVIEW AGENT ONLY] The finalization steps below are review-agent only. Implementing agents must not execute this section.

Compare implementation of each item against source files and verify that output in Verification Results matches code. Review completion means the following steps are finished:

  1. Append verdict and review_rework_count / evidence_integrity_failure routing signals.
  2. Archive CODE_REVIEW-cloud-G08.mdcode_review_cloud_G08_2.log and PLAN-cloud-G08.mdplan_cloud_G08_2.log.
  3. If PASS, write complete.log and move active task directory to agent-task/archive/YYYY/MM/single_request_plan_review_templates/. If WARN/FAIL, fully write the next filesystem state required by the code-review skill.
  4. If PASS and task group is m-<milestone-slug>, preserve the first-line milestone-task metadata in complete.log and report it for the runtime aggregation event. Roadmap state evaluation belongs to sync-milestone-workstate.
  5. Check applicable Review-Only Checklist items at the final .log location before reporting.

Implementation Item Completion

Item Status
REVIEW_API-1 — Preserve Configured Template Path Presence [x]
REVIEW_API-2 — Close Presence and Refresh Regression Gaps [x]
REVIEW_API-3 — Produce Trustworthy Local and Remote Evidence [x]

Implementation Checklist

  • [REVIEW_API-1] Preserve omission separately from configured template path values, reject configured empty/whitespace values before filesystem access, and deep-clone the optional state.
  • [REVIEW_API-2] Add Plan/Review presence-boundary and clone regressions, update refresh fixtures, and retain omitted fallback, relative success, and digest-only refresh evidence.
  • [REVIEW_API-3] Run fresh focused, race, full, smoke-self-test, documentation, and approved remote-profile verification; record the exact live-profile blocker if operator assets remain absent.
  • Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

Review-Only Checklist

[REVIEW AGENT ONLY] This checklist is used only by the review agent. Implementing agents must not modify or check this section.

  • Append one verdict of PASS, WARN, or FAIL and verified review_rework_count, evidence_integrity_failure to Code Review Result.
  • Verify that verdict, Dimension Assessment, and Required/Suggested/Nit classifications match.
  • Archive active CODE_REVIEW-*-G??.md to code_review_cloud_G08_2.log.
  • Archive active PLAN-*-G??.md to plan_cloud_G08_2.log.
  • Verify that the Agent-Ops managed block in .gitignore unignores agent-task/**/*.md and agent-task/**/*.log and ignores agent-roadmap/current.md.
  • If PASS, write complete.log based on agent-ops/skills/common/code-review/templates/complete-log-template.md and leave no active .md files.
  • If PASS, move active task directory agent-task/single_request_plan_review_templates/ to agent-task/archive/YYYY/MM/single_request_plan_review_templates/ and update this checklist at the final archive path.
  • If PASS and task group is m-<milestone-slug>, preserve and report milestone-task metadata for runtime aggregation, without modifying roadmap or directly calling update-roadmap.
  • If PASS for split work, remove empty active parent agent-task/single_request_plan_review_templates/ or verify it was kept due to remaining siblings/files.
  • If WARN/FAIL, write the next filesystem state matching code-review verdict and do not write complete.log.

Deviations from Plan

  • The config-refresh test pointer helper is named templatePath instead of the stringPointer name used in the plan's illustrative code block. The plan required "a local test pointer helper" without fixing the identifier; templatePath states what the pointer means at the two fixture call sites. Behavior, scope, and file set are unchanged.
  • No verification command was added, removed, or altered. Every command in Final Verification was executed as written.

Key Design Decisions

  • PlanFile and ReviewFile became *string with the existing mapstructure:"plan_file" / yaml:"plan_file,omitempty" names. execution_presets decodes through the strict ErrorUnused mapstructure decoder in LoadEdge, which maps an absent key to a nil pointer and a present key — including "" and " " — to a non-nil cell. omitempty on a pointer still omits an unset path on marshal, so no config file, example, or contract text needed to change.
  • resolveSingleRequestTemplates now branches on sr.Templates.PlanFile == nil / .ReviewFile == nil instead of strings.TrimSpace(...) == "". Omission is the only default-fallback signal; every configured value is dereferenced into loadTemplateFile, which trims and rejects empty/whitespace before filepath.IsAbs, os.Lstat, or os.Open. The previously dead empty check at packages/go/config/load.go:732-734 is now the live rejection path for decoded configuration, and the new regressions assert the error carries the single_request.templates.plan_file / .review_file context and never the resolved directory.
  • ExecutionSingleRequestTemplates gained its own Clone plus a cloneStringPointer helper, and ExecutionSingleRequestPolicy.Clone now calls p.Templates.Clone() instead of copying the struct by value. Without this, introducing pointers would have silently turned the existing snapshot copy into an alias. EffectivePlan / EffectiveReview stay plain value copies, so the frozen effective pair is unchanged.
  • The four presence-boundary cases reuse the existing validPresetYAML(planFile, reviewFile) helper by passing quoted YAML scalars ("" and " ") rather than changing the helper's omission contract. The helper keeps treating a Go empty string as "omit the key", which is exactly the distinction under test, so the omitted-fallback, relative-success, absolute-rejection, size, file-kind, UTF-8, and grammar cases stay byte-identical.
  • Existing fallback and relative-success subtests were strengthened with nil versus non-nil path assertions so a future regression that re-collapses presence into a plain string fails on the successful paths too, not only on the new rejection paths.
  • reflect.DeepEqual in configrefresh.appendSingleRequestChanged follows pointers, so two independently allocated cells holding the same path stay equal. The refresh classifier therefore still reports exactly one change for a content-only template edit, and TestClassifySingleRequestTemplateContentChange keeps proving that neither configured paths nor raw template bodies enter the change summary.
  • Contracts and specs were left untouched: agent-spec/runtime/provider-pool-config-refresh.md already requires non-empty relative paths rejected before filesystem access, so the code converged to the documents rather than the reverse.

Reviewer Checkpoints

  • Confirm omission and explicit empty/whitespace values remain distinguishable after Viper/mapstructure decode for both plan_file and review_file.
  • Confirm nil alone selects the built-in default and every non-nil path reaches trimmed empty/absolute rejection before Lstat or Open.
  • Confirm optional path cells are deep-cloned while effective template strings remain unchanged.
  • Confirm refresh classification still observes effective-content changes while exposing neither configured paths nor raw template bodies.
  • Confirm current contracts/specs remain unchanged and accurately match the repaired code.
  • Confirm all local evidence is fresh and the approved remote checkout is synchronized to the exact tested source commit before Darwin/arm64 evidence is accepted.
  • Confirm missing remote operator assets are recorded as an external block, never as a live-smoke pass.

Verification Results

REVIEW_API-1 — Presence-aware loader and clone boundary

go test -count=1 ./packages/go/config -run 'TestLoadEdgeSingleRequestTemplates|TestExecutionSingleRequestTemplatePathPresenceClone'

Tested source commit: 6f141b9121af505e01730fe2a13244d986060b27 (branch feature/single-request-plan-review-templates).

$ go test -count=1 ./packages/go/config -run 'TestLoadEdgeSingleRequestTemplates|TestExecutionSingleRequestTemplatePathPresenceClone'
ok  	iop/packages/go/config	0.030s
exit=0

Executed new/changed subtest names, from the -v run of the same selector:

=== RUN   TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed
=== RUN   TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/empty_plan_file
=== RUN   TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/whitespace_plan_file
=== RUN   TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/empty_review_file
=== RUN   TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/whitespace_review_file
    --- PASS: TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed (0.00s)
        --- PASS: TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/empty_plan_file (0.00s)
        --- PASS: TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/whitespace_plan_file (0.00s)
        --- PASS: TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/empty_review_file (0.00s)
        --- PASS: TestLoadEdgeSingleRequestTemplates/explicitly_configured_empty_template_path_fails_closed/whitespace_review_file (0.00s)
=== RUN   TestExecutionSingleRequestTemplatePathPresenceClone
--- PASS: TestExecutionSingleRequestTemplatePathPresenceClone (0.00s)

The unchanged boundary cases in the same test ran and passed in the same execution: omitted fallback, config-relative resolution, missing file, oversized 8193 bytes, invalid content, absolute plan_file/review_file rejection, both independent-fallback cases, the exact 8192-byte acceptance, symlink, directory, unreadable, non-UTF-8, and all eleven invalid-grammar cases.

Each of the four new cases asserts three things and all three held: the error carries its own single_request.templates.plan_file or single_request.templates.review_file context, the message is template path must not be empty, and the message never contains the config directory — proving the rejection happened before os.Lstat/os.Open. The clone regression proves the cloned PlanFile/ReviewFile cells are distinct pointers, that mutating them leaves the original paths and both effective templates untouched, and that an omitted (nil) path clones as omission rather than as a configured empty value.

REVIEW_API-2 — Focused and race regressions

go test -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
go test -race -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
$ go test -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
ok  	iop/packages/go/config	0.165s
ok  	iop/apps/edge/internal/configrefresh	0.044s
exit=0

$ go test -race -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
ok  	iop/packages/go/config	1.855s
ok  	iop/apps/edge/internal/configrefresh	1.151s
exit=0

Refresh redaction result, from the -v run of the adapted fixtures:

=== RUN   TestClassifySingleRequestTemplateContentChange
--- PASS: TestClassifySingleRequestTemplateContentChange (0.00s)

The two fixtures now build PlanFile/ReviewFile through the local templatePath helper, so current and candidate hold the same paths in separately allocated cells. reflect.DeepEqual still reports equality for those fields, the classifier still emits exactly one execution_presets["preset-templates"].single_request change of class applied driven by the effective-content edit, and the assertions that Previous/Next contain neither templates/plan.md nor the raw Plan template v1/v2 bodies still hold.

REVIEW_API-3 — Full local verification

test -z "$(gofmt -l packages/go/config/execution_preset_types.go packages/go/config/load.go packages/go/config/model_execution_preset_config_test.go apps/edge/internal/configrefresh/execution_preset_classify_test.go)"
git diff --check
go test -count=1 ./packages/go/config -run 'TestLoadEdgeSingleRequestTemplates|TestExecutionSingleRequestTemplatePathPresenceClone'
go test -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
go test -race -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
go test -count=1 ./apps/edge/... ./packages/go/...
make test-single-request-claude-smoke-self-test
rg --sort path -n 'Absolute and empty paths are rejected before any filesystem access|plan_file.*review_file.*non-empty paths' agent-spec/runtime/provider-pool-config-refresh.md

All commands below were run fresh from the repository root at tested source commit 6f141b9121af505e01730fe2a13244d986060b27. Later edits to this review file are evidence-only and did not touch source or tests.

=== tested commit: 6f141b9121af505e01730fe2a13244d986060b27 ===
$ test -z "$(gofmt -l packages/go/config/execution_preset_types.go packages/go/config/load.go packages/go/config/model_execution_preset_config_test.go apps/edge/internal/configrefresh/execution_preset_classify_test.go)"
exit=0
$ git diff --check
exit=0
$ go test -count=1 ./packages/go/config -run 'TestLoadEdgeSingleRequestTemplates|TestExecutionSingleRequestTemplatePathPresenceClone'
ok  	iop/packages/go/config	0.030s
exit=0
$ go test -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
ok  	iop/packages/go/config	0.165s
ok  	iop/apps/edge/internal/configrefresh	0.044s
exit=0
$ go test -race -count=1 ./packages/go/config ./apps/edge/internal/configrefresh
ok  	iop/packages/go/config	1.855s
ok  	iop/apps/edge/internal/configrefresh	1.151s
exit=0
$ go test -count=1 ./apps/edge/... ./packages/go/...
ok  	iop/apps/edge/cmd/edge	0.211s
ok  	iop/apps/edge/internal/authprojection	0.063s
ok  	iop/apps/edge/internal/bootstrap	0.497s
ok  	iop/apps/edge/internal/configrefresh	0.108s
ok  	iop/apps/edge/internal/controlplane	6.615s
ok  	iop/apps/edge/internal/edgecmd	0.076s
ok  	iop/apps/edge/internal/edgevalidate	0.107s
ok  	iop/apps/edge/internal/events	0.092s
ok  	iop/apps/edge/internal/input	0.123s
ok  	iop/apps/edge/internal/input/a2a	0.052s
ok  	iop/apps/edge/internal/node	0.042s
ok  	iop/apps/edge/internal/openai	8.405s
ok  	iop/apps/edge/internal/opsconsole	0.063s
ok  	iop/apps/edge/internal/service	8.194s
ok  	iop/apps/edge/internal/transport	4.806s
ok  	iop/packages/go/audit	0.012s
ok  	iop/packages/go/auth	10.038s
ok  	iop/packages/go/config	0.164s
ok  	iop/packages/go/credentiallease	0.046s
?   	iop/packages/go/events	[no test files]
ok  	iop/packages/go/execution	0.013s
ok  	iop/packages/go/hostsetup	0.011s
?   	iop/packages/go/jobs	[no test files]
?   	iop/packages/go/metadata	[no test files]
ok  	iop/packages/go/observability	0.037s
?   	iop/packages/go/policy	[no test files]
ok  	iop/packages/go/singlerequesttemplate	0.013s
ok  	iop/packages/go/streamgate	0.886s
?   	iop/packages/go/version	[no test files]
ok  	iop/packages/go/workspaceprotocol	0.025s
exit=0
$ make test-single-request-claude-smoke-self-test
./scripts/e2e-single-request-claude.sh --self-test
[single-request-claude-smoke] self-test passed: exact Claude base-route coverage, structured observation admission, child-only zero retry, authenticated model admission, closed failure classification, model/Edge/Node/runtime binding, zero-child preflight, derived verification, redaction, cleanup, signal handling, and atomic publication
exit=0
$ rg --sort path -n 'Absolute and empty paths are rejected before any filesystem access|plan_file.*review_file.*non-empty paths' agent-spec/runtime/provider-pool-config-refresh.md
134:| single-request effective templates | Optional `templates` (`plan_file`/`review_file`) load bounded Markdown relative to the directory containing `edge.yaml` only. Absolute and empty paths are rejected before any filesystem access; non-regular files, sizes over 8192 bytes, non-UTF-8 content, and invalid template grammar fail closed at load. Each file falls back to its built-in default independently, and refresh diff evidence reports SHA-256 digests only, never template paths or contents. |
182:- `execution_presets[].single_request.templates` is optional. `plan_file` and `review_file` must be non-empty paths relative to the directory containing `edge.yaml`; absolute and empty values are rejected before the loader opens anything. Each file is loaded as a regular file of at most 8192 valid UTF-8 bytes and must satisfy the documented template grammar; an omitted file falls back to its built-in default independently of the other. Refresh diff evidence reports only SHA-256 digests of the effective templates. Admission freezes the effective pair into the request binding, so a refreshed template reaches only requests admitted after the refresh.
exit=0

The documentation guard printed both current contract statements unchanged; the repaired loader now matches them instead of contradicting them.

REVIEW_API-3 — Approved Darwin/arm64 profile and external gate

test "$(git branch --show-current)" = "feature/single-request-plan-review-templates"
git rev-parse HEAD
git push origin feature/single-request-plan-review-templates
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-dev && export PATH=/opt/homebrew/bin:$PATH && git fetch origin feature/single-request-plan-review-templates && git switch feature/single-request-plan-review-templates && git reset --hard origin/feature/single-request-plan-review-templates && test -z "$(git status --short)" && test "$(git rev-parse HEAD)" = "$(git rev-parse origin/feature/single-request-plan-review-templates)" && test "$(go env GOOS)/$(go env GOARCH)" = "darwin/arm64" && go version && claude --version && sops --version && make build-edge build-node && go test -count=1 ./packages/go/config ./apps/edge/internal/configrefresh && make test-single-request-claude-smoke-self-test'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-dev && for file in dev-openai-toki.edge.yaml dev-openai-toki.sops.yaml; do if test -f "$file"; then echo "PRESENT $file"; else echo "MISSING $file"; fi; done && test -r /Users/toki/.config/sops/age/keys.txt && echo "PRESENT age identity"'

Source identity — local, origin, and remote all resolve to the same commit:

$ test "$(git branch --show-current)" = "feature/single-request-plan-review-templates"
branch ok
$ git rev-parse HEAD
6f141b9121af505e01730fe2a13244d986060b27
$ git push origin feature/single-request-plan-review-templates
To https://git.toki-labs.com/toki/iop.git
   702e62aa..6f141b91  feature/single-request-plan-review-templates -> feature/single-request-plan-review-templates
exit=0

Approved Darwin/arm64 checkout, synchronized to that exact commit and rebuilt:

$ ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-dev && export PATH=/opt/homebrew/bin:$PATH && git fetch origin feature/single-request-plan-review-templates && git switch feature/single-request-plan-review-templates && git reset --hard origin/feature/single-request-plan-review-templates && test -z "$(git status --short)" && test "$(git rev-parse HEAD)" = "$(git rev-parse origin/feature/single-request-plan-review-templates)" && test "$(go env GOOS)/$(go env GOARCH)" = "darwin/arm64" && go version && claude --version && sops --version && make build-edge build-node && go test -count=1 ./packages/go/config ./apps/edge/internal/configrefresh && make test-single-request-claude-smoke-self-test'
From https://git.toki-labs.com/toki/iop
 * branch              feature/single-request-plan-review-templates -> FETCH_HEAD
   31fada5d..6f141b91  feature/single-request-plan-review-templates -> origin/feature/single-request-plan-review-templates
Already on 'feature/single-request-plan-review-templates'
Your branch is behind 'origin/feature/single-request-plan-review-templates' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
HEAD is now at 6f141b91 fix(single_request): 템플릿 경로 생략과 명시 빈 값을 구분한다
go version go1.26.3 darwin/arm64
2.1.177 (Claude Code)
sops 3.13.1
[info] a new version of sops (v3.13.3) is available, you can update by visiting: https://github.com/getsops/sops/releases/tag/v3.13.3

[warning] Note that in a future version, sops will no longer check whether the current version is the latest when asking for sops' version. If you want to explicitly check for the latest version, add the `--check-for-updates` option to `sops --version`. This will hide this deprecation warning and will always check, even if the default behavior changes in the future.
mkdir -p build/bin
GOOS=darwin GOARCH=arm64 go build -trimpath -o build/bin/iop-edge ./apps/edge/cmd/edge
mkdir -p build/bin
go build -trimpath -o build/bin/iop-node ./apps/node/cmd/node
ok  	iop/packages/go/config	0.655s
ok  	iop/apps/edge/internal/configrefresh	0.847s
./scripts/e2e-single-request-claude.sh --self-test
[single-request-claude-smoke] self-test passed: exact Claude base-route coverage, structured observation admission, child-only zero retry, authenticated model admission, closed failure classification, model/Edge/Node/runtime binding, zero-child preflight, derived verification, redaction, cleanup, signal handling, and atomic publication
exit=0

The remote checkout was one commit behind at planning time (31fada5d) and was reset onto origin/feature/single-request-plan-review-templates; the clean-tree and HEAD-equality guards in the same command both passed before any build or test ran, so the Darwin/arm64 evidence belongs to 6f141b91 and no other tree.

Operator-asset probe — externally blocked, no live request was made:

$ ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-dev && for file in dev-openai-toki.edge.yaml dev-openai-toki.sops.yaml; do if test -f "$file"; then echo "PRESENT $file"; else echo "MISSING $file"; fi; done && test -r /Users/toki/.config/sops/age/keys.txt && echo "PRESENT age identity"'
MISSING dev-openai-toki.edge.yaml
MISSING dev-openai-toki.sops.yaml
PRESENT age identity
exit=0

Both approved operator config files are still absent, so live API qualification was not run and is not claimed as a pass. This is an unchanged pre-existing external block, not a result of this change. No file was created, substituted, or approximated, and the inert EDGE_CONFIG/SOPS_CONFIG names were not used.

Resume condition — live qualification can run only after the operator does both of the following:

  1. Restores dev-openai-toki.edge.yaml and dev-openai-toki.sops.yaml under /Users/toki/agent-work/iop-dev (the SOPS age identity at /Users/toki/.config/sops/age/keys.txt is already readable).
  2. Supplies all twelve Makefile-defined smoke inputs: IOP_SINGLE_REQUEST_SMOKE_CLAUDE_BIN, IOP_SINGLE_REQUEST_SMOKE_RUNTIME_EVIDENCE, IOP_SINGLE_REQUEST_SMOKE_BASE_URL, IOP_SINGLE_REQUEST_SMOKE_MODEL, IOP_SINGLE_REQUEST_SMOKE_EDGE_BIN, IOP_SINGLE_REQUEST_SMOKE_NODE_BIN, IOP_SINGLE_REQUEST_SMOKE_EDGE_CONFIG, IOP_SINGLE_REQUEST_SMOKE_OBSERVATION_FILE, IOP_SINGLE_REQUEST_SMOKE_METRICS_URL, IOP_SINGLE_REQUEST_SMOKE_WORKSPACE, IOP_SINGLE_REQUEST_SMOKE_OUTPUT, IOP_SINGLE_REQUEST_SMOKE_SECRET_ENV.

[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section? If anything is blank, go back and fill it in before saving this file. Leave review-agent-only sections unchanged.

Section Ownership

Section Owner Note
Header comment, Overview, Review Agent Instructions Fixed at stub creation Implementing agent must not modify or execute these (archive, complete.log, and task-directory archive move are review-agent only)
Archive Evidence Snapshot Fixed at stub creation from plan when present Implementing agent uses it as default prior-loop context; read only the specific archive files cited there when more detail is required
Implementation Item Completion (item names) Fixed at stub creation Implementing agent checks [ ][x] only
Implementation Checklist (item text/order) Fixed at stub creation from plan Implementing agent checks [ ][x] only
Review-Only Checklist Review agent only Implementing agent must not modify or check this section
Deviations from Plan, Key Design Decisions Implementing agent Replace placeholders with actual content
Reviewer Checkpoints Fixed at stub creation Pre-filled from plan
Verification Results (section headings + commands) Fixed at stub creation Implementing agent fills in command output only; command changes require a Deviations from Plan entry
Code Review Result Review agent appends Not included in stub