Idea 4 of 6 · Community, data
Explainable contest-scoring engine for Elixpo Open Source
Build a deterministic engine that turns GitHub events into explainable, reproducible contest points that are hard to game.
Description
The problem this idea addresses and why it matters.
Elixpo Open Source is the platform Elixpo is building to run open-source contests and mentorship programmes. Its points ledger schema and written scoring policy exist, but no engine connects them, and the leaderboard is mock data.
Contest hosts need points that are reproducible, explainable and hard to game.
Impact. A fair contest requires that every participant can see why they received their points, that recalculating the scores gives the same result, and that points cannot be earned through tricks.
Expected outcomes
What must exist at the end of the project.
- A typed, versioned rules configuration with schema validation, not a free-form DSL.
- A deterministic, pure engine that turns normalised GitHub events into ledger entries with idempotency keys.
- Two or three anti-gaming rules (for example self-merge, bot actors, trivial diffs), each producing an explicit "held" or "denied" entry with a reason.
- A replay CLI using recorded webhook fixtures.
- An explanation trace for every ledger entry.
Stretch goals
Optional work, attempted only once the expected outcomes are complete.
- More anti-gaming rules (PR splitting, unlinked PRs).
- A dry-run diff showing who moves when a rule changes.
- A D1 adapter.
- Tie-breakers.
Out of scope
Work that is not part of this project, even if it appears related.
- Webhook ingestion.
- The GitHub App.
- UI.
- Payouts.
How success is measured
The checks that confirm the work is complete.
- 20 or more fixture scenarios with golden outputs.
- Two replays produce byte-identical output.
- Every point traces back to its events and the rule that awarded it.
Material
The code, documentation and issues this idea builds on.
Code and documentation
- Repository: elixpo/opensource.elixpo
- Setup instructions (README)
- Contribution guidelines (CONTRIBUTING)
- Codebase overview
Set up from the README; no private keys needed. If a step asks for a secret, report it as a setup issue. See configuration and access.
Related issues
No issues are linked to this idea yet. Ask about it at gsoc@elixpo.com.
Warm-up tasks
Complete at least one before you submit a proposal, and share the result as a pull request or by email to the programme address.
Set up this project: see Warm-up for the exact commands, how to tell they worked and known limitations. No private keys needed.
- Set up Elixpo Open Source locally from the README.
- Locate the points ledger schema and the written scoring policy in the repository, and note where they disagree or leave gaps.
- Read GitHub's webhook event documentation for pull requests and reviews, and summarise which events the engine would need in your own words.
- Open a small documentation or test improvement pull request in the repository, and respond to review until it is merged or closed.
Skills, size and mentors
- Skills
- Size
- 90 hours
- Difficulty
- Intermediate
- Mentors
Divyanshu- Primary mentor
Ayushman Bhattacharya- Backup mentor
The primary mentor is the contributor's main contact; the backup mentor can step in. Send questions about this idea or the programme to gsoc@elixpo.com, and report defects as an issue in the repository. Mentors aim to reply within 48 hours on weekdays. GitHub Discussions for GSoC 2027 will open once Google announces the programme dates.
Terms used on this page
- Scoring engine: the code that calculates points.
- Ledger, ledger entry: a list of every point awarded, and one line in it.
- Schema: a formal description of what data must look like.
- Leaderboard: the ranked list of contest participants.
- Deterministic, pure: the same input always gives exactly the same output, and nothing else is changed.
- DSL: a domain-specific language, a small custom programming language. This idea asks for typed settings instead.
- GitHub events, webhooks: messages GitHub sends when something happens, such as a pull request being merged.
- Normalised: converted into one standard shape.
- Idempotency key: a unique label that stops the same event from being counted twice.
- Anti-gaming rules: rules that stop people earning points with tricks.
- Replay CLI: a command-line tool that runs saved events through the engine again.
- Fixtures, golden outputs: saved example inputs, and the exact results they should produce.
- Byte-identical: exactly the same, down to the last character.
- D1: a hosted database service from Cloudflare.
- Tie-breakers: rules that decide the order when two people have the same score.
General terms such as mentor, proposal and pull request are defined in the glossary.