Repository navigation
fix(mergedeep): converge identifier-less bypass actors - #1091
Merged
decyjphr merged 3 commits intoSep 29, 2026
Merged
Conversation
Adapt PR #1035 to the existing comparison logic: ignore IDs only for OrganizationAdmin and DeployKey, preserve meaningful actor changes, and add unit, consumer, and focused smoke coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Avoid unrelated property and pull-request-rule default drift in the focused no-op checks. Exercise removal of a known-valid role rather than an API-rejected role ID, preserving exact actor state and no-rewrite assertions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
decyjphr
requested
a balanced review from Copilot
and removed request for
Copilot
September 28, 2026 22:16
Contributor
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Optional bypass modes and centralized actor merging still produce incorrect convergence behavior.
Review effort: Balanced
Findings: 1
Open (1)
What changed in this PR
Fixes ruleset convergence for identifier-less bypass actors while preserving meaningful actor changes.
Changes:
- Compares
OrganizationAdminandDeployKeyactors by type. - Adds unit, plugin, and smoke-test coverage.
- Updates sample configuration and smoke-test documentation.
| File | Description |
|---|---|
lib/mergeDeep.js |
Normalizes bypass actor identity and comparison. |
test/unit/lib/mergeDeep.test.js |
Adds comparison regressions. |
test/unit/lib/plugins/rulesets.test.js |
Tests ruleset synchronization. |
smoke-test.js |
Adds convergence smoke phase 19. |
README.md |
Documents the new smoke phase. |
docs/sample-settings/settings.yml |
Documents identifier-less actor configuration. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Key OrganizationAdmin and DeployKey by actor type so centralized entries replace local actors regardless of ignored IDs. Cover all ruleset scopes, centralized mode precedence, payload uniqueness, and convergence. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

GitHub ignores
actor_idforOrganizationAdminandDeployKey, but the target's comparison logic still reports drift for some omitted, null, and concrete ID combinations. Its broad null-ID exception can also hide meaningful changes for actors that require IDs.Approach
nullactor_idin bypass actor comparison #1035 to the target's existing identity and stable-comparison logic rather than replacing it: identify these two bypass actor types byactor_typeand ignore only their meaningless IDs.bypass_modeand ID-bearing actor changes. KeepNAME_FIELDS, merge-layer matching, non-actor identity precedence, and input configurations unchanged.Source audit and scope
Based on
yadhav/fix-recent-issuesat8135a2e87ad1de32adf2d5b5f371ca002ffb0192. All six original #1035 scenarios already passed on that base, but the normalization and related comparison gaps above remained.Both source commits were selectively adapted into
e4b5f0060da1b3ef1bdab42e4d1e62d6caf73169:0b45e69c73a4deafeac40610d23760a7bc71827e: null-ID comparison fix and sample configuration.2e5ac4ade0095dae18d33fcc4517f40e8973a1b4: distinct null-ID actor regression coverage.The only additional commit is
d18ef76d9e28391cb4975c3f7e7b72359b037c1d, which isolates the smoke fixture from unrelated default drift. No source ancestry or unrelated changes were merged. Related to #1034.Validation
Node 22.12.0 / npm 10.9.0, selected with
nvm use 22.npm run test:unit -- --runInBand: 604 passed, 12 skipped.mergeDeep,mergeArrayBy, and rulesets suites: 151 passed. Before the runtime fix, 28 added regressions failed.PORT=3304 SMOKE_VERBOSE=1 LOG_LEVEL=info node smoke-test.js --phase 1,19: 33 passed, 0 failed; setup, prerequisite phase 1, all phase 19 cases, and teardown completed. Whole-check NOP assertions and unchanged ruleset IDs/timestamps verify convergence.Existing limitations were reproduced on the untouched base: all seven integration suites fail before test execution on Probot ESM/Jest
Unexpected token 'export'; existing test and smoke lint findings are unchanged. Runtime lint is clean.