Changeset 812fea9 in Klonkt for docs


Ignore:
Timestamp:
08/06/2026 02:20:19 PM (5 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
7aa3140
Parents:
58cfe5f
git-author:
Robin <roboburr@…> (08/06/2026 02:20:09 PM)
git-committer:
roboburr <roboburr@…> (08/06/2026 02:20:19 PM)
Message:

Elke bijlage zegt waar hij voor was (shaer-pmr, vervolg)

Gevonden bij een oefenherstel: ik vergeleek dertien kolommen, noemde het een
schone rondgang, en vergeleek daarna ALLE kolommen. Toen bleken er drie dingen
weg te vallen.

COVER de bytes zaten in het archief, maar nergens stond dat ze de

cover waren. cover_image_url kwam als null terug, dus de post
stond zonder cover.

C2S-BIJLAGE idem: het audiobestand en zijn poster zaten erin, maar

c2s_attachments werd niet hersteld, dus de speler verdween.

SUB-SECONDE de import zette tijdstempels om naar SQL-notatie en verloor de

milliseconden. Twee posts in dezelfde seconde staan dan in
willekeurige volgorde.

Elke bijlage draagt nu een shaer:role -- cover, coverVideo, inline, c2s, poster,
track -- en een poster wijst met shaer:posterFor naar de bijlage waar hij bij
hoort. De importer bouwt cover_image_url, cover_video_url en c2s_attachments
daaruit terug. Een rol is geen versiering: zonder rol heeft het archief wel de
bytes maar niet het feit dat ze de cover WAREN, en dat zie je pas als je alle
kolommen vergelijkt.

Tijdstempels gaan nu ongewijzigd de database in. Klonkt schrijft zelf in twee
spellingen; het archief normaliseert naar ISO. Het MOMENT overleeft de rondgang,
de spelling niet -- nu ook zo gedocumenteerd in plaats van stilzwijgend.

Rondgang op echte beta-data: geen verschil meer over 29 kolommen, met de tijden
op moment vergeleken in plaats van op tekst. 21 tests. Suite 514/514.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • docs/EXPORT-FORMAT.md

    r58cfe5f r812fea9  
    9999| `summary` | `posts.content_warning` | AS2 summary is the content warning |
    100100| `sensitive` | `posts.nsfw` | |
    101 | `published` | `posts.published_at` ?? `created_at` | ISO 8601, UTC |
     101| `published` | `posts.published_at` ?? `created_at` | ISO 8601, UTC. Klonkt stores timestamps in two spellings (`YYYY-MM-DD HH:MM:SS` and full ISO); the archive normalises to ISO. The **instant** survives a round trip, the spelling does not. |
    102102| `updated` | `posts.updated_at` | omitted when equal to `published` |
    103103| `url` | `<origin>/<slug>` | the human permalink |
    104 | `attachment` | cover, inline `<img>`, `c2s_attachments` **and their `poster`**, hosted audio tracks | see [Media](#media) |
     104| `attachment` | cover, inline `<img>`, `c2s_attachments` **and their `poster`**, hosted audio tracks | see [Media](#media); each carries a `shaer:role` |
    105105| `tag` | `posts.tags`, mentions, custom emoji | `Hashtag`, `Mention`, `toot:Emoji` |
    106106| `oneOf` / `anyOf` / `endTime` | `posts.poll_json` | a poll exports as a `Question` |
     
    170170| `missing` | it existed, we know where, we do not have it | the original absolute URL |
    171171
     172Every attachment also carries **`shaer:role`**, saying what it was for:
     173
     174| role | restored to |
     175|---|---|
     176| `cover` / `coverVideo` | `posts.cover_image_url` / `cover_video_url` |
     177| `inline` | already referenced from `content` |
     178| `c2s` | an entry in `posts.c2s_attachments` |
     179| `poster` | the `poster` of the `c2s` entry named in `shaer:posterFor` |
     180| `track` | the file behind a `[[track:id]]`, linked from `shaer:audio` |
     181
     182The role is not decoration. Without it the archive holds the bytes but not the
     183fact that they *were the cover*, and the post comes back without one — which is
     184invisible until you compare every column, not a handful.
     185
    172186`url` for an included attachment is a **container-relative path**, not a URL. An
    173187importer must rewrite it. This is the one place where the archive deviates from
Note: See TracChangeset for help on using the changeset viewer.