<!-- task=m-stream-evidence-gate-core/07+01,06_commit_boundary plan=8 tag=REVIEW_API -->

# Reservation Attempt Identity와 Exact Releaser Evidence 재검증 계획

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

- 아래 구현 체크리스트와 검증 명령을 수행하고 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션에 실제 변경 내용과 stdout/stderr를 기록한다.
- active PLAN/CODE_REVIEW 파일을 유지한 채 review-ready만 보고한다. 판정, 로그 아카이브, `complete.log`, task 디렉터리 이동은 code-review skill 전용이다.
- 막히면 정확한 blocker, 시도한 명령과 출력, 재개 조건만 구현 소유 evidence에 기록한다.
- 사용자에게 질문하거나 선택지를 제시하지 않고, user-input 도구·control-plane stop 파일·다음 상태 분류를 만들지 않는다.

## 배경

reservation callback operation 검사는 추가됐지만 selected attempt identity는 여전히 검증되지 않고, 새 named test도 실제 mismatch를 만들지 않는다. releaser named tests는 exact suffix·actual confirm invalidation·re-entry error·cancel 시점 discard를 주장하지만 해당 상태를 직접 단언하지 않는다. 검증 문서의 inventory 출력도 동일 명령의 실제 결과와 충돌하므로 source assertion과 실행 원문을 다시 일치시킨다.

## Archive Evidence Snapshot

- 현재 계획 로그: `agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary/plan_local_G06_7.log`
- 현재 리뷰 로그: `agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary/code_review_local_G07_7.log`
- 판정: `FAIL`
- Required:
  - `res.attemptID`와 selected `b.attemptID`가 대조되지 않아 집중 재현에서 mismatch가 `err=<nil>`로 수락됐다.
  - boundary mismatch test가 실제 mismatch를 만들지 않고, releaser tests가 exact suffix/consumed, public actual confirm invalidation, re-entry error, cancel hook 시점 discard를 직접 단언하지 않는다.
  - exact 8-test inventory 명령은 실제 exit code 0/8개인데 active evidence에는 exit code 1/9개로 기록됐다.
- Suggested: 없음
- Nit: 없음
- 영향 파일: `packages/go/streamgate/commit_boundary.go`, `packages/go/streamgate/commit_boundary_test.go`, `packages/go/streamgate/stream_release_test.go`, 현재 task evidence.
- 실제 검증:
  - 임시 `TestReviewProbeRejectsReservationAttemptMismatch`는 `reservation attempt mismatch accepted: err=<nil>`로 실패했고 probe 파일은 제거했다.
  - exact 8-test inventory는 exit code 0으로 8개를 열거했고, 새 별도 테스트를 포함한 다른 정규식만 9개를 열거했다.
  - 9개 named race, fresh package, package race, vet, gofmt, proto와 hygiene는 PASS했다.
  - Edge/Node transport unit은 `/config/opt/go/src/crypto/internal/fips140cache` 누락으로 setup 전에 실패했다.
- 선행 완료:
  - `agent-task/archive/2026/07/m-stream-evidence-gate-core/01_event_contract_types/complete.log`
  - `agent-task/archive/2026/07/m-stream-evidence-gate-core/06+01_evidence_tail/complete.log`
- 구현자는 위 특정 로그 외의 `agent-task/archive/**`를 넓게 탐색하지 않는다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/stream-evidence-gate-core.md`
- Milestone link: [Milestone 문서](agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/stream-evidence-gate-core.md)
- Task ids:
  - `evidence-tail`: S19 overflow discard/cancel/terminal 통합 evidence
  - `commit-boundary`: S03/S04/S05/S17 staged start, irreversible state와 single terminal
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `packages/go/streamgate/commit_boundary.go`
- `packages/go/streamgate/commit_boundary_test.go`
- `packages/go/streamgate/stream_release.go`
- `packages/go/streamgate/stream_release_test.go`
- `packages/go/streamgate/evidence_tail.go`의 `PreparedRelease`, prepare/confirm/invalidation/discard/state accessor 구간
- `agent-ops/rules/project/domain/platform-common/rules.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-ops/rules/common/rules-agent-spec.md`
- `agent-test/local/rules.md`
- `agent-test/local/platform-common-smoke.md`
- `agent-spec/index.md`
- `agent-contract/index.md`
- `agent-roadmap/current.md`
- `agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md`
- `agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/stream-evidence-gate-core.md`
- `agent-roadmap/sdd/knowledge-tool-optimization-extension/stream-evidence-gate-core/SDD.md`
- `agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary/plan_local_G06_7.log`
- `agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary/code_review_local_G07_7.log`
- `agent-task/archive/2026/07/m-stream-evidence-gate-core/01_event_contract_types/complete.log`
- `agent-task/archive/2026/07/m-stream-evidence-gate-core/06+01_evidence_tail/complete.log`

`agent-spec/index.md`와 `agent-contract/index.md`에는 이 내부 streamgate boundary에 직접 매칭되는 active spec/contract 문서가 없다. 코드, 테스트와 승인된 SDD를 원본으로 사용한다.

### SDD 기준

- SDD: `agent-roadmap/sdd/knowledge-tool-optimization-extension/stream-evidence-gate-core/SDD.md`
- 상태: `[승인됨]`; SDD/Milestone 잠금 `해제`, 결정 필요 `없음`.
- 대상 Acceptance Scenario:
  - `S03`/`commit-boundary`: staged response-start와 terminal outcome을 한 번만 결정한다.
  - `S05`/`commit-boundary`: forward commit state를 rollback하지 않는다.
  - `S17`/`commit-boundary`: selected attempt의 start/output만 한 번 노출한다.
  - `S19`/`evidence-tail`: pending/prepared state를 discard한 뒤 cancel하고 terminal error로 끝낸다.
- Evidence Map의 no eager commit/single terminal, state monotonicity, selected attempt exposure, fail-closed/discard-before-cancel 요구를 `REVIEW_API-1/2`의 실제 mismatch와 callback-time state assertion 및 named/race 검증으로 역산했다.

### 테스트 환경 규칙

- `test_env`: local.
- `agent-test/local/rules.md`와 매칭 profile `agent-test/local/platform-common-smoke.md`를 읽었다.
- PATH host Go(`/config/.local/bin/go` → `/config/opt/go/bin/go`, go1.26.2 linux/arm64, GOROOT `/config/opt/go`)를 바꾸지 않고 `make proto`, fresh/race package, vet, Edge/Node transport unit, gofmt와 deterministic hygiene를 적용한다.
- Edge/Node transport unit은 host GOROOT의 `crypto/internal/fips140cache` 누락으로 setup 전에 실패한다. 다른 toolchain으로 우회하지 않고 원문/exit code와 `/config/opt/go` 복구 조건을 기록한다.
- 외부 runner/service는 없고 production consumer/proto/config write도 없으므로 별도 원격 프리플라이트와 full-cycle은 적용하지 않는다. test-rule 유지보수도 필요하지 않다.

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

- `applySinkOutcomeLockedWithOpLocked`는 reservation pointer/generation/op만 검사하며 `res.attemptID`를 읽지 않는다.
- `TestCommitBoundaryRejectsReservationCallbackMismatch`는 모든 public call에 matching operation을 사용해 이름과 달리 mismatch를 만들지 않는다.
- releaser confirmation tests는 위치 구별 expected suffix를 비교하지 않고 full confirm 뒤 consumed 상태를 확인하지 않는다.
- terminal suppression tests는 release callback 도중 prepared token을 invalidate해 `ConfirmRelease` 자체가 실패하는 public 경로를 실행하지 않는다.
- re-entry test는 반환 error를 버리고, cancel hook은 discard state를 검사하지 않는다.
- 구현 evidence의 exact inventory stdout/exit code가 실제 재실행 결과와 충돌한다.

### 심볼 참조

- public rename/remove 없음.
- private standalone test `TestCommitBoundaryRejectsReservationCallbackMismatch`는 제거하고 기존 named `TestCommitBoundaryPreservesReturnedStateAcrossSinkErrors`의 subtest로 흡수한다.
- `applySinkOutcomeLockedWithOpLocked` call site는 `commit_boundary.go`의 response-start/release/terminal outcome 세 곳뿐이다.
- `CommitBoundary`와 `StreamReleaser`의 production call site는 현재 package 밖에 없다.
- 새 dependency는 없다.

### 분할 판단

- split decision policy를 파일명 선택 전에 평가했다.
- 기존 dependent subtask `07+01,06_commit_boundary`를 유지한다. predecessor `01`과 `06`은 Archive Evidence Snapshot의 두 `complete.log`로 충족됐다.
- attempt identity와 exact releaser evidence는 같은 reservation/prepare-confirm/terminal 불변조건의 현재 Required이며 동일 named inventory와 package race로 함께 판정된다. 별도 production/test subtask로 나누면 한쪽만으로 S03/S05/S17/S19를 완료할 수 없고 기존 runtime dependency identity를 깨므로 단일 follow-up이 안전하다.

### 범위 결정 근거

- 동작 수정은 `commit_boundary.go`, 회귀 보강은 `commit_boundary_test.go`와 `stream_release_test.go`, evidence는 현재 review stub에 한정한다.
- `stream_release.go`와 `evidence_tail.go`의 production behavior, Edge/Node consumers, proto/config, host Go 설치, 다른 dirty worktree는 수정하지 않는다.
- 테스트 assertion을 위해 public API가 없는 내부 state는 같은 package test에서 읽되 production accessor를 추가하지 않는다.

### 최종 라우팅

- evaluation_mode: `isolated-reassessment`
- build:
  - closures: `scope_closed=true`, `context_closed=true`, `verification_closed=true`, `evidence_trusted=true`, `ownership_closed=true`, `decision_closed=true`
  - closure basis:
    - scope: attempt identity check와 두 named test 파일의 정확한 assertion 경계가 확정됐다.
    - context: reservation, prepare-confirm, cancel/terminal state와 대상 SDD rows를 한 package에서 유지할 수 있다.
    - verification: focused mismatch, exact matrix, named race와 deterministic inventory로 완료를 판정할 수 있다.
    - evidence: 집중 재현과 inventory 재실행 출력이 현재 source/evidence 충돌을 재현한다.
    - ownership: task write-set과 다른 dirty 변경 및 host Go blocker가 분리된다.
    - decision: SDD/Milestone 잠금이 해제됐고 사용자 결정 항목이 없다.
  - scores: `scope_coupling=1`, `state_concurrency=2`, `blast_irreversibility=0`, `evidence_diagnosis=2`, `verification_complexity=1`
  - result: lane `local`, grade `G06`, filename `PLAN-local-G06.md`
- review:
  - closures: `scope_closed=true`, `context_closed=true`, `verification_closed=true`, `evidence_trusted=true`, `ownership_closed=true`, `decision_closed=true`
  - closure basis:
    - scope: 실제 mismatch와 exact releaser assertion 목표가 명시됐다.
    - context: source, named tests, SDD evidence와 원문 출력이 bounded review context에 들어온다.
    - verification: inventory/focused/named/package 명령이 실제 경로를 독립적으로 선택한다.
    - evidence: false evidence를 재현한 현재 출력과 필요한 source assertion이 구분됐다.
    - ownership: review 대상 파일과 범위 밖 dirty worktree가 분리된다.
    - decision: 제품 선택이나 외부 권한 판단이 필요 없다.
  - scores: `scope_coupling=1`, `state_concurrency=2`, `blast_irreversibility=0`, `evidence_diagnosis=2`, `verification_complexity=1`
  - result: lane `local`, grade `G06`, filename `CODE_REVIEW-local-G06.md`

## 구현 체크리스트

- [ ] `REVIEW_API-1` reservation attempt/operation identity를 실제로 검증하고 forward state/error join과 terminal 뒤 sink callback 0회를 기존 named boundary test의 실제 mismatch subtest로 고정한다.
- [ ] `REVIEW_API-2` releaser named 회귀에서 위치 구별 zero/partial/full suffix·token·cursor·consumed matrix, public actual confirm invalidation, re-entry conflict exact count와 cancel hook 시점 discard를 직접 단언한다.
- [ ] `REVIEW_API-3` exact 8-test inventory와 focused/named/fresh/race/profile/hygiene 명령을 그대로 실행하고 실제 stdout/stderr 및 host transport blocker를 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

### [REVIEW_API-1] Reservation attempt/operation identity와 terminal exactly-once

- 문제:
  - `packages/go/streamgate/commit_boundary.go:173`은 active reservation pointer/generation만 확인하고 `res.attemptID`와 `b.attemptID`를 대조하지 않는다.
  - `packages/go/streamgate/commit_boundary_test.go:1147`의 named test는 실제 mismatched callback operation/attempt를 만들지 않는다.
- 해결 방법:
  - active reservation/generation 확인 뒤 selected attempt mismatch를 `ErrBoundaryInvalidAttempt` identity error로 만들고, operation mismatch와 함께 sink/transition/role error에 join한다.
  - identity mismatch여도 valid forward state를 먼저 단조 반영하고 staged start를 정리한다.
  - 별도 ninth test를 제거하고 실제 attempt mismatch, release-reservation/terminal-callback, terminal-reservation/release-callback을 기존 `TestCommitBoundaryPreservesReturnedStateAcrossSinkErrors` subtest로 옮긴다.
  - callback이 terminal state를 반환한 뒤 `ReleaseSafe`와 `CommitTerminal` 재호출이 `ErrBoundaryAlreadyTerminal`이며 start/release/terminal sink count가 증가하지 않음을 단언한다.
- Before (`packages/go/streamgate/commit_boundary.go:173`):

```go
if b.activeReservation != res || res.generation != b.generation {
	return ErrBoundarySerializerConflict
}
```

- After (`packages/go/streamgate/commit_boundary.go`):

```go
var identityErr error
if res.attemptID != b.attemptID {
	identityErr = ErrBoundaryInvalidAttempt
}
identityErr = errors.Join(identityErr, validateReservationCallbackOperation(res.op, callbackOp))
```

- 수정 파일 및 체크리스트:
  - [ ] `packages/go/streamgate/commit_boundary.go`: attempt identity와 operation matrix error join
  - [ ] `packages/go/streamgate/commit_boundary_test.go`: 실제 mismatch table, forward terminal과 후속 callback 0회
- 테스트 작성:
  - `TestCommitBoundaryPreservesReturnedStateAcrossSinkErrors`에 same-package reservation helper를 사용한 attempt/op mismatch subtest를 추가한다.
  - `TestCommitBoundaryRejectsReservationCallbackMismatch` standalone 이름은 제거해 exact 8-test inventory를 유지한다.
- 중간 검증:
  - `go test -race -count=20 ./packages/go/streamgate -run '^TestCommitBoundary(PreservesReturnedStateAcrossSinkErrors|RejectsWrongOrMissingAttempt|SerializesConcurrentStartAndTerminal|RejectsPostOpenReplacement)$'`
  - 기대 결과: mismatch error join, monotonic terminal state와 후속 sink callback 0회가 PASS한다.

### [REVIEW_API-2] Exact confirmation과 discard-before-cancel evidence

- 문제:
  - `packages/go/streamgate/stream_release_test.go:517`은 exact suffix 대신 non-empty만 확인한다.
  - `:746`은 release failure를 confirm failure로 분류하고, `:768`은 release callback 중 token invalidation을 만들지 않는다.
  - `:825`는 re-entry error를 버리고 `:883`의 cancel hook은 discard state를 검사하지 않는다.
- 해결 방법:
  - 위치별 text가 다른 fixture를 사용해 zero/partial/full 각 단계의 exact remaining suffix, 새 token, cursor와 full-consumed reprepare 거부를 table로 비교한다.
  - `sink.onRelease`에서 prepared token을 실제 invalidate한 뒤 public `ReleaseTerminalEpoch`가 confirm error를 반환하고 terminal count 0을 유지하는 경로를 만든다.
  - outstanding prepare, invalidated epoch, sink release failure, actual confirm invalidation은 terminal 0회, clean completed epoch만 1회임을 한 named test에서 비교한다.
  - re-entry 결과를 bounded channel로 수집해 모든 error가 `ErrReleaserSerializerConflict`인지와 callback count를 함께 단언한다.
  - canceller hook 안에서 pending entries/runes, prepared token map, stale confirm rejection을 검사하고 `discard-verified → cancel → terminal` trace를 남긴다.
- Before (`packages/go/streamgate/stream_release_test.go:517`):

```go
gotEvents := prepared2.ReleaseEvents()
if len(gotEvents) == 0 {
	t.Fatal("remaining suffix events is empty")
}
```

- After (`packages/go/streamgate/stream_release_test.go`):

```go
if diff := compareStrings(releaseEventTexts(t, prepared.ReleaseEvents()), wantSuffix); diff != "" {
	t.Fatal(diff)
}
if gotCursor != wantCursor || gotToken == staleToken {
	t.Fatal("confirmation identity mismatch")
}
```

- 수정 파일 및 체크리스트:
  - [ ] `packages/go/streamgate/stream_release_test.go`: distinct fixture, exact matrix, public confirm invalidation, re-entry error/count, discard-aware ordered spy
- 테스트 작성:
  - 기존 `TestStreamReleaserConfirmsProgressEvenWhenSinkFails`, `TestStreamReleaserSuppressesSuccessTerminalUntilConfirmation`, `TestStreamReleaserRejectsReentrantCallbackWithoutDeadlock`, `TestStreamReleaserFailPendingOrdersDiscardCancelTerminal`을 직접 보강한다.
  - 새 top-level test 이름을 추가하지 않는다.
- 중간 검증:
  - `go test -race -count=20 ./packages/go/streamgate -run '^TestStreamReleaser(ConfirmsProgressEvenWhenSinkFails|SuppressesSuccessTerminalUntilConfirmation|RejectsReentrantCallbackWithoutDeadlock|FailPendingOrdersDiscardCancelTerminal)$'`
  - 기대 결과: exact suffix/token/cursor/consumed, terminal 0/1, re-entry error/count와 discard-before-cancel이 PASS한다.

### [REVIEW_API-3] Verification trust 폐쇄

- 문제:
  - archived review의 exact inventory 명령과 기록된 stdout/exit code가 실제 재실행 결과와 충돌한다.
  - 긴 fresh output을 `...`로 생략하면서 별도 파일 경로를 기록하지 않았다.
- 해결 방법:
  - exact 8-test inventory를 변경 없이 실행하고 exit code 0과 열거된 이름을 그대로 기록한다.
  - focused/named/package race와 vet을 동일 PATH host Go로 실행한다.
  - 출력이 길면 `/tmp/iop-streamgate-review-api-8.log`에 저장한 정확한 명령과 경로를 기록하며 repo 안에 tool/output artifact를 남기지 않는다.
  - transport setup failure가 유지되면 원문, exit code와 host Go 복구 조건을 기록한다.
- 수정 파일 및 체크리스트:
  - [ ] `agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary/CODE_REVIEW-local-G06.md`: 실제 명령과 stdout/stderr/exit code
- 테스트 작성:
  - production regression은 `REVIEW_API-1/2`에서 작성한다. 이 항목은 evidence와 hygiene만 소유한다.
- 중간 검증:
  - 아래 최종 검증 1~13을 순서대로 실행한다.

## 의존 관계 및 구현 순서

1. predecessor `01_event_contract_types`와 `06+01_evidence_tail`은 Archive Evidence Snapshot의 `complete.log`로 충족됐다.
2. `REVIEW_API-1`이 reservation identity와 terminal re-entry를 고정한다.
3. `REVIEW_API-2`가 exact prepare-confirm/cancel 공개 evidence를 폐쇄한다.
4. `REVIEW_API-3`이 source와 실행 원문을 대조한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `packages/go/streamgate/commit_boundary.go` | REVIEW_API-1 |
| `packages/go/streamgate/commit_boundary_test.go` | REVIEW_API-1 |
| `packages/go/streamgate/stream_release_test.go` | REVIEW_API-2 |
| `agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary/CODE_REVIEW-local-G06.md` | REVIEW_API-3 |

## 최종 검증

1. `command -v go && readlink -f "$(command -v go)" && go version && go env GOROOT`
   - 기대 결과: PATH host Go와 실제 경로/GOROOT 기록.
2. `gofmt -d packages/go/streamgate/commit_boundary.go packages/go/streamgate/commit_boundary_test.go packages/go/streamgate/stream_release_test.go`
   - 기대 결과: stdout 없음.
3. `test "$(go test -list '^Test(CommitBoundary(PreservesReturnedStateAcrossSinkErrors|RejectsWrongOrMissingAttempt|SerializesConcurrentStartAndTerminal|RejectsPostOpenReplacement)|StreamReleaser(ConfirmsProgressEvenWhenSinkFails|SuppressesSuccessTerminalUntilConfirmation|RejectsReentrantCallbackWithoutDeadlock|FailPendingOrdersDiscardCancelTerminal))$' ./packages/go/streamgate | sed -n '/^Test/p' | wc -l)" -eq 8`
   - 기대 결과: exit code 0; 정확히 8개 named regression.
4. `go test -race -count=20 ./packages/go/streamgate -run '^Test(CommitBoundary(PreservesReturnedStateAcrossSinkErrors|RejectsWrongOrMissingAttempt|SerializesConcurrentStartAndTerminal|RejectsPostOpenReplacement)|StreamReleaser(ConfirmsProgressEvenWhenSinkFails|SuppressesSuccessTerminalUntilConfirmation|RejectsReentrantCallbackWithoutDeadlock|FailPendingOrdersDiscardCancelTerminal))$'`
   - 기대 결과: attempt/op mismatch, callback 0회, exact suffix/token/order와 race/deadlock PASS.
5. `go test -count=1 -v ./packages/go/streamgate -run '^Test(CommitBoundary|StreamReleaser)' | tee /tmp/iop-streamgate-review-api-8.log`
   - 기대 결과: exit code 0; 실제 test/subtest 출력은 stdout과 `/tmp/iop-streamgate-review-api-8.log`에 보존되고 repo에는 생성물이 없다.
6. `go test -count=1 ./packages/go/streamgate`
   - 기대 결과: PASS.
7. `go test -race -count=1 ./packages/go/streamgate`
   - 기대 결과: PASS, race 없음.
8. `go vet ./packages/go/streamgate`
   - 기대 결과: PASS, stdout 없음.
9. `make proto`
   - 기대 결과: 성공, proto 생성물 추가 diff 없음.
10. `go test -count=1 ./apps/edge/internal/transport ./apps/node/internal/transport`
    - 기대 결과: PASS. 동일 GOROOT setup failure면 우회 없이 원문/exit code와 `/config/opt/go` 복구 조건 기록.
11. `! rg --sort path -n 'TestCommitBoundaryRejectsReservationCallbackMismatch|TestReviewProbe|_ = err|remaining suffix events is empty|actual token invalidation.*DiscardPendingForTerminal' packages/go/streamgate/commit_boundary_test.go packages/go/streamgate/stream_release_test.go`
    - 기대 결과: stdout 없음, exit code 0.
12. `rg --sort path -n 'res\.attemptID|releaseEventTexts\(|compareStrings\(|ErrReleaserSerializerConflict|discard-verified' packages/go/streamgate/commit_boundary.go packages/go/streamgate/commit_boundary_test.go packages/go/streamgate/stream_release_test.go`
    - 기대 결과: attempt identity와 exact assertion/error/order 근거가 모두 열거된다.
13. `git diff --check -- packages/go/streamgate/commit_boundary.go packages/go/streamgate/commit_boundary_test.go packages/go/streamgate/stream_release_test.go agent-task/m-stream-evidence-gate-core/07+01,06_commit_boundary proto/gen/iop && git status --short -- proto/gen/iop`
    - 기대 결과: stdout 없음.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다.
