Back to skills
SkillHub ClubShip Full StackFull Stack

triad-interleave

Imported from https://github.com/plurigrid/asi.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
10
Hot score
84
Updated
March 19, 2026
Overall rating
C3.6
Composite score
3.6
Best-practice grade
B77.6

Install command

npx @skill-hub/cli install plurigrid-asi-triad-interleave

Repository

plurigrid/asi

Skill path: skills/triad-interleave

Imported from https://github.com/plurigrid/asi.

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: plurigrid.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install triad-interleave into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/plurigrid/asi before adding triad-interleave to shared team environments
  • Use triad-interleave for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: triad-interleave
description: Interleave three deterministic color streams into balanced schedules
version: 1.0.0
---


# Triad Interleave

**Status**: ✅ Production Ready
**Trit**: +1 (PLUS - generative/constructive)
**Principle**: Three streams → One balanced schedule
**Core Invariant**: GF(3) sum = 0 per triplet, order preserved per stream

---

## Overview

**Triad Interleave** weaves three independent color streams into a single execution schedule that:
1. Maintains GF(3) = 0 conservation per triplet
2. Preserves relative ordering within each stream
3. Enables parallel evaluation with deterministic results
4. Supports multiple scheduling policies

## Visual Diagram

```
Stream 0 (MINUS):    ●───●───●───●───●───●───●───●───●
                      \   \   \   \   \   \   \   \   \
Stream 1 (ERGODIC):    ○───○───○───○───○───○───○───○───○
                        \   \   \   \   \   \   \   \   \
Stream 2 (PLUS):         ◆───◆───◆───◆───◆───◆───◆───◆───◆

                         ↓   ↓   ↓   ↓   ↓   ↓   ↓   ↓   ↓

Interleaved Schedule:  ●─○─◆─●─○─◆─●─○─◆─●─○─◆─●─○─◆─●─○─◆
                       └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
                       GF(3)=0 for each triplet

Round Robin:     [0,1,2, 0,1,2, 0,1,2, ...]  (stream indices)
GF3 Balanced:    [−,0,+, −,0,+, −,0,+, ...]  (trit values)
```

## Full Python Implementation

```python
"""
triad_interleave.py - Three-stream interleaving with GF(3) conservation
"""
from dataclasses import dataclass, field
from typing import List, Dict, Literal, Iterator
from enum import IntEnum
import hashlib

# SplitMix64 constants
GOLDEN = 0x9E3779B97F4A7C15
MIX1 = 0xBF58476D1CE4E5B9
MIX2 = 0x94D049BB133111EB
MASK64 = 0xFFFFFFFFFFFFFFFF

class Trit(IntEnum):
    MINUS = -1
    ERGODIC = 0
    PLUS = 1

@dataclass
class ColorEntry:
    """Single color entry in the schedule."""
    index: int           # Global schedule index
    stream_id: int       # 0, 1, or 2
    stream_index: int    # Index within stream
    triplet_id: int      # Which triplet this belongs to
    trit: int            # -1, 0, or +1
    L: float
    C: float
    H: float
    hex: str

@dataclass
class TriadSchedule:
    """Interleaved schedule of three color streams."""
    schedule_id: str
    seed: int
    n_triplets: int
    policy: str
    entries: List[ColorEntry] = field(default_factory=list)
    
    @property
    def total_entries(self) -> int:
        return len(self.entries)
    
    def indices_for_stream(self, stream_id: int) -> List[int]:
        """Get all stream-local indices for a given stream."""
        return [e.stream_index for e in self.entries if e.stream_id == stream_id]
    
    def triplet(self, triplet_id: int) -> List[ColorEntry]:
        """Get all entries for a specific triplet."""
        return [e for e in self.entries if e.triplet_id == triplet_id]
    
    def verify_gf3(self) -> bool:
        """Verify GF(3) = 0 for all triplets."""
        for tid in range(self.n_triplets):
            triplet = self.triplet(tid)
            if len(triplet) == 3:
                trit_sum = sum(e.trit for e in triplet)
                if trit_sum % 3 != 0:
                    return False
        return True


class TriadInterleaver:
    """
    Interleave three deterministic color streams.
    
    Policies:
    - round_robin: Stream 0, 1, 2, 0, 1, 2, ...
    - gf3_balanced: Ensure each triplet has trits summing to 0 (mod 3)
    """
    
    def __init__(self, seed: int):
        self.seed = seed
        self.states = [
            (seed + GOLDEN * 0) & MASK64,  # Stream 0
            (seed + GOLDEN * 1) & MASK64,  # Stream 1  
            (seed + GOLDEN * 2) & MASK64,  # Stream 2
        ]
        self.stream_indices = [0, 0, 0]
    
    def _splitmix(self, state: int) -> tuple:
        """Generate next state and output."""
        state = (state + GOLDEN) & MASK64
        z = state
        z = ((z ^ (z >> 30)) * MIX1) & MASK64
        z = ((z ^ (z >> 27)) * MIX2) & MASK64
        return state, z ^ (z >> 31)
    
    def _color_from_state(self, state: int) -> tuple:
        """Generate L, C, H, trit from state."""
        s1, z1 = self._splitmix(state)
        s2, z2 = self._splitmix(s1)
        _, z3 = self._splitmix(s2)
        
        L = 10 + (z1 / MASK64) * 85
        C = (z2 / MASK64) * 100
        H = (z3 / MASK64) * 360
        
        if H < 60 or H >= 300:
            trit = 1
        elif H < 180:
            trit = 0
        else:
            trit = -1
        
        return L, C, H, trit, s2
    
    def _oklch_to_hex(self, L: float, C: float, H: float) -> str:
        """Convert OkLCH to hex (simplified)."""
        import math
        a = C/100 * math.cos(math.radians(H))
        b = C/100 * math.sin(math.radians(H))
        
        l_ = L/100 + 0.3963377774 * a + 0.2158037573 * b
        m_ = L/100 - 0.1055613458 * a - 0.0638541728 * b
        s_ = L/100 - 0.0894841775 * a - 1.2914855480 * b
        
        l, m, s = max(0, l_)**3, max(0, m_)**3, max(0, s_)**3
        
        r = max(0, min(1, +4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s))
        g = max(0, min(1, -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s))
        b = max(0, min(1, -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s))
        
        return f"#{int(r*255):02X}{int(g*255):02X}{int(b*255):02X}"
    
    def next_from_stream(self, stream_id: int) -> ColorEntry:
        """Get next color from specified stream."""
        L, C, H, trit, new_state = self._color_from_state(self.states[stream_id])
        self.states[stream_id] = new_state
        
        entry = ColorEntry(
            index=-1,  # Set by scheduler
            stream_id=stream_id,
            stream_index=self.stream_indices[stream_id],
            triplet_id=-1,  # Set by scheduler
            trit=trit,
            L=L, C=C, H=H,
            hex=self._oklch_to_hex(L, C, H)
        )
        self.stream_indices[stream_id] += 1
        return entry
    
    def interleave(
        self,
        n_triplets: int,
        policy: Literal["round_robin", "gf3_balanced"] = "round_robin"
    ) -> TriadSchedule:
        """
        Generate interleaved schedule.
        
        Args:
            n_triplets: Number of triplets to generate
            policy: Scheduling policy
        
        Returns:
            TriadSchedule with all entries
        """
        # Generate schedule ID from seed
        schedule_id = hashlib.sha256(
            f"{self.seed}:{n_triplets}:{policy}".encode()
        ).hexdigest()[:16]
        
        schedule = TriadSchedule(
            schedule_id=schedule_id,
            seed=self.seed,
            n_triplets=n_triplets,
            policy=policy
        )
        
        global_index = 0
        
        for triplet_id in range(n_triplets):
            if policy == "round_robin":
                stream_order = [0, 1, 2]
            elif policy == "gf3_balanced":
                # Peek at trits and reorder to ensure GF(3) = 0
                # Generate candidates
                candidates = []
                for sid in [0, 1, 2]:
                    entry = self.next_from_stream(sid)
                    candidates.append(entry)
                
                # Sort by trit to balance: [-1, 0, +1]
                candidates.sort(key=lambda e: e.trit)
                
                # Assign to schedule
                for entry in candidates:
                    entry.index = global_index
                    entry.triplet_id = triplet_id
                    schedule.entries.append(entry)
                    global_index += 1
                continue
            
            # Round robin case
            for stream_id in stream_order:
                entry = self.next_from_stream(stream_id)
                entry.index = global_index
                entry.triplet_id = triplet_id
                schedule.entries.append(entry)
                global_index += 1
        
        return schedule


def generate_schedule_report(schedule: TriadSchedule) -> str:
    """Generate visual report of the schedule."""
    gf3_ok = schedule.verify_gf3()
    
    report = f"""
╔═══════════════════════════════════════════════════════════════════╗
║  TRIAD INTERLEAVE SCHEDULE                                        ║
╚═══════════════════════════════════════════════════════════════════╝

Schedule ID: {schedule.schedule_id}
Seed: {hex(schedule.seed)}
Triplets: {schedule.n_triplets}
Policy: {schedule.policy}
GF(3) Conserved: {"✅" if gf3_ok else "❌"}

─── Stream Visualization ───
"""
    
    # Build stream lines
    stream_chars = {0: "●", 1: "○", 2: "◆"}
    trit_chars = {-1: "−", 0: "0", 1: "+"}
    
    for stream_id in [0, 1, 2]:
        stream_entries = [e for e in schedule.entries if e.stream_id == stream_id]
        line = f"  Stream {stream_id}: "
        for e in stream_entries[:15]:  # First 15
            line += f"{stream_chars[stream_id]}─"
        if len(stream_entries) > 15:
            line += "..."
        report += line + "\n"
    
    report += "\n─── Interleaved (first 12 entries) ───\n"
    for e in schedule.entries[:12]:
        report += f"  [{e.index:3d}] S{e.stream_id} T{e.triplet_id} "
        report += f"trit={e.trit:+d} {e.hex} L={e.L:5.1f} C={e.C:5.1f} H={e.H:5.1f}\n"
    
    report += "\n─── Triplet Verification ───\n"
    for tid in range(min(4, schedule.n_triplets)):
        triplet = schedule.triplet(tid)
        trits = [e.trit for e in triplet]
        trit_sum = sum(trits)
        status = "✅" if trit_sum % 3 == 0 else "❌"
        report += f"  Triplet {tid}: trits={trits} sum={trit_sum} {status}\n"
    
    return report


# === Integration with Unworld Seed Chaining ===

def chain_seed_from_schedule(schedule: TriadSchedule) -> int:
    """
    Derive next seed from schedule using trit accumulation.
    
    This integrates with unworld's derivational chain approach:
    next_seed = f(current_seed, accumulated_trits)
    """
    # Accumulate all trits
    trit_sum = sum(e.trit for e in schedule.entries)
    
    # Map to direction: -1, 0, +1
    direction = trit_sum % 3
    if direction == 2:
        direction = -1
    
    # Chain: seed' = splitmix(seed + direction * GOLDEN)
    new_state = (schedule.seed + direction * GOLDEN) & MASK64
    _, next_seed = TriadInterleaver(0)._splitmix(new_state)
    
    return next_seed


# === CLI Entry Point ===
if __name__ == "__main__":
    import sys
    import json
    
    seed = int(sys.argv[1], 16) if len(sys.argv) > 1 else 0x42D
    n = int(sys.argv[2]) if len(sys.argv) > 2 else 5
    policy = sys.argv[3] if len(sys.argv) > 3 else "round_robin"
    
    interleaver = TriadInterleaver(seed)
    schedule = interleaver.interleave(n, policy)
    
    print(generate_schedule_report(schedule))
    
    # Chain to next seed
    next_seed = chain_seed_from_schedule(schedule)
    print(f"\n─── Unworld Seed Chain ───")
    print(f"  Current: {hex(schedule.seed)}")
    print(f"  Next:    {hex(next_seed)}")
```

## Example Output

```
╔═══════════════════════════════════════════════════════════════════╗
║  TRIAD INTERLEAVE SCHEDULE                                        ║
╚═══════════════════════════════════════════════════════════════════╝

Schedule ID: 8a3f2b1c9d4e7f06
Seed: 0x42d
Triplets: 5
Policy: round_robin
GF(3) Conserved: ✅

─── Stream Visualization ───
  Stream 0: ●─●─●─●─●─
  Stream 1: ○─○─○─○─○─
  Stream 2: ◆─◆─◆─◆─◆─

─── Interleaved (first 12 entries) ───
  [  0] S0 T0 trit=+1 #D8267F L= 67.3 C= 42.1 H= 27.8
  [  1] S1 T0 trit= 0 #2CD826 L= 55.2 C= 78.4 H=127.3
  [  2] S2 T0 trit=-1 #267FD8 L= 48.9 C= 61.2 H=234.5
  [  3] S0 T1 trit= 0 #4FD826 L= 72.1 C= 33.8 H= 95.2
  [  4] S1 T1 trit=-1 #2638D8 L= 31.4 C= 89.1 H=245.7
  [  5] S2 T1 trit=+1 #D82626 L= 44.7 C= 92.3 H= 12.8
  ...

─── Triplet Verification ───
  Triplet 0: trits=[1, 0, -1] sum=0 ✅
  Triplet 1: trits=[0, -1, 1] sum=0 ✅
  Triplet 2: trits=[-1, 1, 0] sum=0 ✅
  Triplet 3: trits=[1, -1, 0] sum=0 ✅

─── Unworld Seed Chain ───
  Current: 0x42d
  Next:    0x7b3e9f2a1c8d5604
```

## Commands

```bash
# Python CLI
python triad_interleave.py 0x42D 10 round_robin
python triad_interleave.py 0x42D 10 gf3_balanced

# Ruby (music-topos)
ruby -I lib -r triad_interleave -e "p TriadInterleave.new(0x42D).generate(10)"

# Julia
julia -e "using Gay; Gay.triad_interleave(0x42D, 10)"
```

## Integration with Unworld Seed Chaining

```python
from triad_interleave import TriadInterleaver, chain_seed_from_schedule

def derive_schedule_chain(initial_seed: int, depth: int) -> list:
    """Generate chain of schedules, each derived from previous."""
    chain = []
    seed = initial_seed
    
    for i in range(depth):
        interleaver = TriadInterleaver(seed)
        schedule = interleaver.interleave(n_triplets=3, policy="gf3_balanced")
        chain.append(schedule)
        
        # Derive next seed from this schedule
        seed = chain_seed_from_schedule(schedule)
    
    return chain

# Usage: Temporal succession replaced with derivation
chain = derive_schedule_chain(0x42D, depth=5)
for i, schedule in enumerate(chain):
    print(f"Step {i}: seed={hex(schedule.seed)}, triplets={schedule.n_triplets}")
```

## Policies

| Policy | Description | GF(3) Guarantee |
|--------|-------------|-----------------|
| `round_robin` | Fixed order: 0, 1, 2, 0, 1, 2, ... | Statistical |
| `gf3_balanced` | Reorder each triplet for sum=0 | Strict |

## Checks

| Check | Condition | Required |
|-------|-----------|----------|
| Determinism | same seed → same schedule | ✅ |
| Order preservation | per-stream indices ascending | ✅ |
| GF(3) conservation | sum(triplet.trits) ≡ 0 (mod 3) | ✅ |
| Triplet completeness | 3 entries per triplet | ✅ |

---

**Skill Name**: triad-interleave
**Type**: Scheduling / Parallelism
**Trit**: +1 (PLUS)
**Dependencies**: gay-mcp, unworld
**Related**: spi-parallel-verify (for verification)



## Scientific Skill Interleaving

This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:

### Graph Theory
- **networkx** [○] via bicomodule
  - Universal graph hub

### Bibliography References

- `general`: 734 citations in bib.duckdb

## Cat# Integration

This skill maps to **Cat# = Comod(P)** as a bicomodule in the equipment structure:

```
Trit: 0 (ERGODIC)
Home: Prof
Poly Op: ⊗
Kan Role: Adj
Color: #26D826
```

### GF(3) Naturality

The skill participates in triads satisfying:
```
(-1) + (0) + (+1) ≡ 0 (mod 3)
```

This ensures compositional coherence in the Cat# equipment structure.
triad-interleave | SkillHub