Lab 03 — RC Vote Parser

What You'll Build

A parser that reads an Apache RC [VOTE] email thread and evaluates it against the Apache quorum rules: ≥ 3 binding +1 votes and no binding −1 veto.

Vote Thread Format

Subject: [VOTE] Release Apache Spark 3.5.0 RC1

+1 (binding) Alice PMC Chair
+1 (binding) Bob PMC member
+1 (binding) Carol Committer
+1 Eve contributor
0 (binding) Dave abstaining
-1 (binding) Frank — SHA-512 mismatch on .tar.gz

Lines starting with +1, 0, or -1 are votes.
(binding) in the line marks the vote as binding (cast by a PMC member).
All other lines are ignored.

Quorum Rules

ConditionResult
Any binding −1VETOED — release must be fixed
≥ 3 binding +1, no binding −1PASSED
< 3 binding +1, no binding −1INSUFFICIENT_VOTES

Running

mvn test

Expected: 11 tests, 0 failures.

Key Classes

ClassRole
VoteEntryvoter name + vote value (+1/0/−1) + binding flag
VoteThreadsubject + list of entries; helpers for quorum/veto check
VoteResultEnum: PASSED, VETOED, INSUFFICIENT_VOTES
VoteParserparse(String)VoteThread; evaluate(VoteThread)VoteResult

Interview Angle

Walk through a real vote thread from the Apache mailing list archives. Explain the difference between binding (PMC) and non-binding (community) votes, and why a single binding −1 blocks the release even when 10 people voted +1.