berblom 0.1.0

A novel web-of-trust algorithm for trust calculation.
Documentation
# Step 1

```mermaid
flowchart TD
    T ==> binding
    binding([T, target\@target.example])

    N6@{ shape: rounded, label: "N6(t:120)" }
    N5 -->|t:40 d:2| N6
    N1 -->|t:80 d:3| N6
    S2@{ shape: diamond, label: "S2(t:120)" }
    S1@{ shape: diamond, label: "S1(t:120)" }
    N5@{ shape: rounded, label: "N5(t:120)" }
    N4 -->|t:40 d:3| N5
    N1@{ shape: rounded, label: "N1(t:120)" }
    S1 -->|t:80 d:4| N1
    T@{ shape: rounded, label: "T(t:120)" }
    N3 -->|t:40 d:1| T
    N6 -->|t:80 d:1| T
    N2@{ shape: rounded, label: "N2(t:120)" }
    N1 -->|t:40 d:3| N2
    N3@{ shape: rounded, label: "N3(t:120)" }
    N2 -->|t:40 d:2| N3
    N4@{ shape: rounded, label: "N4(t:120)" }
    S2 -->|t:40 d:4| N4

```

## Path for 1
Path: `S1 → N1 → N6 → T ⇒ (T, <target@target.example>)`


```mermaid
flowchart TD
    T ==> binding
    binding([T, target\@target.example])

    N6@{ shape: rounded, label: "N6(t:120)" }
    N5 -->|t:40 d:2| N6
    N1 -->|t:80 d:3| N6
    S2@{ shape: diamond, label: "S2(t:120)" }
    S1@{ shape: diamond, label: "S1(t:120)" }
    N5@{ shape: rounded, label: "N5(t:120)" }
    N4 -->|t:40 d:3| N5
    N1@{ shape: rounded, label: "N1(t:120)" }
    S1 -->|t:80 d:4| N1
    T@{ shape: rounded, label: "T(t:120)" }
    N3 -->|t:40 d:1| T
    N6 -->|t:80 d:1| T
    N2@{ shape: rounded, label: "N2(t:120)" }
    N1 -->|t:40 d:3| N2
    N3@{ shape: rounded, label: "N3(t:120)" }
    N2 -->|t:40 d:2| N3
    N4@{ shape: rounded, label: "N4(t:120)" }
    S2 -->|t:40 d:4| N4

linkStyle 0 stroke:#e74c3c,stroke-width:1px;
linkStyle 2 stroke:#e74c3c,stroke-width:1px;
linkStyle 4 stroke:#e74c3c,stroke-width:1px;
linkStyle 6 stroke:#e74c3c,stroke-width:1px;
```

# Step 2

```mermaid
flowchart TD
    T ==> binding
    binding([T, target\@target.example])

    N6@{ shape: rounded, label: "N6(t:40)" }
    N5 -->|t:40 d:2| N6
    N1 -->|t:0 d:3| N6
    T -.->|t:80 d:3| N6
    S2@{ shape: diamond, label: "S2(t:120)" }
    S1@{ shape: diamond, label: "S1(t:40)" }
    N1 -.->|t:80 d:255| S1
    N5@{ shape: rounded, label: "N5(t:120)" }
    N4 -->|t:40 d:3| N5
    N1@{ shape: rounded, label: "N1(t:40)" }
    S1 -->|t:0 d:4| N1
    N6 -.->|t:80 d:4| N1
    T@{ shape: rounded, label: "T(t:40)" }
    N3 -->|t:40 d:1| T
    N6 -->|t:0 d:1| T
    N2@{ shape: rounded, label: "N2(t:120)" }
    N1 -->|t:40 d:3| N2
    N3@{ shape: rounded, label: "N3(t:120)" }
    N2 -->|t:40 d:2| N3
    N4@{ shape: rounded, label: "N4(t:120)" }
    S2 -->|t:40 d:4| N4

```

## Path for 2
Path: `S2 → N4 → N5 → N6 ┄⇢ N1 → N2 → N3 → T ⇒ (T, <target@target.example>)`


```mermaid
flowchart TD
    T ==> binding
    binding([T, target\@target.example])

    N6@{ shape: rounded, label: "N6(t:40)" }
    N5 -->|t:40 d:2| N6
    N1 -->|t:0 d:3| N6
    T -.->|t:80 d:3| N6
    S2@{ shape: diamond, label: "S2(t:120)" }
    S1@{ shape: diamond, label: "S1(t:40)" }
    N1 -.->|t:80 d:255| S1
    N5@{ shape: rounded, label: "N5(t:120)" }
    N4 -->|t:40 d:3| N5
    N1@{ shape: rounded, label: "N1(t:40)" }
    S1 -->|t:0 d:4| N1
    N6 -.->|t:80 d:4| N1
    T@{ shape: rounded, label: "T(t:40)" }
    N3 -->|t:40 d:1| T
    N6 -->|t:0 d:1| T
    N2@{ shape: rounded, label: "N2(t:120)" }
    N1 -->|t:40 d:3| N2
    N3@{ shape: rounded, label: "N3(t:120)" }
    N2 -->|t:40 d:2| N3
    N4@{ shape: rounded, label: "N4(t:120)" }
    S2 -->|t:40 d:4| N4

linkStyle 0 stroke:#e74c3c,stroke-width:1px;
linkStyle 1 stroke:#e74c3c,stroke-width:1px;
linkStyle 5 stroke:#e74c3c,stroke-width:1px;
linkStyle 7 stroke:#e74c3c,stroke-width:1px;
linkStyle 8 stroke:#e74c3c,stroke-width:1px;
linkStyle 10 stroke:#e74c3c,stroke-width:1px;
linkStyle 11 stroke:#e74c3c,stroke-width:1px;
linkStyle 12 stroke:#e74c3c,stroke-width:1px;
```

# Step 3

```mermaid
flowchart TD
    T ==> binding
    binding([T, target\@target.example])

    N6@{ shape: rounded, label: "N6(t:0)" }
    N5 -->|t:0 d:2| N6
    N1 -->|t:40 d:3| N6
    T -.->|t:80 d:3| N6
    S2@{ shape: diamond, label: "S2(t:80)" }
    N4 -.->|t:40 d:255| S2
    S1@{ shape: diamond, label: "S1(t:40)" }
    N1 -.->|t:80 d:255| S1
    N5@{ shape: rounded, label: "N5(t:80)" }
    N4 -->|t:0 d:3| N5
    N6 -.->|t:40 d:3| N5
    N1@{ shape: rounded, label: "N1(t:0)" }
    S1 -->|t:0 d:4| N1
    N6 -.->|t:40 d:4| N1
    N2 -.->|t:40 d:4| N1
    T@{ shape: rounded, label: "T(t:0)" }
    N3 -->|t:0 d:1| T
    N6 -->|t:0 d:1| T
    N2@{ shape: rounded, label: "N2(t:80)" }
    N1 -->|t:0 d:3| N2
    N3 -.->|t:40 d:3| N2
    N3@{ shape: rounded, label: "N3(t:80)" }
    N2 -->|t:0 d:2| N3
    T -.->|t:40 d:2| N3
    N4@{ shape: rounded, label: "N4(t:80)" }
    S2 -->|t:0 d:4| N4
    N5 -.->|t:40 d:4| N4

```



# Path Consolidation

```
Checking Path: S2 → N4 → N5 → N6 ┄⇢ N1 → N2 → N3 → T ⇒ (T, <target@target.example>)
→ Found segments with indices: [3]
→ Looking for matching segment in associated path: S1 → N1 → N6 → T ⇒ (T, <target@target.example>)
→ Found matching segment at index 1
→ Trust of forward path (80) exceeds reverse path (40)
→ Pushing copy of forward path with remaining trust 40
→ Splicing start of reverse path
  S2 → N4 → N5 → N6
  with end of forward path
  N6 → T ⇒ (T, <target@target.example>)
→ Splicing start of forward path
  S1 → N1
  with end of reverse path
  N1 → N2 → N3 → T ⇒ (T, <target@target.example>)
→ Resulting reverse path: S2 → N4 → N5 → N6 → T ⇒ (T, <target@target.example>)
→ Resulting forward path: S1 → N1 → N2 → N3 → T ⇒ (T, <target@target.example>)

Checking Path: S1 → N1 → N6 → T ⇒ (T, <target@target.example>)

Checking Path: S1 → N1 → N2 → N3 → T ⇒ (T, <target@target.example>)
```