<!-- task=m-iop-agent-cli-runtime/06+05_config_registry plan=0 tag=API -->

# Repo-global/User-local Config Registry

## For the Implementing Agent

`05_contract_boundary/complete.log`가 있어야 시작한다. 구현 및 실제 출력은 `CODE_REVIEW-cloud-G09.md`에 기록하고 loop artifact는 review agent에 맡긴다.

## Background

현재 `agentconfig`는 provider catalog만 strict-load한다. `config-registry`는 repo-global defaults를 읽기 전용으로 유지하면서 device/project override, watcher와 immutable execution revision을 제공해야 한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-cli-runtime.md`
- Milestone link: [Milestone 문서](agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-cli-runtime.md)
- Task ids:
  - `config-registry`: repo-global/local registry와 immutable revision
- Completion mode: check-on-pass

## Analysis

### Files Read

- `packages/go/agentconfig/catalog.go`
- `packages/go/agentconfig/load.go`
- `packages/go/agentconfig/validate.go`
- `packages/go/agentconfig/catalog_test.go`
- `packages/go/agentconfig/default_catalog_test.go`
- `agent-contract/inner/agent-runtime.md`
- `agent-roadmap/sdd/automation-runtime-bridge/iop-agent-cli-runtime/SDD.md`

### SDD Criteria

S05/Evidence Map S05를 구현한다: strict repo/local parse, local-wins scalar/map precedence, ordered arrays whole replacement, repo write 금지, watcher revision A/B snapshot을 검증한다.

### Test Environment Rules

local/platform-common-smoke를 읽었다. baseline `go test -count=1 ./packages/go/agentconfig`은 PASS다. 새 package test는 fresh cache로 실행한다.

### Test Coverage Gaps

현재 catalog tests는 provider declaration만 다룬다. global/local merge, invalid local file, watcher change와 execution snapshot 회귀는 없다.

### Split Judgment

contract `05`가 schema source를 제공한다. selector는 registry snapshot에 의존하므로 `07`은 `06` 뒤에 둔다.

### Scope Rationale

Edge `packages/go/config`와 `configs/edge.yaml`은 별 schema라 제외한다. credential value는 local config에도 직렬화하지 않는다.

### Final Routing

`first-pass`; cloud G09 (multi-module durable config, watcher, revision). risk: boundary-contract, structured-interpretation. review는 official cloud G09.

## Implementation Checklist

- [ ] RuntimeConfig와 global/local schema, strict decode 및 revision hash를 새 runtime config file에 구현한다.
- [ ] local overlay precedence와 ordered rule 전체 교체를 deterministic merge로 구현하고 repo write를 금지한다.
- [ ] watcher가 valid change만 다음 invocation revision으로 publish하도록 구현한다.
- [ ] merge, invalid config, array replacement, watcher A/B와 read-only repo tests를 추가한다.
- [ ] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

### [API-1] immutable runtime config snapshot을 제공한다

**Problem:** `agentconfig.Load`는 catalog 한 파일만 반환하며 local registry/state와 execution revision이 없다.

**Solution:** `packages/go/agentconfig/runtime_config.go`와 watcher를 추가해 contract-defined global template와 local device/project overlay를 strict decode한다. `RuntimeSnapshot`은 merged value와 source revisions를 immutable copy로 노출하고 ordered rule arrays는 replacement만 허용한다.

**Test Strategy:** `runtime_config_test.go`에서 precedence, clone immutability, invalid values, file watcher의 A/B revision과 repo file digest 불변을 검증한다.

**Verification:** `go test -count=1 ./packages/go/agentconfig`가 PASS한다.

## Modified Files Summary

| File | Item |
|---|---|
| `packages/go/agentconfig/runtime_config.go` | API-1 |
| `packages/go/agentconfig/runtime_config_test.go` | API-1 |
| `packages/go/agentconfig/watcher.go` | API-1 |
| `agent-contract/inner/iop-agent-cli-runtime.md` | API-1 (contract conformance) |

## Dependencies and Execution Order

`05_contract_boundary` PASS 후에만 구현한다.

## Final Verification

```bash
go test -count=1 ./packages/go/agentconfig
go test -count=1 ./packages/go/agenttask
git diff --check
```

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