Skip to content

id: research: OCapN watch + CapTP bridge feasibility spike #6014

Open

Description

@dezren39

Part of the worlds design program: #5955. Wave-2 follow-up from the prior-art research (Lane B item 45); parent topic issue: #5989. Research source: workspace/scratch/worlds-capabilities-brief-2026-11-04/prior-art-research.md.

State of the art (2025)

Goblins (Guile + Racket; Hoot compiles to WebAssembly) models objects in vats processing transactional turns, with promise pipelining and distributed GC; The Heart of Spritely (May 2025) is the canonical design doc (https://spritely.institute/static/papers/spritely-core.pdf). OCapN is the cross-implementation protocol suite: CapTP for capability-preserving remote invocation over pluggable netlayers, references as unforgeable sturdyrefs (ocapn://…). Caveat in Spritely's own docs: CapTP support "is still in its early days — do not rely on the protocol being stable" (https://files.spritely.institute/docs/guile-goblins/0.13.0/OCapN.html).

Position for id (from the research)

Dead end for now: adopting OCapN as id's wire protocol in v1. Adopt the discipline (no ambient authority; authority travels by reference passing) — which Roc already enforces one level down by platform exclusivity and explicit context passing — design handle semantics to be OCapN-compatible, and revisit when CapTP stabilizes.

Work

  • Watch: re-check CapTP/OCapN stability status on a cadence; record dated state changes here.
  • Spike (when the watch says it's worth it): a minimal CapTP interop test between a Goblins vat and an id-side stub — feasibility evidence before any v2 commitment.

Done looks like

A dated watch log plus, when triggered, a spike report with a go/no-go for bridge work.

Activity

  1. added
    priority/lowNice to have; do when convenient
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    kind/designA design proposal (design-architect): multi-step, phased, decision-bearing
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  4. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  5. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    Triage findings (verified fresh this shift)

    • Issue id: research: OCapN watch + CapTP bridge feasibility spike #6014 is OPEN, priority/low, no hard-stop labels (held, user/owned, do-not-merge, do-not-auto-edit all absent), no comments beyond the Kaneo link. Parent topic issue id: research: prior art — capability systems, OCAP, Spritely Goblins/OCapN, CRDT shared worlds #5989 and programme issue id: design program: worlds — advanced Roc libraries, capabilities, permissions, dynamic user functions, licensing (2026-11-04 brief) #5955 are both OPEN — the programme this watch belongs to is live.
    • The substantive question is already answered in the issue body, with evidence: the 2026-11-04 prior-art research recorded OCapN/CapTP as a dead end for id v1 (Spritely's own docs: CapTP "still in its early days — do not rely on the protocol being stable"), with the discipline (no ambient authority; authority by reference passing) adopted instead and handle semantics kept OCapN-compatible. Nothing to re-decide at triage.
    • What remains is genuinely a watch, not a fix: (1) re-check CapTP/OCapN stability status on a cadence and append dated entries here; (2) only when the watch says it is worth it, run the minimal CapTP interop spike (Goblins vat ↔ id-side stub) and record a go/no-go for bridge work. The spike is explicitly NOT triggered at current evidence — starting it now would contradict the recorded position.
    • Scoping note for the next claimant: the body names no cadence. Sensible default, recorded here so it is not re-derived: fold the re-check into the next worlds-programme research pass on issue id: research: prior art — capability systems, OCAP, Spritely Goblins/OCapN, CRDT shared worlds #5989 rather than running a standalone timer for a low-priority watch; if CapTP has shipped a stability commitment by then, that pass is also where the spike gets its go/no-go.
    • No follow-up packet enqueued and no escalation: a dated watch entry is appended to this issue when a re-check happens; a second packet for the same watch would duplicate it. Nothing here needs Drew's ruling.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)kind/designA design proposal (design-architect): multi-step, phased, decision-bearingpriority/lowNice to have; do when convenienttask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions