<!-- task=m-agent-readable-repository-refactor/13_inventory_query plan=7 tag=REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_IQRY -->

# Inventory query 전체 회귀 evidence 신뢰성 복구 계획

## 이 파일을 읽는 구현 에이전트에게

아래 고정 검증 명령을 그대로 실행한 뒤 `CODE_REVIEW-local-G03.md`의 구현 에이전트 소유 섹션에 실제 stdout/stderr, pipeline 종료 상태, 출력 파일 경로를 채우고 active 파일을 그대로 둔 채 리뷰 준비 상태를 보고한다. 종결, 로그 아카이브, `complete.log` 작성은 code-review 전용이다. 선택된 Milestone의 `구현 잠금 > 결정 필요` 항목이 실제 구현을 막는 경우에만 review stub의 `사용자 리뷰 요청`에 연결 근거를 기록하고 멈춘다. 구현 중 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하거나 `USER_REVIEW.md`/로그/`complete.log`를 만들지 않는다. 환경·secret·서비스 차단, 일반 범위 변경, 후속 에이전트가 채울 수 있는 evidence 공백은 사용자 리뷰 요청이 아니다.

## 배경

provider map assertion, focused/package test, canonical query와 리뷰어 fresh 전체 Go 회귀는 통과했다. 그러나 이전 active review는 `set -euo pipefail`에서 full-test 실패와 후속 exit 0을 동시에 기록해 실제 실행 evidence로 성립하지 않는다. Production/test 코드는 바꾸지 않고 full Go 회귀의 raw output과 pipeline status만 결정적으로 다시 확보한다.

## 사용자 리뷰 요청 흐름

선택된 Milestone의 `구현 잠금 > 결정 필요`만 `agent-ops/skills/common/_templates/implementation-user-review-request-section.md` 형식으로 active review stub에 기록한다. 구현 중 직접 사용자 prompt는 금지하며, 요청 검증과 실제 `USER_REVIEW.md` 작성은 code-review가 담당한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/agent-readable-repository-refactor.md`
- Milestone link: [Milestone 문서](agent-roadmap/phase/automation-runtime-bridge/milestones/agent-readable-repository-refactor.md)
- Task ids:
  - `inventory-query`: env/model/node/provider selector로 canonical inventory의 bounded 결과를 얻는 결정적 query 경로
- Completion mode: check-on-pass

## Archive Evidence Snapshot

- Prior task: `agent-task/m-agent-readable-repository-refactor/13_inventory_query`
- Archived plan: `agent-task/m-agent-readable-repository-refactor/13_inventory_query/plan_local_G03_6.log`
- Archived review: `agent-task/m-agent-readable-repository-refactor/13_inventory_query/code_review_local_G03_6.log`
- Verdict: FAIL
- Required: 1 — `set -euo pipefail`에서 full-test 실패와 exit 0을 동시에 기록한 재현 불가능한 evidence
- Suggested: 0
- Nit: 0
- Affected files: `CODE_REVIEW-local-G03.md`; production/test source 변경 없음
- Verification evidence: 리뷰어 fresh two-step list, focused/package test, canonical dev/dev-corp query, binary 0/1/2/help, readability, `git diff --check`, `go test -count=1 ./...`는 모두 PASS했다.
- Roadmap carryover: `inventory-query`는 신뢰 가능한 implementation-owned full regression evidence로 PASS하기 전까지 미완료다.
- Allowed narrow reread: 위 archived plan/review 두 파일만 추가 세부가 필요할 때 읽는다.

## 분석 결과

### 읽은 파일

- `AGENTS.md`
- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/common/rules-roadmap.md`
- `agent-ops/rules/common/rules-agent-spec.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-ops/rules/project/domain/platform-common/rules.md`
- `agent-ops/skills/common/router.md`
- `agent-ops/skills/common/code-review/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-ops/skills/common/_templates/implementation-user-review-request-section.md`
- `agent-test/local/rules.md`
- `agent-test/local/testing-smoke.md`
- `agent-test/local/platform-common-smoke.md`
- `agent-roadmap/current.md`
- `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/agent-readable-repository-refactor.md`
- `agent-spec/index.md`
- `agent-spec/runtime/provider-pool-config-refresh.md`
- `agent-contract/index.md`
- `agent-contract/inner/edge-config-runtime-refresh.md`
- `scripts/inventory-query/main.go`
- `scripts/inventory-query/provider_query.go`
- `scripts/inventory-query/main_test.go`
- `scripts/inventory-query/provider_query_test.go`
- `agent-task/m-agent-readable-repository-refactor/13_inventory_query/plan_local_G03_6.log`
- `agent-task/m-agent-readable-repository-refactor/13_inventory_query/code_review_local_G03_6.log`

### SDD 기준

Milestone은 `SDD: 불필요`다. 외부 API/proto/config schema나 runtime 책임 경계를 바꾸지 않는 동작 보존형 저장소 리팩터링이며, 이번 후속 작업은 코드 변경 없이 검증 evidence만 복구한다.

### 테스트 환경 규칙

`test_env=local`이다. `agent-test/local/rules.md`, `agent-test/local/testing-smoke.md`, `agent-test/local/platform-common-smoke.md`를 읽었다. 현재 checkout에서 `GOCACHE`를 `/tmp` 전용 경로로 고정하고 `go test -count=1 ./...`의 실제 stdout/stderr와 `PIPESTATUS`를 함께 기록한다. 외부 provider/runtime, Docker, endpoint, secret은 필요하지 않으며 output/cache는 `/tmp`에만 둔다. Go test cache 결과는 허용하지 않는다.

### 테스트 커버리지 공백

- Production/test 동작 공백은 없다. Provider map exact path/value/order/dedupe와 CLI/query 계약은 기존 테스트 및 리뷰어 fresh 실행으로 확인됐다.
- 남은 공백은 full Go 회귀의 implementation-owned raw output과 실제 pipeline status뿐이다.

### 심볼 참조

rename/remove 없음. Source symbol이나 call site를 변경하지 않는다.

### 분할 판단

split decision policy를 재평가했다. 하나의 full-test 명령과 active review evidence만 보완하는 동일 책임이며 API, call-site, 도메인, 테스트 전략 경계가 없다. 분할하면 같은 명령과 evidence를 중복하므로 기존 `13_inventory_query` 단일 follow-up이 안전하다.

### 범위 결정 근거

`scripts/inventory-query/**`, canonical inventory, deploy skill, agent-spec, agent-contract, roadmap, readability baseline/threshold/allowlist는 수정하지 않는다. 변경 범위는 active review evidence에 한정한다. Spec update not needed: 구현 동작과 근거 경로가 바뀌지 않는다.

### 빌드 등급

`local-G03`. 하나의 결정적 full Go regression command에서 raw output과 두 pipeline status를 확보하는 bounded verification 작업이다.

## 구현 체크리스트

- [ ] fresh 전체 Go 회귀를 고정 명령으로 실행해 raw stdout/stderr 파일, `go test`/`tee` 종료 상태, 실제 마지막 package 출력을 확보한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_IQRY-1] Full Go regression evidence 복구

#### 문제

`code_review_local_G03_6.log:195-206`은 `set -euo pipefail` 상태의 `go test -count=1 ./... | tee ...`가 실패했다고 기록한 뒤 다음 명령과 exit 0을 기록한다. Pipeline이 실제로 실패했다면 shell은 다음 명령으로 진행할 수 없으므로 해당 출력은 실제 실행을 재현하지 못한다.

#### 해결 방법

Full test 동안만 `set +e`로 종료를 직접 캡처하고 `PIPESTATUS`의 `go test`와 `tee` 값을 모두 출력한 뒤, raw output의 줄 수·hash·마지막 package 출력을 기록한다. 두 상태가 모두 0인지 별도 `test`로 판정하며 실패를 성공으로 정규화하지 않는다.

Before (`code_review_local_G03_6.log:195`):

```bash
go test -count=1 ./... | tee /tmp/iop-inventory-evidence-go-test-all.out
```

After:

```bash
set +e
go test -count=1 ./... 2>&1 | tee /tmp/iop-inventory-query-full-regression.out
pipeline_statuses=("${PIPESTATUS[@]}")
set -e
printf 'go_test_exit=%s tee_exit=%s\n' "${pipeline_statuses[0]}" "${pipeline_statuses[1]}"
wc -l /tmp/iop-inventory-query-full-regression.out
sha256sum /tmp/iop-inventory-query-full-regression.out
tail -n 20 /tmp/iop-inventory-query-full-regression.out
test "${pipeline_statuses[0]}" -eq 0
test "${pipeline_statuses[1]}" -eq 0
```

#### 수정 파일 및 체크리스트

- [ ] `CODE_REVIEW-local-G03.md` — exact command, raw output path, `PIPESTATUS`, `wc`, `sha256sum`, `tail`의 실제 출력을 기록한다.

#### 테스트 작성

새 테스트는 작성하지 않는다. 기존 source/test 동작은 이미 검증됐고 이번 Required는 full regression 실행 evidence 신뢰성 문제다.

#### 중간 검증

```bash
export GOCACHE=/tmp/iop-inventory-query-full-regression-gocache
mkdir -p "$GOCACHE"
set -euo pipefail
set +e
go test -count=1 ./... 2>&1 | tee /tmp/iop-inventory-query-full-regression.out
pipeline_statuses=("${PIPESTATUS[@]}")
set -e
printf 'go_test_exit=%s tee_exit=%s\n' "${pipeline_statuses[0]}" "${pipeline_statuses[1]}"
wc -l /tmp/iop-inventory-query-full-regression.out
sha256sum /tmp/iop-inventory-query-full-regression.out
tail -n 20 /tmp/iop-inventory-query-full-regression.out
test "${pipeline_statuses[0]}" -eq 0
test "${pipeline_statuses[1]}" -eq 0
```

`go_test_exit=0 tee_exit=0`이어야 하고 raw output의 마지막 package 결과가 실제 `ok` 또는 `[no test files]` 행으로 남아야 한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `CODE_REVIEW-local-G03.md` | REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_REVIEW_IQRY-1 |

## 최종 검증

```bash
export GOCACHE=/tmp/iop-inventory-query-full-regression-gocache
mkdir -p "$GOCACHE"
set -euo pipefail
set +e
go test -count=1 ./... 2>&1 | tee /tmp/iop-inventory-query-full-regression.out
pipeline_statuses=("${PIPESTATUS[@]}")
set -e
printf 'go_test_exit=%s tee_exit=%s\n' "${pipeline_statuses[0]}" "${pipeline_statuses[1]}"
wc -l /tmp/iop-inventory-query-full-regression.out
sha256sum /tmp/iop-inventory-query-full-regression.out
tail -n 20 /tmp/iop-inventory-query-full-regression.out
test "${pipeline_statuses[0]}" -eq 0
test "${pipeline_statuses[1]}" -eq 0
git diff --check
```

모든 명령은 exit 0이어야 한다. `go test`와 `tee` status를 따로 기록하고, review에는 raw output 경로와 `wc`/`sha256sum`/`tail`의 실제 stdout을 붙인다. `git diff --check`는 무출력이어야 한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
