5.3 KiB
5.3 KiB
Runtime Context Plan
이 파일을 읽는 구현 에이전트에게
필수 경고: 구현 마지막 단계에서 CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 모두 채워야 한다. 이 파일이 채워지기 전에는 작업이 완료된 것이 아니다.
구현 체크리스트를 순서대로 완료하고 실제 검증 출력을 review stub에 기록한다.
review 파일의 아카이브 지시와 코드리뷰 전용 체크리스트는 리뷰 에이전트 전용이다.
배경
property, commonData, commandStates, dataCommandMap이 Application.instance mutable fields로 직접 노출되어 있다.
AI가 변경 범위를 작게 유지하려면 실행 상태를 ExecutionContext로 모으고 기존 API는 호환층으로 유지해야 한다.
분석 결과
읽은 파일
agent-ops/skills/common/plan/SKILL.mdagent-ops/rules/project/domain/core/rules.mdagent-ops/rules/project/domain/command/rules.mdagent-ops/rules/project/domain/pipeline/rules.mdlib/oto/application.dartlib/oto/core/tag_system.dartlib/oto/commands/command.dartlib/oto/pipeline/pipeline_exe.dartlib/oto/pipeline/pipeline_exe_handle.darttest/test.dart
테스트 커버리지 공백
Application.property호환 getter/setter가 context를 backing store로 쓰는지 테스트 없음.TagSystem.setPropertyValue()와 tag read가 context를 경유하는지 테스트 없음.- pipeline state update가 context commandStates를 갱신하는지 테스트 없음.
심볼 참조
- rename/remove 예정 심볼: none.
- 직접 mutable state 접근:
lib/oto/core/tag_system.dart:109,137,168;lib/oto/commands/command.dart:141,145;lib/oto/pipeline/pipeline_exe.dart:58,69,92;lib/oto/pipeline/pipeline_exe_handle.dart:47,75,94.
범위 결정 근거
- 이 task는 context 저장소와 호환 API만 도입한다.
- pipeline executor 생성자 주입, command runtime 주입, registry spec은 후속 task에서 처리한다.
빌드 등급
- build lane:
cloud-G07— 전역 상태 접근 경로를 바꾸는 cross-domain 리팩토링이다. - review lane:
cloud-G07— 기존 API 호환성과 state isolation을 함께 확인해야 한다.
구현 체크리스트
- [REFACTOR-1]
ExecutionContext를 추가하고 Application mutable state를 context로 위임한다. - 모든 중간 검증과 최종 검증을 실행하고 실제 출력을
CODE_REVIEW-*-G??.md에 기록한다. - CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
의존 관계 및 구현 순서
agent-task/01_test_baseline/complete.log가 있어야 시작한다.agent-task/01+01_application_result_contract/complete.log가 있어야 시작한다.- 이 task 완료 후 command IO와 command catalog task를 시작한다.
[REFACTOR-1] ExecutionContext 도입
문제
TagSystem과 Command가 Application.instance 상태에 직접 접근한다.
// lib/oto/core/tag_system.dart:109
Application.instance.property[key] = value;
// lib/oto/commands/command.dart:140
Map<String, dynamic> get property {
return Application.instance.property;
}
해결 방법
lib/oto/core/execution_context.dart를 추가한다.
Application은 context를 소유하고 기존 property, commonData, commandStates, dataCommandMap getter/setter를 context 위임으로 유지한다.
// lib/oto/core/execution_context.dart
class ExecutionContext {
DataCommon? commonData;
Map<String, dynamic> property = {};
Map<String, CommandState> commandStates = {};
Map<String, DataCommand> dataCommandMap = {};
}
수정 파일 및 체크리스트
lib/oto/core/execution_context.dart추가lib/oto/application.dart에context와 호환 getter/setter 추가lib/oto/core/tag_system.dart가 context를 경유하도록 수정lib/oto/commands/command.dart가 context를 경유하도록 수정- pipeline files의 direct access 제거 여부는 최종 rg로 확인하되, constructor 주입은 하지 않음
테스트 작성
- 작성:
test/oto_context_test.dart - 테스트명:
context backs application compatibility accessors,tag system reads and writes through execution context - 목적: context 도입 후 기존 API와 tag 동작 유지 검증
중간 검증
dart test test/oto_context_test.dart
예상: context 테스트 통과.
수정 파일 요약
| 파일 | 항목 |
|---|---|
lib/oto/core/execution_context.dart |
REFACTOR-1 |
lib/oto/application.dart |
REFACTOR-1 |
lib/oto/core/tag_system.dart |
REFACTOR-1 |
lib/oto/commands/command.dart |
REFACTOR-1 |
test/oto_context_test.dart |
REFACTOR-1 |
최종 검증
dart analyze
예상: No issues found!
dart test
예상: 모든 테스트 통과.
rg --sort path -n "Application\\.instance\\.(property|commonData|commandStates|dataCommandMap)" lib/oto/core lib/oto/commands/command.dart
예상: 결과 없음.
모든 코드 변경 완료 후 반드시 CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.