Skip to main content
Back to /proof

Founder-recordedDated released-byte case

Can Kin keep a project intact through a change?

This example brings a small open-source project into Kin, checks its code and records an edit. Read what succeeded and what this particular test did not cover.

A company-run historical example. It does not prove complete code coverage or that a change is safe.

Read the exact test question and interpretation

hiredis, migrated and edited on the exact public v0.7.4 release

Take the exact macOS arm64 release archive GitHub publishes: migrate a real repository with it, read a known function back through two different paths, make a real edit, and see whether the record survives a daemon restart.

Expected interpretation. A correct run reads back what it just wrote: the same released binary migrates a real repository end to end, reads its own migrated code back byte-identically through two separate paths, and survives a daemon restart without losing or corrupting what it recorded. It does not require every downstream feature (embedding, re-derivation after an edit) to succeed for the migration and reopen claims to hold; each finding below states exactly what it covers.

Source revision, build identity and preparation

Check versions, source and preparation
Kin build
v0.7.4, macOS arm64, commit 2d0ac1f0e4da003d737d1a9b27e56a577196f7ed
Release on GitHub
Source repository
hiredis, head 29ea2791c102fdffff350f1ea6e04d1f71903d0d, 1,198 reachable commits, 79 files
Released archive measured
kin-macos-aarch64.tar.gz
sha256 432c4fc2d89dc91eca871514e7fa6e4fb3f7da1db907f1e64970038ba90f6239
Environment and preparation
KIN_EMBED_BACKEND=cpu and KIN_INFER_FORCE_CPU=1 were both set. Kin's own startup warnings, captured in the run's stderr, flag each as a correctness-relevant override from its default, auto and the empty string, because CPU and Metal embeddings differ in the last ULPs. Those two overrides are what this run's receipts record about its environment; how it isolated its store and bound its daemon is listed under Not recorded below.source
Graph-readiness output
Durable graph state in the read taken after the committed edit and before the reopen: 1,206 entities and 2,393 relations recorded, graph initialized and loaded, reconciliation idle.source
Capture date
2026-09-08. Measured against the bytes of one published release archive on one dated day, and pinned to that build rather than to whatever Kin ships now. It is indexed on the proof archive.

Findings: original output, source and explanation

  1. The exact public macOS arm64 v0.7.4 archive, checksum-verified against GitHub's own release assets.

    Read the method and original output

    sha256 of the downloaded archive, checked against the checksums file GitHub publishes beside the release and against the sidecar for that one asset.

    sha256 432c4fc2d89dc91eca871514e7fa6e4fb3f7da1db907f1e64970038ba90f6239

    GitHub checksums-sha256.txt Asset sidecar checksum Release identity record Release workflow provenance Release promotion record

  2. A real 1,198-commit, 79-file Git repository (hiredis) migrated end to end in about 64 seconds.

    Read the method and original output

    kin migrate <path>, exit code 0, elapsed 63.807s; the commit and file counts are read back from the migration receipt and cross-checked against the source repository's own reachable-commit count.

    Migration receipt Migration stdout hiredis fixture identity

  3. The same released binary read a known function's full source through both its CLI and its MCP server, and the two paths returned byte-identical bodies, checked on four entities.

    Read the method and original output

    sha256 of the source body returned by each path, per entity, compared for equality.

    Per-entity CLI/MCP digests

  4. It returned a real call chain for that function as a positive fact: redisReaderFeed calls sdscatlen, which calls sdsMakeRoomFor, which references SDS_MAX_PREALLOC.

    Read the method and original output

    A graph relationship query against the migrated store. This checks that the returned chain is real; it does not check that the graph holds every relationship (see what this case does not establish, below).

    Verdict line: chain returned as a positive fact, completeness inconclusive

  5. A three-occurrence rename inside that function's body, shown to preserve behavior: the optimized compiler output was byte-identical before and after.

    Read the method and original output

    clang -O2 -S on the same source path before and after the rename, both exit 0, then cmp on the two .s files, exit 0.

    Rename occurrence count and before/after sha256 The exact three-line diff clang and cmp verdict Assembly before Assembly after

  6. Kin recorded the edit as a native commit with its own change id.

    Read the method and original output

    kin commit -m "Clarify required buffer length", exit code 0, elapsed 13.634s.

    change id e2c14c00e234abd7a8945cf1a5e5b1ce3e35b01a650311580e1fc47729132f0b

    Commit receipt Commit stdout

  7. After the daemon was stopped and a fresh daemon reopened the same on-disk store, the committed artifact's 40,557 bytes and the full native change log matched exactly, with no reimport.

    Read the method and original output

    Stop the daemon, start a fresh one on the same --repo path, re-read the committed artifact and the native log, and diff both against the pre-stop reads.

    Artifact before stop Artifact after reopen Native log before stop Native log after reopen Formal reopen summary

Timing methodology. Every elapsed-time figure is the wall-clock elapsed_s field the harness itself recorded in that command's own receipt.json, timed from process start to exit. No figure here is a separate measurement layered on top of the receipts.

What the same run could not do · FIR-3394

After the edit, Kin's own commit reported 25 parse errors in sds.c, on bytes clang compiles cleanly. The edited function could not be read back at the entity level, either right after the commit or after the reopen. Kin refused rather than answer with a stale span.

Read the exact error

graph authority gap: ... the recorded span does not describe these bytes; the graph has admitted the new source and not yet re-derived this entity's span

Refusal, read right after the commit (full text quoted above) Capture script still hits the same error after reopen (assertion, not the graph error text)

Known gaps: what this case does not establish

  • Rename tracking. The entity id for the edited function was resolved by hand before the edit, not detected by Kin as the same function, renamed.
  • Branch behavior. The commit landed on a detached head that no branch names; no branch or merge ran in this case.
  • Complete relationship or context coverage. The call chain above is a positive fact, not a completeness claim, and vector coverage stayed at 0 of 2,412 entities for the whole run.
  • Anything about React or JavaScript. This case is entirely a C repository.
  • A separate context-budget check in this same run, unrelated to the call chain above. It failed; this case makes no claim about it, and gate-outcomes.json, linked above, records that failure alongside the checks this case does claim.

Not recorded

A field with no receipt behind it is listed here with the state recorded for it, rather than filled in with a plausible guess. The rows that link a source are named from that receipt's own keys and carry its exact wording, so a reader can find each one in it. Nothing below is a result.

See which checks have no recorded result
Founder acceptance
not performed. The run recorded this state and produced no result behind it.source
Stranger
not cleared. The run recorded this state and produced no result behind it.source
React scale
not cleared. The run recorded this state and produced no result behind it.source
Hosted write path
parked. The run recorded this state and produced no result behind it.source
Store isolation and daemon binding
not recorded. No receipt in this run names HOME, KIN_HOME, KIN_REGISTRY_PATH or KIN_NO_DAEMON, and none carries the command that started the daemon, so how the run isolated its store is not established here.
Cold versus warm preparation
not recorded. No receipt in this run names a cold or a warm preparation state, so neither is claimed.
Independent reproduction
not recorded. Nobody outside the company ran this case. It is founder-recorded, as /proof/methodology defines that label.

Download the files behind this example

The saved files let you inspect the result. Each has an identity check so changes to its contents can be detected.

View all evidence files and checksums

Every file below is committed with its own sha256 sidecar, listed in manifest.json, and checked against that manifest at every build by check-proof-artifacts.mjs. This table is generated from that manifest, not typed by hand. check-case-record-integrity.mjs then reads this rendered page back and fails the build on a row the manifest does not list, a manifest row this table dropped, a row rendered twice, a row carrying another row's label, a byte count or hash here that stopped matching the manifest, and any row that did not come from the manifest at all.

What it backsBytessha256
Release tag, commit, and archive sha256 kin reported for this build.1,4739691286c05684d8584582a311e601a210520839b871cf17fae56235031842af4
GitHub release asset checksums.sha256, all platforms, as published.543463187d5ce0eb46d504422750faadd2002d89bc25943de2a8edb6989f6d08e73
Sidecar checksum for the exact archive downloaded and installed.915f75b30ece34bf74296c54e7ffd13fd5063807885c374f9edd3f988e0ccab455
Release workflow provenance record for v0.7.4.13,0842b865dea1fa9dff54fadcf79b7649a9f6f5864ae07c7cf85c05cb9bc8e8dd766
Sidecar checksum for release-provenance.json.90e2472ab5ca2cbc1f14f7c4480dd26ce7d431d5461c0684d91aacdec97c65daef
Release promotion record naming the completed capstones and workflow run.4960048a91e8729c46d475e92d25dab6a7d321a18e9405af4c3b82f5011c58840ae
Sidecar checksum for release-promotion.json.89c66e729f2677778b974906ada9a246cd40ce2ef128fb55873a5a69403cb8dab5
hiredis fixture identity: head commit, reachable commit count, tag list.2,537c7550b7ccf95be7d9cc2d8973bb5b6acdecf646a3aef449109bf124ed9406be1
kin migrate exit code and wall time.4116edfebc1dac9626ab6be75e7222d8df05ea160dd5cec57b25a213f89a02a8794
kin migrate full stdout: the 17-stage admission plan and its counts.738247ae3f2b96e03156d86b8d6a8360f83053c3daa2033183716090ecad0c76255
Per-entity sha256 of the CLI and MCP source bodies, and the cli_mcp_equal verdict.945239f5b810b0d3675195081f95fd362a124bf71fa6262895fa062d3b30e489b75
One-line verdict per gate this run checked, including the call-chain and entity-refusal lines quoted on this page.985354459820ef36f691b36e7a978db3f02e8fb23b9d70d7d2f76555e7d51be82dc
Rename occurrence count and before/after sha256 of sds.c.1958ad313603cc775ae00b45863c2565a9b9cffd2ef79e55f80f8beb0ba722e50ef
The exact three-line diff.1,11522fde62e546bf4eb7258af8a45dcaac1f452a1f909551aae487656875c207673
clang -O2 -S before/after, and the cmp verdict on the two .s files.340fc00e75c8876f77b07b4fb2fea4d5dd1e760ec5b7d3bb42515157e934b9ce098
Optimized assembly compiled before the rename.107,2971981a97c373012c5a97341453f8e8df68dfab52f460fe0964b7ec8a17519179d
Optimized assembly compiled after the rename; byte-identical to sds-before.s.107,2971981a97c373012c5a97341453f8e8df68dfab52f460fe0964b7ec8a17519179d
kin commit exit code and wall time.423df2c74941890cede192a37fa15662f89bb407a5fc0c40724a1fe318130525431
kin commit full stdout: the change id and the 25-parse-error disclosure.1,129b838a59ff0b99e9a828ceb1312c3841cf05aa2aab7d21118f9667b35125fa33a
The graph-authority-gap refusal, read immediately after the commit.1,442e94b10914e7d510adaeef87e9dd1ece59f01e4c586fd66ef4a90ced5b5722262
The same refusal, reproduced after the stop/reopen cycle.33638bf852bbf021e6a9392bb2ff0624c66617e0a72e59ce04611936201d68716ab
Committed artifact bytes and sha256, read after committed edit, before reopen.98,138ed2a2dce7931474ad4eb86637994cbd1324b68c79141c71b5989955fc4f04e49
The same artifact, read again after a fresh daemon reopened the store.98,137b30d0d8f50e1bbec52e6caa37c7d5e56531f9b036fcc66837a5e9b810a2f1cb2
Native change log before the stop.8,144a0f194f0274508a8a82d72d346eac312a1fee390cd14f84946363cde7ed02720
Native change log after reopen; byte-identical to 20-kin-log.stdout.8,144a0f194f0274508a8a82d72d346eac312a1fee390cd14f84946363cde7ed02720
Formal summary: bytes_match_before_reopen, native_log_exact_match, reimported.4780cab55b6f92c753a60adfa866bf96101cf6aae0e98363fa194a49b3e575b8298

How a case is built names the rules this record follows, and the archive keeps every artifact path a case was ever cited by.