contributor-trust
Skill76 starsChanged 10 days agoMITView on GitHub
Aggregate the contributor trust ledger into a shrunk-and-decayed reliability score that weights review priority and gate intensity — never a reason to skip a gate. Band A, no LLM: classification happens upstream at close, this is arithmetic over an existing event log.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- prometheus/prometheustheir own version, first seen Nov 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- prometheus/prometheus★ 68ksame name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- action-watchdogSkill
- coding-principlesSkill
- issue-autocloseSkill
- issue-captureSkill
- issue-close-proposalSkill
- issue-triageSkill
- label-syncSkill
- pr-deep-reviewSkill
- project-system-setupSkill
- pr-triageSkill
- release-announceSkill
- release-pipelineSkill
- triage-scoreboardSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 99
One terminal event per PR (write side): Write a bounce-then-converge as the single good-rework outcome it is — don't emit a negative and …
- Very specific: line 121
Every published score carries its effective_n.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
contributor-trust
When to load: computing the contributor reliability score that
triage-scoreboard consumes as a mechanical dimension. Implements
the trust-ledger half of
contributor recognition. Band A —
deterministic, read-only, no LLM. Steward role. Loaded on demand during a scoreboard
refresh, not wired as its own scheduled job: the scoreboard recomputes mechanical dimensions fresh
each run, so an on-demand score is always current.
Precondition: a ledger path is configured. Read
trust.ledger_pathfromconfig.yaml; blank → there is no ledger to aggregate, stop (silent no-op).
Config: the
trust:block —ledger_path,prior,shrinkage,half_life_days. This skill never writes events: it reads the ledger and publishes the trust map.release-pipelinewrites an event at close.
The ledger
An append-only record of one event per PR's terminal outcome. A bounce that later converges is one good-rework event — not a negative followed by a positive. Intermediate bounces are not events at all; only the terminal state is written.
A terminal outcome can still be corrected — a clean-ship later found to be a regression — by
appending a new event for the same pr, never by rewriting the old one. The log stays append-only;
the last-appended event for a PR wins at read time (see Step 2). "One event per PR" is therefore
an effective-state rule, not a promise that the raw log holds a single line per PR.
Each event: pr (repo#number) · author (handle) · outcome (below) · at (UTC date).
| Class | Outcomes | Scoring |
| positive | clean-ship, shipped-with-minor-fixes, good-rework | value 1 |
| negative | not-fixed, went-stale, regression, critical-flaw | value 0 |
| unscored | neutral, superseded, shelved, wip, concept-call | excluded — recorded, never judged |
Steps
- Read
config.yaml. Loadtrust.ledger_path,prior,shrinkage(k),half_life_days. Blankledger_path→ silent no-op. - Read the ledger, collapse to one event per
pr, then group byauthor. The last-appended event for a PR wins (last-write-wins over the append-only log), so a later correction supersedes an earlier entry and no PR is ever counted twice. Collapse by append order, not byat—atis the event's terminal date the decay in Step 4 needs, and a correction may legitimately carry a recentat. Malformed or unknown-outcome events are surfaced, never guessed — an event you can't classify is not an event you may score. - Drop unscored events from the computation. They stay in the ledger; they never move a score
and never contribute to
effective_n. - Value and decay each scored event.
v= 1 (positive) or 0 (negative).w = 0.5 ** (age_days / half_life_days)— an event's weight halves everyhalf_life_days. Shrink toward the prior:
score = (Σ wᵢ·vᵢ + k·prior) / (Σ wᵢ + k)Both mandated properties fall out of this one expression rather than being bolted on: a contributor with zero scored events scores exactly
prior(theΣw = 0case reduces tok·prior / k), so the first-timer needs no special branch; and a contributor with one event barely leaves the prior.- Publish the trust map, keyed by handle:
{score, events_scored, effective_n, last_event_at}. Publisheffective_n(=Σ wᵢ, the decayed event count) alongside every score — it is what tells a consumer how much the score is worth. A0.9backed by aneffective_nof0.2is almost entirely prior. - Never write. This skill does not append, edit, or reconcile the ledger. Same ledger + same clock → same map.
Pitfalls
- The score never gates. It weights review priority and gate intensity. It is an input to triage, never an excuse to skip the authoritative gate — every change passes the gates regardless of who wrote it. A trust score that waves a change through has become the thing this system exists to prevent.
- The trust map is internal triage state — don't render it publicly. It carries negative signal and is an input to your review intensity, not a public leaderboard. Publishing per-contributor reliability scores would chill exactly the experimentation contributor recognition exists to reward. Keep it beside the scoreboard as internal state, out of any rendered or public surface.
- Today the score is upward-biased — say so, don't compute past it. The only declared ledger
writer is
release-pipeline, which runs only on the ship path (it merges an all-clear PR). Nothing currently writeswent-stale,not-fixed,regression, orcritical-flaw. So the ledger accrues only positives at every volume — a highscoreis inflated whethereffective_nis low or high, becauseeffective_nmeasures how much positive evidence exists, not freedom from bias. A high score can mean "genuinely reliable" or "failures were never recorded," and nothing in the ledger distinguishes them. Treat every score as low-confidence until a reconcile job records non-ship outcomes. - Don't over-judge one data point. This is enforced by shrinkage, not by a special case. If you
find yourself adding an
if events == 1branch, the prior is doing the job already. - Unscored ≠ negative. Excluding an event and penalizing it are different things. A superseded or shelved PR must not cost the author — that's how you teach contributors that experimenting is expensive.
- One terminal event per PR (write side). Write a bounce-then-converge as the single
good-reworkoutcome it is — don't emit a negative and then a positive. Read-side last-write-wins (Step 2) is a backstop against accidental duplicates and the mechanism for deliberate corrections; it is not permission to append sloppily on the write side. - Guessing an outcome. Classification is upstream judgment made at close. This skill classifies nothing — it aggregates. If an event's outcome is missing or unrecognized, surface it; never infer one from the PR.
Verification
- Same ledger + same clock → the same trust map (deterministic; no model in the loop).
- A contributor with zero scored events scores exactly
prior. - A contributor with one recent positive event lands near
prior, not at1.0(shrinkage holds: withk=3.0,prior=0.5, a single fresh positive gives(1 + 1.5) / 4 = 0.625). - Unscored events move no score and add nothing to
effective_n. - A corrected outcome supersedes the earlier one: appending a
regressionevent for a PR that already has aclean-shipscores that PR once — as theregression— because Step 2 keeps only the last-appended event perpr. Two events for one PR never double-count. - Ageing an event several half-lives drives its weight toward zero (5 half-lives →
0.031), so an all-stale ledger reverts toprior. - The ledger is unchanged after a run (read-only).
- Blank
trust.ledger_path→ silent no-op. - Every published
scorecarries itseffective_n.
Related: contributor recognition · the triage scoreboard · the reconcile pattern.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

