Jock reference
Generated from the compiler and its corpus. Every table is projected from a normative spec, every program is extracted from a vector that runs on each push, and every page says what it cannot pin.
Writing Jock
What the language offers and how it is spelled.
Keywords
All 30 keywords, each with its syntactic slot, its precedence where it has one, a working program that uses it, and the language.md rules that define it.
keywords/ — the page · keywords.md — the same content as raw Markdown
The surface grammar
14 productions drawn as railroad diagrams, projected from the parser and checked against it on every run — the precedence chain, the adjacency law, and the spellings that exist in order to refuse.
grammar/ — the page · grammar.md — the same content as raw Markdown
Literals and names
15 literal forms, the utterable aura set, the 41 reserved type names and the 2 builtin functions — which is worth stating plainly, because everything else arrives through import.
literals/ — the page · literals.md — the same content as raw Markdown
Worked examples
39 complete programs with the values tools/examples.sh pins on every push. The 14 shortest are shown in full.
examples/ — the page · examples.md — the same content as raw Markdown
Deliberate absences
6 things Jock does not have, each stated as a rule that refuses. The only part of a language a reader cannot guess at, so it is written down.
absences/ — the page · absences.md — the same content as raw Markdown
When it refuses
The compiler talking back, and what it means.
Negative transfer
23 refusals that exist to catch a habit from another language, each quoting the compiler’s own correction. Start here if Jock rejected something that would be correct Rust, Swift or Hoon.
transfer/ — the page · transfer.md — the same content as raw Markdown
Refusal tags
All 201 refusals the compiler can raise: 162 with the minimal program that triggers one, 30 pinned only by an AST-level vector, 9 pinned by nothing at all.
tags/ — the page · tags.md — the same content as raw Markdown
Driving the compiler
Reading its output from a program.
Machine interface
jockc.sh --diag emits one JSON object per run, with a schema corpus vectors pin by asserting the whole string. Parse this rather than the human output.
machine/ — the page · machine.md — the same content as raw Markdown
What it offers
The library, and where its boundary is.
The standard library
10 modules under lib/, 146 public declarations, 119 of them pinned by an example that runs on every push. One page per module, one section per arm, and the three-tier ruling that says where new code goes.
stdlib/ — the page · stdlib.md — the same content as raw Markdown
What it becomes
The noun on the other side of the compiler.
Erasure and lowering
How each type erases to a noun, and what each sugar form rewrites to. Types erase totally — a running Jock program knows nothing about its own types.
erasure/ — the page · erasure.md — the same content as raw Markdown
The pinned ABI
37 pinned arms with signatures and vectors, the 22 prelude traits with their methods and existing impls, and how an operator resolves.
abi/ — the page · abi.md — the same content as raw Markdown
The specs themselves
These pages are projections of six normative documents, and those are mirrored at /spec/ with an anchor on every rule — so a citation anywhere here is a link into the rule that states it. Where a page and a spec disagree, the spec is right and the page is a bug.
For an agent
Every page has a .md sibling that serves as raw text: /reference/keywords.md, /reference/tags.md, and so on. Those are the same content, generated from the same block list, and are what a retrieval layer should fetch.
Each section is written to stand alone — no "see above", no narrative dependency on a section a chunker might not return — and each repeats the one adjacent fact it needs.
What generates this
tools/refgen.py in the compiler repo. It reads the $keyword and $jpunc molds, the ~| refusal sites and +$ diag, the prelude source, the built corpus (value.jam), the examples/ directory, and the normative tables in docs/spec/. --check regenerates and fails on a diff, so these pages cannot drift from the compiler without a lane going red.
It invents nothing. Where a fact has no vector behind it, the page marks it unpinned rather than stating it quietly.