Ga naar hoofdinhoud

Kanalen

Kanalen brengen teamgesprekken naar Libre WebUI: openbare en privéruimten plus privéberichten, met threads, reacties, vastgezette berichten, bijhouden van ongelezen berichten, bestandsbijlagen en antwoorden van @model — allemaal op dezelfde duurzame, versleutelde basis als chat.

Kanaaltypen en lidmaatschap

TypeWie het kan zienWie deelneemt
publicIedereen kan bladerenIedereen kan zichzelf aanmelden
privateAlleen ledenDe eigenaar nodigt leden uit
dmAlleen beide deelnemersAutomatisch geopend; altijd precies twee

Lidmaatschap is de enige autoriteit over kanaalinhoud: elke lees- en schrijfbewerking — inclusief downloads van bijlagen en live levering van gebeurtenissen — controleert eerst het lidmaatschap van de aanroeper. Niet-leden krijgen een 404 die het bestaan niet onthult. De globale beheerdersrol geeft bewust geen toegang tot kanaalinhoud.

De maker van een openbaar of privékanaal is de eigenaar. Eigenaren kunnen het kanaal hernoemen en archiveren, mensen uitnodigen voor een privékanaal, leden verwijderen, berichten modereren en het kanaal verwijderen. Een eigenaar vertrekt door het kanaal te verwijderen, nooit door het achter te laten. Privéberichten worden per paar ontdubbeld: een DM met dezelfde persoon openen leidt altijd naar hetzelfde gesprek.

De tijdlijn

Berichten vormen een duurzame, geordende tijdlijn die met keyset-cursors (created_at plus bericht-ID) in beide richtingen wordt gelezen, zodat paginering nooit vermeldingen overslaat of verdubbelt.

  • Idempotente berichten. De client levert de berichtidentiteit; een herhaald verzoek komt precies één keer bij dezelfde tijdlijnvermelding terecht.
  • Verwijderen met tombstone. Een bericht verwijderen wist de inhoud maar behoudt de tijdlijnvermelding, zodat threads nooit los komen te hangen en de volgorde niet verschuift. Auteurs verwijderen hun eigen berichten; kanaaleigenaren mogen elk bericht modereren.
  • Bewerkingen zijn alleen voor de auteur en krijgen een markering editedAt.
  • Threads zijn één niveau diep. Elk hoofdbericht kan een thread bevatten; antwoorden op antwoorden worden geweigerd. Hoofdberichten tonen live aantallen antwoorden.
  • Reacties zijn per gebruiker en emoji en worden zonder dubbelen geteld.
  • Vastgezette berichten worden door leden beheerd en per kanaal vermeld.

Kanaalnamen, beschrijvingen en berichtinhoud worden bij opslag versleuteld binnen dezelfde grens als chatberichten.

Ongelezen status

Elk lidmaatschap bevat een monotone leescursor. Ongelezen aantallen worden server-side per kanaal berekend (je eigen berichten zijn nooit ongelezen) en POST /api/channels/:channelId/read verplaatst de cursor vooruit, nooit achteruit. Zo kan een verouderde client gelezen berichten niet opnieuw als ongelezen laten verschijnen.

Realtimelevering

Elke wijziging van de tijdlijn wordt aan de duurzame gebeurtenissenstroom channel:<id> toegevoegd en via GET /api/channels/:channelId/events (SSE) verspreid. Voor elke levering wordt het lidmaatschap opnieuw gecontroleerd, zodat de livestream van een verwijderd lid veilig wordt gesloten. De SQL-tijdlijn blijft gezaghebbend: een abonnee die gebeurtenissen heeft gemist leest simpelweg de tijdlijn opnieuw. Het logboek dient voor levering, niet als waarheid.

Bijlagen

Bestanden worden eerst geüpload (POST /api/channels/:channelId/attachments), kort in een gedeelde claimcache geparkeerd en gekoppeld wanneer het bericht wordt geplaatst. Een uploadclaim kan één keer worden gebruikt en vervalt na 15 minuten als deze niet is opgeëist. Blobbytes behoren tot de uploader en tellen mee voor diens quotum; bij elk downloadverzoek wordt het kanaallidmaatschap opnieuw gecontroleerd.

Antwoorden van @model

De opsteller kan een bericht aan een model richten. Het antwoord verschijnt onmiddellijk als een openstaand, door het model geschreven bericht en wordt voltooid via een duurzame taak die strikt onder de identiteit van het aanroepende lid wordt uitgevoerd: diens modeltoegang, providerreferenties en routering — nooit die van de kanaaleigenaar of een ander lid. Een lid dat wordt verwijderd terwijl een vermelding in de wachtrij staat, kan die niet actief houden: de taak controleert het lidmaatschap vóór het genereren opnieuw en legt in plaats daarvan een zichtbare fout vast. Modelfouten verschijnen op het antwoord zelf in plaats van in een wachtrij te verdwijnen.

Modelantwoorden gebruiken het recente kanaalgesprek, maximaal 30 berichten, als context. Ze worden als eenmalige voltooiingen uitgevoerd: chattools, kennisophaling en zoeken op het web zijn nog niet aan kanaalvermeldingen gekoppeld.

Limieten

LimietWaarde
Kanalen gemaakt per gebruiker50
Leden per kanaal200
Berichten per kanaal50,000
Berichtlengte8,000 tekens
Bijlagen per bericht5 × 10 MB
Reacties per bericht200

Grenzen

  • Aanwezigheidsindicatoren en typestatus zijn niet geïmplementeerd.
  • Export en bewaarbeleid voor kanaalinhoud volgen het back-upverhaal van de instantie; export per kanaal bestaat nog niet.
  • Vermeldingen sturen meldingen via de meldingsservice in de app; buiten het verlaten van het kanaal bestaat nog geen meldingsvoorkeur per kanaal.