ruvnet/ruflo · error

Paths not composable: endpoints do not match

Error message

Paths not composable: endpoints do not match

What it means

HottEngine.trans() verified that path1's target equals path2's source using equalValues and it does not — the two paths do not chain, so their transitivity composite is undefined. Fix the endpoint mismatch before composing paths.

Source

Thrown at v3/plugins/prime-radiant/src/engines/HottEngine.ts:221

  /**
   * Create a symmetry path (if p: x = y, then sym(p): y = x)
   */
  sym(path: Path): Path {
    return {
      source: path.target,
      target: path.source,
      type: path.type,
      proof: `sym(${path.proof})`
    };
  }

  /**
   * Create a transitivity path (if p: x = y and q: y = z, then trans(p,q): x = z)
   */
  trans(path1: Path, path2: Path): Path {
    if (!this.equalValues(path1.target, path2.source)) {
      throw new Error('Paths not composable: endpoints do not match');
    }

    return {
      source: path1.source,
      target: path2.target,
      type: path1.type,
      proof: `trans(${path1.proof}, ${path2.proof})`
    };
  }

  /**
   * Apply a function to a path (ap)
   */
  ap<A, B>(f: (a: A) => B, path: Path): Path {
    return {
      source: f(path.source as A),
      target: f(path.target as A),
      type: `${path.type} -> ${typeof f(path.source as A)}`,

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Inspect the underlying cause in logs, fix the root issue, and retry the operation.
  2. Validate inputs and preconditions before invoking this code path so the error is avoided.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at v3/plugins/prime-radiant/src/engines/HottEngine.ts:221 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/13961ebf5c89df45. Report an issue: GitHub.