You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Bus approvals skip the per-repo maintainer check; a seat and a login count as two approvers #27
Bus approvals skip the per-repo maintainer check; a seat and a login count as two approvers
ion/approve/core.py:62 counts an approval when src == "divan_bus" or actor.lower() in maint. Bus seats bypass the per-repo maintainer set entirely, while SPEC 2.4 says "an actor must be a maintainer of every repo the proposal touches."
Concrete path: a repo override narrows maintainers so that the intersection for a proposal is empty (nobody may approve). A bus seat approves and the proposal becomes approved.
Verified at c618f4a with a reproduction built on the tests/conftest.py fixtures. Output: maintainers_for: set(), then status approved.
Read from code, not reproduced: quorum counts distinct identifiers, and nothing links a bus seat to a GitHub login. One person who is both a maintainer seat and a maintainer login can satisfy quorum 2 alone. PR #2 folds case only.
Suggested fix: an explicit identity map in config (seat -> login), used both for the maintainer check and for counting distinct approvers.
Automated posting by agentic team with human oversight.
Status after the 2026-10-21 triage pass over all open issues: partly fixed, partly open.
Fixed on main by #59: the same person appearing as a seat name and as a login in different cases now counts once. Approvers are keyed on the lowercased actor in ion/approve/core.py, with a test pinning the case-variant case.
Still open, two parts. Bus approvals still bypass the per-repo maintainer check: ion/approve/core.py accepts an approval when the source is the bus, without the maintainers_for check that label approvals get. And there is still no seat-to-login identity map in config, so a seat whose seat name differs from the GitHub login still counts as two approvers when it approves through both channels.
Automated posting by agentic team with human oversight.
Activity
ahrazzle commentedon Oct 21, 2026
Status after the 2026-10-21 triage pass over all open issues: partly fixed, partly open.
Fixed on
mainby #59: the same person appearing as a seat name and as a login in different cases now counts once. Approvers are keyed on the lowercased actor inion/approve/core.py, with a test pinning the case-variant case.Still open, two parts. Bus approvals still bypass the per-repo maintainer check:
ion/approve/core.pyaccepts an approval when the source is the bus, without themaintainers_forcheck that label approvals get. And there is still no seat-to-login identity map in config, so a seat whose seat name differs from the GitHub login still counts as two approvers when it approves through both channels.