Skip to content

Six steps, no permission

Write a kit in your language.

A kit is Quo written in some language by someone, and anyone may write one from the published documents alone. Six steps, each saying what to read and what done looks like. Nobody registers it, nobody approves it, and the checker is the only judge.

?the template, no houselaid over a kit
01

Read the spec, whole.

SPEC.md is the whole of Quo. It assumes nothing from any other document and stands on nothing but the standards it names. Every term is defined where it is introduced.

Done when you have read every chapter, and for each rule you can say which bytes it fixes.

02

Answer the questions before the code.

KIT-SPEC.md asks 28 questions, every choice SPEC.md leaves to a kit. It asks and never answers, and every answer is accepted.

Done when all 28 are answered, each with its reason, in a document of your own beside where the code will stand.

03

Write from the spec alone.

No kit is the reference, and none is meant to be imported. Each of the 5 examples was written cold, by an agent holding only the published documents and the verifier, and never another kit.

Done when your kit is written from the documents, with no other kit open.

04

Stand the harness.

HARNESS.md is test tooling beside the protocol, in 2 parts: what a kit answers to be judged without a carrier, and what it answers to be judged with its bytes carried. A kit under it is one executable, named stand, reading requests on stdin and writing answers on stdout.

Done when your stand program answers every request of both parts, or answers bad request where it has no such side.

05

Pass the verifier.

The verifier judges your kit as a door, as an asker, as a listener and a dialer of each carrier it stands, and as a reader of at in an invitation and in a reply. It refuses only where SPEC.md fixes the bytes. From the examples folder, with your kit's folder and stand program:

node ../verifier/cli.js --cwd go -- ./stand

Done when the verifier exits 0: no check failed. That is necessary, and it says nothing about whether your kit is good.

06

Meet another kit.

Any two kits are judged together through the verifier's proxy: a ward stands in one, the other asks it over every carrier the two share, and over TCP frames arrive late, twice, out of order, altered and not at all.

node ../verifier/cli.js --two -- "$PWD/go/stand" -- "$PWD/rust/target/debug/stand"

Done when your kit passes with every other kit, in both directions.