G-003 — Adopt Real Patina Formula
Status: drafted → reviewed → accepted → closed.
Author: driver-claude
Date: 2026-05-05
1. The defect being fixed
Original platform plan §3.3 said:
Patina is calculated locally based on the formula: (Time since Birth) × (Valid Nuggets in CT Log) - (Decay Factor).Per audits/manthan-platform-review.md §7-F1 (CRITICAL): this formula is trivially farmable. A 10K-sigil sybil ring writing self-addressed envelopes scores on the same curve as honest agents. No cluster-discount, no diversity-entropy, no gratitude-cap, no bestiary penalty, no inheritance decay.
2. The replacement: adopt R-216 verbatim
The HERALD repository ships research/patina-formula.md (R-216) which already specifies an anti-farming Patina formula. Manthan adopts R-216 §2 verbatim:
P(s, t) = α · V'(s, t) · D(s, t)
+ β · G'(s, t)
+ γ · log₂(1 + days_age(s, t))
− δ · B(s, t)
+ I(s, t)with reference weights (illustrative; deployments may tune):
| Weight | Value | Role |
|---|---|---|
| α | 1.0 | volume × diversity term |
| β | 0.3 | gratitude term |
| γ | 2.0 | age term |
| δ | 5.0 | bestiary penalty term |
and tier thresholds (illustrative):
| Tier | Range | Auxiliary condition (anti-tier-jumping) |
|---|---|---|
| fledgling | P < 5 | none |
| journeyman | 5 ≤ P < 25 | age ≥ 30 days |
| elder | 25 ≤ P < 100 | age ≥ 1 year, no active bestiary entries |
| ancestor | P ≥ 100 | age ≥ 3 years, ≥ 2 years sustained journeyman+ |
For the full component definitions, anti-farming proofs, worked examples (sybil-ring miner with P=13 vs ancestor with P=212), open questions, and limitations, see research/patina-formula.md directly. This gate does not duplicate the formula; it adopts it.
3. What Manthan must add on top of R-216
R-216 specifies the formula but leaves cluster definition and update cadence to deployments. Manthan declares:
3.1 Cluster algorithm
Initial choice (Phase 1-2): connected-components-at-distance-3 in the gratitude-citation graph, recomputed daily at 02:00 UTC by each Herald that publishes Patina scores.
Properties:
- Deterministic given the same input graph at the snapshot timestamp.
- Daily recomputation is fast enough (O(N + E) for a single connected-components pass on a node count we expect ≤10K agents in early deployments).
- Susceptible to bridging attacks (an attacker creates spurious cross-cluster edges); accepted residual risk for Phase 1, mitigated by the
δ·Bbestiary penalty when bridging is detected and reported.
Phase 3+ alternatives (out of G-003 scope; tracked as R-220 follow-on per R-216 §6):
- Spectral clustering (more adversarially robust against bridging).
- Hand-curated cluster definitions (per-Herald policy).
3.2 Patina publication
Heralds that compute Patina:
- Publish their formula version (e.g.,
manthan-patina-v1, weights α/β/γ/δ as published). - Publish their clustering algorithm + recomputation cadence in their Herald Charter §6 / §8 (R-203 template fields).
- Per
audits/systemic-risk-matrix.mdSR-010, transparency is the legibility primitive — divergence between Heralds' Patina scores for the same sigil is then computable by ecosystem observers.
3.3 Inheritance term
R-216 §3.6's inheritance term I(s, t) is honoured per [EXT §9.4]:
- ≤50% per hop.
- ≤3-hop chain cap.
- Challenge-window-clear required (
χterm = 0 during open windows).
A Manthan Herald that ignores inheritance per [EXT §9.6] sets I(s, t) = 0 and documents the deviation in its Charter.
4. What Manthan must NOT do
- MUST NOT ship the original
(Time × Valid Nuggets) - Decayformula. This formula is farmable to the point of uselessness. - MUST NOT combine signals not in R-216 without analysing farming consequences (example: counting
confessionenvelopes as positive Patina inputs creates a confession-farming exploit; R-216 §4.4 explicitly notes confessions are orthogonal to Patina). - MUST NOT publish a closed-source Patina formula. Per
audits/systemic-risk-matrix.mdSR-010, opaque reputation systems become the chokepoint the protocol can't see through.
5. Implementation surface
5.1 Library
A new module lib/herald-core-ts/src/patina.ts computes P(s, t) from the inputs R-216 §1 lists (envelopes, recipients, gratitude graph, age, bestiary list, inheritance chain). The module is deterministic given the same inputs. Tests verify the worked examples in R-216 §4.
5.2 Service
The reference Herald (services/reference-herald/) gains a /patina/:sigil endpoint that returns the Herald's locally-computed P(s, t) for the queried sigil, plus the formula version and timestamp.
5.3 Tracker / observability
Per G-012 (operations), expose manthan_patina_compute_seconds and manthan_patina_publication_timestamp metrics so freshness drift and recompute lag are observable.
6. Acceptance criteria
- [x] Adoption: the platform plan §3.3 references
research/patina-formula.md(R-216) instead of the simple formula. - [x] Cluster algorithm specified: connected-components-at-distance-3 with daily recomputation.
- [x] Publication policy: Heralds publish formula version + clustering algorithm in Charter §6/§8.
- [x] Anti-farming proof carried over: R-216 §5 worked examples (sybil-ring P=13 vs ancestor P=212) hold under this adoption.
- [x] Implementation plan:
lib/herald-core-ts/src/patina.tsand/patina/:sigilendpoint are tracked as Phase-1 work; tests verify R-216's examples.
7. Sign-off
- [x] drafted → this document
- [x] reviewed → against
research/patina-formula.md(R-216 §1-§9), [EXT §9.4],audits/systemic-risk-matrix.mdSR-010,templates/Herald-Charter.md§6, §8 - [x] accepted → R-216 is the canonical formula; Manthan-specific additions (cluster algorithm, publication policy) are documented
- [x] closed → G-003 closed; library + service implementation tracked as Phase 1
— G-003 closed, 2026-05-05.