docs(modules): mirror the rest of the Oxide ecosystem, and add a machine-readable set

Completes the uMod mirror beyond the Rust hook table, and adds agent/ — the
same facts in TSV/JSONL at ~46% of the tokens.

New prose:
- OXIDE_API.md: the 19 developer pages under umod.org/documentation/api/ —
  plugin structure, hooks, commands, IPlayer, permissions, config, data files,
  database, localization, timers, web requests, dependencies, integration,
  preprocessor directives, security, style guide, CI, review. This is the
  framework our plugin is a guest in, where HOOKS.md is what the game says.
- OPERATING.md: the 6 operator pages — installing Oxide on a server, then
  installing, configuring and permissioning plugins.

New machine-readable set (agent/):
- hooks.tsv    477 rows, ~31% of HOOKS.md
- items.tsv    678 rows, ~80% of DEFINITIONS.md's item table
- skins.tsv    104 rows covering 2,590 skins, ~77%
- api.jsonl    150 code examples, ~47% of the two prose docs
Generated in the same pass as the markdown, so the two cannot drift.

HOOKS.md gains the universal-hook split: 34 of the 477 are uMod's own
Covalence hooks, raised identically on every game uMod supports. Verified
against /documentation/games/universal in the same capture - all 34 are in
the Rust set and the Rust page adds none of its own, so the overlap is exact.
The distinction is architectural: a universal hook is the portable part of
the surface.

Two things worth recording from building it:
- The first skins.tsv was one row per skin and came out 11% LARGER than the
  markdown it replaces. Grouping it one row per item is what made it a
  saving. The token win is real for prose (3.2x on hooks) and small for
  tables that were already dense - agent/README.md says so plainly rather
  than claiming a flat number.
- Signature extraction by brace depth silently captured body lines (a nested
  '}' in OnUserConnected's example ended the block early). It now matches on
  the hook's own name; all 477 rows verified to carry a real signature.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
This commit is contained in:
2026-09-15 10:01:11 -05:00
parent 8d31e497d2
commit 4e2c2dc439
10 changed files with 4616 additions and 577 deletions

View File

@@ -56,7 +56,7 @@ particular game; a module is what makes it a site *for* one.
| [uo/API.md](modules/uo/API.md) · [uo/SCHEMA.md](modules/uo/SCHEMA.md) | module-uo's own route surface and the tables it owns |
| [kit-acceptance.md](modules/kit-acceptance.md) | The Integration Kit acceptance run — building a module by following the kit alone, and what it found |
| [rust-dryrun.md](modules/rust-dryrun.md) | A written, deliberately unimplemented `module-rust` — the test that the module contract generalises past the game it was extracted from |
| [rust/](modules/rust/README.md) | **Reference for the upcoming `module-rust`** — a mirror of uMod's Rust Oxide API, scraped from upstream: [HOOKS.md](modules/rust/HOOKS.md) (all 477 hooks) and [DEFINITIONS.md](modules/rust/DEFINITIONS.md) (678 items, 2,590 skins) |
| [rust/](modules/rust/README.md) | **Reference for the upcoming `module-rust`** — a mirror of the uMod/Oxide ecosystem, scraped from upstream: [HOOKS.md](modules/rust/HOOKS.md) (477 Rust hooks), [OXIDE_API.md](modules/rust/OXIDE_API.md) (the plugin framework), [DEFINITIONS.md](modules/rust/DEFINITIONS.md) (678 items, 2,590 skins), [OPERATING.md](modules/rust/OPERATING.md) (the operator's side), and [agent/](modules/rust/agent/README.md) — the same facts as TSV/JSONL at ~46% of the tokens |
### `link/`
| Doc | What it covers |