AGPL-3.0-or-later · forever.

Thibaut Melen · Origins · retrospective · · published · 4 min

The part Git cannot prove

Then the public record goes quiet. An honest origin story keeps the missing months visible instead of inventing a montage.

From December 30 to April 13, the public trail contains no engine commit.

The first nika.sh commit is dated December 30, 2025. The current engine repository begins on April 13, 2026. The specification repository begins on May 22.

Those dates prove that specific bytes entered public repositories. They do not prove that nobody thought, prototyped or made decisions between them. They do not prove the opposite either.

February is where a polished origin story would insert a montage.

We will leave the space empty.

The public evidence ledger #

The gap is easier to see when each receipt is given only the claim it can carry:

  • 2025-12-30, first nika.sh commit. It proves the public page and its exact claims existed. It does not prove the engine behind every claim was complete.
  • 2026-04-13, first current-engine commit. It proves the orphan rebuild and its empty workspace existed. It does not prove the later runtime was already runnable.
  • 2026-05-22, first spec commits. They prove the language contract entered its own public repository. They do not prove the final grammar had already stopped changing.

The rows are intentionally asymmetric. A commit is strong evidence for bytes and weak evidence for motive, deployment and maturity.

Different evidence answers different questions #

A commit proves less than memory and more than a story. It can show that bytes existed in a repository at a recorded point. It cannot show every conversation that led there. It cannot prove the code was deployed, used correctly or safe.

Memory can explain motive. A repository can establish sequence. Tests can establish behavior. A release artifact can establish what a user could install. Each source answers a different question.

Trouble begins when one source impersonates another.

A commit timestamp is not a product release. A passing test is not proof that a binary reached users. A trace is not proof of facts below a provider boundary. A recollection can explain why a decision mattered, but it cannot manufacture a repository event.

That is why these origin articles carry two dates. The story date places the subject in the chronology. The publication date says when the article actually appeared. RSS and structured metadata use the publication date. The page labels the article as a retrospective.

The story can flow without pretending the blog existed before it did.

How to write across a gap #

The rule for this ledger is small enough to reuse elsewhere:

  1. name the oldest surviving source;
  2. state exactly what that source can prove;
  3. mark recollection as recollection;
  4. leave unsupported intervals empty.

This does not make the history complete. It makes later correction cheap. If an older public receipt appears, it can be added without rewriting a myth that claimed certainty.

The gap contains hypotheses #

Looking backward, we can trace concerns that later became durable architecture: the plain-text workflow, the visible graph, model choice and the local runner. They appear on the December page and in the current product.

What we cannot do is assign every mature mechanism to a convenient day inside the quiet period. The current permits model, four-verb language, conformance suite and crate architecture have later receipts. Claiming they were complete in February would erase the work that made them real.

The honest sentence is smaller: the problem was stable before the solution was.

Nika knew useful AI work should outlive a chat session. It had not yet earned every mechanism needed to keep that promise.

Missing evidence is still information #

Nika asks users to care about provenance. A trace should not claim an attestation it never received. A checker should not call an unjudged constraint safe. A local model without a known price should be called unpriced, not free.

The same standard belongs in the project history.

An empty section in the record tells future maintainers where they can rely on source and where they are reading recollection. It stops a later article from becoming accidental authority for an event it merely describes.

The same discipline appears in runtime states. If a process dies after sending an external request but before recording the response, the honest result may be ambiguous. Calling it success or retrying it blindly would replace missing evidence with a convenient story. Historical gaps are gentler, but the law is the same: unknown remains unknown.

The public record resumes with a hard reset of the engine in April and a dedicated language repository in May. February keeps the boundary visible.

Unknown remains unknown. The last chapter can now name what the project was reaching for without pretending the name proves the machinery.