docs(agent-task): OpenAI 재구성 검토 근거를 기록한다
This commit is contained in:
parent
c1c1e19678
commit
071cd2427b
1 changed files with 72 additions and 20 deletions
|
|
@ -56,16 +56,16 @@ task=m-stream-evidence-gate-core/17+13,16_openai_request_rebuilder, plan=1, tag=
|
|||
|
||||
| 항목 | 완료 여부 |
|
||||
|------|---------|
|
||||
| REVIEW_OPENAI_REBUILDER-1 실제 backing과 ledger 일치 | [ ] |
|
||||
| REVIEW_OPENAI_REBUILDER-2 bounded one-shot patch lifecycle | [ ] |
|
||||
| REVIEW_OPENAI_REBUILDER-3 통합 검증 신뢰도 복구 | [ ] |
|
||||
| REVIEW_OPENAI_REBUILDER-1 실제 backing과 ledger 일치 | [x] |
|
||||
| REVIEW_OPENAI_REBUILDER-2 bounded one-shot patch lifecycle | [x] |
|
||||
| REVIEW_OPENAI_REBUILDER-3 통합 검증 신뢰도 복구 | [x] |
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [ ] REVIEW_OPENAI_REBUILDER-1 Core owned backing/commit과 OpenAI canonical/rebuilt dispatch lease를 추가해 실제 live backing과 retained/peak를 일치시킨다.
|
||||
- [ ] REVIEW_OPENAI_REBUILDER-2 continuation/schema patch를 동일 상한에 one-shot 예약하고 duplicate/overflow/close/cancel에서 즉시 해제한다.
|
||||
- [ ] REVIEW_OPENAI_REBUILDER-3 near-limit/release 회귀, fresh unit/race, OpenAI smoke와 실제 entrypoint full-cycle evidence를 완성한다.
|
||||
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.
|
||||
- [x] REVIEW_OPENAI_REBUILDER-1 Core owned backing/commit과 OpenAI canonical/rebuilt dispatch lease를 추가해 실제 live backing과 retained/peak를 일치시킨다.
|
||||
- [x] REVIEW_OPENAI_REBUILDER-2 continuation/schema patch를 동일 상한에 one-shot 예약하고 duplicate/overflow/close/cancel에서 즉시 해제한다.
|
||||
- [x] REVIEW_OPENAI_REBUILDER-3 near-limit/release 회귀, fresh unit/race, OpenAI smoke와 실제 entrypoint full-cycle evidence를 완성한다.
|
||||
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.
|
||||
|
||||
## 코드리뷰 전용 체크리스트
|
||||
|
||||
|
|
@ -85,11 +85,18 @@ task=m-stream-evidence-gate-core/17+13,16_openai_request_rebuilder, plan=1, tag=
|
|||
|
||||
## 계획 대비 변경 사항
|
||||
|
||||
_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._
|
||||
- 계획의 production/test 범위와 공개 계약은 그대로 구현했다.
|
||||
- `json.RawMessage` semantic view가 canonical과 같은 backing일 때 `json.Marshal`로 동일 full-body를 잠시 복제하지 않도록, validated raw alias를 직접 ownership-transfer하는 최적화를 함께 적용했다. 이는 REVIEW_OPENAI_REBUILDER-1의 실제 backing 일치 조건을 만족하기 위한 범위 내 보강이다.
|
||||
- 실제 entrypoint 검증은 기본 config를 수정하지 않고 `/tmp/iop-g10-full-cycle.C75Cpy`의 임시 config/FIFO/deterministic persistent `fake-cli` harness로 수행했다. 첫 harness 실행은 Node의 multiline payload 중 첫 줄만 `[node-message]` prefix를 갖는 출력 형식을 extractor가 잘못 해석해 validator만 실패했다. 실제 Edge/Node 원문은 정상 순서였으며, multiline-aware extractor로 전체 cycle을 새로 실행해 exit 0과 payload equality를 확인했다.
|
||||
- 실행 중 병렬 선행 task가 `packages/go/streamgate/runtime.go`를 작성하던 순간 REVIEW_OPENAI_REBUILDER-2 명령이 compile 실패했으나, 해당 범위에 손대지 않고 선행 작업 종료 뒤 같은 명령을 fresh 재실행해 통과했다. 아래에는 최종 안정 상태의 원문 출력을 기록한다.
|
||||
|
||||
## 주요 설계 결정
|
||||
|
||||
_구현 에이전트가 주요 설계 결정 사항을 기록한다._
|
||||
- 기존 defensive-copy `IssueBackingHandle`/`CommitTyped`/accessor는 호환 유지하고, opt-in `IssueOwnedBackingHandle`/`CommitOwnedTyped`와 lifetime-bound read-only alias accessor만 추가했다.
|
||||
- OpenAI canonical, exact replay, rebuilt output은 각각 하나의 owned backing만 보존한다. `openAIRebuiltLease`가 synchronous provider submission 동안 exact 또는 rebuilt body alias와 snapshot/guard를 붙잡고, submission 반환 직후 exactly-once release한다.
|
||||
- byte token estimator는 `[]byte`에서 UTF-8 rune을 직접 세어 기존 string estimator와 invalid UTF-8까지 동일한 결과를 내면서 full-body string 변환을 제거한다.
|
||||
- continuation/schema patch는 ingress의 같은 rebuild reservation ledger에 넣고 duplicate를 거부하며, directive take 시 map에서 제거하는 one-shot 소유권으로 처리한다. success/error/context cancel/Close에서 guard와 slice를 정확히 한 번 해제하고, output reservation은 살아 있는 patch reservation을 포함한 current peak를 검사한다.
|
||||
- exact owned peak와 peak-1 overflow fixture가 canonical + patch + output 실제 backing 합계를 직접 검증하고, overflow에서는 patch/rebuilt lease/reservation이 모두 0으로 수렴하는지 확인한다.
|
||||
|
||||
## 리뷰어를 위한 체크포인트
|
||||
|
||||
|
|
@ -110,7 +117,10 @@ _구현 에이전트가 주요 설계 결정 사항을 기록한다._
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
/config/.local/bin/go
|
||||
/config/opt/go/bin/go
|
||||
go version go1.26.2 linux/arm64
|
||||
/config/opt/go
|
||||
```
|
||||
|
||||
### REVIEW_OPENAI_REBUILDER-1 중간 검증
|
||||
|
|
@ -120,7 +130,8 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
ok iop/packages/go/streamgate 0.878s
|
||||
ok iop/apps/edge/internal/openai 6.768s
|
||||
```
|
||||
|
||||
### REVIEW_OPENAI_REBUILDER-2 중간 검증
|
||||
|
|
@ -130,7 +141,9 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
ok iop/apps/edge/internal/openai 0.021s
|
||||
ok iop/packages/go/streamgate 1.929s
|
||||
ok iop/apps/edge/internal/openai 8.103s
|
||||
```
|
||||
|
||||
### REVIEW_OPENAI_REBUILDER-3 중간 OpenAI smoke
|
||||
|
|
@ -140,7 +153,8 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
./scripts/e2e-openai-ollama.sh
|
||||
[openai-ollama] OpenAI-compatible Ollama serving test PASSED.
|
||||
```
|
||||
|
||||
### 최종 format
|
||||
|
|
@ -150,7 +164,7 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
(출력 없음, exit 0)
|
||||
```
|
||||
|
||||
### 최종 fresh unit
|
||||
|
|
@ -160,7 +174,10 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
ok iop/packages/go/streamgate 0.870s
|
||||
ok iop/packages/go/config 0.058s
|
||||
ok iop/apps/edge/internal/openai 6.755s
|
||||
ok iop/apps/edge/internal/service 5.863s
|
||||
```
|
||||
|
||||
### 최종 race
|
||||
|
|
@ -170,7 +187,8 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
ok iop/packages/go/streamgate 2.918s
|
||||
ok iop/apps/edge/internal/openai 8.002s
|
||||
```
|
||||
|
||||
### 미계상 copy search
|
||||
|
|
@ -180,7 +198,7 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
(출력 없음, exit 0)
|
||||
```
|
||||
|
||||
### 최종 OpenAI smoke
|
||||
|
|
@ -190,7 +208,8 @@ _실제 출력:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
./scripts/e2e-openai-ollama.sh
|
||||
[openai-ollama] OpenAI-compatible Ollama serving test PASSED.
|
||||
```
|
||||
|
||||
### 실제 entrypoint full-cycle
|
||||
|
|
@ -200,7 +219,40 @@ _실제 출력:_
|
|||
_실제 명령·stdout/stderr 또는 blocker와 재개 조건:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
$ cycle_dir=$(mktemp -d /tmp/iop-g10-full-cycle.XXXXXX)
|
||||
$ IOP_EDGE_CONFIG="$cycle_dir/edge.yaml" ./scripts/dev/edge.sh < "$cycle_dir/edge.fifo" > "$cycle_dir/edge.out" 2>&1 &
|
||||
$ IOP_NODE_CONFIG="$cycle_dir/node.yaml" ./scripts/dev/node.sh > "$cycle_dir/node.out" 2>&1 &
|
||||
$ printf '%s\n' '/nodes' 'Return token IOP_G10_ALPHA' 'Return token IOP_G10_BETA' '/capabilities' '/transport' '/sessions' '/exit' >&3
|
||||
$ diff -u "$cycle_dir/node.payloads" "$cycle_dir/edge.payloads"
|
||||
$ awk '<각 run에서 start 뒤 MSG 2개, 그 뒤 complete 1개, late MSG 없음 검증>' "$cycle_dir/edge.out"
|
||||
FULL_CYCLE_LOG_DIR=/tmp/iop-g10-full-cycle.C75Cpy
|
||||
=== EDGE TRANSCRIPT ===
|
||||
[edge] config=/tmp/iop-g10-full-cycle.C75Cpy/edge.yaml
|
||||
node0 = test-node (test-node)
|
||||
[node0-evt] start run_id=manual-1785067395671455880
|
||||
[node0-msg] IOP_G10_ALPHA
|
||||
[node0-msg] IOP_G10_ALPHA_TAIL
|
||||
[node0-evt] complete run_id=manual-1785067395671455880 detail="idle-timeout"
|
||||
[node0-evt] start run_id=manual-1785067396892881339
|
||||
[node0-msg] IOP_G10_BETA
|
||||
[node0-msg] IOP_G10_BETA_TAIL
|
||||
[node0-evt] complete run_id=manual-1785067396892881339 detail="idle-timeout"
|
||||
adapter = cli
|
||||
targets = fake-cli
|
||||
adapter = cli
|
||||
connected = true
|
||||
node_id = test-node
|
||||
session_id = default
|
||||
state = connected
|
||||
target = fake-cli
|
||||
sessions: 1
|
||||
[0] mode=persistent target=fake-cli session=default
|
||||
=== NODE PAYLOADS ===
|
||||
IOP_G10_ALPHA
|
||||
IOP_G10_ALPHA_TAIL
|
||||
IOP_G10_BETA
|
||||
IOP_G10_BETA_TAIL
|
||||
FULL_CYCLE_PASS node payloads equal edge payloads; each complete follows exactly two messages
|
||||
```
|
||||
|
||||
### Diff
|
||||
|
|
@ -210,7 +262,7 @@ _실제 명령·stdout/stderr 또는 blocker와 재개 조건:_
|
|||
_실제 출력:_
|
||||
|
||||
```text
|
||||
미실행
|
||||
(출력 없음, exit 0)
|
||||
```
|
||||
|
||||
---
|
||||
|
|
|
|||
Loading…
Reference in a new issue