목표
Noema·Strix·OpenCode의 model-backed PR 검토가 동일한 공통 계약을 따르게 합니다.
{workflow명}-{repository}-{PR번호}
- 서로 다른 저장소와 PR은 독립적으로 실행
- 같은 PR의 이전 HEAD만 live-head 재검증 후 취소
- delayed stale event가 current running/pending 실행을 먼저 취소하지 못함
- native PR trigger와 repository_dispatch retry가 같은 PR queue를 공유
- release·deploy·migration은 이 cancellation owner의 대상이 아님
현재 RED — protected main@232107a0b6235efaa4a221a41443c436eac3dd00
Noema
- protected main은 workflow-level PR group과 event-conditional
cancel-in-progress로 delayed stale event가 current run을 선취소할 수 있음
- #1797이 job-level group + 별도 cleanup으로 좁게 수리 중
- #1797에는 아직
queue: max가 없어 current pending이 stale pending에 밀릴 수 있음
- #1797의 sibling
repository_dispatch cleanup은 중앙 ${{ github.token }}으로 target Actions API를 호출해 권한이 없음; #1799가 canonical successor
Strix
strix job group은 format('{0}-{1}-{2}', github.event_name, repository, PR)이므로 같은 PR의 pull_request_target과 repository_dispatch가 서로 다른 group
- 따라서 merge scheduler retry와 native scan이 같은 PR에서 동시에 provider를 소비할 수 있음
cancel-in-progress: false지만 queue: max가 없고, 현재 계약 테스트가 오히려 queue: max 부재를 강제
- 별도 cleanup은 native synchronize/closed만 다루므로 dispatch queue의 stale run은 같은 owner 계약 밖
OpenCode
- unprivileged bootstrap
opencode-review-target은 job-level repository+PR group과 cancel-in-progress: false이나 queue: max가 없음
- privileged
opencode-review-dispatch.yml은 workflow-level repository+PR group에 cancel-in-progress: true
- delayed stale dispatch는 metadata/live-head validation job이 실행되기 전에 current dispatch 전체를 취소할 수 있음
- bootstrap과 privileged dispatch가 서로 다른 workflow/group이므로 동일 PR의 실제 OpenCode 작업 수가 하나로 coalesce되지 않음
불변 계약
- PR model job group에는 workflow identity, target repository, PR number만 포함하며 head SHA와 event class는 넣지 않습니다.
- long-running model job은 job-level
cancel-in-progress: false와 queue: max를 사용합니다.
- stale-run cleanup은 model group 밖의 짧은 별도 job 또는 target-repository coalescer가 담당합니다.
- cleanup은 target-scoped credential로 exact live PR state/head를 취소 직전에 다시 읽습니다.
- current head·다른 PR·다른 repository·non-review workflow는 절대 취소하지 않습니다.
- repository_dispatch payload의 target/head는 권위가 아니며 target API로 재검증합니다.
- 같은 PR의 native/dispatch event class는 같은 model queue를 사용합니다.
- API rate limit·network·malformed response에서는 wrong cancellation보다 fail-closed를 우선하고 typed telemetry를 남깁니다.
- fixed sleep, blind retry, head-SHA group, repository-wide model group은 금지합니다.
- model-backed workflow는
orchestrator/free와 gateway token만 사용합니다.
PR Stack과 진척률
현재 완료율: 0/8. 분석·이슈 작성은 완료로 계산하지 않습니다.
측정
- 동일 PR push burst당 materialized model jobs
- current-head evidence 누락률
- previous-head 잔존 시간
- 다른 PR 오취소 수
- native/dispatch 중복 실행 수
- provider 호출 수와 rate-limit 실패
- startup_failure 및
runner_id=0 분모
협업
각 successor는 독립 세션이 맡아도 되지만 같은 파일에 동시 writer가 생기지 않도록 Noema → Strix → OpenCode 순으로 owner stack을 명시하고, 선행 PR head/base를 이 이슈에 기록하십시오. 대형 #1661의 유효 delta는 이 stack과 별도 successor가 완전 승계한 뒤에만 종결할 수 있습니다.
기다리는 동안 다른 로컬 세션에게 지속적으로 지시 받아 도우세요. 계속 묻고 계속 피드백하고 계속 지원하세요. 더 주도적이고 더 적극적으로요.
목표
Noema·Strix·OpenCode의 model-backed PR 검토가 동일한 공통 계약을 따르게 합니다.
현재 RED — protected main@232107a0b6235efaa4a221a41443c436eac3dd00
Noema
cancel-in-progress로 delayed stale event가 current run을 선취소할 수 있음queue: max가 없어 current pending이 stale pending에 밀릴 수 있음repository_dispatchcleanup은 중앙${{ github.token }}으로 target Actions API를 호출해 권한이 없음; #1799가 canonical successorStrix
strixjob group은format('{0}-{1}-{2}', github.event_name, repository, PR)이므로 같은 PR의pull_request_target과repository_dispatch가 서로 다른 groupcancel-in-progress: false지만queue: max가 없고, 현재 계약 테스트가 오히려queue: max부재를 강제OpenCode
opencode-review-target은 job-level repository+PR group과cancel-in-progress: false이나queue: max가 없음opencode-review-dispatch.yml은 workflow-level repository+PR group에cancel-in-progress: true불변 계약
cancel-in-progress: false와queue: max를 사용합니다.orchestrator/free와 gateway token만 사용합니다.PR Stack과 진척률
queue: maxfinding 미해결)현재 완료율: 0/8. 분석·이슈 작성은 완료로 계산하지 않습니다.
측정
runner_id=0분모협업
각 successor는 독립 세션이 맡아도 되지만 같은 파일에 동시 writer가 생기지 않도록 Noema → Strix → OpenCode 순으로 owner stack을 명시하고, 선행 PR head/base를 이 이슈에 기록하십시오. 대형 #1661의 유효 delta는 이 stack과 별도 successor가 완전 승계한 뒤에만 종결할 수 있습니다.