OpenAI Codex: who decides what

The gallery · Make a map of your own system · The repository

The Rust agent in openai/codex, read at commit a5c40924. Claims about how the code behaves refer to that commit. Their code is Apache-2.0; this page quotes short identifiers and cites files and lines at that commit.

How to read this page

A seat is a judgment the agent makes over and over: which model runs, what the model sees, may this command run, is the work done. Each card records the question, how it is answered, and who or what holds it, with the code that implements or exposes that decision. Seat ids (A1, D12 …) are links.

Each answer describes what Codex does by default at the commit named above. Exceptions named are the main ones, not a complete list.

The chip on each card has two words. The first is about the question: a RULE has one right answer given its inputs, so a run that answers differently is a bug; a RULING is one that competent people could answer differently. Enforcing a limit someone set is a RULE; choosing what to keep, what to trust or how long to wait is a RULING, even when code holds it.

The second word is who holds it: llm = a language-model call; model = another learned model (here, image generation); code = code in their repository; human = a person; external = a service outside the repository.

Paths are relative to codex-rs/ unless they say otherwise. A bare :120-140 means lines in the file named just before it.

Counts

165 seats across 9 stages: A 14, B 33, C 11, D 38, E 23, F 14, G 7, H 14, I 11.

Kind of question · holderSeats
RULE · code77
RULING · code44
RULING · llm20
RULING · human13
RULING · external10
RULING · model1

What this edition does not have

There is no list of gaps. No coverage figure: this edition does not say how many of Codex's model calls and decision points the seats leave out. Each card shows the question, the answer and its holder; for most seats we also recorded what checks the judgment and how it has failed, but those notes are not shown here. One seat from our earlier reading of the code no longer exists at this commit and is not counted.

What is left out of this edition

8 of the 165 cards are left out of this edition. The counts above include them.

A. Intake and routing (14 seats)

A1 Does this submitted input start a new turn, steer the running one, or get refused? RULE · code
Answered how

Code: start_or_steer hands inter-agent communication input to agent::submit (codex-rs/core/src/session/turn_input.rs:368-373); for other input it first tries to append the input to the active turn (steer_input); only on NoActiveTurn does it admit and spawn a new RegularTask; any other refusal reason is returned as NotSubmitted (codex-rs/core/src/session/turn_input.rs:414-491).

Held by

codex-rs/core/src/session/turn_input.rs:363

A2 Can the running turn accept steered input at all? RULE · code
Answered how

Code: steer_input refuses when the active task is a Review or Compact task, when the caller's expected turn id differs, when the input is empty, or when the caller requires a different final-output JSON schema than the running turn has (codex-rs/core/src/session/turn_input.rs:908-941).

Held by

codex-rs/core/src/session/turn_input.rs:917

A3 May automatic (non-user) work start a turn, given Plan mode? RULE · code
Answered how

Code: automatic starts (mailbox, response-item continuations) are refused if the current or proposed collaboration mode is Plan; user and recovery starts are always permitted (codex-rs/core/src/session/turn_input.rs:79-94, checked again before reservation at codex-rs/core/src/session/turn_input.rs:525-531).

Held by

codex-rs/core/src/session/turn_input.rs:82

A4 Is the host admitting new turns right now, and which inputs bypass a drain? RULE · code
Answered how

Code: every new turn takes an admission token from the extension host (admit_turn_start); during a drain the input is refused as ServerDraining, except explicit input delegated by a parent to a thread-spawned sub-agent (codex-rs/core/src/session/turn_input.rs:436-455) and a one-shot review delegate finishing its parent's work (codex-rs/core/src/session/turn_input.rs:533-552).

Held by

codex-rs/core/src/session/turn_input.rs:449

A5 Does pending inter-agent mail that asks for a turn take precedence over an idle start? RULE · code
Answered how

Code: before (and again after) reserving an idle turn, start_if_idle refuses with PendingTriggerTurn if the mailbox holds trigger-turn items, and hands the start to the pending-work scheduler instead (codex-rs/core/src/session/turn_input.rs:518-522, 572-578).

Held by

codex-rs/core/src/session/turn_input.rs:518

A6 Does a user ! shell command run inside the active turn or as its own task? RULE · code
Answered how

Code: if a turn is active the command runs as an auxiliary of that turn (UserShellCommandMode::ActiveTurnAuxiliary) on a spawned task; otherwise a fresh turn context with default settings runs a UserShellCommandTask (codex-rs/core/src/session/handlers.rs:109-135).

Held by

codex-rs/core/src/session/handlers.rs:110

A7 What is a review asked to look at (which target becomes which reviewer prompt)? RULE · code
Answered how

Code: review_prompt maps the target to the reviewer's instruction text: uncommitted changes, base branch and commit each get a fixed built-in prompt (a commit's title is embedded when supplied), while a custom target's own text, trimmed, IS the prompt; for a base branch it computes the merge base and embeds the SHA, falling back to a prompt that tells the reviewer to compute it with git when none is found (codex-rs/prompts/src/review_request.rs:18-40, 59-99).

Held by

codex-rs/prompts/src/review_request.rs:59

A8 Which model runs when the session names none, or names one the provider does not offer? RULING · external
Answered how

External with code: with no model given, code takes the catalog entry flagged is_default, else the first entry (codex-rs/models-manager/src/manager.rs:951-958); when provider fallback is allowed, a requested model absent from the catalog is replaced by that default (codex-rs/models-manager/src/manager.rs:900-907). The catalog itself comes from the provider's models endpoint or the bundled models.json.

Held by

codex-rs/models-manager/src/manager.rs:951

A9 Which model metadata (base prompt, context window, tool types) applies to this model name? RULING · code
Answered how

Code: the longest catalog slug that is a prefix of the requested name wins; if none matches, one leading namespace/ segment is stripped and the match retried; if still none, a hard-coded fallback descriptor is used (272,000-token window, bundled base prompt, unified-exec shell) (codex-rs/models-manager/src/manager.rs:1008-1042, codex-rs/models-manager/src/model_info.rs:98-148).

Held by

codex-rs/models-manager/src/manager.rs:1022

A10 What reasoning effort does this request carry? RULE · code
Answered how

Code: the selected effort (collaboration mode setting, else the model default) is sent unchanged unless the model client has reasoning-effort overrides enabled for that model; only then is it resolved against the model (Ultra maps to the model's multi-agent effort when that is a supported non-Ultra level, else Max if supported, else the last non-Ultra supported level, else Medium; Persistent becomes disabled) and pinned per context window so sampling and compaction share it (codex-rs/core/src/session/reasoning_effort.rs:94-157; codex-rs/protocol/src/openai_models/reasoning_effort.rs:10-40).

Held by

codex-rs/core/src/session/reasoning_effort.rs:94

A11 May the session's requested settings (model, approval policy, reviewer) be accepted under managed requirements? RULE · code
Answered how

Code: StepSettings::apply checks each requested change against the managed ConfigRequirements; changing the model to one that requires auto-review forces the AutoReview reviewer unless the caller chose one; validate refuses a model that requires auto-review when the guardian is off or the turn has full-disk write access (codex-rs/core/src/session/step_settings.rs:253-337).

Held by

codex-rs/core/src/session/step_settings.rs:253

A12 May a running turn switch model or settings mid-turn without changing its safety posture? RULE · code
Answered how

Code: only for an update that touches model settings (model, effort, summary, service tier) or that names neither a reviewer nor environments, and only with the step_model_switching feature on (otherwise the update is rejected outright), check_legacy_turn_safety refuses a destination that changes the admitted approval policy, the model-required review authority or the prefix-rule policy, or (via check_legacy_model_safety) uses fallback model metadata or changes the Cyber classification, node-REPL review requirement or availability, Guardian coverage, the explicit reviewer model, the Guardian V2 classification settings, or (with no reviewer override) the Guardian parent-fallback policies (codex-rs/core/src/session/step_activation.rs:32-221, called at :365-372 inside apply_turn_settings, gate at :243-250). The authors label these checks temporary: 'Remove these restrictions as their consumers migrate to captured step settings' (:29-31).

Held by

codex-rs/core/src/session/step_activation.rs:32

A13 Which execution environment(s) does this turn run in, and which is primary? RULE · code
Answered how

Code: update_selections keeps the first selection for each environment id, reuses a still-healthy previous environment with the same workspace, restarts failed ones, and silently skips ids the environment manager does not know; the first resolved selection is primary (codex-rs/core/src/environment_selection.rs:484-486, :540-697, :1338). Request-boundary validation refuses unknown or duplicate ids and over-long cwds (codex-rs/core/src/environment_selection.rs:138-161).

Held by

codex-rs/core/src/environment_selection.rs:484

A14 Does a spoken request in a realtime voice session go to the coding agent? RULING · llm
Answered how

The hosted realtime voice model decides, by calling its background_agent function; code accepts only a function_call item with that name, takes the transcript from known argument keys (else the raw arguments string), wraps it and submits it as a user turn with trigger realtime through StartOrSteer (codex-rs/codex-api/src/endpoint/realtime_websocket/protocol_v2.rs:142-166, :191-210; codex-rs/core/src/realtime_conversation.rs:1843-1854; codex-rs/core/src/session/turn_input.rs:816-834).

Held by

codex-rs/codex-api/src/endpoint/realtime_websocket/protocol_v2.rs:142

B. Context: what the model sees (33 seats)

B1 Which base instructions does the model get for this window? RULE · code
Answered how

Code: the model catalog entry's instructions_template (or the config base_instructions override, codex-rs/models-manager/src/model_info.rs:46-48) is rendered by render_model_instructions; in incremental-tools windows custom base instructions are used as given (codex-rs/core/src/session/world_state.rs:97-136).

Held by

codex-rs/core/src/session/world_state.rs:81

B2 Does the base prompt keep its update_plan guidance? RULE · code
Answered how

Code: when the update_plan tool is off, no custom model catalog is set, and the instructions are Codex-owned (an incremental-tools window, no config base_instructions, or base instructions whose provenance is the model), without_update_plan_instructions deletes sections whose heading is exactly ## Planning (only if a line in it starts with one of two fixed sentences about the tool), ## `update_plan`, ## Plan tool or ## Plan Mode vs update_plan tool, plus a two-line Progress visibility: block and two bullet patterns with their indented continuations (codex-rs/prompts/src/update_plan_instructions.rs:4-58; trigger codex-rs/core/src/session/world_state.rs:81-96).

Held by

codex-rs/prompts/src/update_plan_instructions.rs:4

B3 Does the base prompt keep its # Personality section? RULE · code
Answered how

Code: when the personality setting is None, strip_personality_section removes the text from a line exactly # Personality to the next H1 heading (codex-rs/models-manager/src/model_info.rs:49-56, :61-88).

Held by

codex-rs/models-manager/src/model_info.rs:61

B4 Is the model told that the model serving it changed? RULE · code
Answered how

Code: in ordinary windows, when the previous model (the saved snapshot, else the previous turn's model) differs from the current one AND the new model's instructions are non-empty, the model section emits a ModelSwitchInstructions fragment carrying them; a switch to a model with empty instructions produces no notice. In incremental-tools windows it emits a ModelInstructions update naming the new model (unless the SuppressModelChangeAnnouncements feature is on, codex-rs/core/src/session/world_state.rs:106-109) and/or carrying changed instructions, and re-asserts the full base instructions when no prior snapshot is known. The initial-context builder puts a model-switch fragment first among developer sections (codex-rs/core/src/context/world_state/model.rs:38-143; codex-rs/core/src/session/mod.rs:4950-4956).

Held by

codex-rs/core/src/context/world_state/model.rs:119

B5 Does the model need to be re-told a context section this step (known, unknown, or absent before)? RULE · code
Answered how

Code: for each world-state section, render_history_diff decides what the model already saw: a persisted snapshot counts as Known unless the section requires its fragment to survive in history and it no longer does; with no snapshot, a text match of a legacy fragment in history counts as Unknown; otherwise Absent. Each section then renders only its change (codex-rs/core/src/context/world_state/mod.rs:534-577). The baseline is cleared on compaction, history replacement and front-trimming (codex-rs/core/src/context_manager/history.rs:737, :760, :801).

Held by

codex-rs/core/src/context/world_state/mod.rs:534

B6 Are a project's AGENTS.md files read at all for this project? RULE · code
Answered how

Code: if the active project is untrusted, project AGENTS.md discovery is skipped and only host-supplied user instructions remain (codex-rs/core/src/agents_md.rs:64-66); the cached snapshot is dropped when the trust level or environment selection changes (codex-rs/core/src/agents_md_manager.rs:89-95).

Held by

codex-rs/core/src/agents_md.rs:64

B7 Which AGENTS.md files are found for this working directory? RULE · code
Answered how

Code: walk up from the cwd to the nearest directory with a project-root marker (default .git; project-scoped config layers are not allowed to set the markers), then in each directory from root down to cwd take the FIRST existing candidate among AGENTS.override.md, AGENTS.md, then configured fallback names; files below the cwd and above the root are never read (codex-rs/core/src/agents_md.rs:192-296).

Held by

codex-rs/core/src/agents_md.rs:192

B8 How much of the AGENTS.md text reaches the model, and which file is cut? RULING · code
Answered how

Code: one shared byte budget (project_doc_max_bytes, default 32 KiB, codex-rs/core/src/config/mod.rs:259, :4607) is spent in discovery order, root first and cwd last, across all environments; the file that crosses the budget is truncated and later files are dropped (codex-rs/core/src/agents_md.rs:68-95, :145-180). The section is re-sent with a replacement notice when the text changes (codex-rs/core/src/context/world_state/agents_md.rs:44-80).

Held by

codex-rs/core/src/agents_md.rs:156

B9 Which global (home-directory) instructions does the model get? RULE · code
Answered how

Code: in CODEX_HOME, the first non-empty of AGENTS.override.md then AGENTS.md is used, trimmed; a failed read keeps the last good value and reports each warning once (codex-rs/codex-home/src/instructions/mod.rs:41-109).

Held by

codex-rs/codex-home/src/instructions/mod.rs:41

B10 Are host-supplied thread instructions small enough to accept? RULE · code
Answered how

Code: thread-scoped instructions from the host provider over 10,000 estimated tokens fail the refresh with InvalidRequest; repository instructions are re-discovered only when the environment selection or trust level changed (codex-rs/core/src/agents_md_manager.rs:68-149, :187-199).

Held by

codex-rs/core/src/agents_md_manager.rs:192

B11 What is the model told about its sandbox, approval policy and approved commands? RULE · code
Answered how

Code: from_permission_profile derives a sandbox label from the permission profile (full write → danger-full-access, no writable roots → read-only, else workspace-write), picks the approval text by policy and reviewer, appends request-permission and approved-prefix sections, and lists writable roots and denied reads within a 32 KiB path budget (codex-rs/prompts/src/permissions_instructions.rs:184-279, :311-385, :49, :121-142). Later steps send only newly approved prefixes as a delta (codex-rs/core/src/context/world_state/permissions.rs:111-129).

Held by

codex-rs/prompts/src/permissions_instructions.rs:184

B12 Which collaboration-mode instructions (Default or Plan) does the model see? RULE · code
Answered how

Code: the catalog's mode text wins, else the mode settings' non-empty developer instructions; when the update_plan tool is off, update_plan guidance is stripped from text counted as built-in, which is catalog text from a non-custom catalog, or settings text equal as a whole string to a bundled preset; custom text is left unchanged (codex-rs/core/src/context/world_state/collaboration_mode.rs:28-81).

Held by

codex-rs/core/src/context/world_state/collaboration_mode.rs:28

B13 What is the model told about its environment (cwd, shell, date, timezone, network, filesystem, sub-agents)? RULE · code
Answered how

Code: EnvironmentsState collects per-environment cwd/status/shell, the PowerShell version (only with the PowerShellShellVersion feature and a single local PowerShell environment), the date, the timezone when include_environment_context_time is on, the network and filesystem summary of the primary environment, and, for multi-agent V2, a sub-agent list capped at 8 names and 1,024 bytes (V1 uses a legacy formatter). A fragment is sent only when an environment entry changed or the shell version, date, timezone, network or filesystem changed; it then carries the changed environment entries plus the current shell version, date, timezone, network, filesystem and sub-agent list. A change to the sub-agent list alone sends nothing (codex-rs/core/src/context/world_state/environment.rs:45-202; codex-rs/core/src/session/world_state.rs:40-41, :137-170).

Held by

codex-rs/core/src/context/world_state/environment.rs:45

B14 Is the model given app and plugin usage instructions this step? RULE · code
Answered how

Code: app instructions appear only when the config's include_apps_instructions is on, apps are enabled, at least one connector is accessible and enabled after app policy, and the model opts in (include_apps_usage_instructions); plugin instructions when plugins are available and the model opts in (codex-rs/core/src/session/world_state.rs:327-353).

Held by

codex-rs/core/src/session/world_state.rs:327

B15 In what order and under which role does the initial context reach the model? RULE · code
Answered how

Code: build_initial_context_with_world_state gathers config developer instructions, extension thread/turn context, token-budget context, then world-state fragments; model-switch text goes first, multi-agent mode after the usage hint, managed developer instructions in their own trailing message, and for guardian sub-agents the developer instructions are emitted as a separate guardian-policy message (codex-rs/core/src/session/mod.rs:4781-5059).

Held by

codex-rs/core/src/session/mod.rs:4781

B16 What does an external notes server add to the context-window block? RULING · external
Answered how

External: when the token-budget feature is on and the history-notes extension is not used, core calls the MCP tool notes/thread_hint and pastes its text into the context-window block (codex-rs/core/src/session/mod.rs:4879-4919).

Held by

codex-rs/core/src/session/mod.rs:4887

B17 Which uninstalled plugins does the model get to recommend? RULING · external
Answered how

External with code: the recommendations endpoint supplies a plugin list; code removes installed, remotely installed and user-disabled ones (codex-rs/core-plugins/src/manager.rs:2066-2126); the result becomes RecommendedPluginsInstructions (codex-rs/core/src/session/mod.rs:4815-4834, :4983-4995).

Held by

codex-rs/core-plugins/src/manager.rs:2066

B18 Which tools does the model see this step? RULE · code
Answered how

Code: build_tool_router registers core tools (shell, apply-patch, utilities, collaboration), MCP tools after exposure policy, extension tools, dynamic tools and hosted tools, filtered by the session tool policy and code-mode rules (codex-rs/core/src/tools/spec_plan.rs:122-189, :371-402).

Held by

codex-rs/core/src/tools/spec_plan.rs:122

B19 Which MCP tools become model tools, and which are hidden for budget? RULING · code
Answered how

Code: non-app MCP tools that are model-visible, plus app tools allowed by app policy, are registered; agent-plugin tools are admitted in discovery order while each spec is at most 8,000 bytes and the running total at most 64,000 bytes, and the rest are registered Hidden (codex-rs/core/src/mcp_tool_exposure.rs:19-20, :136-240).

Held by

codex-rs/core/src/mcp_tool_exposure.rs:136

B20 Is each MCP tool shown directly or only through tool search? RULE · code
Answered how

Code: when the model supports the search tool, an eligible tool is deferred (reachable only via tool_search); otherwise it is direct; server and app omit_tools_from lists and direct-only namespaces narrow the choice, and in Code-Mode-only mode a tool is deferred only if it keeps its Code Mode exposure. With the CodeModeOnlyStrictThirdPartyTools feature in Code-Mode-only mode, this policy is skipped entirely: the operator's omit_tools_from lists are ignored (a conflict is logged with warn! only) and the tool keeps the exposure it was registered with (codex-rs/core/src/tools/spec_plan.rs:191-292).

Held by

codex-rs/core/src/tools/spec_plan.rs:200

B21 Which deferred tools does a tool search surface to the model? RULING · code
Answered how

Code: BM25 over each deferred tool's search text, embedder fitted to that corpus; the top limit (default 8) are returned and loaded for the next call (codex-rs/core/src/tools/handlers/tool_search.rs:166-175, :237, :334-348).

Held by

codex-rs/core/src/tools/handlers/tool_search.rs:342

B22 Which skills, and how much of each description, appear in the model's skill catalog? RULING · code
Answered how

Code: the catalog gets a budget of 2% of the context window in tokens (or a configured cap up to 10,000 tokens, or 8,000 characters when the window is unknown); if every full line fits it is shown whole; else, if every skill fits at its minimum, the remaining budget is shared out as shortened descriptions; else every description is removed and skills are kept in list order while their minimum lines still fit, the rest omitted (codex-rs/ext/skills/src/render.rs:23-26, :169-195, :380-421).

Held by

codex-rs/ext/skills/src/render.rs:380

B23 Which skill does a $name mention in core's host-skill path inject? RULE · code
Answered how

Code: structured skill inputs resolve by path first; text mentions resolve by path, then by plain name only when exactly one enabled skill has that name and no connector shares the slug (codex-rs/skills/src/selection.rs:44-200, ambiguity check :181-193). Called from codex-rs/core/src/session/turn.rs:1153, :1230; guardian sub-agents never interpret mentions (codex-rs/core/src/session/turn.rs:1186-1190).

Held by

codex-rs/skills/src/selection.rs:44

B24 Which skill does a $name mention inject from the skills extension's catalog (executor, cloud, bundled, MCP-resource skills)? RULE · code
Answered how

Code: the extension's own collect_explicit_skill_mentions resolves structured and path mentions, then for a plain name takes the FIRST enabled catalog entry with that name, with no ambiguity check and no connector check (codex-rs/ext/skills/src/selection.rs:21-80, plain-name branch :65-76); its main prompt is read and truncated with a warning if too long (codex-rs/ext/skills/src/extension.rs:380, :436-460).

Held by

codex-rs/ext/skills/src/selection.rs:21

B25 What remembered context does the model start each thread with? RULE · code
Answered how

Code: when the memory tool feature and use_memories are on, the extension reads memory_summary.md from the memory root, truncates it to 2,500 tokens, renders it into the read-path template and adds it as a developer-policy fragment (v2: split into 8,900-byte fragments) (codex-rs/ext/memories/src/prompts.rs:35-64; codex-rs/ext/memories/src/extension.rs:46-53, :56-104; limit codex-rs/ext/memories/src/lib.rs:16).

Held by

codex-rs/ext/memories/src/prompts.rs:35

B26 What extra context do configured hooks add to the model's input? RULING · external
Answered how

External: hook commands configured by the user or admin return additionalContext; core records each as a developer-role message (codex-rs/core/src/hook_runtime.rs:886-910; role codex-rs/core/src/context/hook_additional_context.rs:24-26), from prompt-submit hooks (codex-rs/core/src/session/turn.rs:1006-1034) and tool hooks (codex-rs/core/src/tools/registry.rs:973-976).

Held by

codex-rs/core/src/hook_runtime.rs:886

B27 Under which role does client-supplied additional context reach the model, and when is it re-sent? RULE · code
Answered how

Code: each keyed entry is re-sent only when its value changed; Untrusted entries become a user-role fragment (or, with the UntrustedAsToolOutput feature on, a tool-output item) and Application entries a developer-role fragment (codex-rs/core/src/state/additional_context.rs:50-99), merged at every start or steer (codex-rs/core/src/session/turn_input.rs:985-1006).

Held by

codex-rs/core/src/state/additional_context.rs:50

B28 What does the model see of past turns (missing tool outputs, orphans, unsupported media)? RULING · code
Answered how

Code: before each prompt the history is normalized: a call with no recorded output gets a synthetic output aborted; a function, custom-tool or client tool-search output whose call id matches no call is removed (named outputs with no call id, and server-executed tool-search outputs, are kept); and image/audio content is stripped when the model lacks the modality (codex-rs/core/src/context_manager/history.rs:1036-1055; codex-rs/core/src/context_manager/normalize.rs:21-155, :197-227, :346, :394).

Held by

codex-rs/core/src/context_manager/history.rs:1036

B29 What does the model see of an image (resized, or replaced by a placeholder)? RULE · code
Answered how

Code: inline images are resized/encoded per the model's detail or unified budget mode; remote URLs, low detail where unsupported, oversized and unprocessable images are replaced by fixed placeholder text that says why; user-message resizes can add a resize notice (codex-rs/core/src/image_preparation.rs:126-164, :33-39, :111-123).

Held by

codex-rs/core/src/image_preparation.rs:126

B30 What does the model learn of a user's ! shell command? RULE · code
Answered how

Code: the command, exit code, duration and output are recorded as a <user_shell_command> user-role fragment: as a conversation item for a standalone command, or injected into the running turn without starting a new one (codex-rs/core/src/tasks/user_shell.rs:440-468; fragment codex-rs/core/src/context/user_shell_command.rs:32-54).

Held by

codex-rs/core/src/tasks/user_shell.rs:440

B31 Is a current-time reminder due before this request? RULE · code
Answered how

Code: with the reminder feature on, a reminder is recorded on a new context window, when the interval is zero or has elapsed, and (in after-output mode) only after a user message or tool output (codex-rs/core/src/session/time_reminder.rs:63-96, :156-202).

Held by

codex-rs/core/src/session/time_reminder.rs:63

B32 What startup context does the realtime voice model get? RULE · code
Answered how

Code: a startup blob with token-budgeted sections: current thread (1,200), recent work from up to 40 recent threads grouped by cwd including other workspaces (2,200), a two-level workspace tree (1,600) and notes (300) (codex-rs/core/src/realtime_context.rs:30-45, :59).

Held by

codex-rs/core/src/realtime_context.rs:59

B33 Are the organisation's managed developer instructions small enough to place in context? RULE · code
Answered how

Code: managed additional_developer_instructions over 10,000 estimated tokens (including markers and the replacement notice) are rejected; accepted text is sent as its own developer message and replaced or withdrawn with an explicit notice when it changes (codex-rs/core/src/context/world_state/managed_developer_instructions.rs:59-85, :19-21).

Held by

codex-rs/core/src/context/world_state/managed_developer_instructions.rs:59

C. Choosing the next action (11 seats)

C1 Given everything in the context window, what is the agent's next move: which tool(s) to call with which arguments, or what to say? RULING · llm
Answered how

The main model answers it in one streamed Responses call per step (tool_choice: "auto"; parallel calls only when the prompt allows them and the model is not a Responses Lite model, codex-rs/core/src/client.rs:1161); the code only parses what comes back.

Held by

codex-rs/core/src/session/turn.rs:2833

C2 After the model's response finishes, does the agent go round the loop again or stop and hand back to the user? RULE · code
Answered how

Code: it continues when the response held any tool call (dispatched, or answered directly), when the server marked end_turn: false, or when user or mailbox input is pending; otherwise it runs the stop hooks and ends.

Held by

codex-rs/core/src/session/turn.rs:636

C3 Which of the model's output items are tool calls, and how is each mapped to a registered tool name and payload kind? RULE · code
Answered how

Code: build_tool_call maps FunctionCall to a Function payload, a client-executed ToolSearchCall to a ToolSearch payload and CustomToolCall to a Custom (freeform) payload, normalising the namespace; anything else is not a call.

Held by

codex-rs/core/src/tools/router.rs:271

C4 Is the call addressed to a tool registered for this step, with the payload kind that tool takes, and arguments the handler can read? RULE · code
Answered how

Code: the registry looks the name up (unknown: "unsupported call: <name>" goes back to the model), checks the payload kind (mismatch: a FATAL error that ends the turn), then each handler parses the JSON arguments with serde (failure: "failed to parse function arguments" goes back to the model).

Held by

codex-rs/core/src/tools/registry.rs:768

C5 When the model sends exec_command with a command line that invokes apply_patch, is it rerouted to the patch path (verification, patch approval, turn diff) or run as an ordinary shell command? RULE · code
Answered how

Code: a Tree-sitter Bash query accepts exactly two whole-script shapes (apply_patch <<'EOF' ... EOF and cd <path> && apply_patch <<'EOF' ... EOF, or the direct argv form apply_patch <patch>); a match is verified and applied as a patch; a raw patch passed as the whole command is refused as "implicit invocation"; anything else runs in the shell unchanged.

Held by

codex-rs/core/src/tools/handlers/apply_patch.rs:459

C6 Does the patch text parse under the patch grammar, and can each Update hunk be located in the current file contents (each Delete target read) before anything is approved or written? RULE · code
Answered how

Code: parse_patch checks the grammar; verify_apply_patch_args resolves every path, refuses two operations on one path, reads deleted files, and computes each update's new content by locating its old lines (C7).

Held by

codex-rs/core/src/tools/handlers/apply_patch.rs:483

C7 When a patch's old lines do not match the file byte for byte, how loose may the match be, and which occurrence wins? RULING · code
Answered how

Code: seek_sequence searches from the end of the previous hunk (not the file start) and tries four passes in decreasing strictness (exact, trailing whitespace ignored, both-side whitespace ignored, then Unicode dashes, quotes and spaces folded to ASCII), returning the FIRST position that matches in the earliest pass that matches; it never checks whether the context occurs more than once. For an end-of-file hunk it searches only from the last possible position onward; its doc comment says it falls back to searching from start, but the code has no such fallback. If no match is found and the hunk ends in a blank line, the caller retries once without that line (codex-rs/apply-patch/src/seek_sequence.rs:1-110; caller codex-rs/apply-patch/src/file_update.rs:68-120).

Held by

codex-rs/apply-patch/src/seek_sequence.rs:12

C8 When one response contains several tool calls, which of them may run concurrently? RULING · code
Answered how

Code: each call starts as soon as its item finishes streaming; a tool that declares supports_parallel_tool_calls takes a shared (read) lock and runs alongside others, any other tool takes the exclusive (write) lock. Outputs are recorded back in call order.

Held by

codex-rs/core/src/tools/parallel.rs:286

C9 When inter-agent mail arrives while the model is mid-response, is the response stopped after the current commentary/reasoning item so the next request can carry the mail? RULING · code
Answered how

Code: after a completed reasoning, commentary or partial-answer item, if mailbox items are pending and the DeferMailboxPreemption feature is off, sampling stops and the turn follows up; final answers and tool calls never trigger it.

Held by

codex-rs/core/src/session/turn.rs:3146

C10 In the streamed assistant text, which spans are shown as the message, which become the Plan item (Plan mode <proposed_plan> blocks), and which are stripped as citation markup? RULE · code
Answered how

Code: a streaming parser splits deltas into normal text and plan segments as they arrive (handle_plan_segments); when the item completes, a second extractor pulls the plan text from the whole message and strips citations; citations are stripped from every visible message.

Held by

codex-rs/core/src/session/turn.rs:2543

C11 With instant interrupt on, when the person sends a steering message while the model is mid-response, is the response stopped (or drained) so the next request can include the new message? RULING · code
Answered how

Code: a watcher cancels the step's preempt token when user input arrives; the stream loop then either asks a Responses Lite server to drain the response and continues reading, or drops the stream at once and marks the step for follow-up; if the step is already draining a Responses Lite response for queued mailbox items, the cut only resets the token and reading continues (codex-rs/core/src/session/turn.rs:2934-2937). Tool calls already started keep running and are collected.

Held by

codex-rs/core/src/session/turn.rs:2938

D. Gatekeeping: may this action run? (38 seats)

D1 May this file patch be applied without asking, must it ask, or is it rejected? RULE · code
Answered how

Code: an empty patch is rejected; under UnlessTrusted it always asks; otherwise a patch whose every target (and move destination) is writable under the configured filesystem policy, with a sandbox available or a Disabled/External profile, is auto-approved; else it is rejected when the policy forbids sandbox prompts (Never, or Granular without sandbox_approval) and asks otherwise.

Held by

codex-rs/core/src/safety.rs:67

D2 Does an exec-policy rule allow, prompt for, or forbid this command (or every segment of a parsed shell script)? RULE · code
Answered how

Code: the command is split into plain commands (bash -lc / PowerShell parsing, codex-rs/core/src/exec_policy.rs:913-943), unfamiliar executables are evaluated by executable alone (codex-rs/core/src/exec_policy/executable_identity.rs:62-101), then the merged Starlark-style .rules policy is checked with the D3 fallback for unmatched segments; Forbidden forbids, Prompt asks unless the approval policy disallows that prompt (then forbids), Allow skips approval and bypasses the sandbox only if every segment matched an explicit allow rule (codex-rs/core/src/exec_policy.rs:466-480).

Held by

codex-rs/core/src/exec_policy.rs:358

D3 For a command no exec-policy rule matches, should it run, ask, or be forbidden? RULE · code
Answered how

Code: if D4 flags it dangerous (or Windows has managed filesystem limits but no sandbox backend) it prompts, or is forbidden under Never; otherwise Never allows (relying on the sandbox), UnlessTrusted prompts, and OnRequest/Granular allow unless the call asks for a sandbox override, in which case they prompt; an unrestricted or external sandbox allows.

Held by

codex-rs/core/src/exec_policy.rs:807

D4 Is this command dangerous enough that it must not run without a person's say-so? RULING · code
Answered how

Code: on POSIX only rm with a force flag matches, looked through sudo, env and trap wrappers and through literal commands inside a bash -lc script, up to 8 wrapper levels (deeper nesting is itself treated as dangerous); Windows adds its own word lists for cmd and PowerShell.

Held by

codex-rs/shell-command/src/command_safety/is_dangerous_command.rs:43

D5 Which reusable "don't ask again for commands that start with X" rule should be offered to the person with this prompt? RULING · code
Answered how

Code: the model's own prefix_rule suggestion is used if it is non-empty, not on a banned list, no policy rule already matched, and adding it as an allow rule would approve every parsed segment of the command; otherwise the first heuristic Prompt (or, for the sandbox-retry case, Allow) segment is proposed.

Held by

codex-rs/core/src/exec_policy.rs:1007

D6 Does the first attempt of this command run outside the sandbox, inside it, or inside it with approved extra write roots? RULE · code
Answered how

Code: if the filesystem policy has denied-read paths, only an approved explicit escalation widens it, and then still inside a sandbox (EscalatedSandboxWithRestrictions); otherwise an exec-policy Allow with bypass_sandbox or a request for escalated permissions bypasses the sandbox on the first attempt; else no override.

Held by

codex-rs/core/src/tools/sandboxing.rs:253

D7 Which platform sandbox, if any, wraps the command (Seatbelt, Linux seccomp/bwrap, Windows restricted token or MXC, or none)? RULE · code
Answered how

Code: if the profile needs sandboxing (or the tool requires it) the host's platform sandbox is chosen; on Windows with the sandbox disabled there is none, and the call then runs as SandboxType::None even though the policy asked for one.

Held by

codex-rs/sandboxing/src/manager.rs:313

D8 Did this command fail because of the sandbox (and so is a candidate for a retry outside it)? RULING · code
Answered how

Code: with no sandbox or exit 0 the answer is no; otherwise ANY non-zero exit whose stdout, stderr or aggregated output contains one of seven keywords ("operation not permitted", "permission denied", "read-only file system", "seccomp", "sandbox", "landlock", "failed to write file") is a denial; only after that check are exit codes 2/126/127 quick-rejected, and Linux seccomp's SIGSYS exit (128+SIGSYS) is a denial.

Held by

codex-rs/sandboxing/src/denial.rs:13

D9 May a command the sandbox (probably) blocked be run again outside the sandbox? RULE · code
Answered how

Code: no if the denial carried a network-policy decision that cannot be turned into a network approval, if the tool does not escalate on failure, if the approval policy does not want no-sandbox approvals (Never, OnRequest; OnRequest is let through only for a network denial that would itself need approval), or if denied-read restrictions forbid unsandboxed execution and the denial was not a network one; otherwise yes, with or without a fresh approval (D10).

Held by

codex-rs/core/src/tools/orchestrator.rs:449

D10 Does running the command again outside the sandbox need a fresh approval, or does the first approval carry over? RULING · code
Answered how

Code: the retry skips approval when the first approval was not a human-required checkpoint (NeedsHumanApproval), strict auto-review is off, the denial was not a network one, and the tool's should_bypass_approval says so, which is true whenever the first attempt was approved by the person or a PermissionRequest hook (or the policy is Never); an approval given by the automatic reviewer does not carry over; otherwise it asks again with the retry reason (D32 when a person answers).

Held by

codex-rs/core/src/tools/orchestrator.rs:498

D11 Who answers this approval request: a configured PermissionRequest hook, the automatic reviewer, or the person? RULE · code
Answered how

Code: depending on the request, a configured PermissionRequest hook, the automatic reviewer (D15) or the person answers it, and some requests are rejected before any of them is asked (codex-rs/core/src/tools/approvals.rs:520-699).

Held by

codex-rs/core/src/tools/approvals.rs:596

D12 Does a configured PermissionRequest hook allow or deny this action, or abstain? RULING · external
Answered how

External: each trusted (D14) matching hook command receives the action as JSON on stdin and may answer by JSON decision or by exit 2 with a stderr reason (a deny); any Deny among the matching hooks wins, otherwise any Allow allows, except that an Allow from an environment-sourced hook is ignored (codex-rs/hooks/src/events/permission_request.rs:232-238); no decision falls through to D15 or the person (codex-rs/hooks/src/events/permission_request.rs:134-173), and for a human-required checkpoint an Allow also goes on to the person (D11).

Held by

codex-rs/core/src/hook_runtime.rs:274

D13 Does a configured PreToolUse hook block this tool call, or rewrite its input before it runs? RULING · external
Answered how

External: trusted (D14) matching hook commands run before the handler; a hook blocks by exit code 2 with a reason on stderr, or by JSON decision: block with a reason; it may instead return an updated input, and the latest-finishing rewrite wins.

Held by

codex-rs/core/src/hook_runtime.rs:196

D14 May this configured hook run at all (is it enabled and trusted, or modified since it was trusted)? RULE · code
Answered how

Code: built-in and managed hooks are trusted; any other hook runs only if its stored trusted hash equals the hash of its current normalized config (else Modified or Untrusted, and it is listed but not run), unless bypass_hook_trust is set; for a plugin hook with a content fingerprint the compared hash also covers the plugin's contents (codex-rs/hooks/src/engine/discovery.rs:836-841, :863-879), and a plugin hook with no fingerprint but a stored trusted hash is admitted with its trust record attached for a later check this card did not read (codex-rs/hooks/src/engine/discovery.rs:844-862, :917-919); with the managed-only requirement, non-managed sources are skipped entirely.

Held by

codex-rs/hooks/src/engine/discovery.rs:1000

D15 Does this approval go to the automatic reviewer ("auto-review"/guardian) instead of the person, and must the reviewer run a fresh model review rather than reuse cached evidence? RULE · code
Answered how

Code: with full access the reviewer approves after only validating the action; otherwise registered approval contributors (the guardian-v2 extension, D16) answer first; with no contributor answer the review runs when guardian is required or when the policy is OnRequest/Granular with reviewer AutoReview, else the request goes to the person; a fresh review is forced by synchronous mode, a mandatory-review model without async scoring, cancellation, a retry, or an escalated exec.

Held by

codex-rs/ext/guardian-reviewer/src/routing.rs:127

D16 Is a recent background ("async") risk score for this thread low enough, current enough and authorized under the same conditions, to approve this action without a fresh model review? RULING · code
Answered how

Code (guardian-v2 contributor): with full access it allows; if the reviewer is the person or the policy is not on-request/granular it hands back; per the model policy's review mode, in Adaptive mode, when the host passed a serving assessment for the action it allows if that assessment needs no review and otherwise asks for a synchronous review (codex-rs/ext/guardian-v2/src/async_scorer/approval.rs:111-115); without one it reuses the newest score when the action fits the size budget, compaction is compatible, authorization evidence is unchanged, the score is within max_tool_call_lag tool calls, no unscored failure intervened, and action_risk < review_threshold; the first node-REPL computer-use js call is approved without a score when the policy allows it; anything else asks for a synchronous review (D18), which a newly published low score can still release early (not on the serving-assessment path, codex-rs/ext/guardian-v2/src/async_scorer/approval.rs:181-185).

Held by

codex-rs/ext/guardian-v2/src/async_scorer/approval.rs:318

D17 Given the conversation so far and the planned tool call, is this action high risk or low risk? (background guardian-v2 classifier, run per tool call before approval is needed) RULING · llm
Answered how

LLM: a "Luna" sampler call returns its first output token, which must be exactly high or low; that becomes action_risk 1.0 or 0.0, published only if authorization and history generation are still current.

Held by

codex-rs/ext/guardian-v2/src/async_scorer/classification.rs:364

D18 Is this specific action (command, patch, MCP call, network host, stdin, or permission request) acceptably safe to run, given the conversation and what the user actually authorized? RULING · llm
Answered how

LLM: a separate reviewer session (model codex-auto-review by default, low reasoning effort when supported, else the parent model) receives the policy as base instructions and the transcript plus the exact action JSON, may make read-only tool checks, and must end with JSON whose outcome is allow or deny; up to 3 attempts within an overall deadline that defaults to 90 s when auto_review.timeout_ms is omitted (codex-rs/ext/guardian-reviewer/src/lib.rs:85-87).

Held by

codex-rs/ext/guardian-reviewer/src/review.rs:141

D19 Has the automatic reviewer denied so many requests in this turn that the turn should be interrupted? RULE · code
Answered how

Code: per turn, 3 consecutive completed denials or 10 denials in the last 50 reviews (1 and 1 for a cyber-specialty model) interrupt the turn once with a TooManyDenials error. A review that runs and does not end in Deny, including a failed review, resets the consecutive count; a cached approval returns before any of this accounting (codex-rs/ext/guardian-reviewer/src/review.rs:218-246).

Held by

codex-rs/ext/guardian-reviewer/src/circuit_breaker.rs:53

D20 Was an equivalent command (or every file of this patch) already approved "for this session", so no one is asked again? RULE · code
Answered how

Code: an in-memory map keyed by the serialized approval key: for commands the environment, executable, canonicalized command, cwd, tty, sandbox permissions, additional permissions and the exec-policy fingerprint; for patches each file path; if every key holds ApprovedForSession, skip; a new ApprovedForSession is stored per key.

Held by

codex-rs/core/src/tools/sandboxing.rs:72

D22 May a process under the managed network proxy connect to this host and port? RULE · code
Answered how

Code: an unparseable host is blocked; an explicit deny entry always wins; unless local binding is allowed, loopback and non-public IP literals are blocked unless explicitly allowlisted, and allowlisted hostnames that resolve to non-public IPs are blocked (a failed or timed-out DNS lookup counts as non-public); otherwise the host must match the allowlist without matching a managed review selector, or (D23) be approved (codex-rs/network-proxy/src/runtime.rs:892-894).

Held by

codex-rs/network-proxy/src/runtime.rs:848

D23 When a sandboxed command reaches a host that is not on the allowlist, may that be put to a reviewer (hook, auto-reviewer or person), and is the answer remembered for the session or written to policy? RULE · code
Answered how

Code: session-denied hosts are denied and session-approved hosts allowed at once; with no active turn, an unattributable request, a non-Managed permission profile, or approval policy Never the request is denied; otherwise one pending approval per host/turn/execution is raised through D11, and the answer becomes allow-once, allow-for-session, or a persisted allow/deny network rule.

Held by

codex-rs/core/src/tools/network_approval.rs:717

D24 When the model calls request_permissions for extra filesystem or network access, may it be granted, for this turn or the session, and who decides? RULE · code
Answered how

Code: under Never, or Granular without request-permissions allowed, it returns an empty grant at once; otherwise it goes straight to the automatic reviewer (D15/D18) and, if no reviewer claims it, to the person (D30); an approval grants the requested profile for the turn (or the session for ApprovedForSession), normalized against the environment.

Held by

codex-rs/core/src/session/mod.rs:3287

D25 Is the project (directory, project root, or the main repository of a linked worktree) trusted, so that its .codex config, hooks and exec-policy rules are loaded? RULE · code
Answered how

Code: looks up the trust map by the directory, then the discovered project root, then the git repository root (so a linked worktree inherits its main repository's trust); only Trusted loads; Untrusted or no entry disables the project layer with a reason telling the person how to trust it.

Held by

codex-rs/config/src/loader/mod.rs:1083

D27 Should this command run, run and be allowed for the rest of the session, run and add a "don't ask again" rule (D5), be skipped, or stop the turn? RULING · human
Answered how

Human: the person at the TUI approval overlay picks one of the options the core offered (available_decisions); "Yes, proceed" is the first option and uses the approve key.

Held by

codex-rs/tui/src/bottom_pane/approval_overlay.rs:859 (role: the person at the TUI approval overlay)

D28 Should this command be allowed to reach this network host just once, for this conversation, always (persisted allow rule), or never (persisted deny rule)? RULING · human
Answered how

Human: the same overlay, with network-specific labels ("Yes, just this once", "Yes, and allow this host for this conversation", "Yes, and allow this host in the future", "No, and block this host in the future").

Held by

codex-rs/tui/src/bottom_pane/approval_overlay.rs:869 (role: the person at the TUI approval overlay)

D29 Should these file changes be applied, and should later changes to the same files stop asking? RULING · human
Answered how

Human: the person picks "Yes, proceed", "Yes, and don't ask again for these files", or "No, and tell Codex what to do differently".

Held by

codex-rs/tui/src/bottom_pane/approval_overlay.rs:1042 (role: the person at the TUI approval overlay)

D30 Should the model's requested extra permissions (named paths read/write/deny, network) be granted for this turn, for this turn with strict auto-review, for the session, or denied? RULING · human
Answered how

Human: the person at the permissions overlay picks a grant scope or denies.

Held by

codex-rs/tui/src/bottom_pane/approval_overlay.rs:1062 (role: the person at the TUI approval overlay)

D32 The command failed, possibly because of the sandbox: should it be run again with no sandbox? RULING · human
Answered how

Human: the person sees the ordinary command overlay (D27's options) with the fixed reason "command failed; retry without sandbox?" and decides; reached only when D9 allows a retry and D10 requires a fresh approval. Like every approval it goes through request_approval, where a PermissionRequest hook (D12) deny always wins; otherwise a hook allow, or, when strict auto-review or the automatic reviewer is configured, the reviewer (D15), answers instead of the person, except that for a human-required checkpoint (NeedsHumanApproval) a hook allow is not enough and the reviewer is skipped (codex-rs/core/src/tools/approvals.rs:594-621, :681-699); the person decides only when neither answers.

Held by

codex-rs/core/src/tools/orchestrator.rs:536 (role: the person at the TUI approval overlay; reason text set here, built at codex-rs/core/src/tools/orchestrator.rs:661-665)

D35 When the model writes input to a running process, does that write need an approval first? RULE · code
Answered how

Code: no approval when the input is empty, a Ctrl-C to a non-TTY process, or the WriteStdinApproval feature is off. Otherwise approval is needed whenever the terminal runs with more than the baseline permissions (it was launched escalated, holds a filesystem escalation, its policy differs from the current one, or it carries additional permissions), or strict auto-review is on. Only on that path is input containing a NUL byte refused (codex-rs/core/src/unified_exec/stdin_approval.rs:125-148, :197-236).

Held by

codex-rs/core/src/unified_exec/stdin_approval.rs:191

D36 A skill the person selected needs MCP servers that are not installed: install and enable them in the global config now, or skip? RULING · human
Answered how

Human: the person answers a blocking "Install MCP servers?" question with Install or Skip; Skip also stops the question for those servers this session. Code skips the question when the permission prompt is auto-approved (then installs) or the approval policy is Never (then does not).

Held by

codex-rs/core/src/mcp_skill_dependencies.rs:266 (role: the person answering the request_user_input question)

E. Execution and observation (23 seats)

E1 For an exec_command call, which shell executable is used (the session's, or one the model names), login or not, and how is the command string turned into argv? RULE · code
Answered how

Code: the model may name any shell path (shell argument), otherwise the environment's reported shell (or the session shell) is used; a login shell is used unless config disables it; derive_exec_args builds the argv. In a remote environment the requested shell must match the environment's shell type.

Held by

codex-rs/core/src/tools/handlers/unified_exec.rs:151

E2 After exec_command starts a process, how long does the tool wait for output before answering, and does a still-running process keep running in the background? RULE · code
Answered how

Code: the model's yield_time_ms (default 10 s) is clamped to 250 ms .. 30 s (with a 10 s floor on Windows); at the deadline the tool returns the output so far plus a session ID and the process keeps running, reachable through write_stdin; the one-shot variant instead kills the process at timeout_ms (default 10 s).

Held by

codex-rs/core/src/unified_exec/mod.rs:206

E3 When a command's output exceeds the collection cap, which part of it survives to be shown to the model? RULING · code
Answered how

Code: a head-and-tail buffer keeps the first 512 KiB and the last 512 KiB of a 1 MiB cap and counts the bytes dropped from the middle; the count is shown as an omission marker.

Held by

codex-rs/utils/head-tail-buffer/src/lib.rs:41

E4 Of the captured output, how much goes into the tool result the model reads, and how is the cut marked? RULING · code
Answered how

Code: the budget is the smaller of the model's max_output_tokens (default 10,000) and the model catalog's truncation policy; text over budget is cut from the middle with a "Warning: truncated output (original token count: N)" header, then trimmed again so header plus body fit the serialisation budget.

Held by

codex-rs/core/src/tools/context.rs:527

E5 When the 64-process cap is reached and the model starts another command, which existing process is terminated to make room? RULING · code
Answered how

Code: the eight most recently used are protected; of the rest, the least recently used process that has already exited goes first, else the least recently used live one; it is terminated without telling the model.

Held by

codex-rs/core/src/unified_exec/process_manager.rs:1775

E6 When the model calls write_stdin with a session ID, which process receives the characters, how long does the tool wait for new output, and what is returned? RULE · code
Answered how

Code: the process manager looks up the session ID, writes the characters (an empty write is a poll), waits up to the clamped yield time (empty polls at least 5 s, at most the background cap), and returns new output shaped as in E4.

Held by

codex-rs/core/src/unified_exec/process_manager.rs:892

E7 Once a patch is verified and allowed, how are its hunks written, and what state is left (and reported) when a later hunk fails or the sandbox denies a write? RULE · code
Answered how

Code: the runtime re-parses the patch text and applies hunks one file at a time; on failure it returns exit code 1 with stderr, and the files already written stay written (the delta of committed changes is kept for the turn diff). A sandbox denial on an on-request-style policy can be retried without the sandbox after approval, which runs the whole patch again.

Held by

codex-rs/core/src/tools/runtimes/apply_patch.rs:183

E9 When an MCP server returns a result, which of its parts (text and image content, structuredContent, error flag) reach the model, and how much of it? RULING · code
Answered how

Code: if any content block carries Codex encrypted content (_meta key codex/encryptedContent), the content blocks are passed through and structuredContent is ignored (codex-rs/protocol/src/models.rs:2485-2494, key at :2529); otherwise, if structuredContent is present and not null, the model sees ONLY its JSON serialisation and every content block (text, images) is dropped (:2496-2513); otherwise the content blocks are converted item by item (:2515-2518). A "Wall time ... Output:" header is prepended and the whole payload is truncated to the model's token budget.

Held by

codex-rs/protocol/src/models.rs:2496

E10 When history is turned into the next prompt, which tool calls lack an output (interrupted, crashed, inherited from a fork), what is put in their place, and which outputs lacking a call are dropped? RULE · code
Answered how

Code: normalize_history inserts a synthetic output after any call with none ("aborted" for function, custom and local-shell calls; an empty "completed" result for tool_search), and removes unmatched function and custom outputs and client-executed tool-search outputs that carry a call id; call-less outputs and server-executed tool-search outputs are kept. Both run on every for_prompt.

Held by

codex-rs/core/src/context_manager/normalize.rs:21

E11 When a handler fails, a user rejects the action, or the turn is cancelled while a tool runs, what text comes back to the model as that call's result? RULE · code
Answered how

Code: a handler error becomes a failed output carrying the error text (success: false); a cancelled call that had not finished is aborted and answered "aborted by user after N s" (for exec_command: "Wall time: N seconds / aborted by user"), with any output produced so far discarded; a deferred call cancelled before it was dispatched is answered "aborted before dispatch"; a failed or cancelled tool_search is answered as "completed" with zero tools, with no error text.

Held by

codex-rs/core/src/tools/parallel.rs:454

E12 When a tool result or message carries an image or audio and the model lacks that input modality, or the image is too large or in an unsupported detail level, what is sent instead? RULE · code
Answered how

Code: three places substitute text: history normalisation replaces images and audio with an "unsupported media" fragment; MCP results replace image and audio blocks with "<image content omitted because you do not support image input>" and the audio equivalent; image preparation resizes images at record time and can add an image-resize notice, or a placeholder when an image cannot be processed.

Held by

codex-rs/core/src/context_manager/normalize.rs:346

E13 When the model calls a tool that the embedding application registered for this thread, what result comes back? RULING · external
Answered how

External: Codex emits a DynamicToolCall item to the client and waits for the client's response (content items plus a success flag), which becomes the tool result.

Held by

codex-rs/core/src/tools/handlers/dynamic.rs:239

E14 When the model stream fails (disconnect, 5xx, rate limit, timeout, overload), is the request retried, after what delay, how many times, and does Codex switch from WebSockets to HTTPS? RULING · code
Answered how

Code: the error's kind decides if it is retryable at all (retry_delay); retryable errors wait for server advice or exponential backoff and retry up to the provider's stream_max_retries (default 5, cap 100); when the budget is spent, a WebSocket session falls back to HTTPS (after waiting out any server retry deadline) and the count restarts; with UnboundedConnectionRetries, connection failures on sampling requests retry forever with 5 s .. 60 s backoff, except for internal sessions and Amazon Bedrock providers, which keep the bounded budget (codex-rs/core/src/responses_retry.rs:58-177).

Held by

codex-rs/core/src/responses_retry.rs:58

E15 When the response is blocked by the provider's content filter, does Codex retry, and what guidance does the model get before the retry? RULING · code
Answered how

Code: for sampling requests, a guidance message is recorded into history ("Your previous response was blocked by a content filter. Do not treat this as a transient failure ... Briefly explain the limitation and offer a permitted alternative") and then the normal retry seat (E14) retries, since ContentFilter is classed retryable.

Held by

codex-rs/core/src/responses_retry.rs:69

E16 When the model calls request_user_input with one or more questions (with or without options), what does the person choose or type, and does the turn wait for it? RULING · human
Answered how

The person, in the TUI's question overlay (or an app-server client), picks options or types answers and submits; sub-agents may not ask; codex exec refuses the request because no person is present. The core waits for the answer in every mode (codex-rs/core/src/tools/handlers/request_user_input.rs:87-94). Outside Plan mode the request is marked non-blocking (:83), and the TUI then answers for a silent person: after a 60 s hidden grace and a 60 s visible countdown with no key press or paste, it submits an empty answer set (codex-rs/tui/src/bottom_pane/request_user_input/mod.rs:73-74, :270-312, :917-939); any key or paste stops the countdown (:264-268, :1208, :1488). In Plan mode there is no countdown.

Held by

codex-rs/tui/src/bottom_pane/request_user_input/mod.rs:862

E17 When the person runs a shell command directly (the !//shell path, not a model tool call), is its output recorded into the conversation the model will read, and how is it cut? RULE · code
Answered how

Code: yes. The command runs unsandboxed with a one-hour default timeout and no managed proxy; its exit code, duration and output (truncated to the model's policy) are recorded as a user-shell-command fragment, either as its own turn or injected into the active turn.

Held by

codex-rs/core/src/tasks/user_shell.rs:440

E18 When the model searches for tools it cannot yet see, which registered deferred tools are returned, in what order, and how many? RULING · code
Answered how

Code: a BM25 lexical index over each deferred tool's search text ranks matches for the query; the top limit (model-chosen, default TOOL_SEARCH_DEFAULT_LIMIT) are returned as loadable specs; in Code Mode, results are filtered to tools the current step allows.

Held by

codex-rs/core/src/tools/handlers/tool_search.rs:342

E19 When the model runs the web.run tool, what results come back? RULING · external
Answered how

External: Codex sends the model's search commands, the model name and the recent conversation input to the provider's search endpoint (SearchClient) and returns its output, capped by the model's truncation budget.

Held by

codex-rs/ext/web-search/src/tool.rs:151

E20 When the response reports (via the OpenAI-Model header) a different model from the one requested, what does Codex conclude and tell the person? RULING · code
Answered how

Code: any case-insensitive mismatch is reported once per turn as a model reroute with reason HighRiskCyberActivity, plus a fixed warning that the account "was flagged for potentially high-risk cyber activity and this request was routed to gpt-5.2 ... To regain access to gpt-5.3-codex", whatever models were actually involved.

Held by

codex-rs/core/src/session/turn.rs:3269

E21 When a Code Mode exec cell finishes or yields, how is its combined output cut before it returns to the model? RULING · code
Answered how

Code: the cell's output items are truncated to the script's max_output_tokens (default 10,000) with the text-only or mixed-content truncator; nested tool results inside the script are passed raw to the script (code_mode_result), not truncated.

Held by

codex-rs/core/src/tools/code_mode/mod.rs:328

E22 At the end of each sampling step, which file changes are summarised to the person as the turn's unified diff? RULE · code
Answered how

Code: only changes made through the patch path (the apply_patch tool, or a shell command intercepted as a patch, C5) are tracked; edits a shell command makes directly (sed, scripts, the apply_patch executable reached through the shell) are not in the diff.

Held by

codex-rs/core/src/turn_diff_tracker.rs:92

E23 When the model asks the image tool to generate or edit an image, what image comes back? RULING · model
Answered how

Model: the configured Images client generates (or edits) the image from the request; the bytes are saved as an artifact and returned to the model as an image in the tool output, for its follow-up.

Held by

codex-rs/ext/image-generation/src/tool.rs:154 (handle_call: generate :188, edit :193)

F. Limits and memory (14 seats)

F1 Has the conversation grown enough that it must be compacted now? RULING · code
Answered how

Code compares the active context tokens (or, in BodyAfterPrefix scope, the tokens added after the window's prefill) against the auto-compact limit plus an optional fallback buffer, and against the model's full usable window; either crossing sets token_limit_reached.

Held by

codex-rs/core/src/session/context_window.rs:108

F2 Should the turn compact BEFORE sampling, with the PREVIOUS model, because the model changed? RULING · code
Answered how

Code compacts pre-turn with the previous turn's model when both turns declare compaction-compatibility hashes and they differ, or when switching to a model with a smaller context window while the current usage already exceeds the new model's limit.

Held by

codex-rs/core/src/session/turn.rs:1511

F3 What does the compaction summary say (local, summarizing compaction)? RULING · llm
Answered how

A language model is sent the whole history plus a synthesized user message carrying the compaction prompt, and its last assistant message becomes the summary that replaces the history.

Held by

codex-rs/core/src/compact.rs:125

F4 Which of the user's own messages survive a local compaction, and how much of each? RULING · code
Answered how

Code walks the user messages newest first, keeping each whole while a 20,000-token budget lasts, truncates the one that crosses it, and drops everything older; summaries from earlier compactions are excluded. A message that carries an image or audio keeps only its text parts even when it fits the budget, so media in the user's own messages is dropped at compaction (codex-rs/core/src/compact.rs:63, :714-803).

Held by

codex-rs/core/src/compact.rs:63

F5 When the compaction request itself overflows the context window, what is thrown away? RULING · code
Answered how

Code removes the single oldest history item and retries, repeatedly, until the request fits or one item is left; at one item it marks the token count full and raises.

Held by

codex-rs/core/src/compact.rs:368

F6 What does a REMOTE (server-side, v2) compaction keep? RULING · external
Answered how

The OpenAI Responses backend returns exactly one opaque Compaction item that stands for the dropped history; client code then decides which visible items are kept alongside it (user messages, hook prompts, small non-final agent messages, optionally client tool outputs and client developer messages) within a 64,000-token newest-first budget.

Held by

codex-rs/core/src/compact_remote_v2.rs:464

F7 Should a speculative background compaction start now, and may its result be used? RULING · code
Answered how

Code starts a background remote compaction once usage passes async_compaction_threshold_percent of the full window (and before the hard limit), at most once per history version/model/hash/auth generation, and later adopts the candidate only if the history version it was built from is still current.

Held by

codex-rs/core/src/session/async_compaction.rs:172

F8 Should the finished turn compact before the next user message (turn-end compaction)? RULING · code
Answered how

Code compacts after a turn with no follow-up only when auto-summarization is enabled and model_post_turn_compact_threshold_percent is above 0; then, provided no input is pending and the turn was not cancelled, it compacts when usage is at or above that percent of the usable window (or the hard limit is reached), or when a ready background candidate exists. A threshold of 0 turns off turn-end compaction entirely, including adoption of a ready candidate (codex-rs/core/src/session/turn.rs:810-856; codex-rs/core/src/session/context_window.rs:111-117).

Held by

codex-rs/core/src/session/context_window.rs:112

F9 In token-budget mode, when should the context window be reset, and what should be carried across it? RULING · llm
Answered how

The model decides: it is told its remaining tokens (a reminder once below a threshold, and get_context_remaining on demand) and may call new_context to request a fresh window; with the history-notes extension it can write and read notes through backend tools before and after the reset.

Held by

codex-rs/core/src/tools/handlers/new_context_window.rs:61

F10 When a token-budget window is full and the model has not reset it, what survives the forced reset? RULING · code
Answered how

Code installs a fresh window holding only the rebuilt initial context plus (when their features are on) retained client tool outputs and client developer messages, newest first within 64,000 tokens; every user and assistant message of the old window is dropped and nothing is summarized.

Held by

codex-rs/core/src/session/mod.rs:5136

F11 Has the whole agent tree spent its rollout token budget? RULE · code
Answered how

Code adds each response's weighted usage (server-provided codex_rollout_budget_units, or output tokens and non-cached input tokens times configured weights) to one counter shared by the root thread and every sub-agent, and once it reaches limit_tokens every later usage report raises SessionBudgetExceeded unless the config sets enforce_limit to false (default true); reminders are injected as thresholds are crossed.

Held by

codex-rs/core/src/rollout_budget.rs:67

F12 How much of each tool output is kept in the model's history? RULING · code
Answered how

Code truncates every function and custom-tool output to the model's truncation policy (tokens or bytes, plus a serialization allowance) or to a per-item override when the tool supplied one, at the moment it is recorded in live history; the rollout keeps the full payload.

Held by

codex-rs/core/src/context_manager/history.rs:600

F13 Has the active goal used up its token budget? RULE · code
Answered how

The state database adds each accounted token delta to the goal and, in the same UPDATE, flips an active goal to budget_limited once tokens used reach the goal's budget; the goal extension then injects a one-time budget-limit steering message into the running turn.

Held by

codex-rs/state/src/runtime/goals.rs:564

F14 Should the running turn stop now? (the person presses Esc / interrupt) RULING · human
Answered how

The person at the TUI (or an app-server client) sends Op::Interrupt; the session aborts the active task and its tools.

Held by

codex-rs/core/src/session/handlers.rs:514

G. Judging the result (7 seats)

G1 Is this turn finished? RULING · llm
Answered how

The model decides by what it emits: a sampling step whose output contains no tool call leaves needs_follow_up false, and unless user input is pending the loop runs the Stop hooks and ends the turn with that last assistant message.

Held by

codex-rs/core/src/session/turn.rs:636

G2 Do the user's Stop / SubagentStop hooks accept that the agent is done? RULING · external
Answered how

User-configured hook commands (external) are run with the last assistant message and a stop_hook_active flag; if any asks to stop, the turn ends; if any blocks with a continuation prompt, that prompt is recorded as a hook message and the turn continues.

Held by

codex-rs/core/src/hook_runtime.rs:449

G3 Does the code change under review have bugs, and is the patch correct? (/review) RULING · llm
Answered how

A one-shot sub-agent thread running the review model (review_model, else the session model) with the review rubric as its base instructions and the target-specific review request as its user message explores the repository and returns findings plus an overall correctness verdict.

Held by

codex-rs/core/src/tasks/review.rs:119

G4 Which findings did the reviewer report? (parsing the review reply) RULE · code
Answered how

Code tries strict JSON, then the substring from the first { to the last }, and otherwise wraps the whole reply as overall_explanation with zero findings and an empty correctness verdict.

Held by

codex-rs/core/src/tasks/review.rs:193

G5 Has the thread goal been achieved (or is it genuinely blocked)? RULING · llm
Answered how

The model decides by calling update_goal with complete or blocked; code accepts any of complete, blocked, paused from the model, charges final usage, and stops automatic continuation.

Held by

codex-rs/ext/goal/src/tool.rs:254

G6 Should the agent start another turn on its own to keep pursuing the goal? RULING · code
Answered how

When the thread goes idle and its goal is still active, code starts a new turn whose only input is the continuation steering message, unless continuation was deferred or the thread or tools are unavailable.

Held by

codex-rs/ext/goal/src/runtime.rs:476

G7 Has the goal loop stopped making progress, so the goal should be marked blocked without the model saying so? RULING · code
Answered how

Code marks an active goal blocked after three consecutive automatic goal turns with no activity (empty final or interrupted), after three consecutive turns whose executions failed with no successful tool, or on any turn error; usage limits mark it usage_limited.

Held by

codex-rs/ext/goal/src/accounting.rs:245

H. Delegation (14 seats)

H1 Should part of this work go to a sub-agent, of which role and model, with what instructions? (multi-agent V1) RULING · llm
Answered how

The model decides by calling spawn_agent (V1 namespace) with a message or items, an optional agent_type role, model, reasoning effort and fork_context; code validates the arguments and starts a child thread.

Held by

codex-rs/core/src/tools/handlers/multi_agents/spawn.rs:65

H2 Should part of this work go to a sub-agent, and how much parent history should it inherit? (multi-agent V2) RULING · llm
Answered how

The model calls spawn_agent (V2) with a required task_name and message plus optional role, model, reasoning effort and fork_turns (all or none); a missing or blank fork_turns means all, so the child inherits the full parent history unless the model asks for none (codex-rs/core/src/tools/handlers/multi_agents_v2/spawn.rs:221-233); code starts a child at a task path under the caller.

Held by

codex-rs/core/src/tools/handlers/multi_agents_v2/spawn.rs:115

H3 Is this sub-agent nested too deep to spawn (or resume)? RULE · code
Answered how

For V1 only, code computes the child's depth from the caller's session source and refuses when it exceeds agent_max_depth, telling the model "Agent depth limit reached. Solve the task yourself."; V1 also hides the spawn tool at that depth.

Held by

codex-rs/core/src/agent/registry.rs:94

H4 Are there already too many sub-agents to start another? RULE · code
Answered how

Code reserves a spawn slot against a cap: V1 counts spawned threads against agent_max_threads (default DEFAULT_AGENT_MAX_THREADS); V2 counts resident threads against max_concurrent_threads_per_session - 1 and, when full, first tries to unload an idle resident (H5) before refusing with AgentLimitReached.

Held by

codex-rs/core/src/agent/registry.rs:103

H5 Which idle sub-agent is unloaded to make room for a new one? (V2) RULING · code
Answered how

Code walks residents oldest-touched first, skips the protected thread and unstarted (PendingInit) agents, and evicts the first one that is not busy; an evicted agent's mail is transferred and it can be reloaded later.

Held by

codex-rs/core/src/agent/control/residency.rs:239

H6 What does a sub-agent inherit: model, instructions, permissions, working directory, history? RULING · code
Answered how

Code builds the child config from the parent's live turn (model, reasoning, base and developer instructions, token budget preference), layers the requested role and model overrides, and then re-applies the parent turn's approval policy, approvals reviewer, cwd and permission profile last, so a role cannot widen them.

Held by

codex-rs/core/src/agent/child_config.rs:180

H7 Should this agent send a message to another agent now, without starting its turn? (V2 send_message) RULING · llm
Answered how

The model calls send_message with a target task path and message; code resolves the target in the caller's tree and queues the message on the recipient's mailbox.

Held by

codex-rs/core/src/tools/handlers/multi_agents_v2/send_message.rs:40

H8 Should this agent hand another agent a follow-up task and wake it? (V2 followup_task) RULING · llm
Answered how

The model calls followup_task with a non-root target and message; code delivers it and triggers a turn if the target is idle.

Held by

codex-rs/core/src/tools/handlers/multi_agents_v2/followup_task.rs:40

H9 Should this agent redirect another agent's work, interrupting it or queueing? (V1 send_input) RULING · llm
Answered how

The model calls send_input with an agent id, a message or items, and an interrupt flag; code loads the target if needed, interrupts it first when asked, and delivers the input.

Held by

codex-rs/core/src/tools/handlers/multi_agents/send_input.rs:48

H10 Should this agent interrupt another agent's current turn? (V2 interrupt_agent) RULING · llm
Answered how

The model calls interrupt_agent (V2); code refuses the root and the caller itself, interrupts the target's current turn (the agent stays available), and returns its previous status.

Held by

codex-rs/core/src/tools/handlers/multi_agents_v2/interrupt_agent.rs:45

H11 How long should the parent wait for its sub-agents before doing something else? RULING · code
Answered how

The model picks timeout_ms when calling wait_agent. V1: code rejects zero or negative values and clamps the rest between fixed constants (codex-rs/core/src/tools/handlers/multi_agents/wait.rs:95-103). V2: code reads configurable minimum, maximum and default, REJECTS a value above the maximum, raises a smaller one to the minimum, and uses the default when none is given (codex-rs/core/src/tools/handlers/multi_agents_v2/wait.rs:54-66).

Held by

codex-rs/core/src/tools/handlers/multi_agents/wait.rs:102

H12 What does a finished sub-agent hand back to its parent? RULING · code
Answered how

Code turns the child's terminal status into one inter-agent message: the child's last assistant message verbatim on completion (an empty message when it had none), an error truncated to 900 tokens with a fixed next-action line on error, "Agent shut down." / "Agent was not found.", and nothing at all for an interrupted child. A child stopped after repeated Guardian denials gets a separate message whose fixed line tells the parent to tell the user and not resume or retry until the user confirms (codex-rs/core/src/session_prefix.rs:9-55).

Held by

codex-rs/core/src/session_prefix.rs:26

H13 Is a message-board notice small enough, and from a valid member, to be delivered into an agent's turn? RULING · code
Answered how

Code checks that the actor belongs to this board and owns its tree path, and drops a remote board notice whose content plus paths exceed 1,024 bytes (the post stays readable through the board tools).

Held by

codex-rs/core/src/agent_message_board.rs:274

H14 Should this agent close another agent, and every open descendant of it? (V1 close_agent) RULING · llm
Answered how

The model calls close_agent (V1) with any agent id; code shuts down that thread and every live descendant and returns the target's previous status. No root, self or ancestry check.

Held by

codex-rs/core/src/tools/handlers/multi_agents/close_agent.rs:42

I. Learning and feedback (11 seats)

I1 Should the background memory pipeline run at this session start at all? RULING · code
Answered how

Code starts it only for a non-ephemeral root session with Feature::MemoryTool on and a state DB, and then runs phases 1 and 2 only if the Codex rate-limit windows still have at least min_rate_limit_remaining_percent headroom.

Held by

codex-rs/memories/write/src/start.rs:80

I2 Which past threads are eligible to be learned from? RULING · code
Answered how

The state DB claims, per startup, a bounded set of threads whose memory_mode is enabled, from allowed sources, inside the age window, idle at least min_rollout_idle_hours, not the current thread, and not already claimed by another worker.

Held by

codex-rs/state/src/runtime/memories.rs:244

I3 Has this thread seen external content, so it must not feed memories? RULING · code
Answered how

When memories.disable_on_external_context is on, code marks the thread polluted (and queues forgetting) when a response item is a web search, tool search or a call-less function output, when a tool output declares external context, or when an MCP server is flagged as polluting.

Held by

codex-rs/core/src/stream_events_utils.rs:157

I4 What should be remembered from a past thread? (memory phase 1, extraction) RULING · llm
Answered how

A language model reads the thread's filtered, secret-redacted rollout and returns a structured memory (raw_memory, rollout_summary, optional rollout_slug); an empty memory or summary is stored as "no output".

Held by

codex-rs/memories/write/src/phase1.rs:311

I5 Which extracted memories are worth consolidating? (phase 2 selection) RULING · code
Answered how

Code keeps non-empty memories used (or created) within max_unused_days, ranks them by usage count, then recency, and passes the top max_raw_memories_for_consolidation to phase 2; anything not selected is deleted from the workspace by the sync.

Held by

codex-rs/state/src/runtime/memories.rs:484

I6 How should the memory store be rewritten from the new inputs? (phase 2, consolidation agent) RULING · llm
Answered how

An internal sub-agent (consolidation model) is pointed at the memories root and a git-style workspace diff, and edits MEMORY.md, memory_summary.md, skills/ and related files itself, with approvals Never, collab off, no MCP servers, and (under a managed profile) write access to the memories root only, no network.

Held by

codex-rs/memories/write/src/phase2.rs:177

I7 Did the model actually use a memory? (citation → usage count) RULING · llm
Answered how

The model decides by emitting a memory citation block in its answer; code parses <citation_entries> / <rollout_ids> blocks and increments usage_count for each cited thread, which then ranks memories in I5.

Held by

codex-rs/core/src/stream_events_utils.rs:204

I8 Is the consolidated memory well-formed enough to become the new baseline? RULE · code
Answered how

Code removes any symlinks (and fails if there were any), requires MEMORY.md to be a file (V1), requires memory_summary.md to start with v1, and for V2 requires four section headers and under 10,000 bytes; only then is the git baseline reset and the job marked successful.

Held by

codex-rs/memories/write/src/workspace.rs:76

I9 Should what the user just said be written down as a memory note? (ad-hoc note tool) RULING · llm
Answered how

The model decides to call add_ad_hoc_note with a timestamped filename and verbatim Markdown; the backend appends it to the ad-hoc notes, which phase 2 later consolidates.

Held by

codex-rs/ext/memories/src/tools/ad_hoc_note.rs:77

I10 How was this? (the person's /feedback rating; the picker's own title) RULING · human
Answered how

The person picks bug, bad result, good result, safety check or other in the TUI feedback picker; the category goes to OpenAI with the report.

Held by

codex-rs/tui/src/bottom_pane/feedback_view.rs:148

I11 May the session's logs and transcript go with the feedback? RULING · human
Answered how

The person answers "Upload logs?" after seeing the list of files that would be sent (the header starts with codex-logs.log, client-logs.txt (if available) and the doctor report, codex-rs/tui/src/bottom_pane/feedback_view.rs:251-259; the function also takes the rollout path and an optional sandbox log, :222-224); yes and no both continue to a note.

Held by

codex-rs/tui/src/bottom_pane/feedback_view.rs:219

How this map was made

Four readers each took a part of the agent and wrote seat cards from the source at an earlier commit. The map's author re-read every seat against the cited lines and corrected what the source did not support. For this edition the cards were carried to the commit named above: citations whose lines moved were renumbered, and every shown card citing code that changed was re-read at that commit. Reviews by a model from another family (read-only, at the commit named above) checked the answers against the code, and each of their findings was checked against the code before anything changed. Nothing on this page was produced by running their code.