Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Pořadí prezentace je jedno úplné uspořádání vlastněné crate, ne rozhodnutí, které činí každý povrch

Pořadí prezentace je jedno úplné uspořádání vlastněné crate, ne rozhodnutí, které činí každý povrch

majordomus://adr/adr-0025přijato architekturaprezentacedeterminismusprojections

odkazuje na

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

25. Pořadí prezentace je jedno totální pořadí, které vlastní crate, ne rozhodnutí každého povrchu

Kontext

Každý fakt, který tento repozitář ukazuje, byl zredukován na jednu deklaraci a mnoho projekcí: schopnost se deklaruje jednou a dosáhne MCP, HTTP, OpenAPI, příkazové řádky, Cockpitu i generované reference, aniž by kterákoli držela definici (ADR 2, ADR 4, ADR 5); objekt vrstvy je soubor a každý povrch, který ho ukazuje, je odvozen (ADR 7, ADR 8, ADR 18); webový povrch se objevuje od svého producenta a rozpoznává se jednou (ADR 13). Jedna vlastnost kolekce touto redukcí nikdy neprošla a je to ta, kterou člověk vidí jako první: pořadí.

Crate nesl osmdesát komparátorů, napsaných vedle vykreslovačů, které je potřebovaly. Většina byly neškodné duplikáty „řadit podle id“. Některé ne:

  • Stejná třída nálezů byla řazena od nejhoršího v why a product a od nejlepšího v web::validate, protože oba enumy Severity byly deklarovány opačným směrem. Identický záměr musel být zapsán jako opačný kód, takže čtenář sladící oba komparátory by obrátil jeden report, aniž by se dotkl testu.
  • Stejný dokument měření byl na webu řazen podle p50 a na příkazové řádce podle p95 bez rozhodčího kritéria.
  • Tabulka rout Cockpitu byla řazena podle vykresleného HTML vlastních řádků, takže každý název CSS třídy se stal součástí řazení.
  • Výpis HTTP tras se řadil podle Value::to_string() — JSON kódování cesty, včetně uvozovek — a neměl rozhodující kritérium podle metody.
  • Právě jeden komparátor v crate skládal velikost písmen, v navigaci Cockpitu; každý jiný povrch vedle něj porovnával surové bajty. Nikde nic neporovnávalo řady číslic podle hodnoty, takže první pravidlo .v10 nebo čtyřciferné ADR by se v indexu, grafu, Cockpitu, na webu i ve všech generovaných dokumentech seřadilo najednou špatně.

Nic z toho nebyl nedeterminismus v obvyklém smyslu a stojí za zaznamenání, že obvyklí podezřelí chyběli: objevování je jednovláknové, jeho enumerátory třídí před vrácením, index je řazen podle URI a jeho pořadí je součástí publikovaného otisku, registr je BTreeMap a crate drží právě jeden HashMap — cache exekutoru, kterou nic nepromítá. Dva běhy na jednom stroji se shodly. Vadou bylo, že šest povrchů se shodlo na faktech a neshodlo na pořadí, což člověk čte jako repozitář, který si odporuje.

Rozhodnutí

Pořadí prezentace je jedno úplné uspořádání, deklarované jednou v apps/majordomus-cli/src/order.rs, a každý povrch vykresluje posloupnost, kterou dostane.

Typ implementuje Ordered a odpovídá OrderKey o čtyřech částech, od nejvýznamnější:

  1. group — sémantický koš, porovnávaný přirozeně; žádná skupina se řadí za každou skupinu, takže nezařazený ocas je čitelný a nezařazená hlava nemůže skrýt skupiny.
  2. rank — explicitní pozice uvnitř skupiny pro kolekce, jejichž doména ji má. weight u okamžiku, publika, oblasti nebo funkce je takový rank. Výchozí je nezařazeno, takže kolekce bez takové sémantiky ho nikdy nezmiňuje.
  3. label — co člověk čte, porovnáváno přirozeně: číslice podle hodnoty, ASCII velikost písmen složena, takže Alpha a alpha zůstanou vedle sebe.
  4. identita — kanonické id a důvod, proč je pořadí úplné, a ne jen úhledné.

Čtvrtá část je rozhodnutí, ne detail. Bez ní si dvě položky se stejným labelem vyměňují místa, kdykoli se přidá nesouvisející položka, použije se jiný iterátor nebo jiný stroj vyjmenovává jinak — a komparátor, který nechává shody nerozhodnuté, je přesně to, co způsobí, že pořadí vypadá jako závod, když žádný není.

Pořadí vynucuje project.canonical-order a kontrola scripts/ci/order-check: tři absolutní kontroly (žádný komparátor s odstraněním velikosti písmen mimo order.rs, žádný třídicí klíč, který vykresluje značkování, žádné .localeCompare( ve generovaném nebo servírovaném povrchu) a jeden ratchet nad dluhem, který předchází pravidlu, v .ai/repo/order-baseline.txt, který smí klesat a nesmí růst.

Žádné nové podstatné jméno. project.no-new-nouns je blokující a docs/CONCEPTS.md je slovník; pořadí je vlastnost projekce, ne věc, kterou nástroj nově má. order.rs nejmenuje žádný pojem, který by se worker musel učit, aby nástroj používal.

Zamítnuté alternativy

Komparátor na kolekci, posuzovaný, ne vlastněný. To, co strom měl. Je to nejlevnější věc k napsání a nejdražší k usmíření: dva převrácené enumy Severity jsou důkaz, protože každý byl lokálně správný a dvojice byla pastí pro každého, kdo si jí všiml.

Řazení u konzumentů — JavaScript Cockpitu, šablony webu, generované indexy. Posouvá pořadí nejdál od dat a duplikuje ho na každém povrchu, což je tvar, který project.interfaces-are-projections už odmítá pro jména, trasy a schémata. Konzument může stále nabídnout řazení, o které se člověk výslovně požádal; to je něco jiného a zůstává.

Deklarované pořadí na kolekci, v datech — pole order: na všem. Zamítnuto jako výchozí. Činí každé přidání úpravou na dvou místech a kóduje dnešní vizuální posloupnost jako fakt o doméně. Explicitní pořadí se ponechává jen tam, kde ho doména už měla a už deklarovala: weight a order kontextového dokumentu.

Závislost pro přirozené řazení. Komparátor má třicet řádků, seznam závislostí crate se obhajuje řádek po řádku a obecné třídění Unicode by odpovídalo na otázku, kterou tento repozitář neklade.

Opravit jen povrchy, které vypadaly špatně. Postranní panel, který to spustil, šlo seřadit na místě a dříve se tak stalo. Tak se repozitář dostal k osmdesáti názorům: každý byl malou lokální opravou viditelného příznaku.

Důsledky

  • Řazení je nyní projekce s vlastníkem a nová kolekce se k ní připojí implementací jednoho traitu, ne tím, že si ji každý konzument pamatuje.
  • Oba enumy Severity jsou deklarovány ve stejném směru, takže „nejhorší první“ je b.cmp(a) všude, kde se objeví, a past sesouhlasení zmizela. Schéma závažnosti nálezu topologie mění pořadí variant; nic je nečte pozičně.
  • Tabulka tras Cockpitu a výpis HTTP tras mění viditelné pořadí, z metoda-pak-cesta na cesta-pak-metoda: tabulka tras se čte podle cesty a ani jedno pořadí nikdy nebylo tvrzeno.
  • .ai/repo/order-baseline.txt zaznamenává dluh jako dvě čísla místo slibu. Crate stále obsahuje místa řazení, která by mohla být kanonickým pořadím a zatím nejsou, a shell stále obsahuje sort volání, která řadí podle locale. Obě čísla smějí jen klesat.
  • První čtyřmístné ADR a první pravidlo .v10 se zařadí správně, ve všech površích najednou, protože existuje jedno místo, které rozhoduje.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0025-presentation-order-is-one-total-order-owned-by-the-crate-not-a-decision-each-surface-makes.md
identity
adr-0025
dostupné také jako
Zdroj MCP majordomus://adr/adr-0025 · majordomus entity show adr/adr-0025 · GET /api/v1/entity?uri=majordomus://adr/adr-0025
v Cockpitu
/cockpit/objects/adr/adr-0025

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.