Conventions

Rules that hold in every OOPS repository. How code, comments and documents are written is in STYLE. A repository's own AGENTS.md or CLAUDE.md states only what it adds to these two, or where it deliberately differs and why.

1. Provenance is a hard boundary

No repository contains firmware bytes, vendor keys, decrypted title files, disassembly, or code written while reading a vendor binary. A provenance gate in CI fails the build on any of it. Reimplementation from disassembly converges on the original, and the collection exists to be publishable.

2. Naming: no vendor brands in prose or in our own API

Vendor terms

No vendor brand names in prose or in our own API. The collection keeps a low profile.

Avoid Use
The vendor's name "the vendor", "the platform vendor"
The hardware's brand and model numbers "Prospero-generation hardware", then "the hardware"
The previous generation "Orbis-generation hardware", "the previous generation"
Vendor graphics API names "the vendor command-stream format"
Vendor shader language name "the vendor shader bytecode"
Vendor streaming-layer name "the vendor async streaming layer"
Vendor controller brand "the vendor controller"
Other named emulator projects "other projects in this space"

The words for our own layers

Word Means Note
guest the code being run: a commercial title, or obSCEne
host the ordinary machine the work happens on; obSCEne's make host build never the emulated hardware
loader whatever runs a guest: the hardware, an emulator, or the host build orbistoun's component is "the ELF loader"
target see the axes below always qualified
implementation the semantics behind a call, whoever provides them

"The hardware" means the real machine only. A sentence covering both says "loader".

The four axes of a build and a run

Axis Values Meaning Owner
target orbis, neo, prospero, trinity the machine an artifact is built for oops-sdk/include/oops/target.h, selfish --target
format elf, eboot, title, pkg the shape an artifact is delivered as selfish --format
category BIG_APP, SYSTEM_APP, MINI_APP, DAEMON, MEDIA_APP what a title declares itself to be the title manifest, selfish --category
context <delivery>/<generation>, e.g. payload/orbis-compat the environment a run landed in measured at run time, obSCEne's OBS|context record

3. Honest failure over plausible output

A stub that returns success is indistinguishable from working code until it corrupts something much later.

4. Greenfield

Nothing has shipped. Edit the original, change the format, delete the file. No migrations, deprecated aliases or compatibility paths until tagged binaries exist and somebody has data in the wild.

5. Gates

Collection gates, run from the OOPS root:

Gate Checks
tools/check-decisions.sh decision files against STYLE, with a baseline that may only shrink
tools/check-links.sh every relative link and anchor, across repositories
tools/check-workflows.sh every workflow that touches a project's source checks the collection out around it
tools/check-dashes.sh the dash rule
tools/check-toolchain.sh every C repository pins the same clang major

6. Logging

Rust tools use oops-log: tracing, configured once, turned up with OOPS_LOG or RUST_LOG (OOPS_LOG=warn,pros_core::fetch=trace). C code uses oops_log_* from oops-sdk.

Level For Shown by default
error the tool could not do what was asked and is giving up yes
warn something surprising that did not stop the work: a fallback taken, a tolerable failed check yes
info an action with a side effect, in the user's terms: fetched, registered, installed yes
debug resolved configuration and the reasons for an action no
trace per-item and wire detail no

7. First-party tooling

Every workflow uses the collection's own tools through their canonical interfaces:

Job Tool
Build an app or title make elf, make eboot, make title via oops-apps/common/app.mk
Containers, title layouts, packages selfish --format eboot, --format title, --format pkg
Symbol census, module tagging, probes obscene-tool
Hardware pros check, pros launch, pros send, pros logs, pros titles, pros close

8. Toolchain

9. Working across repositories