Measured delivery improvement
+검증은 유지하고,
대기만 줄였습니다.
+
+ 긴 에이전트 규칙을 실행 가능한 fast path로 줄이고, 변경 범위별 CI와 하나의 안정된
+ CI Gate, 보호된 rebase 자동 병합, 병합 후 smoke를 연결했습니다. 아래 수치는
+ 추정이 아니라 실제 PR·push·workflow_dispatch 실행 결과입니다.
+
Before / after
전달 경로가 어떻게 달라졌나
품질 게이트를 약화한 것이 아닙니다. PR에서 필요한 검증을 한 번 수행하고, 병합 commit은 빠른 컴파일 smoke로 연결했습니다.
+이전 PR #2079 기준
+현재 PR #2085 기준
+Execution evidence
실제 실행 결과
시간은 GitHub Actions의 run 생성부터 종료까지이며, job 시간은 병렬 runner 사용량 계산에 사용했습니다.
+| 실험 | Run | 선택된 핵심 job | 결과 | Wall time |
|---|---|---|---|---|
| baseline PR | 30941998445 | monolith + Linux/Windows/macOS portable | PASS | 9m 44s |
| baseline push | 30942795580 | 동일한 전체 suite 재실행 | PASS | 9m 40s |
| scoped full PR | 30952600575 | tests · lint · node · Windows · macOS 병렬 | PASS | 8m 12s |
| merge smoke | 30953192810 | scope · cargo check · stable gate | PASS | 2m 00s |
| concurrent smoke | 30954898246 | Rust dispatch와 동시 실행, heavy jobs skipped | PASS | 1m 42s |
| forced docs | 30953398426 | scope · stable gate, heavy jobs skipped | PASS | 33s |
| forced rust | 30954923182 | tests · lint · Windows · macOS, Node skipped | PASS | 8m 19s |
Agent convention
프롬프트는 규칙집에서 실행 경로로
모든 세부 구현을 매 턴 다시 읽히는 대신, 반드시 지킬 불변식과 필요할 때 열 문서를 분리했습니다.
+바뀐 운영 계약
+-
+
- 읽기 전용 진단·계획은 worktree와 PR 없이 현재 checkout에서 수행 +
- 첫 tracked mutation 직전에만 전용 worktree 생성 +
- 작은 commit마다 PR을 만들지 않고, 사용자에게 보이는 한 결과를 한 PR로 전달 +
CI Gate통과 뒤 rebase auto-merge와 cleanup까지 하나의 완료 조건으로 정의
+
실행 가능한 진입점
+agent-plan.mjs가 base·staged·working·untracked 경로를 모아 CI와 동일한 분류기를 재사용합니다.
Scope contract
빠르되, 모르는 변경은 넓게
선택 job이 skip되더라도 required check가 영원히 pending이 되지 않도록 마지막 CI Gate는 항상 실행됩니다.
| 범위 | Rust tests/lint | Node/Admin | Portable | 목적 |
|---|---|---|---|---|
| docs | skip | skip | skip | 정책 테스트 + gate |
| admin | skip | run | skip | 프론트 빌드·typecheck·audit |
| rust / tui | run | skip | run | native 기능과 플랫폼 계약 |
| full / unknown | run | run | run | workflow·정책·미분류 경로 fail closed |
| prerelease push | smoke | skip | skip | 병합 commit의 최소 유효성 |
| main push | run | run | run | release 경계의 전체 검증 |
Troubleshooting record
직접 테스트가 찾아낸 경계
스크립트를 단순 통합하는 과정에서도 호스트별 실행 의미가 달랐습니다. 실패를 우회하지 않고 계약으로 남겼습니다.
+GitHub-hosted Windows에서 동일한 Rust ACL fixture가 PowerShell child에서는 owner 검증에 실패하고 Git Bash에서는 통과했습니다. 로컬 개발자용 PowerShell gate는 유지하되, CI 보안 계약은 기존에 검증된 Git Bash 전용 스크립트로 고정했습니다.
+첫 Rust 강제 범위 run 30953452412는 모든 선택 job과 gate가 성공한 직후 unrelated prerelease push에 의해 cancelled 처리됐습니다. PR #2088에서 수동 실행만 고유 run ID를 concurrency key로 사용하도록 격리했고, push smoke와 Rust dispatch를 동시에 실행해 회귀를 확인했습니다.
+로컬 Windows gate
Git Bash의 Windows npm spawn·GNU tar 경로 충돌을 피하기 위해 check_native_pr.ps1를 만들었습니다. Full 모드는 실제로 90.5초에 통과했습니다.
테스트 경계의 명시화
Windows 전체 cargo test는 POSIX/clean-host 전제 때문에 2,257 pass / 461 fail이었습니다. 개발 PC 결정론 계약과 clean-host portable 계약을 분리했습니다.
Next leverage
다음으로 보강할 4가지
현재 병목은 분류기가 아니라 Linux 전체 테스트 7분대입니다. 아래 순서가 다음 투자 대비 효과가 큽니다.
+Linux test suite 측정 기반 분할
unit / architecture / native validation을 별도 job으로 병렬화하되 fixture 간 숨은 순서 의존성을 먼저 제거합니다.
clean-host 계약 독립성 강화
테스트가 이전 테스트의 repository·authority 상태에 기대지 않도록 fixture setup을 자체 완결형으로 바꿉니다.
분류 경로 회귀 감사
새 최상위 디렉터리와 workflow 파일이 추가될 때 unknown→full 동작을 유지하고, 월 1회 action SHA를 갱신합니다.
cache 효율 관측
restore key 적중률과 cache 크기를 기록해 오래된 target artifact 때문에 restore가 느려지는 시점을 판단합니다.
Audit trail