Skip to content
Closed
79 changes: 79 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ flowchart LR
| G-13 | hourly scheduler는 존재하지만 no-op/credential unavailable/queued Checks의 customer next action을 모든 caller가 동일한 receipt로 내는지 미확인이다 | 자동화가 실패해도 운영자가 무엇을 고쳐야 하는지 알 수 없다 | `skipped_credential_unavailable` receipt와 다음 행동 문구를 exact-head Checks로 검증하고, bounded receipt schema, retry floor, single-flight, no secret fallback을 모든 caller contract test로 고정한다 |
| G-14 | release/changelog/version 증거가 각 PR에 분산되고 현재 central repo 보호 main의 release candidate가 명확하지 않다 | 운영자는 어떤 기능이 supportable release인지 확인할 수 없다 | merge 후 release readiness ledger, CHANGELOG, semantic version/tag, rollback/operability evidence를 함께 갱신한다 |
| G-15 | 첨부파일 처리 경계가 제품별로 다르고, 1MB 상한은 업무 데이터와 맞지 않으며 미지원 MIME/컨테이너가 parser registry에서 명시적으로 pending/quarantine 되는지 확인되지 않았다. 현재 20MB 초과 파일 가능성과 PDF/HWP/HWPX·이미지·압축파일의 parse/sidecar 흐름을 하나의 exact contract로 묶지 못했다 | 큰 업무 첨부를 거부하거나 파싱 실패를 조용히 잃으면 고객의 메일·문서 업무가 중단된다 | naruon/newsdom-api 소유 PR에서 streaming upload, configurable bounded limit above 20MB, MIME sniffing, parser capability registry, quarantine/retry, source-position provenance, and ADR를 추가하고 size/unsupported-type/zip-bomb tests를 required evidence로 만든다 |
| G-19 | OpenCode/Noema의 실제 리뷰 산출물 깊이·정확도가 CodeRabbit/Devin과 대등한지 측정된 적이 없다 (owner directive, 2026-09-01) | 자동 리뷰가 형식적으로만 통과하고 실제 결함은 사람이나 외부 봇에만 의존해 발견된다 | 동일 PR 집합에 대한 finding 수/정밀도/심각도 비교 방법론을 정의하고, `opencode.jsonc`/`ci-review-prompt.md`/`code-reviewer-prompt.md`/`scripts/ci/noema_review_gate.py`의 프롬프트·설정을 감사한 뒤 parity 기준에 맞춰 조정한다 |
| G-20 | Strix의 현재 보안 스캔 범위가 diff-only인지 전체 코드베이스인지 `strix.yml` 설정 기준으로 확인되지 않았다 (owner directive, 2026-09-01: "보안 리뷰는 전체 코드로 수행") | diff만 스캔하면 기존 코드에 남아 있는 취약점이 영구히 미탐지 상태로 남는다 | `strix.yml`의 실제 스캔 대상 설정을 확인하고 diff-only이면 전체 저장소로 확장하며, 실행시간·timeout 예산(§ 2026-09-01 owner directive의 3시간 하한과 연동)을 함께 재산정한다 |
| G-21 | contextual-orchestrator의 리뷰용 모델 선택이 free-tier 후보를 대체로 동등하게 취급해 12개 후보 순차 preflight 같은 지연이 발생한다 (owner directive, 2026-09-01: "빠르면서 능력이 좋은 모델에 요청을 보내어 시간을 당기시오") | 리뷰 1건이 수 시간씩 걸려 병합 루프 전체가 느려진다 | `model_discovery.py`의 provider별 응답 시간 데이터(있다면) 또는 신규 latency 신호를 정의하고, free+ZDR 제약 내에서 속도·능력 가중 랭킹을 구현한다 |
| G-22 | `.github` 저장소의 `Required OpenCode Review` 실행이 GitHub Actions 러너/동시성 용량을 초과해 대기열에 정체된다 (2026-09-01 실측: 동시에 45개 run이 `queued` 상태, 일부는 약 2시간째 시작조차 못함) | 개별 poll-budget/dispatch-worker 정합성을 고쳐도(#1532) job 자체가 러너를 못 얻으면 리뷰가 여전히 지연되거나 시간 내 완료되지 못한다; PR이 많고 각 PR이 재검증마다 main을 반복적으로 restack하면서 스스로 대기열 부하를 키운다 | `opencode-review.yml`의 `concurrency` 그룹(레포+PR 번호 스코프, `cancel-in-progress: true`)은 정상 작동을 확인함 — 오래된 head의 stale run이 아니라 순수 대기열 깊이가 원인. 조직 Actions 동시성 한도 상향(계정/과금 결정, 코드 변경 아님), 열린 PR 총량 축소를 통한 처리 요구량 감소, 또는 PR별 재검증 트리거의 배치·디바운스로 완화 가능 — 아직 미착수 |
Comment thread
seonghobae marked this conversation as resolved.
Outdated

## 4. 열린 PR live inventory

Expand Down Expand Up @@ -1715,6 +1719,81 @@ string, a bare number) confirmed to fail against the pre-fix script (`KeyError:
signature as the original round-4 bug) before passing after the fix. 1930 tests pass; 100% coverage and
100% docstring coverage on `scripts/ci/`.

## 2026-09-01 opencode-review verdict-poll/dispatch-worker budget mismatch fixed; three follow-up product gaps opened

- **Root-caused and fixed the systemic `opencode-review` blocker** that had left `.github#1500`, `#1506`,
`#1527`, `#1529`, and `ContextualWisdomLab/contextual-orchestrator#968`/
`ContextualWisdomLab/contextual-orchestrator#946` all stuck: `opencode-review.yml`'s verdict
poll job (`timeout-minutes: 100`, 90 minutes of polling) was structurally shorter than the dispatched
`opencode-review-dispatch.yml` worker job's own ceiling (`timeout-minutes: 325`, 205 minutes reserved
for its model-pool step alone, needed because the contextual-orchestrator sidecar preflight probes ~12
free-tier candidate models sequentially with real `TimeoutError`s and stale-model 404s). The dispatch
always succeeded; the poll could never outlast a worker job 3.6x its own budget. Confirmed with
concrete timestamps: on `.github#1500`, dispatch fired `11:37:27Z`, the poll gave up `13:08:30Z`, but
the `scan-pr-queue` pass touching that exact PR still had not produced an approval as of `13:55:04Z` —
47 minutes after the poll had already failed closed. Fixed in `.github#1532` (merged via
owner-authorized admin bypass — the fix edits `opencode-review.yml` itself, the exact required-check
pipeline it depends on, making normal review of this specific PR structurally impossible under the
pre-fix budget): raised the poll job to `timeout-minutes: 340` / 660 attempts (~330m), and added
`test_verdict_poll_budget_covers_the_dispatched_review_jobs_own_ceiling` so the two workflows' budgets
cannot silently drift out of alignment again. `contextual-orchestrator` is a contributing factor (its
free-tier model pool's real latency/flakiness is why worker timeouts run in the hundreds of minutes)
but not a new regression; open PR `#971` there is unrelated to this failure mode.
- **Owner directive, 2026-09-01**, broadcast across `#1500`/`#1502`/`#1503`/`#1527`: any timeout on the
review path should be at minimum 3 hours ("120초 같은 건 당황스럽군요" — something like 120 seconds is
embarrassing), OpenCode/Noema should review as thoroughly as CodeRabbit/Devin, Strix's security review
should cover the entire codebase (not just the diff), and contextual-orchestrator should route review
requests to fast, capable models to cut wall-clock latency. Grepped `main` for remaining short
(≤120s) timeouts on the review path: two remain, both with fixes already in flight and not duplicated
here — `scripts/ci/noema_review_gate.py:656`'s `opener.open(request, timeout=120)` is addressed by
`#1508` (removes the per-request LLM timeout entirely so Noema reviews run for the enclosing job's
lifetime; currently `mergeable_state: dirty`, a real conflict against current `main`, not yet
resolved), and `scripts/ci/contextual_orchestrator_review_sidecar.sh:484`'s `curl -sS --max-time 120`
gateway-preflight call is being reworked in `#1415` — its latest iteration raises the bound to one
hour per attempt with caller-specific job ceilings, which is progress over the 120-second value but
**does not yet meet this directive's 3-hour floor**; still under active iteration against fresh Devin
findings (including this exact gap, independently flagged there), not merged, and not counted as
resolved here.
- **Three new tracked product gaps opened by this directive (register entries G-19/G-20/G-21 above —
numbered past `#1348`'s pending `G-16` allocation for its own queue-hygiene gap, still open and
unmerged as of this writing, to avoid a future collision),
not yet scoped or started:**
- **G-19 (G-Review-Depth)**: OpenCode/Noema review output quality/thoroughness has no measured parity target
against CodeRabbit/Devin. Needs: a comparison methodology (same PRs, same findings categories),
review prompt/config audit (`opencode.jsonc`, `ci-review-prompt.md`, `code-reviewer-prompt.md`,
`scripts/ci/noema_review_gate.py`'s prompt construction), and a decision on what "parity" concretely
means (finding count, finding precision, severity calibration, or some combination) before any
prompt/config change is made.
- **G-20 (G-Strix-FullScope)**: Strix's current security-review scope (diff-only vs. whole-repository) needs
to be confirmed against `strix.yml`'s actual scan configuration, then widened to full-codebase if it
is currently diff-scoped, with a cost/runtime-budget analysis (a whole-repo scan changes the timeout
arithmetic this same directive also touches).
- **G-21 (G-FastModelRouting)**: `contextual-orchestrator`'s model selection for review workloads currently
treats free-tier candidates largely interchangeably (see the 12-candidate sequential preflight cost
above); the directive asks for latency-aware ranking toward fast, capable models within the
free+ZDR-constrained pool, which needs a defined speed/capability signal (e.g. `model_discovery.py`'s
existing per-provider timing data, if any) before implementation — not attempted blind this pass.
- **A fourth, distinct systemic cause found while verifying `.github#1500`'s fix actually let its review
pipeline run (register entry G-22 above): GitHub Actions queue-depth/concurrency saturation, not a
dispatch-logic bug.** `#1532`'s poll-budget fix and `#1500`'s own legacy-review-suppression fix both
address correctness of the review *state machine*; neither helps if the underlying `Required OpenCode
Review` job never gets a runner. Measured directly: `gh`/GraphQL listing of `opencode-review.yml` runs
filtered to `status=queued` on `ContextualWisdomLab/.github` alone returned 45 simultaneous queued runs
spanning nearly two hours of creation timestamps, one job (`coverage-source-tree` on `#1535`) still
queued 1h47m after its run was created. Ruled out a cancellation bug first: `opencode-review.yml`'s
`concurrency.group` is scoped to `repo+PR-number` (not head SHA) with `cancel-in-progress: true`, so a
superseded push to the same PR does correctly cancel its predecessor (confirmed: `#1535`'s earlier
`noema-review` job shows `conclusion: cancelled`) — the 45 queued runs are each a distinct, still-live
Comment thread
seonghobae marked this conversation as resolved.
Outdated
PR competing for the same limited concurrent-job pool, not stale zombies. This repo's own operating
pattern likely compounds it: dozens of open PRs each restack onto `main` every time `main` moves (visible
in commit messages like "merge(main): restack ... on current control plane"), and each restack re-queues
a full ~15-30-job fan-out (SBOM, CodeQL, Semgrep, Trivy, OSV-scan, Scorecard, dependency-review, gitleaks,
two Python quality matrices, plus the review dispatch itself). Not fixed this pass — the two available
levers are an account/billing-level Actions concurrency increase (not a code change) and reducing open-PR
volume/restack frequency (the org's own stated PR-to-zero merge goal already pushes this direction, but
is not sufficient alone while dozens of PRs are open at once). Left as an open observation under G-22
rather than attempting an unreviewed job-fan-out reduction that could weaken a required security gate.

## 5. 실행 루프와 고객의 다음 행동

각 hourly pass는 아래 순서를 유지한다.
Expand Down
Loading