Normalization is the step that converts a raw candidate — which may arrive as a rough description, a conversation fragment, or an informal observation — into a structured, runtime-ready practice block. A normalized block must be immediately usable during live work without interpretation. It must be precise enough to match a real condition, short enough to apply in the moment, and framed as a preventive default rather than a retrospective correction. Normalization happens after a candidate passes the admission filter and before a proposal is presented to the operator for approval. It is not cosmetic cleanup — it is a substantive rewrite that may significantly change the wording, scope, or framing of the original input.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/XxYouDeaDPunKxX/CSBP-Codex-Shared-Best-Practice/llms.txt
Use this file to discover all available pages before exploring further.
Normalization rules
The compiler applies the following rules when rewriting a candidate into block shape. What to do:- Rewrite as a preventive default — the block should stop a wrong pattern from occurring, not recover from it
- Rewrite as a runtime-ready instruction — the block must be directly usable during work, not during post-mortem
- Keep one pattern per practice — a single block addresses one recurring pattern only
- Prefer short stable wording — the block should read the same way across contexts
- Prefer direct verbs — use
check,confirm,set,verify, not hedged or conditional phrasing
- Narrative — background story about why the issue occurred
- Non-operational explanation — reasoning that does not change the behavior
- Project-specific detail — any reference to a specific codebase, tool version, or named project
- Fallback phrasing —
if that does not work,as a last resort,otherwise - Recovery-first phrasing —
after a failure,when something goes wrong,to recover
Block quality rules
A single block represents a single recurring pattern. If the raw candidate contains more than one main action or more than one wrong pattern, the compiler splits it into separate candidates and evaluates each one independently before promotion. A block is rewritten or rejected if it is:- Too broad — the
applies_whencondition would match almost every situation - Too narrow — the practice only makes sense in one specific context
- Overly explanatory — the block reads like a note about why something happened
- Not usable during real work — the block cannot be applied in the moment without additional interpretation
The standard block shape
Every normalized practice uses this fixed shape, matching the structure ofshared-best-practice.txt:
Normalization example
The following example shows how a raw candidate observation is transformed into a normalized runtime block.Recovery is painful), non-operational framing (We should make sure), and no structured fields. The normalized block removes all of that and produces a direct, preventive instruction with a concrete applies_when condition, a clear goal, an actionable do, and a named failure pattern in avoid.
The proposal shape
Once normalization is complete, the compiler presents a formal proposal to the operator. The proposal shape includes:id field in the proposed block is left unassigned. The PNNN identifier is assigned only when the operator approves the promotion and the practice is written into shared-best-practice.txt.
The
rationale field in a proposal must be a single short operational sentence — not a paragraph, not a history of the issue, not a justification. It exists to give the operator a fast, clear reason to evaluate the proposal.Admission & Rejection
Review the criteria the compiler applies before normalization begins.
Block Shape Reference
See the full specification for the runtime practice block format.