import { GAP_SECTION_ICON, RETIRED_SECTION_ICON } from "#configuration/icons/release.icons"; import { GAP_SECTION_ID, RETIRED_SECTION_ID } from "#core/ids/release.ids"; import type { Section } from "#types/document.types"; import { nodeLink as node } from "#domain/converters/link.converter"; const PROXY_DIAGRAM = 'flowchart TB\n subgraph proxies["The proxy rule"]\n r1["Benchmark everything before any application logic"]\n r2["Synchronous over asynchronous, always"]\n end\n subgraph properties["The property it stands for"]\n p1["A measurement precedes an optimisation"]\n p2["One correct answer exists"]\n end\n subgraph holds["What holds the property"]\n h1["Measure a hot path when you have one, never as a rite"]\n h2["Asynchronous by necessity, still one correct answer"]\n end\n r1 --> p1 --> h1\n r2 --> p2 --> h2'; export const RETIRED_SECTION: Section = { icon: RETIRED_SECTION_ICON, id: RETIRED_SECTION_ID, intro: "A rule that stands in for a property is a proxy. A proxy is easy to state and easy to enforce for its own sake, and it ends up guarding the wrong thing; the ontology's names for the habit are pattern cargo cult and golden hammer. Two proxies come up often enough to name here, with the property each one stands for and what holds that property instead, as two proxies draws. A fixed line count repeated in every document is the proxy one home retires, and a voice the AI keeps up all session is the one a seat is a contract retires.", subsections: [ { blocks: [ { application: "Ask what property a rule protects, and name the property.", cause: "A proxy is easier to state than the property, so it gets stated first and then outlives its reason.", decision: "Check the property directly and let the proxy go, rather than keep the rule beside the check.", failureMode: "The team argues about whether a file may have one more line while the module it lives in has no boundary at all.", kind: "lesson", principle: "A rule that stands in for a property gives way once the property has a check.", problem: "A rule that outlives its reason gets enforced for its own sake.", validation: "Remove one rule you enforce for a cycle. If the property it stood for still holds, the rule was the proxy.", }, { caption: "two proxies", kind: "mermaid", text: PROXY_DIAGRAM }, ], title: "The property behind the rule", }, ], title: "Proxies give way", }; export const GAP_SECTION: Section = { icon: GAP_SECTION_ICON, id: GAP_SECTION_ID, intro: `Nothing computes worth: the ${node("tel-utility", "utility")} and ${node("tel-cost", "cost")} nodes of the ontology's teleology axis are absent slots here, and I decide it. Nothing detects non-progress; ${node("ter-diminishing-returns", "diminishing returns")} is a node I notice rather than a detector that fires. ${node("ver-confidence", "Confidence")} is a threshold, not a distribution. Several conduct rules have no artifact behind them yet. I state the gaps because a method that claims completeness is one whose gaps you find in production, and the architecture page keeps its own list of the same kind, declared absent, never assumed.`, subsections: [ { blocks: [ { application: "Keep a list of the guarantees the method claims and mark each as held, derived or absent.", cause: "A guarantee nothing provides gets assumed by whoever needs it, and the assumption never fails where it began.", decision: "Declare an absence in the adapter rather than fill it with a default in the core.", failureMode: "The method reads as complete. A reader relies on a guarantee it never gave, and finds out where it matters most.", kind: "lesson", principle: "An absence gets measured and declared. Nobody infers it, and nobody papers over it.", problem: "A method that hides its gaps hands them to the reader unannounced.", validation: "Read the declared absences. Each must name what would fill it. A method with no declared absences has stopped looking for them.", }, { kind: "text", text: "The absences are named in the adapter as slots nothing fills. Worth: whether a task is worth doing is a decision I make with a sentence written before the work, and no mechanism computes utility against cost over branches. Fixed point: no step compares a prior render against a fresh one, so the generators overwrite unconditionally and the drift check is the only signal. Non-progress: the gate has no detector for a run that thrashes, so it runs every step every time and cannot tell a converging run from an oscillating one. Confidence: a claim passes or fails a threshold, and nothing carries a distribution of how sure the verifier is. Relevance: no registry entry carries its own test of whether it applies, so every composition iterates everything. Counts: no predicate compares an authored number against a real count, because prose carries no count and the predicate would have no population.", }, { kind: "text", text: "The naming standard is enforced; the reasoning ontology's epistemic and structural predicates run and its conative layer is the gap the list above names, which the architecture page reads from its side. An absence is measured before it is reported, the way a report, not a checkbox measures a negative result, because a capability nobody calls and one that does not exist read identically from inside a tree.", }, ], title: "Declared absences", }, ], title: "The honest gaps", };