Add release validator and regression tracking - #590
alisawavezen12 wants to merge 7 commits into
Conversation
Please add a PR description 🙂Respect the reviewers — a description helps others understand the changes and review them faster. Keep it short, clear, and to the point. It also serves as documentation for future reference. The PR was moved to Draft until a description is added. |
Please add a PR description 🙂Respect the reviewers — a description helps others understand the changes and review them faster. Keep it short, clear, and to the point. It also serves as documentation for future reference. The PR was moved to Draft until a description is added. |
Please add a PR description 🙂Respect the reviewers — a description helps others understand the changes and review them faster. Keep it short, clear, and to the point. It also serves as documentation for future reference. The PR was moved to Draft until a description is added. |
Please add a PR description 🙂Respect the reviewers — a description helps others understand the changes and review them faster. Keep it short, clear, and to the point. It also serves as documentation for future reference. The PR was moved to Draft until a description is added. |
Please add a PR description 🙂Respect the reviewers — a description helps others understand the changes and review them faster. Keep it short, clear, and to the point. It also serves as documentation for future reference. The PR was moved to Draft until a description is added. |
|
Thanks for adding a description — the PR is now marked as Ready for Review. |
| return this.saveRepetition(task.projectId, newRepetition); | ||
| }); | ||
|
|
||
| if (task.payload.release && existedEvent.resolvedInRelease) { |
There was a problem hiding this comment.
we need to check if task.payload.release is newer than existedEvent.resolvedInRelease
There was a problem hiding this comment.
we do this later in the markRegression function.
| import type { GroupedEventDBScheme, RepetitionDBScheme } from '@hawk.so/types'; | ||
|
|
||
| /** | ||
| * Build a map of releases in which each event occurred. |
There was a problem hiding this comment.
| * Build a map of releases in which each event occurred. | |
| * Build a map of releases in which each event occurred ordered from old to new |
| * @param projectId - project identifier | ||
| * @param releasesToCheck - ready releases ordered from oldest to newest | ||
| */ | ||
| async function validateProject(db: Db, projectId: string, releasesToCheck: ReleaseDBScheme[]): Promise<void> { |
There was a problem hiding this comment.
please add docs to main parts of algorythm
| const allProjectReleases = await releasesCollection | ||
| .find({ | ||
| projectId, | ||
| release: { | ||
| $type: 'string', | ||
| $ne: '', | ||
| }, | ||
| }) | ||
| .sort({ _id: 1 }) | ||
| .toArray(); |
There was a problem hiding this comment.
we already found all releases at validateReleases, looks like this query is redundant. And I'm not sure we need to groupReleasesByProject - can't we just iterate over fetched releases?
There was a problem hiding this comment.
In validateReleases, we don't retrieve all releases, only that haven't been checked yet.
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Release history compatibility, durable regression reconciliation, deployment wiring, and bounded database processing remain unresolved.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 3
Open (4)
What changed in this PR
Implements release-based event resolution and regression tracking across the validator and grouper workers.
Changes:
- Adds release validation logic and worker scaffolding.
- Records repetition releases and regression cycles.
- Adds supporting tests and updates shared types.
| File | Description |
|---|---|
| yarn.lock | Updates Hawk types dependency. |
| workers/release-validator/tests/validate-releases.test.ts | Tests release validation scenarios. |
| workers/release-validator/tests/utils/group-releases-by-project.test.ts | Tests release grouping. |
| workers/release-validator/tests/utils/build-event-release-map.test.ts | Tests event-release mapping. |
| workers/release-validator/tests/index.test.ts | Tests worker queue configuration. |
| workers/release-validator/src/validate-releases.ts | Implements release validation. |
| workers/release-validator/src/utils/group-releases-by-project.ts | Groups releases by project. |
| workers/release-validator/src/utils/build-event-release-map.ts | Maps events to releases. |
| workers/release-validator/src/index.ts | Defines the validator worker. |
| workers/release-validator/README.md | Documents worker behavior. |
| workers/release-validator/package.json | Declares worker metadata. |
| workers/grouper/tests/index.test.ts | Tests repetition and regression behavior. |
| workers/grouper/src/mark-regression.ts | Implements regression updates. |
| workers/grouper/src/index.ts | Records releases and invokes regression tracking. |
| package.json | Adds scripts and updates types. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.


Summary
Introduce release-based detection of likely fixed events and track regressions when resolved events occur again.
Changes
release-validatorworker.resolvedInRelease.regressionInReleasefor occurrences in the resolved or newer releases.