~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
114 lines · 9.3 KB Raw History

Features

What socialweb-computer supports today, how far each item is proven, and where it is documented. Releases at the time of writing: socialweb-computer rc159 (ec0f4849) on the gateway, the ssh gateway and the bidders local, hat-9, hat-7, and rc162 for the CLI (run requester, install requester, run request); page-rc143 on shell.socialweb.computer; atirc v0.1.0-5a8dfa2 on irc.fedfork.com.

Proof levels: prod = proven on the production gateway and bidders with real accounts; local = proven in a market network of one host (dev up); built = in the code, not yet proven live.

Infrastructure as code

FeatureHowProvenDocs
Infra / EphemeralInfra objects: VMs, Deno sandboxes, agent VMs in one filekubectl apply -f examples/infra/*.yamlprod (page, CLI), localquickstart-local.md, quickstart-prod.md
EphemeralInfra lifetime: ttlSeconds, endWhen: Deadline or CompleteComplete ends in the pass that sees every contract Released or Failedlocalacceptance/0012
Infra records in the user's repo, never deleted (endedAt, successor rkeys)computer.socialweb.infra / ephemeralInfraprodprotocol/infra.md
Long-lived requester in the foregroundrun requester --name <n>: own kcp, port 0, ready.json with kcpUrl + kubeconfigprod (alice, OAuth QR, acceptance 0013 A)quickstart-prod.md section 7
Requester as a systemd unit of its own accountinstall requester (account created or adopted, socialweb.slice, upgrade, uninstall)prod (0013 B, rc160 CLI): install, run requester signin, contract, ssh as the account, restart keeps Held, uninstall --purgequickstart-prod.md 7a
Requester under an account that already runs a corekubectl apply -f examples/infra/requester-hostprocess.yamllocalquickstart-prod.md 7b
Restart keeps the DID, the vault and every Held contractresume waits for its policy engine, then runs the policylocal + prod (rc158)acceptance/0013
Tenant k8s cluster from the requesterrun requester --with-gateway, run requester cluster, kubeconfig; nodes rented by the same requesterprod: node on a remote bidder (hat-7) fetches meshd from the public bucket, pod runs, scale to zero (0013 C)quickstart-prod.md section 8
Tenant k8s cluster from the hosted gatewayk8s.socialweb.computer: createCluster, getKubeconfig, NodeClaim to rented node, scale to zeroprodacceptance/0001

Compute

FeatureProvenNotes
Firecracker VM per contract, cloud-init user_data from the RFPprodone VM per host on demand, released on request or ttl
Deno sandbox contracts (computeKind: deno)prod (local bidder opted in: CLI 0013 and the page)dev up --compute-kinds vm,deno, install bidder --compute-kinds vm,deno, run bidder --compute-kinds
Guest transports: iroh (default), ssh over WebRTC, opentunnel https, wootty web shellprodSTUN stun.cloudflare.com only, no TURN
Guest fence: no TCP to the LAN or the host, only declared host portsprodlanUDP / hostUDP per bidder
Secrets: getSecrets by workload identity, sealed fallback on demandprodbundle in the requester's OpenBao
Bidder-side termination of a VM (ops)prodacceptance/0007

Agents (atirc)

FeatureProvenNotes
atirc agent in a rented VM (spec.agent, guest.agentStart)prod (CLI, page, ssh gateway)leased mint after the receipt; revoked before vm.terminated
Agent placeholder bundle for kubectl-applied contractslocal, prod (page)no bao step needed
Agent identity: OAuth (QR / browser)prod
Agent identity: app password (pdsAccount)prod (rc161 CLI, hat.dplc.rip on pds.rip: Held, JOIN, revoke before release)market calls and the mint signed through the owner MarketIdentity; ATPROTO_PASSWORD goes to the requester's own OpenBao before sign-in
Agent identity: local PDS (localRepo)builtneeds did:plc on plc.directory, a public PDS ingress and a handle you control; .local is refused before the RFP
ssh <handle>@socialweb.computer atirc agent run <name>prodper-user OAuth; the VM is rented as the ssh user
Guest requester R2 with a contract-scoped association, nested VM, grandchild agent, cascading releaseprodacceptance/0005

Market, identity and policy

FeatureProvenNotes
RFP, bid, accept, receipt, events over XRPC submit* and relay / Jetstreamprodprotocol/market.md
Default policies always run: requester-tangled-vouch, bidder-tangled-vouchprod, localopen only when the user names it; dev networks compose both vouch directions
Vouch records through an OAuth requester (optional scope)builtold sessions stay Ready with a scope-upgrade prompt
Operator vouch from an installed bidder (--bidder-operator-signin)localQR page carries the vouch scope since 2026-11-01
Stable rkeys, single getRecord readsprodno listRecords on hot paths
Per-user OAuth ssh gateway on port 22prodacceptance/0002

Browser page (shell.socialweb.computer)

Real kcp and the socialweb control plane compiled to js/wasm, running in the tab as a requester. Release page-rc143.

FeatureProven
Sign in with any atproto account (OAuth, PAR, PKCE, DPoP)prod
Snapshot hibernation: reload restores in about 3 s, also while a VM is Heldprod
Request VM button, ssh over WebRTC from the page terminal, Agent button, Releaseprod
kubectl apply of Infra / EphemeralInfra in the page terminal (heredoc); the page adds the ssh key, the ssh tunnel and the agent bundleprod
Policy in a fenced sandbox on every bidprod
/chat web chatprod
Deno sandbox contracts from the page terminal, on a bidder that opts in (install bidder --compute-kinds vm,deno, pinned with bidderDids)prod (mixed.yaml, stdout quickstart-deno-ok on linux/x86_64)

Not yet: release by deleting the EphemeralInfra (use kubectl patch ... state Released); reading repo files from the page terminal (paste them). Acceptance: acceptance/0009.

atirc (irc.fedfork.com)

  • Transports: IRC (SASL PLAIN), XRPC chat.atirc.subscribe over websocket (CBOR or ?format=json) and over iroh
  • Tokens: service-auth JWTs and long tokens; mint equal-or-below your own handle; 11 scopes per NSID; revoke by the parent; contract leases (receipt + termination) that latch dead
  • Presence: join and leave events carry an RFC3339 ts and by: client|server
  • Web chat /chat, owner questions (ask, answer, decide, owner mode)
  • atirc agent run, and atirc send / atirc recv byte pipes (the receiver's child token is revoked when it ends)
  • Protocol and acceptance live in the atirc repo (docs/protocol/atirc.md, docs/acceptance/0001-atirc.md)

iOS app

The embedded requester (pkg/embedded) runs in the app on its own in-process kcp. Last proven on the simulator on 2026-10-31 (acceptance/0010); not re-run on rc158/rc159.

Acceptance status (2026-11-01, rc158 / rc159)

RunbookResultRelease
0001 account modes, pause, one VM per host, tenant k3spassrc159
0002 ssh gateway, per-user OAuthpassrc158
0003 CLI ssh over WebRTC, every hostpassrc158
0004 atirc agent in a VMpassrc158
0005 guest requester R2, nested VM, cascadepassrc159
0006 rollout checks, compat smokepassrc158
0007 bidder-side terminationpassrc158
0008 host observerspassrc158
0009 browser page A1-A7, deno from the pagepasspage-rc143
0010 iOS appnot run (no iOS client session); last pass simulator 2026-10-31-
0011 atircpassv0.1.0-5a8dfa2
0012 Infra quickstart, every examplepass (own network)main ec97f78e
0013 mixed prod: A run requester, B install requester, C gateway in the requesterpass (A, C on rc159; B on the rc160 CLI)rc159 / rc160

Known limits

  • run request release on an invocation that already settled waits 3 min and exits 1 instead of reporting it is done
  • a tenant-cluster node's cloud-init fetches get.k3s.io from the internet (not pinned)
  • dev down can warn that the MarketNetwork was not gone within 2 min; it still finishes clean
  • units roll kcp cannot roll an installed requester's kcp yet (a drifted kcp rolls when the core starts)
  • an atirc agent from a local PDS (localRepo on plc.directory with a public handle) is built but not yet proven against irc.fedfork.com