Standards metadata
- ID:
router - Role:
router - Level:
MUST - Applies when: A task must select guidance from this standards library.
- Does not apply when: The project has not adopted this standards library.
- Requires:
core - Specializes:
none - Verification: Routing fixtures resolve expected modules, exclusions, and dependencies.
- Canonical owner:
STANDARDS-ROUTER.md
Use this file after CORE-STANDARDS.md. Select guidance from observable task conditions and retrieve the applicable required closure.
Start with the shared decision, then follow only its affected details:
- Design: Architecture covers responsibility and state ownership; Contracts covers invariants, representations, and consumer promises; Security covers trust and permission. Follow their conditional detail links when needed.
- Develop: Implementation owns the change; Verification owns its evidence; Documentation records durable knowledge. Specialized test techniques are selected separately from an ordinary regression check.
- Operate and distribute: Build owns artifact production, Release owns distribution promises, and Resilience owns failure and recovery.
Application, boundary, language, and framework profiles refine these concepts.
Requires loads an unconditional prerequisite. Specializes names the broader
concept refined by a page; it does not mean that the parent loads every child.
The tables below and each page's conditional links support further discovery.
A reading plan orders required prerequisites. Retrieve refinements when their
stated conditions match the task.
- State the requested outcome and affected artifact.
- Select workflow modules for the activities being performed.
- Select application, boundary, and language profiles from actual repository facts.
- Select topics only when the concern is affected.
- Follow each selected module's
Requiresmetadata. - Confirm common exclusions.
- If a required fact is unknown, report unresolved routing instead of selecting a convenient default.
| Condition | Select |
|---|---|
| Change code or standards | Implementation |
| Prove a behavior, contract, or artifact | Verification |
| Investigation or evidence work may delay a sufficient implementation | Development Proportionality |
| Coordinate material sequencing, migration, rollout, risk, or acceptance complexity | Planning |
| Create commits or manage history, branches, or worktrees | Commit |
| Change durable responsibility, design, contract, or operational knowledge | Documentation |
| Change build inputs, outputs, invalidation, native integration, or environment use | Build |
| Select or configure development tools, CI, scheduling, or orchestration | Tooling |
| Ship an artifact or change a published promise | Release |
A bounded change with a clear objective and acceptance path needs no written plan solely because it crosses files or layers.
| Condition | Select |
|---|---|
| Multiple outstanding proposals can become stale before serial integration | Concurrent Plan Integration profile |
| Condition | Select |
|---|---|
| Develop a reusable library, package, crate, or SDK | Library |
| Change a web interface, rendering, interactions, or frontend state | Frontend application profile |
| Change a launcher command, lifecycle, delegation, or outcome | Launcher application profile |
| Condition | Select |
|---|---|
| Cross foreign memory, handles, callbacks, or FFI | Interop boundary profile |
| Expose host APIs, wrappers, or cross-language representations | Language Binding boundary profile |
| Generate a representation consumed as a program contract | Generated Contract boundary profile |
| Exchange structured messages across processes or independently changing components | IPC boundary profile |
| Read, write, publish, transact, or migrate durable state | Persistence boundary profile |
Select the Generated Contract profile when a schema or generator produces a representation consumed as program behavior, including models, validators, tool definitions, bindings, or executable configuration. A generated text or data file does not select the profile when no program consumer interprets it as a contract.
Select Language Binding separately only when an actual native/host or cross-language representation exists. Select IPC separately only when the representation crosses a process, message, plugin-host, or independently deployed boundary. Select Persistence separately only when a supported consumer observes the representation or state after the producing process or operation ends.
Route the observable task facts through the executable Router projection. Do not replace unresolved boundary, consumer, deployment, or persistence facts with a smaller static module list.
| Condition | Select |
|---|---|
| Change C# tasks, await, continuation scheduling, or thread affinity | C# Async profile |
| Change Rust source, Cargo metadata, or generated Rust artifacts | Rust profile |
| Change Rust public types, conversions, errors, visibility, traits, features, or Rustdoc | Rust API profile |
| Change Cargo dependencies, resolution, auditing, or build-cost measurement | Rust Dependency profile |
| Change Rust release toolchains, packages, publication, or evidence | Rust Release profile |
| Change Cargo formatting, lint, test, benchmark, coverage, or build-script adapters | Rust Tooling profile |
| Change Rust async APIs, backpressure, cancellation, or async resource lifetimes | Rust Async profile |
| Change Rust targets, target-dependent behavior, or support evidence | Rust Cross-Platform profile |
| Change TypeScript source, compiler settings, declarations, or visible contracts | TypeScript profile |
| Change promises, overlapping calls, cancellation, or stale-result handling | TypeScript Async profile |
| Rust unsafe operations, unsafe contracts, or unsafe implementations change | Rust Unsafe |
| Rust untrusted paths, sizing, queues, or listeners affect security | Rust Security |
| Rust crosses a foreign-memory, FFI, or callback boundary | Rust Interop |
| Rust supplies generated host APIs or cross-language representations | Rust Language Bindings |
| No language-specific mechanism changes | No language profile |
Language profiles specialize mechanisms only; shared policy remains in the applicable general owner.
| Condition | Select |
|---|---|
| Change Godot object, scene, signal, resource, threading, or lifetime mechanisms | Godot framework profile |
| No framework-specific mechanism changes | No framework profile |
Select a canonical topic only when its observable condition is present:
| Concern | Current owner |
|---|---|
| Accessibility outcome, user interaction semantics, modality, or conformance obligations | Accessibility |
| Diagnostic purpose, audience, causal identity, context, propagation, retention, disclosure projection, or reporting claim | Diagnostics |
| Runtime decoding, contract evolution, persistence compatibility, version overlap, or degraded outcomes | Contracts |
| Shared mutable state, overlapping work, async failure ownership, cancellation, or shutdown | Concurrency |
| Dependency or service failure, retry, degradation, startup resilience, or recovery semantics | Resilience |
| Filesystem path construction, identity, comparison, or supported-filesystem behavior | Cross-platform |
| Dependency requirement, ownership, selection, resolution, provisioning, update, or removal policy is required, including a decision to implement difficult standardized semantics instead of adopting an established implementation | Dependencies |
| Third-party material is selected, incorporated, adapted, generated from, redistributed, or published | Licensing |
| Performance budget, measurement, optimization, benchmark, resource use, or regression claim changes | Performance |
| Module, layer, service, data/state authority, dependency direction, or runtime composition changes | Architecture |
| Untrusted input, protected operations, sensitive data, credentials, transport security, or dependency trust changes | Security |
The presence of a topic document in the repository is not an applicability condition.
After selecting broad concerns, use these conditions to narrow the reading.
The executable fact routing.details accepts the canonical IDs below. Known
absence is an empty set; unknown conditions remain unresolved. Generated
contracts, IPC, persistence, cross-language bindings, and platform verification
also select their corresponding details from the existing boundary and task
facts. Select a detail page when its corresponding specialized decision is affected.
| Condition | Select |
|---|---|
| A change makes structural, abstraction, or terminology decisions | Code Design And Ownership |
| A handle promises immutable results or replay | topic.architecture.replay |
| A change affects schema dialects, generated contracts, or contract version invalidation | topic.contracts.schemas |
| A change projects domain outcomes into a protocol or adapts a protocol boundary | topic.contracts.protocols |
| A change affects contract compatibility, persisted representations, or independently changing consumers | topic.contracts.evolution |
| A change creates a validator, negative fixture, property test, differential test, or other independent oracle | workflow.verification.oracles |
| A claim spans supported targets or requires platform-specific evidence | workflow.verification.platforms |
| Rust bindings adapt events, callback tasks, runtime handles, or executors | profile.language.rust.binding-lifecycle |
| A change selects maintenance channels, publication presentation, or release recovery procedures | workflow.release.operations |
| A graphical user workflow requires smoke evidence | workflow.verification.gui |
| Condition | Select |
|---|---|
| Maintain this standards library through its authoring interface | Standards Authoring Workflow |
For a bounded Rust parser repair in a reusable library, retrieve the optional
reference reference.routing.bounded-rust-repair. Its stated task facts
illustrate conditional selection; derive each project's route from its actual facts.
Use canonical owners for policy; legacy entrypoints are navigation only. Report unresolved material facts, conflicting ownership, dependency cycles, or a missing canonical route. Continue independently routable work and resolve the missing qualification before treating the affected route as complete.