Przejdź do treści

Reputation Signal v1

Source schema: doc/schemas/reputation-signal.v1.schema.json

Machine-readable schema for a small append-only reputation fact record. This contract carries one reputation-affecting signal about a node, participant, org, or nym subject. It is intentionally unsigned in the core shape so local write-path storage and later transport envelopes stay decoupled.

Governing Basis

Project Lineage

Requirements

Stories

Fields

Field Required Shape Description
schema/v yes const: 1 Schema version.
signal/id yes string Stable identifier of the emitted reputation signal record.
observed/at yes string Time when the underlying behavior, incident, or review outcome was observed.
recorded/at yes string Time when the reputation signal was written as a fact record. Consumers SHOULD enforce recorded/at >= observed/at.
signal/type yes string Open signal namespace. The first path segment is the reputation domain and MUST stay consistent with subject constraints.
polarity yes enum: positive, negative Reputation direction of the signal. Neutral observations do not belong in this contract.
weight yes number Relative strength of the signal, normalized to (0.0, 1.0].
subject/kind yes enum: node, participant, org, nym Identity layer on which the signal lands.
subject/id yes string Canonical identifier of the reputation subject. The allowed format depends on subject/kind.
observed-via/node-id no string Optional node through which the behavior was observed when the subject is a participant or nym.
emitted-by/kind yes enum: local-runtime, operator, peer, panel, federation-review, council Emitter class of the signal.
emitted-by/id yes string Identifier of the emitter. The format may depend on emitted-by/kind; council uses canonical council:did:key:....
case/ref no string Optional case or review reference when the signal originates in a formal case pipeline.
basis/refs no array Optional references to supporting artifacts, reviews, exceptions, or evidence. Negative signals without basis may be downranked by consumers.
retention/hint yes enum: ephemeral, persistent, epoch-scoped Emitter-side hint about how long this signal should naturally matter.
notes no string Optional human-readable explanation.

Conditional Rules

Rule 1

When:

{
  "properties": {
    "subject/kind": {
      "const": "node"
    }
  },
  "required": [
    "subject/kind"
  ]
}

Then:

{
  "properties": {
    "subject/id": {
      "pattern": "^node:did:key:z[1-9A-HJ-NP-Za-km-z]+$"
    }
  }
}

Rule 2

When:

{
  "properties": {
    "subject/kind": {
      "const": "participant"
    }
  },
  "required": [
    "subject/kind"
  ]
}

Then:

{
  "properties": {
    "subject/id": {
      "pattern": "^participant:did:key:z[1-9A-HJ-NP-Za-km-z]+$"
    }
  }
}

Rule 3

When:

{
  "properties": {
    "subject/kind": {
      "const": "org"
    }
  },
  "required": [
    "subject/kind"
  ]
}

Then:

{
  "properties": {
    "subject/id": {
      "pattern": "^org:did:key:z[1-9A-HJ-NP-Za-km-z]+$"
    }
  }
}

Rule 4

When:

{
  "properties": {
    "subject/kind": {
      "const": "nym"
    }
  },
  "required": [
    "subject/kind"
  ]
}

Then:

{
  "properties": {
    "subject/id": {
      "pattern": "^nym:did:key:z[1-9A-HJ-NP-Za-km-z]+$"
    }
  }
}

Rule 5

When:

{
  "properties": {
    "signal/type": {
      "pattern": "^procedural/"
    }
  },
  "required": [
    "signal/type"
  ]
}

Then:

{
  "properties": {
    "subject/kind": {
      "not": {
        "const": "nym"
      }
    }
  }
}

Rule 6

When:

{
  "properties": {
    "signal/type": {
      "pattern": "^community/"
    }
  },
  "required": [
    "signal/type"
  ]
}

Then:

{
  "properties": {
    "subject/kind": {
      "not": {
        "const": "org"
      }
    }
  }
}

Rule 7

When:

{
  "properties": {
    "signal/type": {
      "pattern": "^contract/"
    }
  },
  "required": [
    "signal/type"
  ]
}

Then:

{
  "properties": {
    "subject/kind": {
      "not": {
        "const": "nym"
      }
    }
  }
}

Rule 8

When:

{
  "properties": {
    "emitted-by/kind": {
      "const": "council"
    }
  },
  "required": [
    "emitted-by/kind"
  ]
}

Then:

{
  "properties": {
    "emitted-by/id": {
      "pattern": "^council:did:key:z[1-9A-HJ-NP-Za-km-z]+$"
    }
  }
}

Field Semantics

schema/v

  • Required: yes
  • Shape: const: 1

Schema version.

signal/id

  • Required: yes
  • Shape: string

Stable identifier of the emitted reputation signal record.

observed/at

  • Required: yes
  • Shape: string

Time when the underlying behavior, incident, or review outcome was observed.

recorded/at

  • Required: yes
  • Shape: string

Time when the reputation signal was written as a fact record. Consumers SHOULD enforce recorded/at >= observed/at.

signal/type

  • Required: yes
  • Shape: string

Open signal namespace. The first path segment is the reputation domain and MUST stay consistent with subject constraints.

polarity

  • Required: yes
  • Shape: enum: positive, negative

Reputation direction of the signal. Neutral observations do not belong in this contract.

weight

  • Required: yes
  • Shape: number

Relative strength of the signal, normalized to (0.0, 1.0].

subject/kind

  • Required: yes
  • Shape: enum: node, participant, org, nym

Identity layer on which the signal lands.

subject/id

  • Required: yes
  • Shape: string

Canonical identifier of the reputation subject. The allowed format depends on subject/kind.

observed-via/node-id

  • Required: no
  • Shape: string

Optional node through which the behavior was observed when the subject is a participant or nym.

emitted-by/kind

  • Required: yes
  • Shape: enum: local-runtime, operator, peer, panel, federation-review, council

Emitter class of the signal.

emitted-by/id

  • Required: yes
  • Shape: string

Identifier of the emitter. The format may depend on emitted-by/kind; council uses canonical council:did:key:....

case/ref

  • Required: no
  • Shape: string

Optional case or review reference when the signal originates in a formal case pipeline.

basis/refs

  • Required: no
  • Shape: array

Optional references to supporting artifacts, reviews, exceptions, or evidence. Negative signals without basis may be downranked by consumers.

retention/hint

  • Required: yes
  • Shape: enum: ephemeral, persistent, epoch-scoped

Emitter-side hint about how long this signal should naturally matter.

notes

  • Required: no
  • Shape: string

Optional human-readable explanation.