`plan_file: null`과 `review_file: ~`은 YAML에 실제로 존재하는 키인데
mapstructure가 present nil을 생략과 같은 nil pointer로 접어버려, 승인 경계가
빈 문자열과 공백만 거부하고 null 형태는 조용히 built-in default로 떨어뜨렸다.
Viper가 돌려주는 raw preset 구조에는 두 키가 nil 값으로 남아 있으므로, strict
decode 전에 그 presence를 검사해 필드 경로와 함께 거부하고 실제로 없는 키만
fallback 신호로 남긴다.
두 필드와 두 가지 YAML null 표기를 모두 회귀로 고정하고, 기존 빈/공백, 생략,
상대 경로, clone 독립성, refresh redaction 근거는 그대로 유지한다.
Refs: agent-task/single_request_plan_review_templates/PLAN-cloud-G08.md
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`plan_file`/`review_file`이 평범한 문자열이라 decode 직후 trim-empty가 곧
생략으로 취급되었고, 그 결과 loader의 빈 경로 거부가 설정값에 대해 도달할 수
없었다. 명시적으로 설정한 빈 값과 공백 값이 조용히 built-in default로
떨어지는 승인 경계 결함이므로 optional 표현으로 바꿔 생략만 fallback 신호가
되게 한다. 설정된 값은 파일 접근 전에 trim 후 빈 경로 거부까지 도달한다.
pointer cell이 snapshot 사이에서 aliasing되지 않도록 Templates 전용 deep
clone을 두고, 네 가지 명시 빈/공백 경계와 clone 독립성, 그리고 refresh가
경로나 본문을 노출하지 않는다는 기존 근거를 함께 회귀로 고정한다.
Refs: agent-task/single_request_plan_review_templates/PLAN-cloud-G08.md
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
공식 리뷰가 지적한 두 가지 승인 경계 결함을 고친다. `plan_file`/`review_file`은
edge.yaml 디렉터리 기준 상대 경로만 허용하고 절대/빈 경로는 파일 접근 전에 거부한다.
필수 heading과 Review `PASS`는 부분 문자열이 아니라 정확한 단독 줄로 검증하며,
문서화된 placeholder를 제거한 뒤 남는 `{{`/`}}`를 거부해 문법을 닫는다.
리뷰가 존재한다고 기술했지만 실제로는 없던 회귀 근거를 추가한다. admission 시
고정된 effective 템플릿 쌍이 clone과 workspace 재검증을 통과하는지, refresh가
이미 승인된 요청이 아니라 새 요청에만 적용되는지, custom Review 템플릿이 내부
artifact만 바꾸고 caller 최종 출력은 그대로인지를 각각 확정 검증한다.
현재 문서도 실제 동작에 맞춘다. Edge 실행 spec의 낡은 Plan JSON Schema 서술을
direct PlanMD 검증으로 고치고, outer Anthropic 계약과 input spec에 템플릿이
Edge 내부 stage 입력일 뿐 caller 요청/응답 계약을 바꾸지 않음을 명시한다.
Refs: agent-task/single_request_plan_review_templates/PLAN-cloud-G08.md
Claude의 단일 Anthropic 요청 안에서 IOP가 Plan, Work, Review와 workspace 도구 실행을 끝내고 실제 dev smoke로 계약을 검증할 수 있어야 한다.\n\n완료 task evidence와 마일스톤 검토 상태도 같은 변경에 고정한다.
Node의 provider progress 기반 stall timeout, watchdog fencing과 bounded health probe evidence를 실행 경로에 반영한다. Edge-Node 계약과 구현 스펙, 테스트 및 Milestone 완료 evidence를 현재 상태와 맞춘다.
Post-promotion boundary correction: replace the standalone-agent and
terminal-session wording in doc.go/types.go/main.go with provider-only,
run-scoped descriptions and add a Node CLI regression that rejects Agent
wording. Promotion and recovery evidence is preserved untouched.
Anthropic 전용 API key가 일반 OpenAI 요청에 적용되지 않도록 경계를 좁히고 잘못된 절대 operation URL을 fail-closed로 거부해야 한다.\n\n완료 Milestone archive와 principal credential 후속 agent-task를 같은 기준선에 맞춘다.
- Stream evidence gate routing in edge config and runtime
- Ingress snapshot and allocation
- Recovery coordinator and plan
- Runtime contract for gate filters
- OpenAI-compatible request rebuilder and stream gate dispatcher
- Comprehensive tests for all new components
- Updated contracts and roadmap milestones
- agent-readable-repository-refactor 완료: 기존 테스트 파일 아카이브 이동
- 새 테스트 파일 추가 (edge, node, client, config, readability)
- readability_audit 스크립트 및 baseline 추가
- roadmap/SDD 문서 갱신
- agent-client/pi/extensions/openai-sampling-parameters 추가
- seulgivibe OpenAI-compatible provider 완료 후 archive로 이동
- 모델 그룹 혼합 제공자 디스패치 milestone 진행
- agent-spec: OpenAI-compatible surface, provider pool config refresh 갱신
- Go: mapper.go/config.go provider config 매핑 개선
- agent-task: 새 subtask plan/code-review 문서 추가
vLLM-MLX provider-pool에서 strict output이 thinking을 끄지 않도록 하고, queue_timeout_ms=0을 IOP queue timeout 없음으로 해석해야 한다. long reasoning/long-context 요청은 IOP queue timeout이 아니라 caller cancellation과 backend timeout 정책으로 제어한다.