Projektets minne
YtaGer projektet ett gemensamt minne för det som är bra att veta men inte redo för projektsidorna, så att Claude Code och projektets admins känner igen ett ämne och inte börjar från noll.
källa: apps/projekt/src/minne, apps/projekt/src/app/(projekt)/minne, apps/projekt/src/app/api/minneuppdaterad:
Ansvar
- Spara minnen i startsidans databas, med rubrik, en rad om när minnet gäller, typ (bakgrund, arbetssätt, referens), text och läge (aktivt, vilande, flyttat).
- Visa minnena för admin på /minne, per typ, med de vilande och flyttade för sig, och låta admin lägga till, ändra och ta bort dem.
- Låta Claude Code läsa och skriva med API:t /api/minne och skrivnyckeln, och ge förteckningen över de aktiva minnena som text för hooken som körs när en session startar.
- Hålla minnet borta från alla som inte är admin: 404 för andra konton, nyckeln också för att läsa i API:t, och minnets rader dolda på /andringar.
- Märka det som en agent skrev med ✦ AI-genererat, tills en människa tar bort märkningen.
Filer
| Sökväg | Roll |
|---|---|
| minne/regler.ts | Typerna, lägena, provaMinne (zod, strikt), tillIndata och forteckning – texten som Claude Code läser in. Ren logik. |
| minne/databas.ts | Tabellen minnen (steg 7 i databas/databas.ts). Ingen startdata: minnet finns bara i databasen. |
| minne/server.ts | Läsa, skapa, ändra, ändra delar och ta bort – samma prövning för varje skrivning och en rad i ändringsloggen i samma transaktion. Att ta bort skriver om loggens rader om minnet. |
| minne/actions.ts | Server actions: spara och ta bort. Varje åtgärd kontrollerar själv att den inloggade är admin. |
| minne/minne.test.ts | Reglerna, förteckningen, API:t mot en tillfällig fil och att loggen döljs för andra än admin. |
| app/(projekt)/minne/page.tsx | Minnet: de aktiva per typ som kort, sedan vilande och flyttade. Leder till inloggningen utan konto och ger 404 för den som inte är admin. |
| app/(projekt)/minne/Minnesformular.tsx | Formuläret för ett nytt eller ändrat minne, och formuläret som tar bort ett för gott. |
| app/(projekt)/minne/ny/page.tsx | Lägg till ett minne. |
| app/(projekt)/minne/[id]/andra/page.tsx | Ändra eller ta bort ett minne. Id:t ändras inte. |
| app/api/minne/route.ts | GET alla minnen eller förteckningen, POST ett nytt. Allt kräver nyckeln. |
| app/api/minne/[id]/route.ts | GET, PUT, PATCH och DELETE på ett minne. |
| andringslogg/logg.ts | Källan minne och BARA_ADMIN, som /andringar hoppar över för andra än admin. |
| .claude/settings.json | Hooken SessionStart som hämtar förteckningen från produktionen med $STARTSIDAN_SKRIVNYCKEL. Utan nyckel eller svar startar sessionen ändå. |
API
| Namn | Signatur | Beskrivning |
|---|---|---|
| GET /api/minne | Authorization: Bearer <STATUS_SKRIVNYCKEL> → 200 { minnen: Minne[] } | 401 | Alla minnen. |
| GET /api/minne?format=forteckning | Bearer → 200 text/plain | En rad per aktivt minne: id, rubrik, typ och när det gäller. Det som hooken lägger i Claude Codes sammanhang. |
| POST /api/minne | Bearer, body: { rubrik, nar, typ, text, lage?, flyttat?, ai? } → 201 { minne, url } | 400 { fel: string[] } | Lägger till ett minne. Id:t ges ur rubriken. En agent sätter ai: true. |
| GET /api/minne/:id | Bearer → 200 { minne } | 404 | Ett minne, med hela texten. |
| PUT /api/minne/:id | Bearer, body: som POST → 200 { minne, url } | 400 | 404 | Byter allt utom id:t. |
| PATCH /api/minne/:id | Bearer, body: delar av samma → 200 { minne, url } | 400 | 404 | Byter bara de fält som skickas, till exempel { "lage": "vilande" }. Ett minne som lämnar läget flyttat tappar adressen. |
| DELETE /api/minne/:id | Bearer → 204 | 404 | Tar bort minnet för gott och skriver om loggens rader om det. För det som aldrig skulle ha skrivits. |
Kontrakt
| Fält | Typ | Krav |
|---|---|---|
| id | string | Ur rubriken, i gemener med bindestreck. Ändras aldrig. |
| rubrik | string | 3–120 tecken. |
| nar | string | En rad, 10–300 tecken: när minnet gäller, med de ord som används när ämnet kommer upp. Det är den Claude Code ser när en session startar. |
| typ | "bakgrund" | "arbetssatt" | "referens" | Bakgrund i projektet, hur arbetet ska göras, eller var något finns. |
| text | string | 10–8000 tecken. Stycken skiljs med en tom rad. Inga hemligheter och inga känsliga personuppgifter. |
| lage | "aktivt" | "vilande" | "flyttat" | Standard aktivt. Bara de aktiva läses in. |
| flyttat | string? | Bara för ett flyttat minne: sidan där det står nu, från roten. |
| ai | boolean | Skrivet av en agent: märks ✦ AI-genererat. Standard false. |
| skapad, andrad | string | ISO-tid, satt av servern. |
- Minnet är för det som ännu inte hör hemma på projektsidorna. När det gör det flyttas det dit – som ett vägval, en uppgift eller ett önskemål – och minnet blir flyttat.
- Claude Code sparar ett minne när någon ber om det, utan att fråga om den exakta texten först, och visar efteråt vad som sparades.
- Allt i minnet ligger i produktionsdatabasen. Hemligheter hör aldrig hemma där, och känsliga personuppgifter inte heller.
- Varje sida och åtgärd kontrollerar admin() själv. Ett nytt sätt att läsa ändringsloggen ska hoppa över BARA_ADMIN för andra än admin.
Beroenden och beslut
Beslut: ADR-039, ADR-037
Levererar: /minne, /minne/ny, /minne/<id>/andra, /api/minne, /api/minne?format=forteckning, minne/, Minnet i kontomenyn för admin, SessionStart-hooken i .claude/settings.json
Kvarstår
- Hooken läser bara från produktionen; utan STARTSIDAN_SKRIVNYCKEL i miljön läses inget in.
- Ingen sökning och inget filter på sidan än – det behövs när minnena blir många.
- Texten visas som stycken, utan markdown.
15 delar i projektportalen · gemensamma i devportalen: ai-adapter, anthropic, bygge, designsystem, dokploy, dokumentation, gemensamt, tokens, ui