DIA Procedural Reputation Specification¶
Document Status¶
| Field | Value |
|---|---|
policy-id |
DIA-PROC-REP-001 |
type |
Implementing act (Level 3 of the normative hierarchy) |
version |
0.1.0-draft |
basis |
Art. VII.4-5, VII.6, VII.8, XI of the DIA Constitution; REPUTATION-VALIDATION-PROTOCOL.md; ROOT-IDENTITY-AND-NYMS.md; doc/normative/30-core-values/CORE-VALUES.md section "Reputation as Leverage, Not Power" |
mechanism status |
[mechanism - hypothesis] for scoring functions; data model is normative |
1. Purpose of the Document¶
The Constitution requires procedural reputation as a safeguard for trust routing (Art. VII.4), panel eligibility (ENTRENCHMENT-CLAUSE 3.2), and asymmetric accountability (Art. VII.8). However, no specification exists for how procedural reputation is calculated from its sources.
This document defines:
- reputation domains and signal sources,
- the scoring model (marked
[hypothesis]where unvalidated), - the definition of an active node for reputation purposes,
- the cold-start procedure for new nodes,
- the relation between procedural reputation and identity-assurance levels,
- asymmetric accountability for public-trust roles,
- the portable evidence package for cross-federation mobility,
- cartel detection hooks,
- connection to the health metrics M1-M5 of
REPUTATION-VALIDATION-PROTOCOL.md.
2. Reputation Domains¶
Reputation is not a single global number. It is decomposed into four domains, each measuring a different dimension of trustworthiness.
| Domain | What it measures | Constitutional basis |
|---|---|---|
contract |
Honoring contracts, delivery quality, SLA compliance | Art. V.2, XII.2 |
procedural |
Panel service, governance participation, COI declarations, protocol compliance | Art. VII.4, VII.6 |
incident |
Response to incidents, corrections, vulnerability disclosure | Art. XVI.4, X.9 |
community |
Contributions, mentoring, documentation, onboarding help | Art. XII.4, VI.4 |
Each domain produces a score in [0.0, 1.0], normalized within the federation.
Only the procedural domain qualifies a node for ad-hoc panel selection
(ENTRENCHMENT-CLAUSE 3.2: "high procedural reputation, not technical"). Other
domains inform trust routing but do not grant governance leverage.
At the same time, procedural reputation does not replace identity assurance.
For higher-stakes roles, eligibility requires both the reputation threshold and
the appropriate IAL level in accordance with ROOT-IDENTITY-AND-NYMS.md.
Here, IAL acts as an eligibility gate, not as a score multiplier.
3. Signal Sources and Types¶
A reputation signal is a timestamped, evidenced event -- a fact, not an opinion. This follows the Constitution's preference for facts over narrative (Art. XI) and the core values' emphasis on data over state.
3.1. Signal Data Model¶
reputation_signal:
signal_id: "[unique identifier]"
node_id: "[node identifier]"
federation_id: "[federation]"
domain: "contract" # contract | procedural | incident | community
signal_type: "[specific type]"
polarity: "positive" # positive | negative
weight: 1.0 # base weight before curve application
evidence_ref: "[reference to auditable evidence]"
timestamp: "[ISO 8601]"
source_node_id: "[who generated the signal, if applicable]"
source_type: "oracle" # oracle | protocol | peer | self_report
ttl: "[ISO 8601 expiry]"
3.2. Signal Types per Domain¶
| Domain | Positive signals | Negative signals |
|---|---|---|
contract |
contract_fulfilled, quality_verified, sla_met |
contract_violated, quality_below_threshold, sla_missed |
procedural |
panel_completed, governance_vote_cast, coi_declared, protocol_compliant |
panel_no_show, coi_undeclared, protocol_violation, governance_inaction |
incident |
incident_reported, correction_applied, vulnerability_disclosed |
incident_concealed, correction_refused, retaliation |
community |
contribution_accepted, mentoring_verified, documentation_added |
(absence is not negative -- only active harm generates negative signals) |
3.3. Signal Source Credibility¶
Signals generated by different sources carry different baseline weights:
| Source type | Description | Weight multiplier |
|---|---|---|
oracle |
Verified by an oracle (outcome measurement) | 1.0 (reference) |
protocol |
Generated automatically by protocol compliance checks | 0.9 |
peer |
Reported by another node | 0.7 |
self_report |
Reported by the node itself (e.g. COI declaration) | 0.5 |
These multipliers are federation parameters (signal_source_weights). The rule
"more cautious yes, more permissive no" applies: a federation may lower but not
raise weight multipliers above the defaults.
4. Scoring Model¶
4.1. Domain Score Calculation [hypothesis]¶
For each domain, the score is computed from the node's signals within the rolling window:
domain_score = f(sum_positive, sum_negative, signal_count, diversity)
Where:
sum_positive= sum ofg(weight * source_multiplier * decay_factor)for all positive signalssum_negative= sum ofg(weight * source_multiplier * decay_factor * asymmetry_factor)for all negative signalsg(x)= sublinear growth function (see 4.2)domain_score=clamp(0.0, 1.0, normalize(sum_positive - sum_negative))
Normalization is relative to the federation's signal distribution, recalculated
every measurement_cycle_days.
4.2. Sublinear Growth Curve [hypothesis]¶
The growth function g(x) MUST be concave to prevent concentration:
g(x) = ln(1 + x) / ln(1 + cap)
The exact function (ln, sqrt, tanh, or other) is a federation parameter
(growth_function). The constraint is concavity: g''(x) < 0 for all x > 0.
This ensures diminishing returns: the 100th fulfilled contract contributes less than the 10th.
4.3. Temporal Decay [hypothesis]¶
Signals decay exponentially within the rolling window:
decay_factor = exp(-lambda * age_days)
Where lambda = ln(2) / half_life_days. Default half-life per domain:
| Domain | half_life_days |
Rationale |
|---|---|---|
contract |
90 | Recent reliability matters most |
procedural |
120 | Governance track record needs longer memory |
incident |
60 | Rapid correction matters |
community |
180 | Long-term contributions decay slowly |
Exception: signals tagged continuing_benefit (e.g. maintained infrastructure
still in use) retain a minimum decay floor of 0.3 until the benefit ceases.
4.4. Concentration Limits¶
- No single signal type may contribute more than 40% of a domain's positive score.
- No single source node may contribute more than 20% of another node's signals in any domain.
- Violation of these limits triggers a
concentration_warningand caps the excess.
5. Active Node Definition¶
A node is active for reputation purposes if it meets all of the following:
- It has produced at least
min_signals_per_period(default: 3) auditable signals withinactivity_window(default: 90 days). - It responds to federation heartbeats (consistent with
FEDERATION-MEMBERSHIP-AND-QUORUMactivity criteria). - It is not currently
suspendedorretired.
Inactive nodes retain their historical scores but cannot use them for governance
leverage (voting weight, panel eligibility) until reactivation. Reactivation
requires meeting the activity threshold for one full activity_window.
6. Asymmetric Accountability¶
Nodes holding public-trust roles (Art. VII.8) are subject to stricter standards:
- The weight of negative signals is multiplied by
asymmetry_factor(default: 1.5). - The weight of positive signals is not reduced -- asymmetry applies only to the downside.
- The set of public-trust roles is defined in the future
ROLE-REGISTRYdocument. Until then, the following roles qualify: panel member, federation operator, governance voter with weighted vote, oracle operator. - Asymmetry takes effect immediately upon assuming the role and persists for
asymmetry_tail_days(default: 90) after leaving the role.
7. Cold Start and Bootstrap¶
A new node entering a federation faces the cold-start problem: no signals, no score, no governance access.
7.1. Bootstrap Score¶
A new node starts with bootstrap_score in each domain, equal to the median of
the lowest quartile of active nodes in that domain. This prevents both:
- zero-score entry barriers (which violate M2 health metric),
- inflated entry scores (which enable bootstrap exploitation).
7.2. Bootstrap Decay¶
The bootstrap score decays linearly toward the node's actual earned score over
bootstrap_decay_period (default: 90 days):
effective_score = actual_score + max(0, bootstrap_remaining) * (bootstrap_score - actual_score)
bootstrap_remaining = 1 - (days_since_join / bootstrap_decay_period)
7.3. Bootstrap Governance Restrictions¶
A node in the bootstrap period (bootstrap_remaining > 0) cannot:
- be selected for ad-hoc panels,
- cast weighted votes (equal vote only),
- hold public-trust roles.
These restrictions ensure that governance leverage requires actual earned procedural reputation.
7.4. Identity-Assurance Gate¶
-
High procedural reputation does not, by itself, grant access to high-trust roles.
-
A federation MUST evaluate eligibility as the conjunction of two conditions:
-
reputation threshold,
-
minimum
IALlevel for the given role or procedure. -
For ad-hoc panels, federation operators, oracles, and similar roles, the system SHOULD store a snapshot of the current
assurance_levelin the reputation record.
7.5. Slight Fixed Leverage for Higher IAL Levels¶
-
A federation MUST NOT multiply a reputation score by the
IALlevel. -
A federation MAY grant a node with a higher
IALa small fixed procedural bonus (fixed_power_bonus), but only when: -
the bonus is explicitly described in federation policy,
-
it does not exceed
0.01(1%) of the total power of the given mechanism, -
it does not replace the reputation threshold or domain thresholds,
-
it is auditable and revoked together with the loss of
IALeligibility.
8. Portable Evidence Package¶
Reputation is federation-local, but nodes may move between federations. Portability is achieved through a portable evidence package, not a naked score.
8.1. Package Contents¶
reputation_export_package:
node_id: "[node identifier]"
source_federation_id: "[federation that generated the package]"
exported_at: "[ISO 8601]"
package_signature: "[cryptographic signature of the source federation]"
signal_history:
- signal_id: "[...]"
domain: "[...]"
signal_type: "[...]"
polarity: "[...]"
weight: "[...]"
evidence_ref: "[...]"
timestamp: "[...]"
source_type: "[...]"
attestations:
- type: "panel_service"
description: "[...]"
issued_by: "[federation or panel identifier]"
date: "[...]"
- type: "sanction_served"
description: "[...]"
issued_by: "[...]"
date: "[...]"
appeals_history: []
sanctions_history: []
repairs_history: []
roles_held: []
8.2. Receiving Federation Behavior¶
The receiving federation:
- Imports the signal history as evidence.
- Re-scores the node using its own parameters (growth function, decay, thresholds).
- Does not accept the source federation's score as its own.
- May apply a
foreign_signal_discount(default: 0.8) to imported signals, reflecting reduced verifiability. - Treats the imported package as a faster cold start, not a reputation transfer.
9. Cartel Detection Hooks¶
9.1. Mutual Boosting Detection¶
The system MUST flag pairs or groups of nodes where:
- mutual positive signals exceed
mutual_boost_threshold(default: 30% of each node's positive signals come from the other), - signals are temporally clustered (within
cluster_window, default: 48 hours).
Flagged patterns generate a cartel_flag on the affected nodes and trigger review.
9.2. Closed-Group Flow Detection¶
The system MUST detect closed groups where reputation signals circulate predominantly within the group:
- intra-group signal share >
closed_group_threshold(default: 60%), - group size <
max_cartel_group_size(default: 10 nodes).
9.3. Source Diversity Requirement¶
For a signal to contribute its full weight, the node must have signals from at
least min_source_diversity (default: 5) distinct source nodes in the same
domain within the rolling window. Below this threshold, signal weight is reduced
proportionally.
10. Reputation Record Data Model¶
reputation_record:
node_id: "[node identifier]"
federation_id: "[federation]"
snapshot_at: "[ISO 8601]"
status: "active" # active | inactive | bootstrapping | suspended
identity_assurance_level: "IAL0"
identity_anchor_ref: null
fixed_power_bonus: 0.0
domains:
contract:
score: 0.0 # [0.0, 1.0]
signal_count: 0
positive_sum: 0.0
negative_sum: 0.0
last_signal_at: "[ISO 8601]"
procedural:
score: 0.0
signal_count: 0
positive_sum: 0.0
negative_sum: 0.0
last_signal_at: "[ISO 8601]"
incident:
score: 0.0
signal_count: 0
positive_sum: 0.0
negative_sum: 0.0
last_signal_at: "[ISO 8601]"
community:
score: 0.0
signal_count: 0
positive_sum: 0.0
negative_sum: 0.0
last_signal_at: "[ISO 8601]"
roles: [] # current roles for asymmetry calculation
bootstrap_remaining_days: 0
cartel_flags: []
concentration_warnings: []
11. Connection to Health Metrics (M1-M5)¶
This specification provides the data that REPUTATION-VALIDATION-PROTOCOL metrics
consume:
| Metric | Data source from this spec |
|---|---|
| M1 (Gini) | Distribution of domain_score across all active nodes |
| M2 (Time to influence) | Time from first signal to reaching panel_procedural_threshold |
| M3 (Cartel detection) | cartel_flag count relative to total signals |
| M4 (Reputation-quality correlation) | Correlation between contract.score and oracle-verified outcomes |
| M5 (Top-layer rotation) | Entry/exit of nodes in the top decile of procedural.score |
12. Failure Modes and Mitigations¶
| Failure mode | Mitigation |
|---|---|
| Gaming via volume of trivial signals | Minimum significance threshold per signal type; diminishing returns via sublinear curve; concentration limits (section 4.4) |
| Sybil attack via mutual signals | Cartel detection hooks (section 9); source diversity requirement |
| Cheap reputation without strong identity anchoring | Shared gate: reputation + IAL; high-stakes roles require both conditions |
| Bootstrap exploitation | bootstrap_min_age restriction; procedural domain requires actual panel service |
| Decay punishes long-term contributors | continuing_benefit exception; community domain has slowest decay |
| Asymmetry weaponized against public-trust holders | Asymmetry applies only to negative signals; appeals process unchanged |
| Score opacity erodes trust | Every score is decomposable: node can request full signal history and weight breakdown |
| Reputation shopping across federations | Portable evidence package, not portable score; receiving federation re-scores locally |
13. Federation Parameters¶
| Parameter | Default | Allowed range | Rule |
|---|---|---|---|
growth_function |
ln |
ln, sqrt, tanh |
Must be concave |
decay_half_life_contract |
90 days | >= 60 days | More cautious yes, more permissive no |
decay_half_life_procedural |
120 days | >= 90 days | " |
decay_half_life_incident |
60 days | >= 45 days | " |
decay_half_life_community |
180 days | >= 120 days | " |
activity_window |
90 days | >= 60 days | " |
min_signals_per_period |
3 | >= 2 | " |
bootstrap_decay_period |
90 days | >= 60 days | " |
asymmetry_factor |
1.5 | >= 1.2 | " |
asymmetry_tail_days |
90 days | >= 60 days | " |
panel_procedural_threshold |
0.6 | >= 0.5 | " |
mutual_boost_threshold |
30% | <= 30% | " |
closed_group_threshold |
60% | <= 60% | " |
min_source_diversity |
5 | >= 3 | " |
foreign_signal_discount |
0.8 | [0.5, 1.0] | " |
concentration_cap_per_type |
40% | <= 40% | " |
concentration_cap_per_source |
20% | <= 20% | " |
14. Open Questions¶
-
Exact sublinear function:
ln,sqrt, ortanh? Needs simulation (Phase 0 of REPUTATION-VALIDATION-PROTOCOL). Currently a federation parameter. -
Negative scores: Should the
incidentdomain allow scores below 0.0 (i.e.[-1.0, 1.0]) to capture "net harmful"? Current design: scores are[0.0, 1.0]. -
Oracle signal weighting: Should oracle-generated signals receive a higher weight multiplier than 1.0? Argument for: they are outcome-verified. Argument against: oracle trust is itself a variable.
-
Role registry: Asymmetric accountability depends on a list of public-trust roles. Until
ROLE-REGISTRYis written, the interim list in section 6.3 applies. -
Cross-domain interaction: Should severe negative signals in
incidentaffect theproceduraldomain? Current design: domains are independent. Argument for cross-contamination: a node concealing incidents should not serve on panels.
15. Relation to Other Documents¶
- Constitution Art. VII.4-5: This document operationalizes reputation as domain-specific, decaying, concentration-limited, and cartel-resistant.
REPUTATION-VALIDATION-PROTOCOL.md: Provides the health metrics (M1-M5) that measure whether this specification works as intended. Scoring functions marked[hypothesis]remain subject to the validation flow defined there.ENTRENCHMENT-CLAUSE.md: Theproceduraldomain score is the eligibility criterion for ad-hoc panel selection.ROOT-IDENTITY-AND-NYMS.md: Procedural reputation is calculated separately, but for high-stakes roles it works together with theIALlevel; many nyms from one anchor source may not multiply influence without an additional procedure.PANEL-SELECTION-PROTOCOL.md: Usespanel_procedural_thresholdfrom this specification.EXCEPTION-POLICY.md: Exception-related signals (both creating and handling exceptions properly) feed into theproceduralandincidentdomains.FEDERATION-MEMBERSHIP-AND-QUORUM.md: Theactivestatus definition here is consistent with federation activity criteria.AUTONOMY-LEVELS.md: A3 post-crisis review results feed into theproceduralandincidentdomains.ABUSE-DISCLOSURE-PROTOCOL.md: Disclosure outcomes feed into theincidentdomain.NORMATIVE-HIERARCHY.md: This document is a Level 3 implementing act.