Formaatspecificatie

Een deck is een bestand van jou, in een formaat dat iedereen mag implementeren

Deckyard bewaart presentaties in een formaat dat is opgeschreven, geversioneerd en vrij te implementeren. Geen exportknop die er achteraf bij is gezet, maar de vorm waarin de software zelf werkt.

Twee lagen, en het verschil doet ertoe

De eerste vraag is altijd of een deck nou "een soort JSON" is of "die zip". Het is allebei, het een in het ander, en elke laag beantwoordt een andere behoefte.

Laag 1

Het deckformaat

JSON. De data. Een platte, leesbare envelop: een titel, een thema en een geordende reeks slides, elk met de naam van zijn type. Geen server-ids, geen timestamps, geen restanten van opslag. Je opent het in een teksteditor en je snapt wat er staat.

Laag 2

Het deckpakket

ZIP. De data plus de pixels. Dezelfde envelop, met elk lokaal beeld ernaast, geadresseerd op de hash van zijn eigen bytes. Het rendert offline, op een machine die de server waar het vandaan komt nooit heeft gezien.

Waarom het is opgeschreven

Een presentatietool die jouw werk bewaart in een vorm die alleen die tool begrijpt, heeft een claim gelegd op jouw werk. Alles volgt daaruit: of je weg kunt, of een script je decks kan lezen, of een archief ze kan bewaren, of iemand anders ooit iets kan bouwen dat ze opent.

Deckyard is open source, dus de implementatie was altijd al in te zien. Dat is een zwakkere belofte dan deze. Code vertelt je wat een programma vandaag doet; een specificatie vertelt je wat een bestand betekent, en dat is wat je nodig hebt als het programma er niet meer is.

Wat er werkelijk ongebruikelijk aan is

Genoeg tools exporteren JSON. Drie dingen hier zijn zeldzamer, en elk ervan is te controleren in plaats van te geloven.

  1. 01

    Eén bron voor de editor, de validatie, het schema en de agent

    Een slidetype declareert zijn velden één keer. Diezelfde declaratie bouwt het formulier in de editor, valideert de inhoud, genereert het JSON Schema, en is wat een taalmodel via MCP krijgt aangereikt. Dit is geen specificatie die naast een implementatie wordt bijgehouden en er langzaam van afdrijft; hij valt uit de implementatie, en CI houdt de twee tegen elkaar aan.

  2. 02

    Betekenis, geen geometrie

    Een deck zegt "een tijdlijn met vier mijlpalen", nooit "een tekstvak op 312,88pt". Daarom kan hetzelfde deck responsief renderen, naar HTML en PDF exporteren en een ander thema aannemen zonder opnieuw getekend te worden. En daarom kan een machine erover nadenken: hetzelfde typecontract dat de slidekiezer aan een mens laat zien, is wat een model ontvangt.

  3. 03

    Degradatie is gespecificeerd, niet toevallig

    Een onbekend slidetype gooit geen fout. Het importeert als een plaatshouder die zegt welk type niet gevonden werd, of dat type bewust is uitgefaseerd en wat ervoor in de plaats komt, en die de oorspronkelijke inhoud als tekst meeneemt. Een ontbrekend beeld wordt een losse verwijzing, geen crash. Dat is wat het veilig maakt om er een tweede implementatie op te bouwen.

Status

Wat vaststaat, wat we beloven, en hoe ver de conformiteit vandaag reikt.

Envelopversie
Versie 1. Die is nooit veranderd, en een breaking wijziging aan de vorm van de envelop zou hem ophogen en met een migratiepad komen.
Vorm van de inhoud
Apart geversioneerd, onder een eigen schemaversie (4 op dit moment), met een migratieloop en een inschikkelijk leescontract. Nieuwe sleutels komen erbij; oude decks blijven opengaan.
Implementatie
De referentie-implementatie is Deckyard zelf, onder MIT. De spectekst heeft een eigen licentie, CC0-1.0, zodat een tweede implementatie de formuleringen zonder te vragen in een eigen document kan overnemen. Voor het lezen of schrijven van dit formaat heb je geen toestemming, sleutel of vergoeding nodig.
Conformiteit
Twee niveaus, opgeschreven: niveau 1 is de envelop en de zes structuurcontracten, niveau 2 voegt de negen normatieve slidetypes toe. Geen van beide groeit mee als er een slidetype bij komt.

Lees de implementatie