Shipseal

The manifest

Every pack ships with a manifest.json. It is the proof behind "verified visuals", and the first place to look when a card is wrong.

This is Shipseal's own manifest for v0.0.6, abridged to one file and three facts. The values are real: that release genuinely contained seven commits, and each ref is a command you can run to check it.

{
  "shipseal": "0.0.6",
  "event": { "kind": "release", "tag": "v0.0.6" },
  "generatedAt": "2026-09-11T18:38:21.221Z",
  "brand": { "name": "Shipseal", "theme": "dark", "source": ".shipseal/brand.json" },
  "copy": { "mode": "deterministic" },
  "files": [
    { "path": "release-hero-og.png", "template": "release-hero", "format": "og",
      "width": 1200, "height": 630, "bytes": 30236, "sha256": "bd3ae015..." }
  ],
  "facts": {
    "release.version": { "value": "0.0.6", "source": "git",
      "ref": "git tag v0.0.6", "fetchedAt": "2026-09-11T18:38:21.159Z" },
    "release.commitCount": { "value": 7, "source": "git",
      "ref": "git rev-list --count v0.0.5..v0.0.6", "fetchedAt": "2026-09-11T18:38:21.159Z" },
    "project.repo": { "value": "akii09/shipseal", "source": "git",
      "ref": "git remote get-url origin", "fetchedAt": "2026-09-11T18:38:21.213Z" }
  },
  "computed": {},
  "warnings": [],
  "missing": []
}

The last three were empty on that run: nothing was derived, nothing overflowed and no fact was absent. Their shapes are below.

Reading it

  • facts holds every value that came from somewhere, with the exact reference. A wrong number is always a source problem, so start here.
  • computed holds values code derived from facts, such as a percent change, and names the inputs:
    "bench.metrics[0].percent": { "value": 79,
      "computedFrom": ["bench.metrics[0].before", "bench.metrics[0].after"] }
  • warnings holds fit warnings. Nothing is ever clipped silently:
    { "type": "fit-warning", "template": "release-hero", "format": "x",
      "slot": "headline", "action": "truncated" }
  • missing explains why an element is absent. A missing fact hides an element, it never becomes a placeholder:
    { "template": "release-hero", "fact": "project.npmPackage", "effect": "cta hidden" }

Why numbers never come from a model

When the optional LLM is enabled it receives facts with every number replaced by a placeholder. Its output is then scanned for digits, and any digit that did not come from a placeholder is rejected. After a couple of retries Shipseal falls back to deterministic copy and logs a warning.

The model writes words. Code writes numbers. That split is the whole reason the manifest can be trusted.