π fix(audit): record update-available audits on change, not on a timer - #642
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. π βΉοΈ Recent review infoβοΈ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: β Files ignored due to path filters (1)
π Files selected for processing (6)
π€ Files with no reviewable changes (3)
π WalkthroughWalkthroughUpdate-available audit deduplication no longer uses Possibly related PRs
π₯ Pre-merge checks | β 2β Passed checks (2 passed)
β¨ Finishing Touchesπ Generate docstrings
π§ͺ Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Renames Unreleased to [1.6.0-rc.10] β 2026-07-31 and adds the routine dependency-maintenance rollup entry (#614, #615, #617, #646). rc.10 contents: the #644 infrastructure helper-image fix (#645), Crowdin resync + fr fixes (#620), minute-precise maintenance-window warning + docs (#640/#641), the audit re-record fix (#642), dep maintenance including the fast-uri override at 4.1.1, and the Renovate babel-major block. Version files stay at 1.6.0 (set at rc.1). Full app+ui coverage gates run locally: 100% on all metrics. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog β¨ **Added** - Added v1.6.0-rc.10 release highlights. - Added dependency-maintenance coverage for issues `#614`, `#615`, `#617`, and `#646`. - Added release comparison-link validation for v1.6.0-rc.10. π§ **Changed** - Updated release documentation from `Unreleased` to `[1.6.0-rc.10] β 2026-07-31`. - Updated README, site metadata, demo mocks, API examples, quickstart documentation, and tests from `1.6.0-rc.9` to `1.6.0-rc.10`. - Updated release identity tests to reference the new release and date. - Documented infrastructure fixes, Crowdin synchronization, French translations, maintenance-window warnings, audit deduplication, dependency updates, the `fast-uri` 4.1.1 override, and the Renovate Babel-major block. - Confirm that all release-version references changed from `1.6.0-rc.9` to `1.6.0-rc.10`. - Confirm that version files remain at `1.6.0`. - Run the documented application and UI coverage gates and verify 100% coverage across all metrics. - Verify that the release documentation contains the dependency rollup and all referenced issues. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Standard pre-cut sync. Brings main level with dev/v1.6 for the v1.6.0-rc.10 cut. Delta since the rc.9 sync: #640, #641, #642, #614, #615, #645 (fixes #644), #620, #646, #617, #647 (release prep). After merge, main's tree must equal origin/dev/v1.6 (squash-merge policy mints a new SHA; tree equality is the invariant the release-cut workflow asserts). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - π Fixed Docker Hub helper-image references so Drydock can spawn helper containers without the unavailable registry-prefixed image. - π§ Changed audit `update-available` deduplication to use stable signatures instead of a configurable time window. - π§ Added maintenance-window warnings for cron expressions with fixed minute fields. - β¨ Added update-eligibility documentation links to soft-blocker confirmation dialogs. - β¨ Documented Portwing Edge exec sessions and maintenance-window behavior. - π§ Updated localization, release metadata, mock data, dependencies, and release-candidate references to `1.6.0-rc.10`. - π Updated dependency security checks and Renovate rules. ## Concerns - Verify that `main` and `origin/dev/v1.6` have identical trees after merge. - Review new locale entries that still use English text. - Confirm that helper-image resolution preserves non-Hub registry hosts and all registry-manager fallback behavior. - Confirm that removing `DD_AUDIT_UPDATE_AVAILABLE_DEDUPE_MS` is reflected in deployment configuration and upgrade guidance. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
What
The rc.9 24-hour store-size acceptance failed on
auditGrowthStayedBounded: 140 audit rows of growth in 24h against the 50-row bound. 380 of 464 rows in the store were the sameupdate-availablefact (identical fromβto digest pair) re-recorded over and over.Root cause:
shouldRecordUpdateAvailableAuditdeduped by signature only within a time window (DD_AUDIT_UPDATE_AVAILABLE_DEDUPE_MS, default 1h). Every time the window lapsed, the unchanged update was re-recorded β ~14 identical rows/day/container for any long-pending update, bounded only by 30-day retention (~420 rows/month per stale update).Fix
update-availableaudit rows are recorded on first detection or signature change (kind/localValue/remoteValue) only β never because time elapsed. State map is nowMap<identity, signature>with no timestamps.insertAuditsucceeds, so a failed insert can't permanently suppress that update (mattered once expiry was removed).registerContainerRemovednow also clears update-available state (same identity derivation as the report path), so remove/recreate records a fresh detection. Existing clear-on-resolve behavior is unchanged.DD_AUDIT_UPDATE_AVAILABLE_DEDUPE_MSis removed β it shipped only in v1.6.0 RCs, never in a GA, and no schema rejects a stale env var at startup. Docs rows updated.Known residuals (out of scope, deliberate)
createdfetch can flipupdateAvailablefalseβtrue, which hits the intentional clear-on-resolve path and re-records on re-detection. That's Manifest "created" fetch failures are swallowed, making result.created nondeterministicΒ #606's bug (result nondeterminism), not a dedupe gap β the signature itself can't flap (creatednever enters it; verified ingetRawTagUpdate/getRawDigestUpdate).Restart behavior: in-memory state means at most one duplicate row per still-pending update per process restart β accepted; seeding from the store isn't worth the complexity.
Verification
Changelog
update-availableaudit deduplication to usekind,localValue, andremoteValuesignatures.update-availablestate.DD_AUDIT_UPDATE_AVAILABLE_DEDUPE_MSand its configuration getter, tests, and documentation.Concerns
DD_AUDIT_UPDATE_AVAILABLE_DEDUPE_MSorgetAuditUpdateAvailableDedupeMs.