162 lines
9.2 KiB
Markdown
162 lines
9.2 KiB
Markdown
---
|
|
name: finalize-task-routing
|
|
description: PLAN/CODE_REVIEW 작성 직전 build는 local-first로 라우팅하고 review는 실제 G와 고정 공식 리뷰 target을 확정한다. capability-gap 기반 cloud 선택과 follow-up 재평가에 사용한다.
|
|
---
|
|
|
|
# Finalize Task Routing
|
|
|
|
## 목적
|
|
|
|
build의 lane/G와 review의 G를 평가해 canonical 파일명을 확정한다.
|
|
공식 review는 항상 cloud의 Codex `gpt-5.6-sol` xhigh다. 이 스킬은 task 파일을 수정하지 않는다.
|
|
|
|
## 호출 시점
|
|
|
|
- `plan`이 최초 또는 follow-up pair를 쓰기 직전
|
|
- scope, 증거, 소유권, 결정 조건이 달라져 기존 route가 무효가 된 때
|
|
- 사용자가 현재 pair의 lane/G 판정을 요청한 때
|
|
|
|
## 입력
|
|
|
|
- `evaluation_mode`: `first-pass | isolated-reassessment`
|
|
- `targets.build`, `targets.review`: 각 target의 요구, scope, 영향 경로, 불변조건, 검증 계획과 실제 증거
|
|
- target별 `context_snapshot`: 함께 유지해야 할 source/test/diff/log/contract와 분할 가능성
|
|
- target별 `ownership_snapshot`: 공유 상태, 병행 작업, sibling task, 외부 책임
|
|
- target별 `decision_snapshot`: 미해결 의미 판단, 사용자 권한, 외부 환경 의존성
|
|
- build의 `loop_risk_snapshot`:
|
|
- `ordered_transitions`: `state_count`, `adverse_paths`, `evidence`
|
|
- `concurrent_consistency`: `actor_count`, `constraints`, `evidence`
|
|
- `boundary_contract`: `component_count`, `consumer_count`, `constraints`, `evidence`
|
|
- `structured_interpretation`: `mechanisms`, `hazards`, `evidence`
|
|
- `variant_product`: `independent_axis_count`, `combination_verification_required`, `evidence`
|
|
- `invalidation_evidence`: 실패 로그, review finding, 변경된 범위 등 재평가 근거
|
|
|
|
이전 lane/G, 점수, 라우팅 사유와 filename은 입력에서 제외한다. 이전 로그와 finding은 원본에서 확인한 사실만 사용한다. 확인된 부재는 0/false/빈 목록, 미확인은 `unknown`이다.
|
|
|
|
## 절차
|
|
|
|
### 1. 평가 격리
|
|
|
|
각 target을 `unrouted`로 시작한다. `isolated-reassessment`는 route 정보가 제거된 현재 snapshot만 평가한다. 중립 snapshot을 만들 수 없으면 `blocked: isolated-routing-unavailable`을 반환한다.
|
|
|
|
실패·review 횟수, Required/finding 개수와 이전 grade는 승격 조건이나 점수가 아니다.
|
|
|
|
### 2. 증거 gate
|
|
|
|
build와 review에 다음 값을 독립적으로 `true | false | unknown`으로 판정하고 파일·diff·명령 출력 근거를 한 줄씩 기록한다.
|
|
|
|
- `scope_closed`: 정확성 조건과 영향 경로가 확정됐는가
|
|
- `context_closed`: 중요한 증거를 빠뜨리지 않고 함께 다룰 수 있는가
|
|
- `verification_closed`: 결정적 명령과 관찰로 성공을 판정할 수 있는가
|
|
- `evidence_trusted`: 검증이 실제 경로를 실행하며 재현 가능한가
|
|
- `ownership_closed`: 공유 상태와 외부 소유권이 명확한가
|
|
- `decision_closed`: 사용자 결정이나 외부 의미 판단 없이 완료할 수 있는가
|
|
|
|
파일 수, 긴 문서, 동시성, dirty worktree와 finding 수만으로 `false`를 주지 않는다.
|
|
|
|
- closure 또는 build loop-risk 필드가 하나라도 `unknown`이면 `needs_evidence`다. 이를 `false`로 낮추지 않는다.
|
|
- closure `false`가 권한, secret, 사용자 결정, 환경·의존성 또는 신뢰할 증거 부재라면 `blocked`다.
|
|
- closure `false`를 cloud capability가 해소할 수 있을 때만 `capability-gap` 후보로 둔다.
|
|
|
|
### 3. G 등급
|
|
|
|
각 target을 다음 다섯 차원에서 독립적으로 `0`~`2`로 채점한다.
|
|
|
|
- `scope_coupling`: 국소 / 여러 연결 지점 / 다중 모듈·계약
|
|
- `state_concurrency`: 무상태 / 상태 전이 / 공유 상태·순서·동시성
|
|
- `blast_irreversibility`: 내부 가역 / 다중 호출자·지속 상태 / 외부 계약·권한·비가역
|
|
- `evidence_diagnosis`: 직접 증거 / 복수 증거 조합 / 충돌·불신 증거 진단
|
|
- `verification_complexity`: 단일 명령 / 복수 단계·통합 / 외부·상호작용·장시간
|
|
|
|
`grade = max(1, 점수 합)`이다. lane과 반복 횟수는 점수에 더하지 않는다.
|
|
|
|
### 4. Route basis
|
|
|
|
build basis를 하나만 선택한다.
|
|
|
|
- `local-fit`: 모든 closure가 `true`이고 G01~G08
|
|
- `grade-boundary`: 모든 closure가 `true`이고 G09~G10
|
|
- `capability-gap`: 하나 이상의 closure `false`를 cloud가 실제로 해소함
|
|
|
|
`capability-gap`에는 관측된 gap, source/test/diff/log 증거, cloud가 해소하는 방법을 모두 기록한다. 이 세 근거 없는 G01~G08 build cloud route는 금지한다. G09~G10에 실제 gap도 있으면 basis는 `capability-gap`으로 두고 grade 점수도 함께 보존한다.
|
|
|
|
review basis는 항상 `official-review`다. review G는 실제 복잡도 점수를 유지하고 G floor를 적용하지 않는다. lane은 `cloud`, 실행 target은 Codex `gpt-5.6-sol` xhigh로 고정한다. local worker의 자가검증은 공식 review를 대체하지 않는다.
|
|
|
|
### 5. Loop-risk audit
|
|
|
|
build의 다음 signature를 현재 증거로 기록한다.
|
|
|
|
- `temporal_state`: 상태 3개 이상과 partial/retry/cancel/recovery/stale/duplicate 경로
|
|
- `concurrent_consistency`: actor 2개 이상과 atomic snapshot/lock order/exactly-once/race-free 제약
|
|
- `boundary_contract`: component 3개 이상 또는 consumer 2개 이상과 validation/immutability/compatibility 제약
|
|
- `structured_interpretation`: parser/lexer/protocol assembly/multi-source merge와 nesting/quoting/precedence/deduplication 위험
|
|
- `variant_product`: 독립 variant 축 2개 이상과 조합 검증
|
|
|
|
signature와 `triggered`는 audit 정보다. lane/G를 바꾸지 않는다.
|
|
|
|
WARN/FAIL 후에는 현재 scope를 다시 평가한다. local에서 닫히면 local을 유지하고, plan/split/fixture/test 문제면 local에서 재구성한다. 실제 capability gap만 해당 새 PLAN 세대를 cloud로 보낸다. 고정 시도 횟수나 finding 재발로 cloud를 확정하지 않는다.
|
|
|
|
### 6. Canonical filename
|
|
|
|
모든 gate를 통과한 뒤 `pair` mode를 정확히 한 번 실행한다. finalizer는 lane을 입력받지 않고 route basis와 grade에서 lane을 산출한다.
|
|
|
|
```bash
|
|
agent-ops/skills/common/finalize-task-routing/scripts/finalize-task-policy.sh pair \
|
|
<build-route-basis> <true|false> \
|
|
<build-scope> <build-state> <build-blast> <build-evidence> <build-verification> \
|
|
official-review \
|
|
<review-scope> <review-state> <review-blast> <review-evidence> <review-verification>
|
|
```
|
|
|
|
`loop_risk.triggered`는 두 번째 인자에 전달하지만 route에는 영향을 주지 않는다. `unknown` 상태에서는 finalizer를 호출하지 않는다. 호출자는 저수준 formatter를 직접 실행하거나 lane, grade, filename을 수작업으로 만들지 않는다.
|
|
|
|
## 검증
|
|
|
|
- [ ] 두 target의 closure, 근거와 점수가 독립적인가
|
|
- [ ] closure나 loop-risk의 `unknown`에서 finalizer를 호출하지 않았는가
|
|
- [ ] G01~G08 build cloud route가 `capability-gap`이고 세 근거가 있는가
|
|
- [ ] build의 `local-fit`은 G01~G08, `grade-boundary`는 G09~G10인가
|
|
- [ ] review가 `official-review`, cloud, Codex `gpt-5.6-sol` xhigh인가
|
|
- [ ] signature와 반복 횟수가 route에 영향을 주지 않았는가
|
|
- [ ] finalizer 출력과 active filename이 일치하는가
|
|
|
|
## 출력 형식
|
|
|
|
```yaml
|
|
status: routed | needs_evidence | blocked
|
|
evaluation_mode: first-pass | isolated-reassessment
|
|
finalizer: finalize-task-policy.sh
|
|
finalizer_mode: pair
|
|
targets:
|
|
build:
|
|
closures: {scope_closed: true, context_closed: true, verification_closed: true, evidence_trusted: true, ownership_closed: true, decision_closed: true}
|
|
closure_basis: {scope_closed: "<evidence>", context_closed: "<evidence>", verification_closed: "<evidence>", evidence_trusted: "<evidence>", ownership_closed: "<evidence>", decision_closed: "<evidence>"}
|
|
route_basis: local-fit
|
|
capability_gap: none
|
|
grade_scores: {scope_coupling: 2, state_concurrency: 1, blast_irreversibility: 1, evidence_diagnosis: 1, verification_complexity: 1}
|
|
loop_risk: {matched_signatures: [boundary_contract], triggered: true}
|
|
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_closed: "<evidence>", context_closed: "<evidence>", verification_closed: "<evidence>", evidence_trusted: "<evidence>", ownership_closed: "<evidence>", decision_closed: "<evidence>"}
|
|
route_basis: local-fit
|
|
capability_gap: none
|
|
grade_scores: {scope_coupling: 1, state_concurrency: 1, blast_irreversibility: 1, evidence_diagnosis: 1, verification_complexity: 1}
|
|
lane: local
|
|
grade: G05
|
|
filename: CODE_REVIEW-local-G05.md
|
|
missing_evidence: []
|
|
blocked_reason: null
|
|
```
|
|
|
|
`capability-gap`이면 `capability_gap`에 `observed`, `evidence`, `cloud_resolution`을 기록한다. `needs_evidence`/`blocked`에서는 finalizer와 route 결과를 `null`로 둔다.
|
|
|
|
## 금지 사항
|
|
|
|
- 이전 route나 반복 횟수로 자동 승격하지 않는다.
|
|
- signature로 cloud lane 또는 G floor를 강제하지 않는다.
|
|
- cloud가 해소할 수 없는 문제를 cloud route로 바꾸지 않는다.
|
|
- review에 universal cloud/G floor를 적용하지 않는다.
|
|
- PLAN, CODE_REVIEW, archive와 complete.log를 직접 수정하지 않는다.
|