Hoppa till innehållet

Devportalen /portal/dev

Startsideportalens ekosystem för människa och agent

Dokumentationen / Yta

Devportalen

YtaStartsideportalen

Samlar 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

Tabell: Sökväg, Roll
SökvägRoll
dev/layout.tsxPortalens krom: topprad med vyväxel, sidonav, sidfot.
dev/page.tsxStartsidan. Renderar sidan med id "start".
dev/[sida]/page.tsxAlla datadrivna sidor. Statiska segment vinner över den här rutten.
dev/portal/typer.tsDatamodellen: Block, Avsnitt, Sida, Katalogpost, Beslut.
dev/portal/sidor.tsSidornas innehåll. Ordningen är navordningen.
dev/portal/katalog.tsKatalogposterna och beslutsregistret.
dev/portal/antimonster.tsAntimö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.tsDen kanoniska förlagan: vilken riktig modul man diffar sitt arbete mot, och vilka filer man läser i vilken ordning.
dev/portal/dok.tsDokumentationen och dokumentationskontraktet.
dev/portal/nav.tsSidomenyns grupper.
dev/portal/text.tsTextrenderaren. Agentvyn och llms.txt går genom den.
dev/komponenter/Blockvy.tsxVisuell renderare, en gren per blocktyp.
dev/komponenter/Sidvy.tsxVäljer människovy eller agentvy.
dev/komponenter/Nav.tsxSidomenyn. Klientkomponent enbart för aria-current.
dev/komponenter/Vyvaxel.tsxMänniska/Agent. Lägger vyn i frågesträngen.
dev/komponenter/Kopiera.tsxKopierar agentvyns text.
dev/docs/Dokumentationsindex, täckning och en sida per dok.
app/llms.txt/route.tsRotens karta: var kontexten finns. Kort med flit – inte en kopia av portalen.
innehallsversion.tsHash av innehållet som version och ETag. Villkorat anrop svarar 304 i stället för att skicka om allt.
dev/llms.txt/route.tsHela portalen som plattext.
dev/spec.json/route.tsHela 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.tsDrifttesterna: 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 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.