Outcome
discover-updates --from-catalog --ls-remote-skip가 idle repository를 정상 확인했을 때 freshness-eval이 false incremental breach를 만들지 않는다.
Scope
포함:
- incremental discovery가 새 incremental work 없음/idle 상태를 성공적으로 확인한 경우
REPO_HEALTH.lastSuccessfulIncrementalAt heartbeat를 전진한다.
DISCOVERY_MODE_INITIALIZE, missing cursor, non-fast-forward, pending job 생성 경로는 fresh로 표시하지 않는다.
SCAN_JOB / SCAN_LEDGER 기반 scan completion 및 dedupe proof는 그대로 유지한다.
제외:
- baseline cadence 변경
- vulnerability scan rollout 변경
- GHAS mutation 또는 external scan trigger
Bug Details
Actual behavior:
- idle repo가 skip되거나 새 job이 없으면
REPO_HEALTH.lastSuccessfulIncrementalAt가 전진하지 않아 freshness-eval이 incremental breach로 집계할 수 있다.
Expected behavior:
- incremental discovery가 remote refs와 cursor 일치 또는 no new work를 정상 확인하면 incremental discovery heartbeat가 최신화되어야 한다.
Reproduction:
- catalog 대상 repo가 장시간 새 commit 없이 유지된다.
discover-updates --from-catalog --ls-remote-skip는 정상 실행된다.
freshness-eval --poll-interval-hours 0.0833333333 --baseline-cadence-hours 24 --margin-hours 1가 stale incremental breach를 보고한다.
Impact:
- operator dashboard/freshness alert가 실제 queue failure가 아닌 idle repository를 stale로 해석한다.
Acceptance Criteria
- Idle skip 경로는
DISCOVERY_MODE_ENQUEUE에서만 incremental heartbeat를 전진한다.
- Fetch 후 refs 없음/unchanged/all-ledger-skipped 경로는 새 work 없음이 확인된 경우 heartbeat를 전진한다.
- Initialize/missing cursor/non-fast-forward/pending work 경로는 heartbeat를 전진하지 않는다.
- Focused runtime tests와 full test suite가 통과한다.
- PR body가
lastSuccessfulIncrementalAt 의미를 scan completion이 아니라 incremental discovery heartbeat로 명확히 설명한다.
Outcome
discover-updates --from-catalog --ls-remote-skip가 idle repository를 정상 확인했을 때freshness-eval이 false incremental breach를 만들지 않는다.Scope
포함:
REPO_HEALTH.lastSuccessfulIncrementalAtheartbeat를 전진한다.DISCOVERY_MODE_INITIALIZE, missing cursor, non-fast-forward, pending job 생성 경로는 fresh로 표시하지 않는다.SCAN_JOB/SCAN_LEDGER기반 scan completion 및 dedupe proof는 그대로 유지한다.제외:
Bug Details
Actual behavior:
REPO_HEALTH.lastSuccessfulIncrementalAt가 전진하지 않아freshness-eval이 incremental breach로 집계할 수 있다.Expected behavior:
Reproduction:
discover-updates --from-catalog --ls-remote-skip는 정상 실행된다.freshness-eval --poll-interval-hours 0.0833333333 --baseline-cadence-hours 24 --margin-hours 1가 stale incremental breach를 보고한다.Impact:
Acceptance Criteria
DISCOVERY_MODE_ENQUEUE에서만 incremental heartbeat를 전진한다.lastSuccessfulIncrementalAt의미를 scan completion이 아니라 incremental discovery heartbeat로 명확히 설명한다.