GridWork
Derivation

Permitted specifications

The public specification IDs and URLs that derivation markers may cite.

Public specifications cited by clean-room derivation markers (CLEANROOM.md rule 3). Rule 3 admits two kinds of permitted source: a public specification, or an observation registered in CAPTURES.md. This file is the first kind; that file is the second.

A Derivation: marker cites an ID from one of these two tables, and cleanroom-gate rejects a citation that resolves in neither — so rule 3 is enforced by the gate rather than by a reviewer ticking a box.

Cite as <ID> §<section> where the spec has sections: ECMA-48 §8.3.14. The section is for the reader; the gate resolves the ID.

A row is scoped to the document it names, and a citation may only claim what that document says. POSIX is why this is spelled out: POSIX-TERM is XBD Chapter 11, which describes the terminal interface but defines no function, so a fact about what tcsetwinsize() does or when it signals belongs to POSIX-WINSIZE — a different volume, a different row. Citing the chapter for the function page resolves happily through the gate and is exactly the wrong-section failure rule 4 exists to catch; it got through three review rounds on this crate before a reader searched the chapter text instead of trusting that a plausible section number was the right one.

Every row is a public, freely-obtainable document. That is the point of the registry — a source that cannot be read by anyone auditing this repo cannot substantiate a claim of independent derivation. Adding a row is a normal PR; adding one that is paywalled, leaked, or copyleft-licensed is a rule 1 violation.

IDSpecificationWhere
ECMA-48Control Functions for Coded Character Sets, 5th edition (1991)ecma-international.org/publications-and-standards/standards/ecma-48/
XTERM-CTLSEQSXTerm Control Sequencesinvisible-island.net/xterm/ctlseqs/ctlseqs.html
KITTY-KBDKitty keyboard protocolsw.kovidgoyal.net/kitty/keyboard-protocol/
KITTY-GRAPHICSKitty graphics protocolsw.kovidgoyal.net/kitty/graphics-protocol/
ACP-1Agent Client Protocol, wire version 1agentclientprotocol.com
CLAUDE-STREAM-JSONClaude Code CLI reference: print-mode --input-format/--output-format flags, stream-json on both, stdin/stdoutcode.claude.com/docs/en/cli-reference
CLAUDE-HEADLESSClaude Code headless mode: the stream-json message stream's shapes and semanticscode.claude.com/docs/en/headless
CLAUDE-AGENT-SDKClaude Code Agent SDK (TypeScript) reference: result-message field shapes (usage token keys, total_cost_usd as an estimate, duration_ms, num_turns), the tool_use content-block shape, canUseTool as SDK-hosted-only (absent in interactive/TUI mode)code.claude.com/docs/en/agent-sdk/typescript
CLAUDE-HOOKSClaude Code hooks reference: lifecycle events, PreToolUse permissionDecision contractcode.claude.com/docs/en/hooks
CLAUDE-SDK-PERMISSIONSClaude Code SDK permissions reference: the six-step evaluation order with hooks run first, a hook deny applying even in bypassPermissions modecode.claude.com/docs/en/agent-sdk/permissions
CODEX-APP-SERVERCodex app-server JSON-RPC protocol: README plus the schemas emitted by codex app-server generate-json-schemagithub.com/openai/codex/blob/main/codex-rs/app-server/README.md
OPENCODE-ACPopencode as an ACP agent: the acp subcommand, JSON-RPC over stdioopencode.ai/docs/acp
OPENCODE-PLUGINSopencode plugin events reference: the typed event-bus names (session.*, permission.asked/permission.replied, message.*, server.connected)opencode.ai/docs/plugins
OPENCODE-SERVERopencode server HTTP + SSE surface: the endpoint table plus the OpenAPI 3.1 schema the server publishes at GET /doc ("use the spec to generate clients or inspect request and response types") — request/response/event shapes derive from that schemaopencode.ai/docs/server
POSIX-TERMPOSIX.1-2024 (Issue 8) XBD §11, General Terminal Interfacepubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap11.html
POSIX-WINSIZEPOSIX.1-2024 (Issue 8) XSH, tcsetwinsize()pubs.opengroup.org/onlinepubs/9799919799/functions/tcsetwinsize.html
POSIX-VIPOSIX.1-2024 (Issue 8) XCU, vi — screen-oriented (visual) display editor: the command-mode / text-input-mode distinction and the visual-mode command vocabulary specified in EXTENDED DESCRIPTIONpubs.opengroup.org/onlinepubs/9799919799/utilities/vi.html
UAX-11Unicode Standard Annex #11, East Asian Widthunicode.org/reports/tr11/
UAX-29Unicode Standard Annex #29, Text Segmentation (grapheme clusters)unicode.org/reports/tr29/
TERM-UNICODE-CORETerminal Unicode Core (grapheme-cluster processing, DEC private mode 2027). Draft (rev 1, 2021-09-06), in a repository declaring no license — cite it for what it requires when the mode is SET, and for its own statement that the reset state is undefined; it defines no reset-state behavior to citegithub.com/contour-terminal/terminal-unicode-core
TMUX-MANUALtmux(1) manual page: the DEFAULT KEY BINDINGS section (prefix-key convention, C-b default, prefix-then-command-key grammar), the KEY BINDINGS section (key-name syntax, key tables, bind-key/unbind-key), the named command vocabulary (new-window, split-window, resize-pane, copy-mode, detach-client, list-keys, …), and the configuration-file vocabulary (set-option, ~/.tmux.conf, source-file)man.openbsd.org/tmux.1
ZELLIJ-KEYBINDSZellij User Guide, "Configuring Keybindings": the keybinds configuration block — bindings divided into named modes, bind instructions mapping one or more keys to one or more named actions (SwitchToMode, NewPane, MoveFocus, …)zellij.dev/documentation/keybindings.html
ZELLIJ-PRESETSZellij User Guide, "Keybinding Presets": the two shipped default presets and their mode-entry convention — default preset (mode entered from normal mode, e.g. Ctrl p → Pane mode, then n new pane / x close focused pane) and the Unlock-First non-colliding preset (Ctrl g unlock, then single-character mode entry)zellij.dev/documentation/keybinding-presets.html

Rows exist before the code that cites them

This registry is seeded ahead of gwk-pty deliberately. A registry written to match code already merged records what was cited, not what was permitted — and the whole value of rule 3 is that the permitted set is decided before the implementation reaches for it.

Nothing here is load-bearing until a marker cites it. A row nothing cites costs nothing; a missing row blocks a PR until someone justifies the source, which is the correct direction for that friction to run.

Once a marker does cite a row, the row is load-bearing and cleanroom-gate treats it that way: cited row text is folded into the review subject, and editing a cited row re-opens review of the files citing it (CAPTURES.md describes the mechanism; it covers both registries).

On this page