Dokumentationen / Yta
Devportalen
YtaStartsideportalenSamlar allt en byggare behöver om ekosystemet och renderar det i en människovy och en agentvy ur samma data.
källa: apps/portal/src/app/devuppdaterad: 2026-09-02
Ansvar
- Äga portalens innehåll som typad data – sidor, katalog, dokumentation, beslutsregister – så att ingen uppgift finns bara i JSX.
- Rendera samma innehåll för människa och agent. En blocktyp utan textrenderare är ett fel, inte en förenkling.
- Vara den enda adress man behöver peka en agent på: /dev/llms.txt.
- Visa täckningen: vilka katalogposter som saknar dokumentation.
- Fälla grindarna när portalen beskriver något som inte finns – drifttesterna kontrollerar det som går att kontrollera mekaniskt.
- Aldrig innehålla en egen sanning. Portalen beskriver koden; skiljer de sig är det portalen som ska rättas.
Filer
| Sökväg | Roll |
|---|---|
| dev/layout.tsx | Portalens krom: topprad med vyväxel, sidonav, sidfot. |
| dev/page.tsx | Startsidan. Renderar sidan med id "start". |
| dev/[sida]/page.tsx | Alla datadrivna sidor. Statiska segment vinner över den här rutten. |
| dev/portal/typer.ts | Datamodellen: Block, Avsnitt, Sida, Katalogpost, Beslut. |
| dev/portal/sidor.ts | Sidornas innehåll. Ordningen är navordningen. |
| dev/portal/katalog.ts | Katalogposterna och beslutsregistret. |
| dev/portal/antimonster.ts | Antimönsterindexet: fel → rätt för arkitekturen, med grinden som fångar var och en. |
| dev/portal/stanna.ts | "Stanna och fråga" som fält: status, fas, implementerad. Tabellen på /dev renderas ur den. |
| dev/portal/referens.ts | Den kanoniska förlagan: vilken riktig modul man diffar sitt arbete mot, och vilka filer man läser i vilken ordning. |
| dev/portal/dok.ts | Dokumentationen och dokumentationskontraktet. |
| dev/portal/nav.ts | Sidomenyns grupper. |
| dev/portal/text.ts | Textrenderaren. Agentvyn och llms.txt går genom den. |
| dev/komponenter/Blockvy.tsx | Visuell renderare, en gren per blocktyp. |
| dev/komponenter/Sidvy.tsx | Väljer människovy eller agentvy. |
| dev/komponenter/Nav.tsx | Sidomenyn. Klientkomponent enbart för aria-current. |
| dev/komponenter/Vyvaxel.tsx | Människa/Agent. Lägger vyn i frågesträngen. |
| dev/komponenter/Kopiera.tsx | Kopierar agentvyns text. |
| dev/docs/ | Dokumentationsindex, täckning och en sida per dok. |
| app/llms.txt/route.ts | Rotens karta: var kontexten finns. Kort med flit – inte en kopia av portalen. |
| innehallsversion.ts | Hash av innehållet som version och ETag. Villkorat anrop svarar 304 i stället för att skicka om allt. |
| dev/llms.txt/route.ts | Hela portalen som plattext. |
| dev/spec.json/route.ts | Hela portalen som JSON. Tidsstämplas inte – svaret ska gå att diffa. Bär innehallsversion och svarar 304 på oförändrat innehåll. |
| dev/portal/portal.test.ts | Drifttesterna: katalogen mot packages/modules, applikationen på varje post (ADR-040), doken mot dokumentationskontraktet, manifestkopian mot module-sdk. |
Kontrakt
En ny blocktyp kräver två renderare. Läggs den bara till i Blockvy.tsx försvinner innehållet ur agentvyn och ur llms.txt, tyst.
Agentfilerna bär innehallsversion: en hash av innehållet, samma värde som ETag. Den ändras när och bara när innehållet gör det, så ett villkorat anrop med If-None-Match svarar 304. En agent kan därmed avgöra om dess cachade kontext är inaktuell utan att hämta om hundratals rader – och svaret går fortfarande att diffa, vilket en tidsstämpel hade omöjliggjort.
Blocktyperna
type Block =
| { typ: "text"; text: string }
| { typ: "punkter"; punkter: string[] }
| { typ: "kod"; rubrik?: string; kod: string }
| { typ: "tabell"; kolumner: string[]; rader: string[][] }
| { typ: "rutor"; rutor: { rubrik: string; text: string }[] }
| { typ: "steg"; steg: { rubrik: string; text: string; kod?: string }[] }
| { typ: "lankar"; lankar: { href: string; text: string; nota?: string }[] };Lägg till en sida
Ett objekt i sidor.ts och en rad i nav.ts. Rutten finns redan – [sida] plockar upp den på id.
Lägg till en katalogpost
Ett objekt i katalog.ts. Posten blir genast synlig på /dev/katalog och i täckningen på /dev/docs.
Lägg till dokumentation
Ett objekt i dok.ts med samma id som katalogposten, enligt dokumentationskontraktet.
Beroenden och beslut
Kvarstår
- Ingen sökning. Med tio sidor gör navigationen mer nytta; över tjugo bör det omprövas.
- Katalogen är fortfarande handskriven, inte genererad ur registry.ts. Medvetet – status och skäl finns inte i koden – men nu kontrollerar ett test att modullistan stämmer mot packages/modules.
- Prosan i sidorna kontrolleras inte. Drifttesterna når fältnamn, id och täckning; att en beskrivning fortfarande är sann går inte att testa.