Hoppa till innehållet

Devportalen /portal/dev

Startsideportalens ekosystem för människa och agent

Dokumentationen / Yta

Devportalen

dok · devportal
id: devportal
namn: Devportalen
sammanfattning: Samlar allt en byggare behöver om ekosystemet och renderar det i en människovy och en agentvy ur samma data.
uppdaterad: 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:
- 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 }[] };
```

1. 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.
2. Lägg till en katalogpost
   Ett objekt i katalog.ts. Posten blir genast synlig på /dev/katalog och i täckningen på /dev/docs.
3. Lägg till dokumentation
   Ett objekt i dok.ts med samma id som katalogposten, enligt dokumentationskontraktet.

beroenden: skal, ui, tokens, designsystem
beslut: ADR-010

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.