Entry 2

What hellbender's own log said about the spec

Filescrates/cairns-core/src/entry.rslog.rs

The spec was written against hellbender's log, so the first thing worth knowing is whether it actually reads it. Pointed at a fresh clone with a cairns.toml declaring the fifteen areas the Python tool hard-coded, all 55 entries parsed: no front matter errors, no unknown areas, no repeated numbers, and every area field read despite the log using both format, tooling and decomp,format spellings across it.

content_hash verified from outside the tool, which is the property it was specified for:

$ cairns export --reproducible -o log.json          # entry 50
  content_hash: sha256:40db750a77e9ed60d1b0e242a409751a63f93d0e91e8b9570d0c2e8a72ff6f20
$ shasum -a 256 worklog/0050-kreash-mix-is-the-end-of-a-table.md
  40db750a77e9ed60d1b0e242a409751a63f93d0e91e8b9570d0c2e8a72ff6f20

33 of the 55 entries carry an unresolved **Still unknown:** trailer, so the open-questions page has something real to show on day one rather than being a feature waiting for a habit to form.

Two entries had drifted, and nothing had noticed

check compares an entry's filename against the slug its title derives, which the Python tool never did - it only checked the four-digit prefix. Two entries fail it for reasons that are not about slug rules at all:

0035-powerups-and-the-sprite-models.md
  title: Powerups, and the sprite models they are drawn with

0037-the-players-guns-and-the-energy-that-feeds-them.md
  title: The player's guns, and the energy that feeds them

Both had their titles edited after the file was created. Harmless while the filename is only a filename. Not harmless once it is a URL, which is the argument for the slug: field: identity is the slug, the filename follows it, and a title can be tidied afterwards without breaking a link.

Adoption is not free, and that is the useful finding

Eleven more entries fail the same check for a different reason: the slug is now cut back to a word boundary rather than at exactly 60 characters, so ...-the-picture-foun becomes ...-the-picture. Better names, but every existing project adopting cairns would see its files want renaming, and any already-published link would break.

So adoption has to freeze what exists rather than improve it. init against a log that already has entries should write an explicit slug: into every entry whose filename disagrees with its title, pinning the URLs that were already handed out, and leave the better derivation for entries written from then on. That is a real change to what init does, and it was not in the plan before running this.

One more gap: no entry uses supersedes, because the field is new - yet entry 50 exists specifically to overturn a claim entry 6 made about KREASH.MIX, and says so in prose. The link is in the log already, just not in a form anything can read. Backfilling those during migration is worth doing by hand; there are not many, and they are the most valuable edges in the graph.

The log found a bug in the log

Writing this entry broke the parser that reads it. The paragraph above mentions the open-question marker in prose, and the trailer was found with an unanchored search for the literal, so entry 2's open question came out as the tail of a sentence about entry counts. The marker now has to begin a line, and where several qualify the last one is the trailer - which is what the spec should have said in the first place, because any log written about this format will mention the marker constantly.

Two entries in, dogfooding has paid for itself.

Still unknown

whether migrate can find prose corrections like entry 50's reliably enough to suggest supersedes edges, or whether that stays a manual pass.